2. Algo sobre mí ...
Juan Matías
• Ingeniería de Sistemas
[1]
(UNI – Perú)
• Informática Administrativa (UNED – Costa Rica)
• Maestría Innovación Educativa (UNITEC – México)
• Mas de 20 años de experiencia en TIC’s
• Estudios y experiencia de campo en Ciberseguridad
• Profesor en Cenfotec desde el 2003
[1]
La ingeniería de sistemas es un modo de enfoque interdisciplinario
que permite estudiar y comprender la realidad, con el propósito de
implementar u optimizar sistemas complejos
Los ingenieros de sistemas tratan con sistemas abstractos y confían en
otras disciplinas (matemáticas y física) para diseñar y entregar los
productos tangibles que son la realización de esos sistemas.
Fuente: Wikipedia
3. 1. Introducción
Algunas frases iniciales:
• ¿Estamos seguros?,
Por ejemplo, camino a casa.
• O, sabemos ¿que es seguridad?
Policías, guardas privados, cercas, etc.
• ¿Que hacemos con nuestras vidas?
Tenemos temor de muchas cosas.
• ¿Lo aplicamos en el trabajo?
Dejamos muchas cosas al libre albedrío (a la suerte)
¿Desarrollamos aplicaciones seguras?
4. 2. ¿Qué es seguridad?
Según la Real Academia de la Lengua - RAE
[1]
:
Seguridad: Cualidad de seguro.
Seguro: Libre y exento de todo peligro, daño o riesgo.
... según estas definiciones,
seguridad informática es
“sistema informático exento de peligro”[1]
www.rae.es
¿Desarrollamos aplicaciones seguras?
5. 3. Seguridad Informática
Podríamos definir seguridad informática como:
“Un conjunto de métodos y herramientas destinados a
proteger la información y los sistemas informáticos ante
cualquier amenaza, es un proceso en el cual participan,
además, personas.”
Por lo tanto:
Es de suma importancia el concientizar a las personas
de su importancia.
¿Desarrollamos aplicaciones seguras?
6. 3. Seguridad Informática
La seguridad informática no se refiere a la seguridad de
los sistemas informáticos en si mismos, sino, a la
protección de los datos que ellos contienen.
La seguridad informática no es un bien medible, pero,
a cambio, podríamos desarrollar diversas herramientas
para cuantificar de alguna forma nuestra inseguridad
informática.
¿Desarrollamos aplicaciones seguras?
7. El Proceso de desarrollo
Actualmente la mayoría de los procesos de desarrollo no
incluyen seguridad, o bien la incluyen al final, en la etapa
de testing.
¡Seguridad vs Funcionalidad!
¿Calidad != Seguridad?
El costo de solucionar las vulnerabilidades es mayor
cuanto más tarde se detectan las mismas (igual que
los bugs).
¿Desarrollamos aplicaciones seguras?
4. Aplicaciones Seguras
8. Algunos puntos a considerar:
Poca participación y compromiso de los usuarios.
Requerimientos incompletos.
Cambio de losrequerimientos.
Falta de soporte de la dirección.
Incompetencia tecnológica.
Falta de recursos.
Expectativas engañosas.
Objetivos poco claros.
Cronogramas irreales.
Nuevas tecnologías.
¿Desarrollamos aplicaciones seguras?
5. ¿Por qué fracasan los proyectos de SW?
9. Seguridad en el ciclo de vida del desarrollo de sw
• La seguridad de la aplicación es responsabilidad del
programador.
• Nadie sabe cómo funciona, no nos van a atacar.
• No se encontraron vulnerabilidades hasta ahora.
• A nadie le interesaría atacar nuestra aplicación.
• La aplicación es segura porque corre detrás de un firewall.
• La aplicación es segura porque usa enciptamiento.
• Sólo corre como Administrator/root.
• Esa funcionalidad (insegura) viene habilitada “por defecto”,
pero el Administrador la puede deshabilitar.
• No hay tiempo para incluir seguridad.
¿Desarrollamos aplicaciones seguras?
6. Mitos y excusas
10. Seguridad Informática desde el inicio del proyecto
Incorporar seguridad a lo largo de todas las etapas
del ciclo de vida del desarrollo de software (SDLC
[1]
).
• Análisis
• Diseño
• Codificación
• Testing
• Implementación
[1]
Systems Development Life Cycle
¿Desarrollamos aplicaciones seguras?
7. Tendencia actual
11. Seguridad en el análisis de requerimientos
En esta etapa se identifican características que derivarán
en los requerimientos de seguridad del software:
• Arquitectura de la aplicación: Cliente/servidor o Desktop
• Plataforma donde correrá la aplicación: PC/Disp. Móvil.
• Tipos de datos (almacenan/transfieren): Privados/ públicos.
• Tipos de registro (log): Acceso a recursos, privilegios.
• Perfiles de usuario: Administrador, usuario básico.
• Tipos de acceso a los datos: ro, rw.
• Acciones sobre el sistema: Configuración, Inicio/parada
servicios
• Modos de autenticación: Passwords, Tokens, Biométricos.
¿Desarrollamos aplicaciones seguras?
7. Tendencia actual
12. Seguridad en el diseño
Buenas prácticas para el diseño de una aplicación segura:
• Reducción de la superficie de ataque
• Criterio del menor privilegio
• Diseño seguro de los mensajes de error
• Diseño seguro de la autenticación
• Separación de privilegios
• Interacción “amigable” con Firewalls e IDS's.
• Administración segura información “sensible”
• Diseño de Auditoría y Logging
• Análisis de riesgo
¿Desarrollamos aplicaciones seguras?
7. Tendencia actual
13. Seguridad en la codificación
Tipos de vulnerabilidades mas habituales:
• 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
• Denegación de servicio
¿Desarrollamos aplicaciones seguras?
7. Tendencia actual
14. Técnicas de testing de seguridad
Testing Funcional (clásico) aplicado a las funcionalidades
de seguridad de una aplicación:
• Requerimientos de autenticación
• Requerimientos de complejidad de contraseñas
• Bloqueo automático de cuentas
• Funcionalidad de captchas
• Restricciones de acceso.
• Mecanismos de registro y logging
• Mensajes de error especificados
¿Desarrollamos aplicaciones seguras?
7. Tendencia actual
15. Seguridad en la implementación (deployment)
Si no se implementa la aplicación de forma segura, se
arruinan los esfuerzos de las etapas anteriores:
• Hardening de software de base
• Servicios innecesarios
• Usuarios y contraseñas “por defecto”
• Configuración de intérpretes
• Proceso de implementación
• Separación de ambientes
• Administración de implementación y mantenimiento
• Versiones y “Parches”
• Firma de código
¿Desarrollamos aplicaciones seguras?
7. Tendencia actual
17. • 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 mayoría de las vulnerabilidades no se deben a errores
de codificación, sino a defectos de diseño.
• Existen buenas prácticas y técnicas específicas para
insertar seguridad en cada etapa del SDLC.
¿Desarrollamos aplicaciones seguras?
9. Conclusiones