Sie sind auf Seite 1von 21

Seguridad en el ciclo de vida del

desarrollo de software
Lic. Pablo Milano
<pmilano@cybsec.com>

12 de Septiembre de 2007
Buenos Aires - Argentina

Seguridad en el ciclo de vida del desarrollo de software

Introduccin

2007

Introduccin a la seguridad en el SDLC

Actualmente la mayora de los procesos de desarrollo no incluyen


seguridad, o bien la incluyen al final (etapa de testing)
El costo de solucionar las vulnerabilidades es mayor cuanto ms

Tiempo

Deployment

Testing

Codificacin

Diseo

Analisis

tarde se detectan las mismas (igual que los bugs)

Costo

Seguridad en el ciclo de vida del desarrollo de software

Introduccin

2007

Grandes mitos y excusas flacas


La seguridad de la aplicacin es responsabilidad del programador.
Nadie sabe cmo funciona, por ende, no la van a atacar.
Si no se encontraron vulnerabilidades hasta ahora
A nadie le interesara atacar nuestra aplicacin.
La aplicacin es segura porque corre detrs de un firewall.
La aplicacin es segura porque usa encripcin.
Si no corre como Administrator / root, no funciona.
Si, ese feature (que es inseguro) viene habilitado por default, pero el
administrador lo puede deshabilitar.
No hay manera de explotarla.
No hay tiempo para incluir seguridad.

Seguridad en el ciclo de vida del desarrollo de software

Introduccin

2007

Tendencia actual

Participacin de Seguridad Informtica desde el comienzo de


todos los proyectos de desarrollo.

Incorporar seguridad a lo largo de todas las etapas del ciclo de


vida del desarrollo de software (SDLC).

Anlisis
Diseo
Codificacin
Testing
Deployment

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el anlisis de requerimientos

2007

Seguridad en el anlisis de requerimientos


Durante el anlisis de requerimientos, se pueden identificar diversas
caractersticas que derivarn en los requerimientos de seguridad del
software. Por ejemplo:
Arquitectura de la aplicacin
Cliente/servidor o Desktop?

Plataforma donde correr la aplicacin


PC / Palm / Telfono celular

Tipos de datos que se almacenan o transfieren


Confidenciales / pblicos

Requerimiento de compliance con normativas y marcos regulatorios


SOX, PCI-DSS, A 4609
5

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el anlisis de requerimientos

2007

Tipos de registro que el sistema debe generar


Acceso a recursos, uso de privilegios, etc.

Perfiles de usuario necesarios para la aplicacin


Administrador, revisor, editor, usuario bsico, etc.
Tipos de acceso a los datos por parte de cada perfil
Lectura, escritura, modificacin, agregado, borrado, etc.

Acciones sobre el sistema que puede hacer cada perfil


Cambiar la configuracin del sistema
Arrancar o detener servicios

Modos de autenticacin
Passwords, Tokens, Biomtricos
1 factor, 2 factores, etc
6

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el diseo

2007

Seguridad en el diseo
Muchas de las vulnerabilidades encontradas en aplicaciones tuvieron
su causa en errores de diseo. Ej:
Aplicacin Home banking (WEB)
Inclua el nmero de cuenta en el request de transferencias
No validaba que la cuenta origen perteneciera al usuario logueado
Vulnerabilidad: Transferencias desde cuentas ajenas
Aplicacin de Adm y Finanzas (Consola Unix)
Tomaba el usuario de una variable de entorno
Permita que el usuario escapara a un shell
Vulnerabilidad: Se puede establecer un usuario arbitrario
7

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el diseo

2007

Buenas prcticas para el diseo de una aplicacin segura

Reduccin de Superficie de ataque

Criterio del menor privilegio

Fallar de manera segura

Criterio de defensa en profundidad

Diseo seguro de mensajes de error

Diseo seguro de autenticacin

Separacin de privilegios

Interaccin amigable con Firewalls e IDS's.

Administracin segura informacin Sensible

Diseo de Auditora y Logging

Anlisis de riesgo
8

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el diseo

2007

Anlisis de riesgo Threat Modeling


Tcnica formal, estructurada y repetible que permite determinar y
ponderar los riesgos y amenazas a los que estar expuesta nuestra
aplicacin.
Consta de las siguientes etapas:
1)

Conformar un grupo de anlisis de riesgos

2) Descomponer la aplicacin e identificar componentes clave.


3)

Determinar las amenazas a cada componente de la aplicacin.

4) Asignar un valor a cada amenaza.


5) Decidir cmo responder a las amenazas.
6) Identificar las tcnicas y tecnologas necesarias para mitigar los
riesgos identificados.
9

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el diseo

2007

Mtodo STRIDE
Ayuda a identificar amenazas en los componentes de un sistema
Su nombre es un acrnimo de:
Spoofing Identity: Suplantar la identidad de otro usuario o servicio.
Tampering with Data: Modificar maliciosamente datos almacenados.
Repudiation: Imposibilidad de identificar el autor de una accin.
Information Disclosure: Divulgar informacin a usuarios no autorizados.
Denial of Service: Provocar que un servicio deje de funcionar.
Elevation of privilege: Conseguir privilegios mayores a los asignados

10

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el diseo

2007

rboles de ataque

Amenaza #1
Un usuario accede en
nombre de otro

1.1
El usuario tena una
contrasea dbil

1.2
El atacante captur
datos de autenticacin
de la red

1.2.1
La comunicacin no
estaba encriptada

1.3
El sistema permiti un
ataque de diccionario /
fuerza bruta

