Está en la página 1de 6

Unidad 4 Seguridad en ingeniera de software 5-6-2014

SEGURIDAD EN INGENIERA DE
SOFTWARE
La seguridad de software aplica los principios de la seguridad de informacin al desarrollo de
software. Information security (La seguridad de informacin) se refiere a la seguridad de informacin
comnmente como la proteccin de sistemas de informacin contra el acceso desautorizado o la
modificacin de informacin, si est en una fase de almacenamiento, procesamiento o trnsito.
Tambin la protege contra la negacin de servicios a usuarios desautorizados y la provisin de
servicio a usuarios desautorizados, incluyendo las medidas necesarias para detectar, documentar, y
contrarear tales amenazas.
Muchas preguntas con respecto a la seguridad, son relacionadas al ciclo vital de software. En particular,
la seguridad del cdigo y el proceso de software; deben de ser considerados durante la fase del diseo
y desarrollo. Adems, la seguridad debe de ser preservada durante la operacin 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 engaar
en la creencia que nuestros trabajos como diseadores de sistema de seguridad ya han sido
realizados. Sin embargo, las cadenas y computadoras son increblemente inseguras. La falta de
seguridad se origina en dos problemas fundamentales: Los sistemas que son tericamente seguros
pueden ser inseguros en la prctica, Adems los sistemas son cada vez ms complejos. La
complejidad proporciona ms oportunidades para los ataques. Es mucho ms fcil probar que un
sistema es inseguro que demostrar que uno es seguro probar la inseguridad, simplemente una toma
ventaja de ciertas vulnerabilidades del sistema.
4.1 SEGURIDAD DE SOFTWARE
El concepto de la seguridad en los sistemas de software es un rea de investigacin que ha pasado a ser
vital dentro de la Ingeniera de Software. Con el crecimiento de Internet, y otras aplicaciones sobre
redes, como el comercio electrnico, correo electrnico, etc., la posibilidad de ataques se ha
incrementado notablemente, como tambin lo han hecho las consecuencias negativas de estos ataques.
En la actualidad prcticamente todo sistema debe incorporar cuestiones de seguridad para defenderse
de ataques maliciosos. El desarrollador ya no slo debe concentrarse nicamente en los usuarios y sus
requerimientos, sino tambin en los posibles atacantes.
Esto ha motivado cambios importantes en el proceso de diseo y desarrollo de software para
incorporar a la seguridad dentro de los requerimientos crticos del sistema.
Estos cambios son los primeros pasos en la concientizacin de los ingenieros de software acerca de la
importancia de obtener un software seguro. Como todo gran cambio, no se logra de un da para otro,
sino que es un proceso gradual que requiere tiempo y maduracin. Todava la Ingeniera de Software no
Unidad 4 Seguridad en ingeniera de software 5-6-2014


