Está en la página 1de 6

La seguridad en la 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 entidad
tiene sobre los recursos.
- Auditoria: un registro cronológico de los eventos relevantes a la seguridad
de un sistema. Este registro puede luego examinarse para reconstruir un
escenario en particular.
- Confidencialidad: la propiedad de que cierta información no esté disponible
a ciertas entidades.
- Integridad: la propiedad de que la información no sea modificada en el
trayecto fuente-destino.
- Disponibilidad: la propiedad de que el sistema sea accesible a las entidades
autorizadas.
- No repudio: la propiedad que ubica la confianza respecto al desenvolvimiento
de una entidad en una comunicación.
La seguridad puede tener diferentes significados en distintos escenarios. En

gmenecriaol,n caudans daon tser ihoarmblean dte .s Peogru reijdeamdp ilmo:plica referirse
a más de una de las dimensiones
- Seguridad en correo electrónico: involucra confidencialidad, no repudio e
integridad.
- 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 de
afectar en forma negativa una o más de las dimensiones del concepto de seguridad.
Una vez definido el concepto de seguridad, se pueden establecer objetivos
 básicos para un software seguro:
- Independencia de la seguridad: la seguridad debe construirse y utilizarse
de manera independiente de la aplicación.
- Independencia de la aplicación: la aplicación no debe depender del sistema
de seguridad usado, debe ser desarrollada y mantenida en forma separada.
- Uniformidad: la seguridad debe aplicarse de manera correcta y consistente a
través de toda la aplicación y del proceso que desarrolla la misma.
- Modularidad: mantener la seguridad separada. Entre otras ventajas, esto nos
 brindará mayor flexibilidad y menor costo de mantenimiento.
- Ambiente seguro: se debe partir de un entorno confiable. Es decir, las
herramientas de desarrollo y lenguajes de programación no deben
contener agujeros de seguridad.
- Seguridad desde el comienzo: la seguridad debe ser considerada como
un requerimiento desde el inicio del diseño.

Ingeniería de sistemas de Computación


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 la
confiabilidad 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. 

Ua nsae rv meza nqeujea bsle .identifiquen los riesgos, identificar medidas de seguridad
apropiadas llega 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 el
sistema 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

Confiabilidad de 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 sobregrabar 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 arbitrarias
dictados 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.

"Confiando en la Confianza"
En particular, la lectura de Ken Thompson "Reflections on Trusting Trust" (refleciones en
confiar en confianza) nos da a pensar en la integridad de una parte de software.
Específicamente, nos enseña un ejemplo donde un compilador de C puede ser hacked
por un Trojan horse. Para el propósito de esta demonstración, Thompson inserta su

pcoromppiail avre ersl icónd digeo U dNeI Xfu e"lnotgei.n E" lc vóadliogro d, ecu la
nledcot urna udseu Tahriom trpastaobna e dse que no se puede confiar en el código de
fuente que no hayas creado tu mismo. Este incluye el código del compilador, del
ensamblador, y microcódigos de hardware. Thompson también nos dice que cuando el
nivel de los "bugs" llega a un nivel bajo los " fallos de funcionamiento " serán más difíciles
de detectar.
De hecho, no tenemos que compilar software para ser víctima del mensaje de Thompson.
Cada vez que bajamos un programa por internet o instalar software nuevo, confiamos en
un número de cosas. Primero, confiamos que la máquina en la que estamos bajando el
software es realmente la máquina que demanda ser. Proyectos como Self-Certifying
File System han tratado de arreglar este problema. Aunque nos confiemos en que la
máquina con la cual estamos hablando es la que pensamos que es, debemos de
comprobar que
los archivos fueron preparados apropiadamente. Así como cuando bajamos un programa
por internet confiamos en el proceso de desarrollo del software.

M ie n t r as q u e lo s i st e m a s d e U N I X pa r e c e g e
ac a d é m ic a s . O t ro s i s te m a s d e o p e r c i ó n n o
n e ra r á s in t e ré e n la s c o m u n id a d es
s o n i n mu n e s . L os a ta q u e s d e b u ff e r 
overflow son extensos, desde los servidores ftp (El acrónimo de FTP es protocolo de
transferencia de ficheros (File Transfer Protocol  ) y es un software cliente/servidor que
permite a usuarios transferir ficheros entre ordenadores en una red TCP/IP.) de
Windows a los procesos ocultados que capturan cada golpe de teclado del usuario. No
importa cuánto énfasis ponemos en el diseño y la seguridad de la ingeniería del software,
debe de ser una cierta cantidad básica de software y de hardware que no vamos a poder confiar
totalmente.
SEGURIDAD POR HARDWARE Y SOFTWARE. 