1.2.2
El mecanismo de
autenticacin es
vulnerable a replay
de paquetes

1.4
El sistema de
validacin /
autenticacin es
defectuoso

1.4.1
El sistema de
validacin no falla de
manera segura

1.5
El sistema permite
armar peticiones con
IDs de otros usuarios

1.4.2
El sistema de
validacin es
vulnerable a ataques
de SQL Injection

11

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en el diseo

2007

Mtodo DREAD

Ayuda a ponderar las amenazas identificadas.

Es un acrnimo de los siguientes 5 tems:

Damage Potencial: Cun importante es el dao de esta amenaza?


Reproducibility: Cun reproducible es la vulnerabilidad?
Exploitability: Cun fcil es de explotar?
Affected Users: Cules y cuntos usuarios se veran afectados?
Discoverability: Cun fcil de descubrir es la vulnerabilidad?

12

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en la codificacin

2007

Seguridad en la codificacin
La falta de controles adecuados en la codificacin, muchas veces
deriva en vulnerabilidades que pueden comprometer a la aplicacin o
a los datos de la misma

Los tipos de vulnerabilidades ms habituales son:


Stack buffer overflows

Heap buffer overflows

SQL Injections

Cross Site Scripting (XSS)

Directory Traversal

Authentication Bypass
Information Disclosure
Escalamiento de privilegios
Manejo inseguro de sesiones
Denegacin de servicio
13

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en la codificacin

2007

Buenas prcticas para una codificacin segura


Validar siempre los datos de entrada antes de procesarlos
Nunca confiar en que los datos recibidos sean correctos.
Realizar validacin de datos en todas las capas
Usar siempre criterio de White List en las validaciones
Controlar tamao y tipo de datos
Sanitizar los valores de entrada y salida
Eliminar o escapear caracteres especiales
Transformar los datos de entrada a un encoding establecido
Reemplazar sentencias SQL dinmicas por Stored Procedures
Evitar generar cdigo con valores ingresados por el usuario
No mezclar datos con cdigo
Capturar errores de capas inferiores y no mostrarlos al usuario
14

Seguridad en el ciclo de vida del desarrollo de software

Testing de seguridad

2007

Testing funcional Vs. Testing de seguridad

Bugs que se
encuentran mediante
Testing de seguridad

Funcionalidad diseada
Funcionalidad real

Bugs que se
encuentran mediante
Testing funcional
15

Seguridad en el ciclo de vida del desarrollo de software

Testing de seguridad

2007

Tcnicas de testing de seguridad


Testing de seguridad funcional
Testing

Funcional

(clsico)

aplicado

las

funcionalidades

de

seguridad de una aplicacin. Ej:


Req. de autenticacin

Restricciones de acceso segn diseo

Req. de complejidad de contraseas

Mecanismos de registro y logging

Bloqueo automtico de cuentas

Mensajes de error especificados

Funcionalidad de captchas

Testing de seguridad basado en Riesgo


Tcnica que se desprende del Threat Modelling
Se identifican todas las interfaces de la aplicacin
Se generan casos de test sobre cada interfaz basado en STRIDE
16

Seguridad en el ciclo de vida del desarrollo de software

Testing de seguridad

2007

Tcnicas de testing de seguridad


Testing con un cliente / server falso
Consiste en disear un cliente o server Ad Hoc que permita:
Enviar peticiones /respuestas incorrectas o invlidas.
Enviar peticiones/ respuestas fuera de orden.
Insertar delays arbitrarios.
Comportarse de manera diferente al cliente o servidor real.

Test de stress
Consiste en llevar la carga o funcionalidad de la aplicacin al lmite
Generar una carga alta de peticiones/transacciones a la aplicacin.
Mantener esta carga durante tiempos prolongados.
Simular trfico en rfagas.
17

Seguridad en el ciclo de vida del desarrollo de software

Testing de seguridad

2007

Tcnicas de testing de seguridad


Test de mutacin de datos
Se testea la aplicacin ingresando en sus interfaces datos mutados
Diferente signo

Caracteres especiales

Diferente tipo

Cdigo (ej: javascripts)

Diferente longitud

Valores nulos

Fuera de rango

Valores aleatorios

Revisin de cdigo
Permite encontrar vulnerabilidades que son muy difciles de detectar
con otros mtodos de testing de seguridad (ej: BackDoors)

Enfoque tradicional: Grupo de revisin


Enfoque rpido: Revision por pares
18

Seguridad en el ciclo de vida del desarrollo de software

Seguridad en la Implementacin

2007

Seguridad en la implementacin (deployment)


Si no se implementa la aplicacin de forma segura, se pueden echar
por tierra los esfuerzos de las etapas anteriores.
Hardening de software de base

Servicios innecesarios
Usuarios y contraseas default
Configuracin de intrpretes

Proceso de implementacin

Separacin de ambientes

Administracin de implementacin y mantenimiento

Releases y Patches
Firma de cdigo
19

Seguridad en el ciclo de vida del desarrollo de software


2007

Conclusiones
Integrando seguridad a lo largo de todas las etapas del SLDC se
ahorra tiempo y dinero.
La tendencia actual es que SI participe desde el principio de los
proyectos de desarrollo.
La mayora de las vulnerabilidades no se deben a errores de
codificacin, sino a defectos de diseo.
Existen buenas prcticas y tcnicas especficas para insertar
seguridad en cada etapa del SDLC.

20

Seguridad en el ciclo de vida del desarrollo de software


2007

Preguntas?

21

Das könnte Ihnen auch gefallen