ha dado una respuesta eficaz, coherente y aplicable que satisfaga plenamente a la comunidad
informtica, sino que las aproximaciones actuales estn plagadas de fallas y debilidades fruto de que
todava es un proceso que se encuentra en su infancia.
Siempre que utilicemos un sistema informtico, sin importar cul sea la razn, es importante que
tengamos como prioridad la instalacin de un software de seguridad, teniendo en cuenta la cantidad de
riesgos que corremos con un sistema informtico sin proteccin.
Justamente por la importancia acerca de lo que es un software de seguridad para cualquier usuario, la
mayora de los sistemas operativos con los que podemos trabajar suelen traer incorporado en ellos un
software de seguridad bsico, pero es importante que sepamos ante todo qu es un software de
seguridad y la diferencia entre ste software y uno que es especialmente desarrollado para prevenir
problemas en el funcionamiento del sistema, es que el mismo, simplemente nos advierte cuando
estamos frente a algn riesgo.
Tipos de software de seguridad
Sin duda, el tipo de software de seguridad ms conocido son los programas antivirus, que se encargan
de detectar y eliminar virus informticos. Un buen programa antivirus dispone de un archivo de firmas
de virus que se actualiza automticamente y detecta virus nuevos. Este tipo de actualizacin se realiza
peridicamente, varias veces al da.
El software de seguridad suele venderse en las denominadas suites. Son paquetes compuestos de:
Programa antivirus
Cortafuegos
Filtro antispam
Software para filtrar contenidos
Software contra publicidad no deseada
Control de sitios web
Actualmente, la seguridad es un concepto que todo sistema debe incorporar. La Ingeniera del
Software todava no es capaz de brindar un mecanismo para implementar adecuadamente la
seguridad: los lenguajes tienen primitivas inseguras, el cdigo relativo a la seguridad es siempre un
cdigo confuso y complejo debido a tcnicas de abstraccin insuficientes, etc.
4.2 SEGURIDAD EN EL CICLO DE DESARROLLO DEL SOFTWARE
La mayor parte de las organizaciones desarrolla o contrata el desarrollo de aplicaciones propias para su
gestin de negocio. Como todo software, estas aplicaciones pueden contener fallas de seguridad y a
diferencia del software comercial, no se dispone de actualizaciones o parches liberados en forma
peridica por el fabricante. El tratamiento de las vulnerabilidades en aplicaciones propias corre por
parte de la organizacin que las desarrolla.
Lamentablemente es una prctica habitual en muchas organizaciones la puesta en produccin de
sistemas sin la participacin del sector de Seguridad de la Informacin.
Unidad 4 Seguridad en ingeniera de software 5-6-2014


