Beruflich Dokumente
Kultur Dokumente
aplicaciones más
seguras?
Presentada por:
- Seguridad en el Análisis
- Seguridad en el Diseño
- Seguridad en la Codificación
- Testing de Seguridad
- Implementación Segura
¿Cómo desarrollar aplicaciones más seguras?
Desarrollo de un proyecto de Desarrollo
Desvíos en proyectos de IT
¿Cómo desarrollar aplicaciones más seguras?
Desarrollo de un proyecto de Desarrollo
1000
900
Costo de un error por fase
800
700
Unidad de Costo
600
500
400
300
200
30-70
10 15-40
1 3-6
100
0
Requerimientos Diseño Desarrollo Test en desarrollo Test de Aceptación Operación
Barry Bohem determinó el rango de costo por error generado por falsos
supuestos en la fase de requerimientos y no detectados hasta fases
posteriores (“Software Engineering Economics”). “Poor management can
increase software cost more rapidly than any other factor”.
¿Cómo desarrollar aplicaciones más seguras?
Desarrollo de un proyecto de Desarrollo
1. Planificación
2. Análisis
3. Diseño
4. Codificación/Desarrollo
5. Testing
6. Implementación y Operación
7. Mantenimiento
¿Cómo desarrollar aplicaciones más seguras?
Problemáticas más comunes en el desarrollo de aplicaciones
Métricas Métodos
Standards Técnicas
Training Templates
Arte
Modelos mentales
Las personas son diferentes y por lo tanto, también lo son sus
representaciones de la realidad.
Buenísim o.
Em pecem os ya.
La necesitam os
Una aplicación
en 2 m eses.
“bien” segura,
NO HAY
PROBLEMA!!!
¿Cómo desarrollar aplicaciones más seguras?
Problemáticas más comunes en el desarrollo de aplicaciones
Resolver un conflicto no tiene que ver con quién tiene razón sino
con el entendimiento y la apreciación de las diferencias.
Cultura organizacional
¿Cómo desarrollar aplicaciones más seguras?
Inclusión de la seguridad en SDLC
Modelos actuales
- ISO/IEC 21827 - Information technology — Security techniques — Systems
Security Engineering — Capability Maturity Model® (SSE-CMM®)
- Correctness by Construction
Arquitectura de la aplicación.
Plataforma donde correrá la aplicación.
Requerimiento de compliance con normativas y marcos regulatorios.
Tipo de conectividad
Tipos de datos que se almacenarán o transmitirán
Perfiles de usuario necesarios para la aplicación.
Tipos de registro que el sistema debe generar.
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en el Análisis
- Arquitectura de la aplicación
- Mecanismo de autenticación de usuarios
- Administración de usuarios
- Administración de contraseñas
- Encripción
- Transmisión
- Registro de eventos
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en el Diseño
Servicios/procesos activos
Sockets TCP/UDP
Características del sistema
Usuarios de la aplicación sin privilegios administrativos ni demo.
Repositorios de ejemplo
Archivos temporales / Archivos de intercambio
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en el Diseño
Defensa en profundidad
Almacenamiento protegido
Encripción
Hashes
ACL`s
Restricciones en DB
Transmisión segura
Encripción de la comunicación
Borrado de datos
Depuración de datos
Borrado seguro
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en el Diseño
Interacción de la aplicación
- Interacción con Firewalls.
- Interacción con dispositivos (Proxy / Reverse Proxy / Firewalls).
- Interacción con Bases de Datos.
- Interfases (que sean seguras!!!).
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en el Diseño
Auditoría y logging
Los registros de auditoría son una herramienta de vital importancia
en cualquier aplicación.
Una buena aplicación, debería proveer facilidades de logging para:
Definir qué eventos a registrar
Definir distintos niveles de logging.
Definir cómo y dónde registrarlos
Definir políticas de rotación de logs
Definir acciones a tomar si no se pueden registrar logs
¿Dónde loguear?
Archivos propios de la aplicación
Sistema de logging local (Event logger / Syslog).
Sistema de logging remoto
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en el Diseño
Auditoría y logging
¿Qué loguear?
Diseño de autenticación
¿Qué hay que tener en cuenta en la etapa de diseño?
Diseño de autorización
Una vez que el usuario fue autenticado, la aplicación deberá decidir
si tiene o no permisos para realizar las acciones que solicita.
Documentación
Programadores
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en la Codificación
Programadores
¿Cómo es la relación de seguridad informática con los
programadores?
CLAVE: CAPACITACIÓN Y
CONCIENTIZACIÓN
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en la Codificación
Tipos de Vulnerabilidades
Existen muchos tipos de vulnerabilidades.
El impacto depende del tipo general de vulnerabilidad y las
condiciones particulares del software y el sistema donde se
ejecuta. void main(int argc, char **argv) {
char nombre[10];
char apellido[10];
Tipos más comunes: strcpy(nombre, argv[1]); // argumento 1
strcpy(apellido, argv[2]); // argumento 2
Revelación de información
Es la publicación de información sensible acerca de la Aplicación,
su arquitectura, configuración o implementación.
Dicha información es utilizada como fuente para la diagramación
de ataques más avanzados.
Algunos ejemplos:
Comentarios en código fuente.
Información de rutas y nombres de archivos.
Información de nombres de servidores, strings de conexión.
Mensajes de error de capas inferiores (no capturados).
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en la Codificación
Recomendaciones de seguridad
Principio del menor privilegio.
Evitar correr la aplicación /servicio con privilegios administrativos
Validar SIEMPRE los valores de entrada.
Proteger de archivos de configuración y registro.
Restringir posibles archivos de salida.
Basar los privilegios en la autenticación del usuario.
Utilizar manejo de sesiones seguro.
¿Cómo desarrollar aplicaciones más seguras?
Seguridad en la Codificación
Programación segura
Programación de forma segura (C++, Java, .NET, etc.)
Training / explicación / monitoreo a los desarrolladores.
Revisión de código (automatizada y manual).
Funcionalidad
diseñada
Funcionalidad
real
Bugs que se
encuentran mediante
Testing funcional
¿Cómo desarrollar aplicaciones más seguras?
Testing de Seguridad
Testing de seguridad
Consiste en verificar que no se pueda forzar a la aplicación a
efectuar acciones que excedan a la funcionalidad especificada.
Se basa en un uso “malintencionado” de la aplicación.
Se levanta un error cuando la aplicación hace lo que no debería.
¿Cómo desarrollar aplicaciones más seguras?
Testing de Seguridad
Test de Stress
Generar una carga alta de peticiones/transacciones a la aplicación
Mantener esta carga durante tiempos prolongados
Simular tráfico en ráfagas
¿Cómo desarrollar aplicaciones más seguras?
Implementación Segura
Topología de la implementación
Instalación y hardening de software de base
Proceso de implementación
Administración de implementación y mantenimiento
¿Cómo desarrollar aplicaciones más seguras?
Implementación Segura
Topología de la instalación
La topología sobre la que se instala una aplicación, tiene
implicancias directas sobre la seguridad.
Segmentación de red
DMZ’s, VLANS
Firewalls de borde
Dirección de establecimiento de conexiones
Entrantes / Salientes
Funciones separadas en hosts separados
Database server / Application server / Web Server
Esquema Back-end / Front-end
¿Cómo desarrollar aplicaciones más seguras?
Implementación Segura
Recomendaciones:
Eliminar servicios y funcionalidades innecesarias.
Eliminar usuarios innecesarios.
Eliminar objetos de ejemplo y documentación.
Cambiar contraseñas e identificadores por default.
Configurar correctamente el nivel de logueo y mensajes de error.
¿Cómo desarrollar aplicaciones más seguras?
Implementación Segura
Marcelo Stock
Julio César Ardita
Jefe de Seguridad Informática
CTO CYBSEC
jardita@cybsec.com Banco Columbia
stock.marcelo@bancocolumbia.com.ar