En Tecnología de dotación lógica, Seguridad del sistema de software optimiza seguridad


del sistema en el diseño, el desarrollo, el uso, y el mantenimiento de software sistemas y
su integración con seguridad sistemas críticos del hardware en un ambiente operacional. 

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íticos genéricos
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. 
 

AMENAZAS A LAS APLICACIONES SEGURAS


Es necesario definir inicialmente las condiciones que debe cumplir un sistema seguro [1]:
 Que sea poco vulnerable y libre de defectos tanto como sea posible.
 Que limite el resultado de los daños causados por cualquier ataque, asegurando que los efectos
no se propaguen y que puedan ser recuperados tan rápido como sea posible.
 Que continúe operando correctamente en la presencia de la mayoría de ataques.

El software que ha sido desarrollado con seguridad generalmente refleja las siguientes
propiedades a través de su desarrollo:
 Ejecución Predecible. La certeza de que cuando se ejecute funcione como se había previsto.
Reducir o eliminar la posibilidad de que entradas maliciosas alteren la ejecución o las salidas.

 Fiabilidad. La meta es que no haya vulnerabilidades que se puedan explotar 

Conformidad. Actividades planeadas, sistemáticas y multidisciplinarias que aseguren que los


componentes y productos de software están conforme a los requisitos, procedimientos y
estándares aplicables para su uso específico.
 Algunas propiedades fundamentales que son vistas tanto como atributos de seguridad, como
propiedades del software son:
 Confidencialidad. Debe asegurar que cualquiera de sus características ―incluyendo sus
relaciones con ambiente de ejecución y usuarios―, sus activos y/o contenidos no sean accesibles
para no autorizados.

 Integridad. El software y sus activos deben ser resistentes a subversión. Subversión es llevar a
cabo modificaciones no autorizadas al código fuente, activos, configuración o comportamientos,
o cualquier modificación por entidades no autorizadas. Tales modificaciones incluyen sobre-
escritura, corrupción, sabotaje, destrucción, adición de lógica no planeada ―inclusión
maliciosa― o el borrado. La integridad se debe preservar tanto en el desarrollo como durante
su ejecución.

 Disponibilidad. El software debe ser funcional y accesible por usuarios autorizados cada vez
que sea necesario. Al mismo tiempo, esta funcionalidad y estos privilegios deben ser inaccesibles

por usuarios no autorizados.


Dos propiedades adicionales, comúnmente asociadas con usuarios humanos, se requieren en
entidades de software que actúan como usuarios, por ejemplo, agentes  proxy y servicios Web.
 Responsabilidad. Todas las acciones relevantes de seguridad del software o de los usuarios
se deben almacenar y rastrear, con atribución de responsabilidad. Este rastreo debe ser posible en
ambos casos, es decir, mientras y después de que la acción registrada ocurra. Según la política de
seguridad para el sistema se debería indicar cuáles acciones se consideran como seguridad
relevante, lo que podría hacer parte de los requisitos de auditoría.

 No repudio. Esta propiedad le permite al software y a los usuarios refutar o


denegar responsabilidades de acciones que ha ejecutado. Esto asegura que la
responsabilidad no puede ser derribada o evadida.

Otras propiedades influyentes en el software seguro son la exactitud, la capacidad de pronóstico, la


fiabilidad y la protección, las cuales están también influenciadas por el tamaño, la complejidad y la
trazabilidad del software.
 Análisis de riesgos. Debido a las constantes amenazas, toda organización es vulnerable a
riesgos debido a la existencia de vulnerabilidades. De acuerdo con la Figura 3, para determinar el
riesgo se puede evaluar la probabilidad asociada con los agentes de amenaza, el vector de ataque,
las debilidades de seguridad, los controles de seguridad, los impactos técnicos y el impacto al
negocio cuando se materialice la amenaza

También podría gustarte