Seguridad
en Ingeniería de Software
La seguridad de un sistema de software es un
concepto multi-dimensional. Las múltiples dimensiones de la seguridad
Son:
·
Autenticación: el proceso de verificar la
identidad de una entidad.
·
Control de acceso: el proceso de regular las
clases de acceso que una entidadtiene sobre los recursos.
·
Auditoria: un registro cronológico de los
eventos relevantes a la seguridad deun sistema. Este registro puede luego
examinarse para reconstruir unescenario en particular.
·
Confidencialidad: la propiedad de que cierta
información no esté disponible aciertas entidades.
·
Integridad: la propiedad de que la
información no sea modificada en eltrayecto fuente-destino.
·
Disponibilidad: la propiedad de que el
sistema sea accesible a las entidadesautorizadas.
·
No repudio: la propiedad que ubica la
confianza respecto al desenvolvimientode una entidad en una comunicación.
La
seguridad puede tener diferentes significados en distintos escenarios.
Engeneral, cuando se habla de seguridad implica referirse a más de una de las
dimensiones mencionadas anteriormente.
Por ejemplo:
·
Seguridad en correo electrónico: involucra
confidencialidad, no repudio eintegridad.
·
Seguridad en compras online: implica
autentificación, confidencialidad,integridad y no repudio.
Bajo este
punto de vista, se define un ataque a la seguridad como un intento deafectar en
forma negativa una o más de las dimensiones del concepto de seguridad. Una vez
definido el concepto de seguridad, se pueden establecer objetivosbásicos para
un software seguro:
·
Independencia de la
seguridad:
la seguridad debe construirse y utilizarse demanera independiente de la
aplicación.
·
Independencia de la
aplicación:
la aplicación no debe depender del sistemade seguridad usado, debe ser
desarrollada y mantenida en forma separada.
·
Uniformidad: la
seguridad debe aplicarse de manera correcta y consistente através de toda la
aplicación y del proceso que desarrolla la misma.
·
Modularidad: mantener
la seguridad separada. Entre otras ventajas, esto nosbrindará mayor
flexibilidad y menor costo de mantenimiento.
·
Ambiente seguro: se debe
partir de un entorno confiable. Es decir, lasherramientas de desarrollo y
lenguajes de programación no deben conteneragujeros de seguridad.
·
Seguridad desde el
comienzo:
la seguridad debe ser considerada como unrequerimiento desde el inicio del
diseño.
4.1
Seguridad de Software
La seguridad de software aplica los principios de la
seguridad de información al desarrollo de software.
Information security
(La seguridad de información) se refiere a la seguridad
de información comúnmente como la protección de sistemas de información contra
el acceso desautorizado o la modificación de información, si está en una fase
de almacenamiento, procesamiento o tránsito. También la protege contra la negación
de servicios a usuarios desautorizados y la provisión de servicio a usuarios
desautorizados, incluyendo las medidas necesarias para detectar, documentar, y
contrariar tales amenazas.
Muchas preguntas con respecto a la seguridad, son
relacionadas al ciclo vital de software.
En particular, la seguridad del código y el proceso de
software; deben de ser considerados durante la fase del diseño y desarrollo.
Además, la
seguridad debe de ser preservada durante la operación y el mantenimiento para
asegurar la integridad de una parte (pedazo) de software.
Una gran cantidad de seguridad usada en los Sistemas de
Redes de hoy, nos pueden engañar en la creencia que nuestros trabajos como
diseñadores de sistema de seguridad ya han sido realizados. Sin embargo, las
cadenas y computadoras son increíblemente inseguras. La falta de seguridad se
origina en dos problemas fundamentales: Los sistemas que son teóricamente seguros
pueden ser inseguros en la práctica, Además los sistemas son cada vez más
complejos.
La complejidad proporciona más oportunidades para los
ataques. Es mucho más fácil probar que un sistema es inseguro que demostrar que
uno es seguro -- probar la inseguridad, simplemente una toma ventaja de ciertas
vulnerabilidades del sistema.
Por otra parte,
probando un sistema seguro, requiere demostrar que todas las hazañas posibles
puedan ser defendidas contra (muy desalentadora), si no imposible la tarea.
Actualmente, no hay ninguna solución singular para
asegurar la ingeniería de software. Sin embargo, hay métodos específicos que
mejoran la seguridad de los sistemas. En particular, podemos mejorar
laconfiabilidad de software. También podemos mejorar nuestra comprensión de los
requisitos de un pedazo de software.
Buena Práctica
La seguridad requiere más manejo y riesgo de mitigación,
de la que requiere la tecnología.
Como un desarrollador, uno primero debe de determinar los
riesgos de una aplicación particular.
Por ejemplo, el
Web site típico de hoy puede ser sujeto de una variedad de riesgos; la
desfiguración o la negación distribuida de ataques del servicio.
Una vez que se identifiquen los riesgos, identificar
medidas de seguridad apropiadas llega a ser manejable.
En particular, al definir los requisitos, es importante
considerar cómo la aplicación será utilizada. Con ese conocimiento uno puede
decidir, sí o no, utilizar características complejas como contabilidad,
auditoría etc.
Otro asunto potencialmente importante es como soportar el
nombramiento del producto. El aumento de los sistemas distribuidos ha hecho el
nombramiento cada vez más importante. Típicamente, el nombramiento esta
manejado por rendezvous: un principal exporta un nombre y lo anuncia en alguna
parte, y alguien que desea utilizar el nombre lo busca en los libros y
directorios de teléfono. Por ejemplo, en un sistema como elsistema del
descubrimiento del recurso, los recursos y los individuos que usan esos
recursos deben ser nombrados.
A menudo hay cosas
buenas y malas con respecto al nombramiento: mientras que el nombramiento puede
proporcionar a un nivel de dirección, también puede crear problemas adicionales
si los nombres no son estables. Los nombres pueden permitir que los directores
desempeñen diversos papeles en un sistema determinado que pueda también ser
útil.
4.2 Seguridad en el ciclo de desarrollo del software
La norma ISO 12207 define el Ciclo de
Vida del Software como Un marco de referencia que contiene los procesos, las actividades
y las tareas involucradas en el desarrollo, la explotación y el mantenimiento
de un producto de software, abarcando la vida del sistema desde la definición
de los requisitos hasta la finalización de su uso.
Existen distintos modelos de Ciclo de Vida, que
determinan cuales son y de qué manera se ejecutan las etapas del desarrollo de
software. Cada modelo presenta sus propias características y alcances de estas
etapas. Para este artículo hemos considerado las siguientes etapas: Expresión
de Necesidades y Especificaciones (Requerimientos), Análisis, Diseño,
Implementación, Pruebas y Mantenimiento.
ISO 27001 en
el Ciclo de Vida del Software
Como
ya se mencionó, la mayoría de las organizaciones sustentan su operación en
sistemas informáticos. Esto ha convertido que la gestión de estos sistemas,
incluyendo la ISM, sea un tema crítico dentro de ellas.
En la actualidad, esta situación se ha
manejado a través de los estándares de IS, que presentan el problema de
seguridad como un conjunto de controles que representan garantías para las
distintas vulnerabilidades de seguridad. Por otro lado, se debe considerar que
también existen normas nacionales que no necesariamente se alinean a los
estándares internacionales, lo que provoca que la organización deba cumplir
como ambos requerimientos.
Esto se agrava aún más, si se considera
una organización gubernamental, que además, debe cumplir con las normas
internas de gobierno. Esto pone a la organización en un problema respecto de
qué estándar aplicar o qué nivel de cumplimiento lograr en los estándares que
le interesa conseguir.
En el
pasado, la industria en general consideraba aumentado productividad como el
aspecto más importante de Tecnología de dotación lógica. Poca consideración fue
dada referente confiabilidad o seguridad del producto de software. Estos
últimos años, el papel del software y el hardware se ha convertido en el
comando y el control de complejo y sistemas costosos de los cuales las vidas
humanas pueden depender. Los ingenieros deben reconocer que el software es
justo otro componente del sistema, y que este componente puede contener los
errores o los defectos que pueden causar acontecimientos indeseados en el
sistema del hardware él está controlando.
Los ingenieros de seguridad del sistema deben
trabajar con los técnicos y los expertos del dominio para conseguir requisitos
funcionalidad a descompuesta y seguridad-crítica puesta en ejecución
correctamente en software por las Software Engineers. Un proceso de la
seguridad del software por las mejores prácticas de la industria, tales como
IEEE STD 1228-1994 o equivalente, se debe desarrollar y adherir para a los
métodos y a las técnicas para identificar las insuficiencias y los errores
potenciales del diseño del software que pueden causar peligros o
acontecimientos indeseados del producto.
La
seguridad del sistema de software, un elemento de la seguridad total y programa
de desarrollo del software, no se puede permitir funcionar independientemente
del esfuerzo total. Los sistemas múltiples simples y altamente integrados están
experimentando un crecimiento extraordinario en el uso de computadoras y
software para supervisar y/o controlar subsistemas o funciones
seguridad-críticos.
A
especificación del software el error, el defecto de diseño, o la carencia de
requisitos seguridad-crítico genéricas pueden contribuir a o causar un fallo
del sistema o una decisión humana errónea. Para alcanzar un nivel aceptable de
la seguridad para el software usado en usos críticos, la ingeniería de la
seguridad del sistema de software se debe dar énfasis primario temprano en la
definición de los requisitos y el proceso del diseño conceptual del sistema. El
software Seguridad-crítico debe entonces recibir énfasis de la gerencia y
análisis continuos de la ingeniería a través del desarrollo y ciclos vitales
operacionales del sistema.
4.3Confiabilidad
del software
La confiabilidad de software significa que un programa
particular debe de seguir funcionando en la presencia de errores
Los errores pueden
ser relacionados al diseño, a la implementación, a la programación, o el uso de
errores. Así como los sistemas llegan a ser cada vez más complejos, aumenta la
probabilidad de errores. Como mencionamos, es increíblemente difícil demonstrar
que un sistema sea seguro.
Ross Anderson dice que la seguridad de computación es
como programar la computadora del Satán. Software seguro debe de funcionar
abajo de un ataque. Aunque casi todos los software tengan errores, la mayoría
de los errores nunca serán revelados debajo de circunstancias normales. Un
atacante busca esta debilidad para atacar un sistema.
Muchos de los problemas de la seguridad de hoy son
relacionados con el código defectuoso.
Por ejemplo:
El Morris
Internet Worm (el gusano Internet de Morris) utilizó overflow en un
programa de UNIX para ganar acceso a las computadoras que ejecutaron el
programa. Los ataques de buffer
overflow han sido el tipo de ataque más común en las últimos diez años e
implican el sobre grabar instrucciones en el programa.
Específicamente, una cantidad fija de memoria en la pila,
puede ser reservado por el usuario; si la entrada de información del utilizador
es más grande que este espacio reservado, el usuario puede sobre grabar los
instrucciones de la programa. Si esto se hace cuidadosamente, el usuario puede
insertar sus propias instrucciones en el código del programa, así haciendo la
máquina receptora realizar operaciones arbitrariasdictados por el atacante.
Mientras que tales ataques se pueden prevenir típicamente con bounds checking (revisando el tamaño
de la entrada de información antes de copiarla), ésta es una cuestión de
práctica de programación que confiamos
en que el programador mismo seguirá.
El aspecto difícil de buffer overflows es que pueden ocurrir en una gran cantidad de
lugares en cualquier programa, y es difícil de prevenir el suceso por todas
partes. Este ha sido el caso en el pasado, especialmente, en los últimos 10
años.
4.4Ingeniería
de seguridad
Este curso
trata sobre Ingeniería de Seguridad entendida como los métodos para diseñar y
construir sistemas que permanezcan confiables a pesar de posibles actos
maliciosos o a errores de diverso tipo incluyendo las fallas de carácter fortuito.
Tradicionalmente
se ha dado una particular atención a la criptografía como el centro de las
actividades asociadas a la seguridad en sistemas de diversa naturaleza, como
veremos a lo largo de este curso hay mucho más que eso si queremos diseñar e
implementar un entorno confiable.
Los sistemas
se han vuelto cada vez más complejos, y esa complejidad es la que permite que hayamás y más fallas de seguridad. En la medida en que los sistemas
están constituidos por múltiples componentes que interactúan permanentemente,
cada espacio de interacción se convierte en una oportunidad para aquellos que
quieren subvertir la seguridad establecida.
Incluso
cuando se piensa en la criptografía como una herramienta para proteger nuestros sistemas, no solo es importante la
fortaleza del algoritmo de encriptamiento, cuentan también la calidad de la
clave, la seguridad con que se guarda, donde se guarda, que tipo de password se
exige al usuario. Y nada de esto tiene ninguna utilidad
si un
hacker ha logrado ingresar a una de las computadoras que están envueltas en la
comunicación.
El interés
por tanto de este curso está centrado en darle al estudiante una visión clara
de los problemas de seguridad a los que hoy día nos enfrentamos y cuáles son
las medidas que pueden ayudar a reducir esos riesgos.
Esta
visión, por la naturaleza del problema tiene que ser necesariamente una visión
sistémica, de no ser así, ninguna medida que implementemos tiene la esperanza
de funcionar adecuadamente.
Cuando
diseñamos un sistema de seguridad debemos tomar en cuenta que uno de nuestros
principales enemigos es el usuario mismo. Su confianza casi ciega en las
computadoras y lo que estas hacen le hace una persona vulnerable. Los sistemas
informáticos se han vuelto cada vez más y más complejos, con lo que es
prácticamente imposible que no fallen, y las fallas siempre pueden ser usadas
por personas maliciosas para atacar el sistema.
El
problema empeora notablemente gracias a la Internet. Un hacker exitoso es
probable que decida publicar su ataque y compartir su habilidad técnica con
otros. Esta es la razón por la que gente con pocos conocimientos y habilidad
técnica pueden convertirse en atacantes exitosos de sistemas relativamente
complejos.
Multiplicando
de esta forma el número de ataques realizados a diversos sistemas. Una medida
útil de cuan vulnerables están siendo nuestros sistemas se puede conseguir
poniendo “trampas” atractivas en Internet y midiendo cuanto demora en ser
atacados. El tiempo es sorprendentemente breve. En el caso de sistemas basados
en Linux, en promedio 72 horas desde que el sistema es puesto en funcionamiento
hasta que un hacker tiene control de la cuneta del administrador.
Algunos
ejemplos de sistemas en los que la seguridad es un aspecto fundamental son los
siguientes:
·
La contabilidad de un banco.
·
Los cajeros automáticos.
·
Los mecanismos de protección física, como
alarmas y sensores en general, destinadosa detectar intrusos no deseados.
·
Los servicios en línea, vía Internet.
·
Obviamente en aplicaciones militares.
·
La privacidad es un tema de importancia en el
caso de información de salud, ola información obtenida a través de los censos.
Los sistemas de seguridad tienenpor objeto proteger esa privacidad impidiendo
por diversos métodos el acceso ala información mientras se permite operar en
forma general sobre la data (por ejemplo, para obtener estadísticas).
·
La necesidad de manejar operaciones seguras
en la Internet, espacio en el cual los ataques del tipo negación de servicios
son comunes.
·
El clonado de teléfonos celulares.
No hay comentarios:
Publicar un comentario