Aplicaciones Seguras
Juan Matías Matías
aka: jUaNIX
jmatias@ucenfotec.ac.cr
San José, Costa Rica, 2017
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
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?
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?
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?
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?
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
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?
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
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
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
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
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
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
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
• ISO/IEC 21827:2008, Information technology – Security
techniques
https://www.iso.org/standard/44716.html
• Software Assurance Maturity Model
http://www.opensamm.org/
• SEI CERT Coding Standards
https://www.securecoding.cert.org/confluence/display/seccode/SEI+CERT+
Coding+Standards
• Java Coding Guidelines
https://www.securecoding.cert.org/confluence/display/java/Java+Coding+Gu
idelines
• Secure Coding Guidelines, .NET Framework
https://msdn.microsoft.com/en-us/library/d55zzx87(v=vs.90).aspx
¿Desarrollamos aplicaciones seguras?
8. ¿Dónde busco información?
• 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
¿Preguntas?
¿Desarrollamos aplicaciones seguras?

Aplicaciones seguras

  • 1.
    Aplicaciones Seguras Juan MatíasMatías aka: jUaNIX jmatias@ucenfotec.ac.cr San José, Costa Rica, 2017
  • 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 frasesiniciales: • ¿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é esseguridad? 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íamosdefinir 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 Laseguridad 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 dedesarrollo 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 aconsiderar:  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 elciclo 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 desdeel 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 elaná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 eldiseñ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 lacodificació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 testingde 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 laimplementació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
  • 16.
    • ISO/IEC 21827:2008,Information technology – Security techniques https://www.iso.org/standard/44716.html • Software Assurance Maturity Model http://www.opensamm.org/ • SEI CERT Coding Standards https://www.securecoding.cert.org/confluence/display/seccode/SEI+CERT+ Coding+Standards • Java Coding Guidelines https://www.securecoding.cert.org/confluence/display/java/Java+Coding+Gu idelines • Secure Coding Guidelines, .NET Framework https://msdn.microsoft.com/en-us/library/d55zzx87(v=vs.90).aspx ¿Desarrollamos aplicaciones seguras? 8. ¿Dónde busco información?
  • 17.
    • Integrando seguridada 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
  • 18.