7
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 gestión 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 periódica por el fabricante. El tratamiento de las vulnerabilidades en aplicaciones propias corre por parte de la organización que las desarrolla. Para que el software sea seguro y tenga las mismas características que se propusieron en los requerimientos hay que dar énfasis a la seguridad del código cuando se está desarrollando. Pensar en los posibles riegos que puedan atacar y enfrentar el software y buscar medidas de seguridad para aplicarlas durante el desarrollo, es una manera de iniciar un software seguro. Lamentablemente es una práctica habitual en muchas organizaciones la “puesta en producción” de sistemas sin la participación del sector de Seguridad de la Información. Muchas otras veces, el sector de Seguridad se entera demasiado tarde, y no tiene suficiente margen de acción para el análisis de seguridad de la aplicación desarrollada. Por lo general, en el mejor de los casos, se coordina un testeo de seguridad una vez que la aplicación ya está desarrollada. Aquí muchas veces se encuentran errores que requieren el rediseño de parte de la aplicación, lo cual implica un costo adicional en tiempo y esfuerzo.

Seguridad en el ciclo de desarrollo del software

Embed Size (px)

DESCRIPTION

Seguridad en el ciclo de desarrollo del software.

Citation preview

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.

Para que el software sea seguro y tenga las mismas caractersticas que se propusieron en los requerimientos hay que dar nfasis a la seguridad del cdigo cuando se est desarrollando. Pensar en los posibles riegos que puedan atacar y enfrentar el software y buscar medidas de seguridad para aplicarlas durante el desarrollo, es una manera de iniciar un software seguro.

Lamentablemente es una prctica habitual en muchas organizaciones la puesta en produccin de sistemas sin la participacin del sector de Seguridad de la Informacin. 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.

Fig. 1 Costo adicional en tiempo al aplicar testeo de seguridad

Est comprobado que cunto ms temprano se encuentre una falla de seguridad en el ciclo de vida del desarrollo de software, ms rpida y econmica ser su mitigacin. Cul es el rumbo a seguir? Las buenas prcticas indican la conveniencia de incluir seguridad de la informacin desde el principio y a lo largo de todas las etapas del ciclo de vida de desarrollo, conocido como SDLC por ser las siglas en ingls de Software Development Life Cicle.Los ingenieros de seguridad del sistema deben trabajar con los tcnicos y los expertos del dominio para conseguir requisitos funcionalidad a descompuesta y seguridad-crtica puesta en ejecucin correctamente en software por las Software Engineers. Un proceso de la seguridad del software por las mejores prcticas de la industria, tales como IEEE STD 1228-1994 o equivalente, se debe desarrollar y adherir para a los mtodos y a las tcnicas para identificar las insuficiencias y los errores potenciales del diseo 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 mltiples simples y altamente integrados estn experimentando un crecimiento extraordinario en el uso de computadoras y software para supervisar y/o controlar subsistemas o funciones seguridad-crticos.

A especificacin del software el error, el defecto de diseo, o la carencia de requisitos de seguridad genricas pueden contribuir a o causar un fallo del sistema o una decisin humana errnea. Para alcanzar un nivel aceptable de la seguridad para el software usado en usos crticos, la ingeniera de la seguridad del sistema de software se debe dar nfasis primario temprano en la definicin de los requisitos y el proceso del diseo conceptual del sistema. El software Seguridad-crtico debe entonces recibir nfasis de la gerencia y anlisis continuos de la ingeniera a travs del desarrollo y ciclos vitales operacionales del sistema.

El ciclo de vida de desarrollo de software para la seguridad se puede dividir en cada una de las etapas bsicas que son las siguientes:

Seguridad en el anlisis de requerimientos Seguridad en el diseo Seguridad en la codificacin Testing / QA de seguridad Implementacin o puesta en produccin

A continuacin se explica cada una de las etapas:

Seguridad en el anlisis de requerimientosEn 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 (ejemplo: Qu debe registrar la aplicacin en sus Logs).

Seguridad en el diseoAntes 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: Definir 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, certificados, 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 encripcin, hashes o truncamiento de la informacin).

Seguridad en la codificacinUna 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 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.

Testing / QA de seguridadTradicionalmente, la labor del equipo de Testing/QA fue la de encontrar y reportar errores funcionales de la aplicacin. Para esto, se desarrollan casos de test basados en la funcionalidad esperada. A esto denominamos testing funcional y bsicamente consiste en validar que la aplicacin haga lo que se esperaba que hiciera. Sucede que habitualmente hay un desfasaje entre el diseo originalde la aplicacin (lo que se espera que haga) y la implementacin real (lo que realmente hace). Aqu surgen 3 reas bien definidas: lo que fue definido y la aplicacin hace, lo que fue definido y la aplicacin no hace (errores funcionales) y lo que no fue definido pero la aplicacin hace.

Implementacin / Puesta en produccinUna mala configuracin al momento de implementar la aplicacin podra echar por tierra toda la seguridad de las capas anteriores. Tanto la aplicacin como el software de base deben configurarse de manera segura al momento de poner el software en produccin. En este punto se deben contemplar tareas tales como: cambio de usuarios y contraseas iniciales o por defecto, borrado de datos de prueba y cambio de permisos de acceso. Es tambin importante mantener una correcta separacin de los ambientes de desarrollo, testing y produccin y procedimientos de traspaso seguro de uno a otro de estos ambientes.

Fig. 2 Ciclo de desarrollo de software bsico aplicando seguridad.ConclusinLa seguridad en las aplicaciones de software debe abordarse desde el primer da del proceso de desarrollo y a lo largo de todas las etapas del mismo. En cada una de estas etapas, se pueden realizar diversas actividades que en su conjunto ayudarn a aumentar la seguridad de la aplicacin de software que se est desarrollando. Es importante que en cada organizacin, el sector de seguridad de la informacin sea invitado a participar a lo largo de todo el proceso de desarrollo como supervisor de las tareas y verificaciones de seguridad. Tambin cada ingeniero deber trabajar con en conjunto con los expertos (tcnicos o ingenieros) en seguridad para aplicar los estndares y normas de cmo es que se aplica los mtodos de seguridad al desarrollo de software.