Beruflich Dokumente
Kultur Dokumente
TEMA 2 – Esquema
ataques de seguridad penetración seguridad
2
requisitos para para realizar un
Reglas
software seguro Aspectos prácticos test de
del manejo de las penetración
Análisis estático
he rramientas
Análisis de riesgo de código como
Casos de abuso He rramie ntas
arquitectónico Métricas de análisis parte del
para te st de
estático de código proceso de
pe ne tración
Creación de casos revisión de
Fases del análisis de
de abuso código Recomendacion
riesgos
Ejemplo caso de Ejemplos. es sobre los test
uso de seguridad y Herramientas de penetración
caso de abuso de análisis
estático de
código fuente
Aspectos
prácticos de
manejo de las
he rramientas
Seguridad en el Software
Ideas clave
Para estudiar este tema lee las Ideas clave que encontrarás a continuación, además de
leer los apuntes elaborados por el profesor.
Figura 2. Ataques capa aplicación. Fuente: Exploiting software: how to break code
Lo anterior exige mejorar el SDLC al tener que incluir y describir con mayor
profundidad técnica y detallada los principios y prácticas de seguridad que los
desarrolladores de software, evaluadores e integradores tienen que adoptar para lograr
el doble objetivo de producir sistemas con software más seguro y poder
verificar su seguridad.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
» Modelado de ataques.
» Casos de abuso.
» Ingeniería requisitos de seguridad.
» Análisis de riesgo arquitectónico.
» Patrones de diseño.
» Pruebas de seguridad basadas en riesgo.
» Revisión de código.
» Test penetración.
» Configuraciones seguras.
» Operaciones de seguridad.
» Revisión externa.
Fase SDLC
Req. Dise. Codif. Prueb. Desp. Oper.
Practica de Seguridad
Casos de abuso X
Ingeniería requisitos de seguridad X
Análisis de riesgo arquitectónico X X X X X
Patrones de diseño X
Pruebas de seguridad basados en riesgo X X X X
Modelado de ataques X X X X X X
Revisión de código X
Pruebas de penetración X X
Configuraciones seguras X
Operaciones de seguridad X
Revisión externa X X X
Tabla 1 Relación entre las prácticas de seguridad y las fases del ciclo de vida.
Introducción
Para conseguir que el desarrollo de una aplicación posea las propiedades y principios
de diseño del software seguro presentadas en tema 1, se necesita que el personal de
diseño y desarrollo desarrollen dos perspectivas:
La perspectiva del atacante se suele modelar de las siguientes dos formas, que
desarrollamos en párrafos posteriores:
» Patrones de ataque.
» Árboles de ataque.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Patrones de ataque
Exploit
Del inglés to exploit, explotar o aprovechar. Es una pieza de software, fragmento de
datos o secuencia de comandos y/o acciones, utilizada con el fin de aprovechar una
vulnerabilidad de seguridad de un sistema de información para conseguir un
comportamiento no deseado del mismo. http://es.wikipedia.org
Dependiendo del nivel de detalle que describe y su nivel de abstracción, los patrones de
ataque constituyen un recurso que proporciona valor al conjunto del SDLC, dado
que puede tener diferentes utilidades en sus diferentes fases. En la tabla siguiente se
muestra un resumen de los usos de los patrones de ataques en las diferentes fases del
SDLC.
Fase Utilidad
» Ayuda a identificar requisitos.
Especificación » Ayuda a identificar los riesgos a los que hará frente el software.
de requisitos » Ayuda a definir el comportamiento del sistema para prevenir o reaccionar
ante un tipo específico de ataque probable.
» Proporciona ejemplos de ataques que aprovechan las vulnerabilidades de
Diseño y la arquitectura elegida.
arquitectura » Proporcionan el contexto de las amenazas al que el software se va a
enfrentar, de forma que permite diseñar arquitecturas seguras.
Codificación
» Específica debilidades aprovechadas por los ataques, orientando que
técnicas o prácticas de seguridad de desarrollo evitan estas deficiencias.
» Pueden ser utilizados para orientar las pruebas de seguridad del software
Pruebas en un contexto práctico y realista identificando debilidades concretas para
generar casos de prueba para cada componente.
Operación
» Permitirá la selección de políticas de seguridad y configuraciones acordes
a las amenazas obtenidas de los patrones de ataque.
Tabla 2 Aplicación patrones de ataque a las diferentes fases del SDLC.
Ítem Descripción
Nombre » Identificador descriptivo del patrón de ataque.
Severidad
» En una escala aproximada típica (muy bajo, bajo, medio, alto, muy
alto) de la gravedad del ataque.
» Descripción detallada del ataque incluyendo la cadena de acciones
Descripción tomadas por el atacante. Descripciones más pormenorizadas podría
incluir árboles de ataque.
» Describe las condiciones que deben existir o funcionalidades y
Prerrequisitos del características que el software de destino debe tener y
ataque comportamiento que debe exhibir para que un ataque de este tipo
tenga éxito.
» Es una escala aproximada (Muy Bajo, Medio Bajo, Alto, Muy Alto).
Probabilidad Este campo se utiliza para capturar un valor global promedio típico
típica del exploit para este tipo de ataque, teniendo en cuenta que no será
completamente exacta para todos.
» Describe el mecanismo de ataque utilizado por este patrón. Con el fin
de ayudar en la normalización y clasificación, este campo comprende
Métodos de
una selección de una lista enumerada de definidos vectores. Este
ataque
campo puede ayudar a definir la superficie de ataque requerida por
este ataque.
Ítem Descripción
» Contiene ejemplos explicativos o casos demostrativos de este ataque.
Ejemplos Pretende ayudar al lector a comprender la naturaleza, el contexto y la
variabilidad de la agresión en términos más prácticos y concretos.
Conocimiento y » Describe el nivel de habilidad o conocimiento específico requerido por
habilidades un agente malicioso para ejecutar este tipo de ataque. Se codifica con
requeridas del una escala aproximada (bajo, medio, alto), así como un detalle de
atacante contexto.
Recursos
» Este campo describe los recursos (ciclos de CPU, direcciones IP,
herramientas, etc.) requeridos por un atacante para ejecutar con
requeridos
eficacia este tipo de ataque.
Métodos de
» Describe las técnicas normalmente utilizadas para investigar y
reconocer un blanco potencial, determinar la vulnerabilidad y
prueba
prepararse para este tipo de ataque.
Indicadores de un
» Describe las actividades, eventos, condiciones o comportamientos que
podrían servir como indicadores de que un ataque de este tipo es
ataque
inminente, está en progreso o ha ocurrido.
Motivación y
» Comprende una selección de una lista enumerada de motivaciones
definidas o consecuencias. Esta información es útil para la alineación
consecuencias del
de patrones de ataque a los modelos de amenaza y para la
ataque
determinación si son relevantes para un contexto dado.
Descripción del
» Describe el contexto en el que este patrón es relevante y aporta más
antecedentes para el ataque. Esta información es útil para una mejor
contexto
comprensión de la naturaleza de este tipo de ataque.
» Describe, lo más exactamente posible, el mecanismo y el formato de
Vector de un ataque. Debe tener en cuenta la gramática de un ataque, la sintaxis
inyección aceptada por el sistema, la posición de varios campos, y los rangos de
datos que son aceptables.
» Describe los datos de código, configuración u otros a ejecutar o
Payload activar, como parte de un ataque con un vector de inyección de este
tipo.
Ítem Descripción
» Qué vulnerabilidades o debilidades puede el ataque explotar. Se
referencia estándar de la industria CWE. Esta lista debe incluir no
Vulnerabilidades solo a las debilidades que están directamente afectados por el ataque,
relacionadas sino que también aquellas cuya presencia pueda directamente
aumentar la probabilidad de éxito del ataque o el impacto si tiene
éxito.
Requisitos de » Identifica los requisitos de seguridad específicos que son relevantes
seguridad para este tipo de ataques y son lo suficientemente generales como
relevantes para ofrecer oportunidades de reutilización.
Principios de
seguridad
» Identifica los principios de diseño de seguridad que son relevantes
para identificar o mitigar este tipo de ataques.
relacionados
Guía relacionadas
» Identifica las directrices de seguridad existentes que son relevantes
para la identificación o mitigar este tipo de ataque.
» Enumera los recursos de referencia que se utilizaron para elaborar la
Referencias definición de este patrón de ataque y los que podrían ser de utilidad
para ampliar la información sobre este ataque.
Tabla 3 Alcance de información de un patrón de ataque.
Árboles de ataque
Básicamente:
Ejemplo:
que se llega al nivel inferior donde están los métodos de ataque. Un nodo se
descompone como:
O1
Descomposición «AND»
Un conjunto de objetivos de ataque de nivel inferior, que
tienen que ser alcanzados para que el ataque tenga éxito.
O1.1 O1.2
O1 Descomposición «OR»
Una serie de objetivos de ataque de nivel inferior,
cualquiera de los cuales puede lograrse para que el ataque
O1.1 O1.2 tenga éxito.
Meta: Falsificar
Reserva
1. Convercer 2. Acceder y
emplaedo añada modificar la base
reserva datos de vuelos
2.1 Inyección
1.1 Chantaje 1.2 Engañar 2.2 Inicio sesión
SQL página
empleado empleado Base Datos
WEB
2.2.3 Robarr
2.2.1 Advinar 2.2.2 Sniff
password
password password
servidor
2.2.3.2 Exploit
2.2.3.1 Obtener
Condición
cuenta servidor
Carrera
2.2.3.1.2 Obtener
2.2.3.1.1 Buffer
Acceso cuenta
Overflow
Empleado
Introducción
Los diagramas de casos de uso constituyen unas buenas prácticas para la obtención de
los requisitos funcionales de una aplicación, sin embargo, para la obtención de
requisitos de seguridad no lo son, sobre todo los no funcionales o requisitos
negativos referidos a actividades que no debería realizar el sistema. Para solucionar lo
anterior se ha creado un tipo especializado de casos de uso que se utilizan para analizar
y especificar las amenazas de seguridad, caso de abuso, Guttorm. y Opdahl (2001) los
definen como:
Un caso de abuso es la inversa de un caso de uso, es decir, una función que el sistema
no debe permitir o una secuencia completa de acciones que resulta en una pérdida para
la organización.
3. Ing. 7. Revisión 8.
Requisitos 5. Patrones
código Configuración
seguridad de diseño
11. segura
6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
basadas en de ataques
de abuso riesgos externa penetración
riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Los casos de abuso, o casos de mal uso, son un instrumento que puede ayudar a
pensar de la misma forma que lo hacen los atacantes. Pensando más allá de los aspectos
normativos y funcionales y también estudiando eventos negativos o inesperados, los
profesionales de seguridad de software entienden mejor cómo crear software seguro,
pues permiten obtener una mejor comprensión de las áreas de riesgo del sistema a
través de (Redwine, 2006):
Figura 9. Relación entre el caso de uso de seguridad y el de abuso asociado. Extraída de Donald (2003).
En la siguiente tabla se resume las diferencias entre los casos de uso de seguridad y los
casos de abuso (Donald, 2003):
Los cuatro casos uso resultantes de especificar los requisitos de seguridad, protegen al
cajero automático y a sus usuarios de tres amenazas potencialmente realizables por un
cibercriminal.
CONTROL INGENIERIA
DEPOSITAR DE ACCESO SOCIAL
RETIRAR FONDOS (ABUSO
FONDOS (SEGURIDA
Pirata
D)
informático
ROMPER
PRIVACIDAD
PRIVACIDAD
(SEGURIDAD
GESTION (ABUSO)
)
CUENTAS
USUARIO
USUA
INTEGRIDAD PENETRACION
RIO FRAUDE Cibercriminal
(SEGURIDAD)
(ABUSO)
TRANSFERIR CONSULTAR
FONDOS SALDO
NO AGENTES
REPUDIO CASO USO CASOS
SEGURIDAD ABUSO MALICIOSOS
(SEGUIRI
DAD)
Figura 10. Ejemplo caso de uso de seguridad y caso de abuso. Extraída de Donald (2003).
Previene Inundar el
Bloquear sistema Detecta
Hojear
Extiende repetidos
catálogo
registros
Figura 11. Ejemplo caso de uso comercio electrónico. Fuente: Guttorm, A. y Opdahl, L. (2001)
Introducción
Defectos en los requisitos cuestan 10 a 200 veces más para corregir durante la
ejecución, que si se detectan durante la especificación de los mismos. Además, es difícil
y costoso mejorar significativamente la seguridad de una aplicación después de que esté
en su entorno de producción.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Deben especificar:
Identificación de
requisitos
Análisis de riesgos.
Modelado de amenazas
Patrones de ataques
Análisis de
Requisitos
requisitos Casos de abuso
Manejo de excepciones
Especificación
de requisitos. Especificación formal
Documentación
Verificación de
requisitos
Figura 14. Vista de alto nivel de las tareas y artefactos involucrados en la fase de requisitos.
» Completos.
» Precisos.
» Coherentes.
» Trazables.
» Verificables.
Introducción
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
En la figura anterior, se puede observar que el análisis de riesgos está a caballo entre
la fase análisis de requisitos, donde se obtienen los requisitos de
seguridad, se modelan ataques y realizan casos de abuso, y la fase de la fase
de arquitectura y diseño. Sigue en importancia a la revisión de código, si bien este
hecho puede variar dependiendo de las características de la organización, de sus tipos
de sistemas, cantidad de software, etc.
Modelado de Amenazas
Metodologías
1 CORAS (Consultative Objective Risk Analysis System) and SECURIS (Research Council
of Norway-funded Model-Driven Development and Analysis of Secure Information
Systems).
Herramienta
2 CIGITAL's architectural risk analysis process.
3 OCTAVE (Operationally Critical Threat, Asset, and Vulnerability Evaluation). SEI de la
Universidad Carnegie Mellon
4 PTA Technologies Calculative Threat Modeling Methodology (CTMM).
5 Trike. Metodología de evaluación de amenazas.
6 MTAM (Microsoft Threat Analysis and Modeling).
7 PASTA (Process for Attack Simulation and Threat Analysis).
Tabla 5 Metodologías de modelado de amenazas.
o Modelado.
o Identificar amenazas.
o Mitigación.
o Validación.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Hasta hace unos pocos años las pruebas de software se desarrollaban en base a la
demostración de sus requisitos, como forma de comprobar el correcto funcionamiento
de sus capacidades e incluso sus funciones y servicios de seguridad, sin embargo, no
sirven para determinar cómo se comportará en condiciones anómalas y
hostiles, ni si está libre de vulnerabilidades.
Identificando los riesgos del sistema y diseñando las pruebas en base a ellos, bajo
la perspectiva de un atacante, un probador de seguridad de software puede enfocar
correctamente las áreas de código donde un ataque probablemente pudiera tener éxito.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
vulnerabilidad potencial donde en realidad existe un falso positivo. Hay que revisar el
resultado de las herramientas de análisis estático para identificarlos.
Figura 22. Puntos fuertes y débiles pruebas caja blanca. Extraída de (López, S., 2012).
Figura 23. Puntos fuertes y débiles pruebas caja negra. Extraída de (López, S., 2012).
Figura 24. Funcionamiento pruebas Análisis Dinámico (DSAT). Extraída de (López, S., 2012).
control y los flujos de datos, árboles, y las llamadas externas de función. Ejemplos de
este tipo de herramientas son IDAPRO, WinDbg, etc.
Programa Descripción
Mangle Fuzzer que genera etiquetas HTML y se autolanzará dentro de un navegador.
Spike Colección de fuzzers.
Wfuzz Fuzzer para web que aplica fuerza bruta sobre el protocolo HTTP. Realiza
pruebas de path discovery (recursivas) o de fuerza bruta sobre variables
(pasadas por GET o por POST). Emplea diccionarios (en el caso de las
inyecciones SQL el diccionario está preparado con los patrones SQL más
empleados). Dependiendo de la prueba que estemos haciendo emplearemos un
diccionario u otro.
Netcat Utilidad Unix que lee y escribe datos a través de conexiones de red usando los
protocolos TCP o UDP. Está diseñada para ser una utilidad de tipo back-end
que pueda ser usada directamente o fácilmente manejada por otros programas
y scripts.
Radamsa Fuzzer de caja negra basado en mutaciones.
Blab Fuzzer basado en gramática.
American Fuzzy Lop Fuzzer basado en mutaciones.
Zzuf CERT basic fuzzing framework. Busqueda de bugs.
Sulley Extras para gestionar fuzzing como parte de las pruebas de
penetración.
Hping2 Herramienta de red capaz de enviar paquetes ICMP/UDP/TCP hechos a
medida y de monitorizar las respuestas del host destino. Maneja fragmentación
y tamaños arbitrarios de paquetes.
Sniffit Herramienta de monitorización y packet sniffer para paquetes de
TCP/UDP/ICMP capaz de dar información técnica muy detallada acerca de
estos paquetes.
Firewalk Emplea técnicas del estilo traceroute para determinar las reglas de filtrado que
se están usando en un dispositivo de transporte de paquetes.
Tabla 8 Herramientas para la auditoria Fuzzing
El análisis de caja gris en una mezcla de las dos anteriores, es una prueba que
combina pruebas en donde no solo se tiene en cuenta la interfaz del aplicativo, sino
también el código fuente del mismo.
Ejemplo de herramientas:
Herramientas
1 Valgrind. Para todo tipo de aplicaciones
2 INSURE++ herramienta para análisis de errores para todo tipo de aplicaciones escrita en C, C++.
3 SCA Fortify mas Web Inspect de HP, disponen de un agente para integrar el resultado de las dos
herramientas.
4 IBM Appscan, con el agente GLASS BOX.
5 Acunetix más Acusensor.
6 SEEKER
Tabla 10 Herramientas análisis hibrido
Uno de los más interesantes motores inyección de fallos modernos para la seguridad es
la herramienta Cenzic1. Este instrumento usa el navegador para interceptar
transacciones y permitir a un analista estudiarlas. Aunque esta clase de pruebas sea
posible con perl y un interfaz de línea de comandos, la colección de resultados y la
automatización hace que el valor de las herramientas de la segunda generación sea
considerable. Otra herramienta es Holodeck2 útil para la repetición, la inyección de
defectos de seguridad y otras pruebas interesantes. Las pruebas de seguridad basadas
en el riesgo (pruebas de seguridad desde el punto de vista del atacante) según lo
anteriormente expuesto se deberían estructurar en las siguientes fases:
1 https://www.trustwave.com/Company/Cenzic-is-now-Trustwave/
2 http://www.sisecure.com/
En la figura siguiente se muestra las diferentes pruebas a realizar en cada una de las
fases del S-SDLC (Redwine, 2006):
Figura 26. Distribución pruebas de seguridad a lo largo de las fases del S-SDLC.
Introducción
El análisis estático de código fuente, tal y como comenta McGraw (2005), se considera
la actividad más importante de entre las mejores prácticas de seguridad que
se han de realizar en el curso del desarrollo de una aplicación. En los siguientes
apartados se van a analizar los tipos y categorías de herramientas disponibles tanto
comerciales como de open source, para qué lenguajes están disponibles, cómo y cuándo
se tienen que utilizar y cómo se enmarca el uso de estas herramientas en el proceso de
revisión del código.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Los problemas de seguridad de una aplicación pueden ser resultado de dos tipos de
errores principales:
Con esto en mente, el análisis estático de código fuente es adecuado para identificar
problemas de seguridad por ciertas razones:
Los falsos positivos son seguramente indeseables, pero desde una perspectiva de
seguridad, los falsos negativos son mucho peores. Con un falso negativo, un
problema existe en el programa, pero la herramienta no lo detecta. La
penitencia por un falso positivo es la cantidad de tiempo gastada repasando el
resultado. La penitencia por un falso negativo es mucho mayor, pues no solo se paga el
precio asociado por tener una vulnerabilidad en el código, se vive con un sentido
falso de seguridad que se deriva del hecho de que la herramienta hizo parecer que
todo era correcto.
Para que una herramienta de análisis estático descubra un defecto, el defecto debe estar
visible en el código. Esto podría parecer obvio, pero es importante entender que el
análisis de riesgo arquitectónico es un requisito necesario previo al
análisis estático.
Fortify Software e IBM, fabrican herramientas de análisis estático de código que caen
dentro de esta categoría.
CONSTRUIR REALIZACION
MODELO ANALISIS
CODIGO
FUENTE
CONOCIMIENTO
SEGURIDAD
SOFTWARE PRESENTACION
RESULTADOS
Figura 28. Diagrama de bloques para una herramienta genérica de análisis de código.
Pointer Aliasing. Los alias de los punteros son otra clase de problema del flujo de
datos. La finalidad del análisis de alias es determinar qué punteros apuntan a la
misma posición de memoria.
Introducción
Una vez terminada la fase de desarrollo se despliega el sistema, se deben llevar a cabo
muchas de las operaciones o actividades de seguridad relacionadas con la puesta en
marcha de la aplicación para su posterior paso a producción y explotación por
parte de los usuarios. Las actividades de seguridad a realizar en esta fase comprenden
la implementación y comprobación de la eficacia de las salvaguardas, tanto de tipo
software (autenticación p.ej.) como de los dispositivos hardware (firewall p.ej.), que
se derivaron de la actividad de análisis de riesgos realizada en la fase de diseño.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
El plan de pruebas de penetración debe incluir los «peores» escenarios en los que
se puedan reproducir vectores de ataques e intrusiones que se consideran altamente
perjudiciales, como los escenarios de amenazas internas. El plan de pruebas debe
capturar:
» La política de seguridad del sistema se supone que debe respetar o hacer respetar.
» Amenazas previstas.
» Riesgos de seguridad (conducido por casos de abuso, riesgos arquitectónicos y
modelos de ataque).
» Secuencias de ataques probables que se puedan producir.
6. Realizar 1. Revisar
pruebas información
Fuzzing Modelo
Amenazas
5.
Realización
2. Identificar
análisis vulnerabilidades
dinámico
(DAST) web
4. Ejecutar
Expolit
3. Buscar
(herramienta Expolit
automática o
manual)
Figura 30. Ejecución pruebas de penetración.
Una buena parte de los defectos y vulnerabilidades del software directamente no está
relacionada con la funcionalidad de seguridad. Muchas de las cuestiones relacionadas
con la seguridad implican un mal uso de una aplicación, normalmente inesperado y
descubierto por un atacante. Las pruebas de penetración tienen que verificar
los «aspectos negativos» del sistema, es decir se debe probar la seguridad de la
aplicación en base a los riesgos (conducido por casos de abuso, riesgos
arquitectónicos y modelos de ataque) para determinar cómo se comporta ante los
ataques.
Las pruebas de penetración de forma general las más aplicadas de todas las
mejores prácticas de seguridad del software, y suelen ser parte del proceso
de aceptación de final. A causa de restricciones de tiempo, la mayor parte de este
tipo de evaluaciones son realizadas de forma apresurada como un punto de la lista de
comprobación de seguridad al final del ciclo de vida.
Una vez que una aplicación está terminada, está sujeta a las pruebas de
penetración como parte del proceso de aceptación de final. A causa de
restricciones de tiempo, la mayor parte de evaluaciones como estas son realizadas de
forma apresurada como un artículo de lista de comprobación de seguridad al final del
ciclo de vida.
El éxito de una prueba de penetración depende de muchos factores, pocos de los cuales
se prestan a la métrica y la estandarización. La primera variable y más obvia es la
habilidad, el conocimiento, y la experiencia del probador. Las pruebas de
penetración de seguridad de software (pruebas de penetración, a veces llamadas de
aplicación) actualmente no siguen un proceso estándar de ninguna clase y por lo tanto
no son en particular cuidadosas con una aplicación constante de conocimiento (pensar
en listas de comprobación). El resultado es que solo los probadores expertos y
experimentados pueden realizar pruebas de penetración satisfactoriamente.
Todos estos problemas palidecen en comparación con el problema de que las pruebas
de penetración a menudo son usadas como una excusa para declarar la victoria de
seguridad «y ya está todo hecho». Lamentablemente, las pruebas de penetración
realizadas sin basarse en el análisis de riesgos de seguridad conducen a
una falsa sensación de seguridad.
Una gran ventaja de las pruebas de penetración que bien merece mencionarse es que se
posicionan como pruebas de tipo de caja negra. Tomando un sistema en su
verdadero ambiente de producción, los analistas de seguridad pueden llegar a descubrir
problemas operacionales y de configuración, normalmente pasados por alto
durante el desarrollo de software.
» Escaneo de vulnerabilidades.
» Explotación de vulnerabilidades.
» Fuzz testing.
» Análisis dinámico (DAST) para aplicaciones web.
Cuando es posible, el empleo de estas herramientas se debe dirigir por los resultados de
análisis de riesgo y los modelos de ataque. El empleo de herramientas tiene dos
ventajas principales.
» Cuando se usan con eficacia, se puede realizar la mayoría del trabajo necesario
para pruebas de penetración de software básicas (en la capa de presentación de un
sistema). Desde luego, un acercamiento conducido por herramientas no puede ser
usado como un reemplazo de la revisión de un analista de seguridad experto (sobre
todo porque las herramientas de hoy son en su naturaleza no aplicables en el nivel
de diseño), pero un acercamiento a base del empleo de herramientas realmente
ayuda a aliviar la carga de trabajo de un revisor y así puede bajar el coste.
Introducción
El proceso final a llevar a cabo previo al paso a producción de la aplicación segura, son
las actividades centrales de:
» Distribución.
» Despliegue.
» Operaciones.
7. Revisión 8.
5. Patrones
código Configuración
de diseño
11. segura
3. Ing. 6. Pruebas 1. Modelado
2. Casos 4. Análisis de Revisión 9. Test
Requisitos basadas en de ataques
de abuso riesgos externa penetración
seguridad riesgo 10.
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Distribución
» Distribuir el software con una configuración por defecto segura y lo más restrictiva
posible.
» Realizar una guía de configuración de seguridad.
» Proporcionar una herramienta de instalación automática.
» Establecer un medio de autenticación para la persona que va a ejecutar la
instalación y configuración.
» Los interfaces de configuración proporcionados por la herramienta o el script de
instalación debe ser seguro.
» Revisión y limpieza de todo el código fuente por el visible usuario (por ejemplo,
código del cliente de aplicaciones web).
Despliegue
Interfaz de usuario
(Autorización, autenticación)
Seguridad de la aplicación
(auditoría, acceso, etc.)
Prácticas de
Red
operación
Gestora bases de datos, (protocolos de
(administración, etc. comunicaciones)
buckup, etc.)
Sistema operativo
(control de acceso
sistema de fichero)
Operaciones
5. Patrones
7. Revisión 8.
de diseño
código Configuración
11. segura 9. Test
3. Ing. 4. Análisis 6. Pruebas 1. Modelado
2. Casos Re visión penetración
Requisitos de rie sgos basadas en de ataques
de abuso e xte rna 10.
seguridad riesgo
Operaciones
seguridad
Requisitos Codificación
Arquitectura Pruebas Distribución Operación y
Casos de e
Diseño y despliegue mantenimiento
abuso integración
REALIMENTACIÓN
Allen, J. H.; Barnum. S.; Ellison, R. J.; McGraw, G.; Mead, N. R. (2008). Software
Security Engineering: A Guide for Project Managers. Massachusetts: Addison Wesley
Professional.
Chess, B., and West, J. (2007). Secure Programming with Static Analysis.
Massachusetts: Addison-Wesley Software Security Series.
Donald, G. (2003). Software Engineering Institute, U.S.A. Security Use Cases. Journal
of Object Technology.
Graff, M. G. y Van Wyk, K. R. (2003). Secure Coding: Principles & Practices. Reino
Unido: O'Reilly.
Redwine Jr., S. T. (Editor). (2006). Software Assurance: A Guide to the Common Body
of Knowledge to Produce, Acquire, and Sustain Secure Software Version 1.1.
Washington: US Department of Homeland Security.
Wyk, G. (2003). Secure Coding: Principles & Practices by M. G. Graff, K. R. van Wyk.
Massachusetts: O'Reilly.
Lo + recomendado
Lecciones magistrales
Modelado de amenazas
No dejes de leer…
Esta nota técnica documenta e identifica patrones de ataque que ocurren comúnmente
al objeto de que los diseñadores de sistemas de información y analistas puedan
utilizarlos para desarrollar sistemas de información más robustos y confiables.
No dejes de ver…
Se necesita mucho más que un buen desarrollador para construir software seguro
dentro de una organización. De hecho, la creación de software seguro consiste en
garantizar que la seguridad se tenga en cuenta durante todo el ciclo de vida del
software. Se trata de garantizar que las mejores prácticas de seguridad se empleen de
manera eficiente y que los riesgos descubiertos se aborden adecuadamente y a su
debido tiempo.
En esta sesión, se presenta una visión general de los modelos SDLC de última
generación para discutir los fundamentos y las piedras angulares de estos modelos.
Esto ayudará a los participantes a comprender el alcance y los diferentes conceptos de
estos modelos. Se incluirá la perspectiva de los modelos de cascada y de desarrollo ágil
para explicar estos modelos.
Threat modeling
Vídeo que proporciona una descripción del proceso de modelo de amenazas que utiliza
Cigital mediante un ejemplo de aplicación del proceso para identificar fallas potenciales
en un sistema.
Objetivos:
» Describir terminología utilizada en el modelado de amenazas.
» Describir un proceso de modelado de amenazas de un sistema.
» Realizar un modelo de amenazas de algún sistema ficticio.
Clase del MIT open course ware del Profeso Zeldovich acerca del modelado de
amenazas.
Vídeo sobre el incidente Heartbleed que afecto a una gran cantidad de servidores con el
software Open SSL instalado. Los autores, expertos en seguridad de aplicaciones,
presentan ideas, lecciones aprendidas y directrices de seguridad que proporcionan a
implementar. El acceso al webinar requiere registro.
No dejes de practicar…
Demostración de pruebas de caja negra sobre una aplicación web realizada mediante la
aplicación IBM Security AppScan. Para ello hay que bajarse la aplicación, instalarla y
ejecutarla contra la web de demostración Altoro Mutual website:
Es una licencia de evaluación que solo puede escanear una página web de prueba,
Altoro Mutua en http://demo.testfire.net. Utiliza la plantilla predefinida,
demo.testfire.net, que se muestra en el cuadro de diálogo Nueva digitalización. Cuando
se te solicite el nombre de usuario y contraseña, utiliza:
Figura 1.
Figura 2.
Figura 3.
Figura 4.
Figura 5.
Figura 6.
Figura 7.
Figura 8.
Figura 9.
Figura 10.
Figura 11.
Figura 12.
Figura 13.
Figura 14. .
Capas del sistema a proteger
+ Información
A fondo
Guttorm Sindre y Andreas L. Opdahl en este trabajo analizan una extensión conceptual
de casos de uso, es decir, casos de mal uso y describen las acciones que no deberían ser
posibles en un sistema.
Nancy R. Mead, Eric D. Hough y Theodore R. Stehney II elaboran este documento para
obtener y priorizar los requerimientos de seguridad en los proyectos de desarrollo de
software. Se detalla y explican los pasos de la metodología y los resultados de su
aplicación en estudios de casos recientes.
Artículo que introduce la idea de las pruebas de penetración, así como muchas otras
ideas fundacionales de seguridad de los sistemas.
Vsftpd. Probably the most secure and fastest FTP server for UNIX-like
systems
Webgrafía
Synopsys
Sitio web de la empresa SYNOPSYS creada partir de la empresa CIGITAL Inc. con
recursos, libros, vídeos y artículos sobre seguridad del software.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://resources.synopsys.com/
Armitage
Sitio web para descargarse este programa que implementa una interfaz gráfica de la
herramienta de penetración metaexploit. Contiene manuales y vídeos de uso de esta
herramienta.
NMAP
Metasploit
A collaboration of the open source community and Rapid7, Metasploit® software helps
security and IT professionals identify security issues, verify vulnerability mitigations,
and manage expert-driven security assessments.
Zap
Burp suite
Kali
Joern
FindBugs
Bibliografía
Allen, J. H.; Barnum, S.; Ellison, R. J.; McGraw, G.; Mead, N. R. (2008). Software
Security Engineering: A Guide for Project Managers. Addison Wesley Professional.
Hoff, J. y Chapple, M. (2014). Securing the SDLC for Dummies®, WhiteHat Security
Edition. Nueva Jersey: John Wiley & Sons, Inc.
Redwine, S. T. Jr. (Editor). (2006). Software Assurance: A Guide to the Common Body
of Knowledge to Produce, Acquire, and Sustain Secure Software Version 1.1. US
Department of Homeland Security.
Shostack, A. (2014). Threat Modeling Designing for Security. Nueva Jersey: John
Wiley & Sons, Inc.
Takanen, A., Demott, J. D. y Miller, C. (2018). Fuzzing for Software Security Testing
and Quality Assurance (2nd Edition). Massachusetts: Artech House.
Actividades
Descripción
Los objetivos de seguridad establecidos para la tienda web de Librería On-Line SA son
los siguientes:
El sistema estará basado en una típica arquitectura de una aplicación web de tres capas
donde el cliente es un navegador que accede a los servicios proporcionados por el sitio
web de la librería, que contiene una base de datos de los clientes, cuentas y
publicaciones disponibles alojada en un servidor de bases de datos y un servidor web
que implementa toda la lógica de negocio.
Hay que tener en cuenta que nos encontramos en la fase análisis de requisitos del SDLC
identificando requisitos funcionales y de seguridad.
Para la realización del DFD se utilizará la herramienta Threat analysis and modeling
tool 2016 de la compañía Microsoft, descargable en el siguiente enlace:
https://www.microsoft.com/en-us/download/details.aspx?id=49168
Como ayuda a su manejo, aparte de los manuales que se pueden descargar con
esta herramienta, se aconseja visionar estos dos vídeos:
La aplicación permite analizar las amenazas de una aplicación web típica de negocio de
pago electrónico de una librería (textos, libros, revistas, etc.) en formato digital con
opciones de impresión.
El sistema está basado en una típica arquitectura de una aplicación web de tres capas,
donde el cliente es un navegador que acceder a los servicios proporcionados por el sitio
web de la librería, que contiene una base de datos de los clientes, cuentas y
publicaciones disponibles alojada en un servidor bases de datos (que replica a un
hosting externo para tener un backup), un servidor web que implementa toda la lógica
de negocio, un servidor de logs interno como podrían ser un SIEM y por último un
acceso a una pasarela de pagos externa.
Tener en cuenta que nos encontramos en la fase análisis de requisitos del SDLC,
identificando requisitos funcionales y de seguridad.
Un ejemplo puede ser el siguiente, aunque lo puedes modelar de forma diferente según
consideres:
Selección de vitas
Relación entre las amenazas del método STRIDE y los elementos de un diagrama DFD.
Aplicación de Plantilla
Aplicación de plantilla
Una vez que tenemos identificada la lista de amenazas, el siguiente paso consiste en
puntuarlas de acuerdo al riesgo que suponen. Esto nos permitirá priorizar las
actuaciones a efectuar para mitigar el riesgo.
Cálculo riesgo.
Deberás incluir en la memoria esta tabla rellena con al menos 15 de las amenazas
obtenidas de la de la herramienta Threat analysis and modeling tool 2016. Se valorará
que se implemente en idioma español. En la herramienta deberán estar analizadas
todas.
Salvaguardas
Una vez calculado el riesgo con el método DREAD hay que incluir en la herramienta
manualmente para cada una las salvaguardas que ayuden a mitigarlas.
» Usr: auditor
» pw: Tics2016!
» User: admin
» Pw: yessir
Test