Este documento discute varios factores que contribuyen a que los desarrolladores produzcan código inseguro, incluyendo factores técnicos, psicológicos y del mundo real como la presión por producir rápidamente. También recomienda formas de abordar este problema a través de la educación, herramientas y mejores prácticas de seguridad como considerar conceptos de seguridad desde el inicio del desarrollo de software.
5. Violación del principio de privilegio mínimo
●
Abuso de permisos en apps móviles
– Si tu app es para iluminar con el flash de la
cámara ¿necesitas permisos para acceder a
contactos, GPS, SMS, etc?
●
GRANT ALL PRIVILEGES ON my_db to
user;
6. Código de Debugging/Logging Abandonado
●
phpinfo.php
●
Código TRACE
abandonado
●
Builds generados en
modo Debug
●
Exceso de logging
– A veces con
información sensible
7. I want your SK now,
Mr. Anderson.
SHA1
RC4
Mala configuración SSL/TLS
8.
9. Mal uso de cifrado en Reposo
●
ENCRYPT ALL THE THINGS!!!
●
Ya, pero…
– ¿Qué tipo de encriptación vas a usar?
– ¿Qué llave de cifrado?
●
Hardcodeadas
●
Basadas en información fácil de obtener
●
Algoritmos criptográficos tejidos en casa
– “Super-encriptación”
12. Mal almacenamiento de Passwords
●
Almacenamiento de
claves usando:
– Texto plano
– Hashes MD5
– Sin sal criptográfica
●
No conocen los KDF
– PBKDF2
– BCrypt
@cadcc
13. Exceso de confianza en secretos
●
Ocultamiento de
versiones de
servidores
●
Uso de medidas
anti-ingeniería
reversa
●
¿Eso realmente hace
más segura tu
aplicación?
Easy money!
“Terminator 2”, Tristar, 1991
14. Exceso de confianza en herramientas
●
Frameworks
– Ej. Ruby on Rails, Django, NodeJS, Android SDK,
iOS SDK, etc...
– ¿Tienen documentación de seguridad?
– “No, si el framework trae seguridad integrada. Yo
no tengo que preocuparme de nada”
15. Exceso de confianza en herramientas
●
Content Management
Systems (CMS)
– Ej. Wordpress, Drupal,
Joomla…
– ¿Qué consideraciones
de seguridad hay que
tener en cuenta?
– ¿Les hacemos un
cariñito de vez en
cuando? Eduardo Bonvallet, 1955-2015
16. Exceso de confianza en herramientas
●
Paneles de Control
– Ej. CPanel,
PHPMyAdmin
– Clásicos en servicios
de hosting
– Excesiva cantidad de
privilegios
– A menudo en
entornos HTTP sin
protección
17. Exceso de confianza en herramientas
●
“Usemos este scanner de vulnerabilidades”
(muy caro, dicho sea de paso)
– ¿Saben cómo accionar las vulnerabilidades que
reporta?
– ¿Saben cómo reconocer falsos positivos?
– ¿Son seguros para escanear ambientes de
producción?
●
La seguridad es algo que hay que pensar
18. ¿Por qué los buenos
desarrolladores hacemos
código inseguro?
19. Factores Técnicos
●
“El todo es más que
la suma de sus
partes” (NOT!)
– Más que
desarrollando,
armando Legos
●
Hay fallas que surgen
espontáneamente
¿Por qué?
20. Factores psicológicos
●
Programar es una actividad difícil y
frustrante
●
Nunca debemos confiar ciegamente en el
código de otro (ahora... anda a que alguien
llegue a desconfiar del de uno)
●
Nosotros descansamos en la abstracción...
los chicos malos se fijan en los detalles
21. Factores del mundo real
●
La fuente de nuestro
código fuente
●
El desarrollo de
software es cada día
más democrático
●
La presión de
producir, producir,
producir
– Y seguridad, ¿cuándo?
22. Factores del mundo real
●
“¿Cuándo dejarán de vendernos esta
porquería?”
– “Cuando Ustedes dejen de comprarla”
●
Muchas compañías restan importancia a
incidentes
– Anda a contactar a alguna empresa por una
vulnerabilidad que les encontraste
23. Factores del mundo real
●
Cuando aprendemos
a programar,
¿vemos conceptos
de seguridad?
– ¿En cursos?
– ¿En manuales?
– ¿En documentación?
24. Requisitos Diseño Implementación Pruebas Operación
1X 1X
7X
15X
100X
IBM Systems Sciences Institute, “Implementing Software Inspections”