Muchas otras veces, el sector de Seguridad se entera demasiado tarde, y no tiene suficiente margen de
accin para el anlisis de seguridad de la aplicacin desarrollada.
Por lo general, en el mejor de los casos, se coordina un testeo de seguridad una vez que la aplicacin ya
est desarrollada. Aqu muchas veces se encuentran errores que requieren el rediseo de parte de la
aplicacin, lo cual implica un costo adicional en tiempo y esfuerzo.
Seguridad en el anlisis de requerimientos
En esta etapa, se deben identificar aquellos requerimientos funcionales que tendrn impacto en los
aspectos de seguridad de la aplicacin. Algunos de ellos son: requerimientos de compliance con
normativas locales o internacionales (ej: PCI, SOX, A 4609, etc.), tipo de informacin que se
transmitir o procesar (ej: Informacin pblica o confidencial, datos personales, datos financieros,
contraseas, datos de pago electrnico, etc.) y requerimientos de registros de auditora (ej: Qu debe
registrar la aplicacin en sus Logs).
Seguridad en el diseo
Antes de comenzar a escribir lneas de cdigo, hay numerosos aspectos de seguridad que deben ser
tenidos en cuenta durante el diseo de la aplicacin.
Algunos de ellos son: diseo de autorizacin
(ej: Defnir los roles, permisos y privilegios de la aplicacin), diseo de autenticacin (aqu se debe
disear el modo en el que los usuarios se van a autenticar, contemplando aspectos tales como los
mecanismos o factores de autenticacin con contraseas, tokens, certifcados, etc. posibilidades de
integrar la autenticacin con servicios externos como LDAP, Radius o Active Directory y los
mecanismos que tendr la aplicacin para evitar ataques de diccionario o de fuerza bruta (ej: bloqueo
de cuentas, implementacin de captchas, etc.), diseo de los mensajes de error y advertencia, para
evitar que los mismos brinden demasiada informacin y que sta sea utilizada por atacantes y diseo de
los mecanismos de proteccin de datos (aqu se debe contemplar el modo en el que se proteger la
informacin sensible en trnsito o almacenada; segn el caso, se puede definir la implementacin de
encriptacin, hashes o truncamiento de la informacin).
Una vez que se cuenta con el diseo detallado de la aplicacin, una prctica interesante es la de realizar
sobre el mismo un anlisis de riesgo orientado a software. Existen tcnicas documentadas al respecto,
tales como Threat Modeling. Estas tcnicas permiten definir un marco para identificar debilidades de
seguridad en el software, antes de la etapa de codificacin. Como valor agregado, del anlisis de riesgo
orientado a software se pueden obtener casos de prueba para ser utilizados en la etapa de Testing/QA.
Seguridad en la codificacin
Una vez concluido el diseo, le toca a los desarrolladores el turno de codificar los distintos
componentes de la aplicacin. Es en este punto en donde suelen incorporarse, por error u omisin,
distintos tipos de vulnerabilidades. Estas vulnerabilidades podramos dividirlas en dos grandes grupos a
Unidad 4 Seguridad en ingeniera de software 5-6-2014


saber: vulnerabilidades clsicas y vulnerabilidades funcionales. Las primeras son bien conocidas y
categorizadas.
Ejemplo de estas vulnerabilidades son las presentes en el OWASP
Top 10 (Vulnerabilidades de inyeccin, Cross Site Scripting, errores en manejo de sesiones, etc.) como
as tambin otras vulnerabilidades no ligadas directamente con las aplicaciones WEB, como
desbordamiento de buffer, denegacin de servicio, etc. Los Frameworks de desarrollo de aplicaciones
son una buena ayuda en este punto, ya que ofician de intermediario entre el programador y el cdigo, y
permiten prevenir la mayora de las vulnerabilidades conocidas. Ejemplos de estos frameworks son
Struts, Ruby on Rails y Zope.
Vulnerabilidades funcionales son aquellas ligadas especficamente a la funcionalidad de negocio que
posee la aplicacin, por lo que no estn previamente categorizadas.
Algunos ejemplos ilustrativos de este tipo de vulnerabilidad son los siguientes: una aplicacin de banca
electrnica que permite realizar transferencias con valores negativos, un sistema de subastas que
permite ver los valores de otros oferentes, un sistema de venta de entradas para espectculos que no
impone lmites adecuados a la cantidad de reservas que un usuario puede hacer.
En la etapa de codificacin, una de las reglas de oro es verificar todos los valores de entrada y de salida.
Esto es, asumir siempre que el valor pudo haber sido manipulado o ingresado maliciosamente antes de
ser procesado.
4.3 CONFIABILIDAD 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 diseo, a la implementacin, a la
programacin, o el uso de errores.
As como los sistemas llegan a ser cada vez ms complejos, aumenta la probabilidad de errores.
Como mencionamos, es increblemente difcil demonstrar que un sistema sea seguro. Ross
Anderson dice que la seguridad de computacin es como programar la computadora del Satn.
Software seguro debe de funcionar abajo de un ataque.
Aunque casi todos los software tengan errores, la mayora de los errores nunca sern revelados
debajo de circunstancias normales. Un atacante busca esta debilidad para atacar un sistema.
Las organizaciones que desarrollan productos basados en software requieren de prcticas efectivas
que permitan mejorar la calidad del producto. La Ingeniera de la Confiabilidad de Software es una
prctica cuantitativa que puede ser implementada en organizaciones de cualquier tamao bajo
distintos modelos de desarrollo.
Las organizaciones desarrolladoras de productos basados en software destinan grandes cantidades de
recursos para mejorar la calidad de sus productos. Una parte de dichos recursos se utiliza para la
Unidad 4 Seguridad en ingeniera de software 5-6-2014


adopcin de mejores prcticas. Sin embargo, la dificultad de la adopcin de dichas prcticas no slo
reside en el costo y el tiempo requerido para institucionalizarlas, sino en cmo medir su impacto en la
calidad del software, as como demostrar el retorno de dicha inversin.
La calidad, las fallas y la confiabilidad de Software
La calidad es un atributo percibido por los usuarios o clientes de cualquier producto o servicio. En el
caso de productos basados en software, la percepcin de la calidad est en funcin de las fallas que el
cliente percibe del mismo durante su operacin.
La confiabilidad es un atributo que mide el grado en que un producto opera sin fallas bajo condiciones
establecidas por un periodo de tiempo determinado. La confiabilidad es un atributo cuantitativo que ha
sido ampliamente analizado, estudiado y usado en otras industrias para caracterizar la calidad de los
productos o servicios.
En su concepcin ms general, la confiabilidad es un atributo que mide el grado en que un producto
opera sin fallas bajo condiciones establecidas por un periodo de tiempo determinado.
Una falla es la manifestacin percibida por el cliente de que algo no funciona correctamente e impacta
su percepcin de la calidad. Un defecto es el problema en el producto de software que genera una falla.
Se dice que un Software es confiable si realiza lo que el usuario desea, cuando as lo requiera
No es confiable si as no lo hiciera. A nuestros fines un Software no es Confiable cuando falla.
Las fallas se deben a errores en el Software. Si corregimos estos errores sin introducir nuevos,
mejoramos la Confiabilidad del Software.
Histricamente, una forma de aumentar la Confiabilidad de un Software era correrlo y probarlo
extensivamente antes de liberarlo. No es efectivo probar la Confiabilidad en el producto sino hacerla, es
decir fabricarla en el mismo. La Confiabilidad deber ser diseada en el producto.
4.4 INGENIERA DE SEGURIDAD
La Ingeniera de la seguridad es una rama de la ingeniera, que usa todo tipo de ciencias para desarrollar
los procesos y diseos en cuanto a las caractersticas de seguridad, controles y sistemas de seguridad.
La principal motivacin de esta ingeniera ha de ser el dar soporte de tal manera que impidan
comportamientos malintencionados.
El campo de esta ingeniera puede ser muy amplio, podra desarrollarse en muchas tcnicas:
Equipos: Como el diseo de cerraduras, cmaras, sensores,...
Procesos: polticas de control, procedimientos de acceso,...
Informtico: control de passwords, criptografa,...
Tradicionalmente el tema de la seguridad en sistemas computarizados se ha asociado a la criptografa
y sus tcnicas. La inmensa complejidad que caracteriza a los sistemas modernos hace que esta
aproximacin sea insuficiente.
Unidad 4 Seguridad en ingeniera de software 5-6-2014


Hoy en da la seguridad est asociada a la interaccin de una multiplicidad de sistemas. La seguridad de
un sistema en particular est directamente relacionada a la seguridad de la ms dbil de sus partes.
Un sistema puede tener mecanismos criptogrficos que sean considerados completamente seguros
pero puede adolecer de debilidades que hagan que sea innecesario atacar al sistema criptogrfico.
Ejemplos de esto son:
Sistemas que fallan debido a problemas en el cdigo, como en la mayora de los ataques conocidos
como de buffer overflow, en los cuales el no considerar aspectos de excepcin asociados a los
sistemas pueden representar que un atacante suficientemente hbil pueda asumir funciones del
administrador. Si en un determinado sistema alguien asume las funciones del administrador puede
tener muy fcil acceso a claves y sistemas criptogrficos haciendo intil la fortaleza del sistema
criptogrfico que lo protege.
Algunos ataques aprovechan fallas de diseo en los sistema. Si una determinada aplicacin ejecuta sin
evaluar un determinado comando, los atacantes del sistema pueden conseguir informacin vital sin
necesidad de romper las claves criptogrficas que lo protegen.
La existencia de sistemas de comunicacin mvil, basados en transmisin inalmbrica facilita
actividades de fisgoneo en la seal.
Algunas veces lo que se conoce como ataques de ingeniera social pueden resultar muy efectivos a la
hora de atacar sistema supuestamente seguros.
La poca comprensin que algunos implementadores de sistemas tienen sobre los mecanismos de
seguridad implcitos tambin ocasiona que ciertos sistemas sean ms vulnerables. Un ejemplo clsico
es la forma en que se implementan algunos sistemas de contabilidad.
El sistema de doble registro, ancestralmente usado para proteger sistemas de seguridad se ve
violentado por sistemas que obligan al cuadre entre cuentas lo cual facilita el ataque a sistemas de
esta naturaleza.