SlideShare una empresa de Scribd logo
@marianoit
Desarrollo seguro | Pwn3dcon
Mariano Marino
Programar en forma segura y
no morir en el intento…
Retrospectiva a +20 años de desarrollo
(no tan seguro)
@marianoit
Desarrollo seguro | Pwn3dcon
Desarrollo seguro | Pwn3dcon
www.pwnedcon.com
@marianoit
Sommelier de las mejores prácticas
de seguridad del código ajeno…
@marianoit
Desarrollo seguro | Pwn3dcon
Desarrollo seguro | Pwn3dcon
www.pwnedcon.com
@marianoit
Upgrade
@marianoit
Desarrollo seguro | Pwn3dcon
Desarrollo seguro | Pwn3dcon
www.pwnedcon.com
@marianoit
“Si anda, no lo toques”
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Microsoft
Flask
Laravel
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
JAVA
MongoDB
@marianoit
Desarrollo seguro | Pwn3dcon
TODO ES SEGURO
MIENTRAS NO SE EVALÚE
EL VECTOR DE ATAQUE…
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
¿De qué se trata la charla?
• Organismos que trabajan en seguridad
• Marcos de trabajo
• Principios de seguridad
• Vulnerabilidades comunes
• Malas prácticas
• Mitigaciones
@marianoit
Desarrollo seguro | Pwn3dcon
ORGANISMOS
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
ORGANISMOS DE SEGURIDAD
TOP 10 de vulnerabilades
Marcos de trabajo
Checklist de seguridad
CAPEC
CWE
ATT&CK
OWASP MITRE NIST
Marcos de
trabajo y
lineamientos
@marianoit
Desarrollo seguro | Pwn3dcon
PRINCIPIOS DE
SEGURIDAD
@marianoit
Desarrollo seguro | Pwn3dcon
Principios de seguridad
Privilegio mínimo y
separación de funciones
Defensa en profundidad
Confianza cero Security In The Open
@marianoit
Desarrollo seguro | Pwn3dcon
¿Cuáles son los puntos de ataque?
Acceso al
dispositivo
Acceso a
la red
Privilegios
elevados
Privilegios
limitados
Intercepción y
manipulación de
mensajes
Objetivo: comprometer sistemas y romper la
cadena de confianza sin ser detectado
@marianoit
Desarrollo seguro | Pwn3dcon
PRIVILEGIO MÍNIMO Y
SEPARACIÓN DE
FUNCIONES
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Privilegio mínimo y separación de funciones
01
Privilegios
Solo los mínimos y
necesarios para
realizar el trabajo.
02
Recursos
Dar acceso a la
menor cantidad de
recursos posibles.
03
Transacciones
Asignar diferentes tareas
a diferentes personas.
04
Controles
Permiten mantener la
integridad de los datos
de una organización.
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Que puede salir mal en esta
verificación de humano…
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
PRIVILEGIOS
Se pueden administrar de la siguiente manera:
• Role Based Access Control (RBAC)
• Attribute Based Access Control (ABAC)
• Access Control List (ACL)
• Discretionary Access Control (DAC)
• Mandatory Access Control (MAC)
• Relationship Based Access Control (ReBAC)
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
RECURSOS
Limitarlos ayuda a:
• Reducir riesgos
• Mejorar la seguridad
• Cumplir regulaciones y
estándares de seguridad
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
SEPARACIÓN
DE
FUNCIONES
Iniciador Aprueba Confirma
Transacción monetaria
Cliente Empleado Supervisor
Auditoría
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
RIESGOS
Privilegio mínimo
• Mayor superficie de ataque
• Acceso no autorizado
• Abuso de privilegios
Separación de funciones
• Posibilidad de fraude
• Manipulación de registros
• Dificultad de detectar intromisiones si todos los usuarios
tienen acceso a todos los recursos
• Fallas en responsabilidades
@marianoit
Desarrollo seguro | Pwn3dcon
DEFENSA EN
PROFUNDIDAD
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
DEFENSA EN
PROFUNDIDAD
Datos
Aplicación
Dispositivo
Red
@marianoit
Desarrollo seguro | Pwn3dcon
01
Secretos
02
Configuración
03
Binarios
04
Bitácoras
Seguridad
física
@marianoit
Desarrollo seguro | Pwn3dcon
Todo SECRETO que se almacena en
TEXTO PLANO o con un MÉTODO
REVERSIBLE, deja VULNERABLE a sus
usuarios o sistemas
• Credenciales
• Token de autenticación
• API Keys
• Contraseñas del almacén de firmas
Secretos
@marianoit
Desarrollo seguro | Pwn3dcon
• No almacenarlos en: archivos (CWE-256/260/313),
registro del sistema (CWE-314), base de datos ni
variables de entorno del SO (CWE-526).
• No utilizarlos como parámetros de ejecución (CWE-
214).
• No incrustarlos en el código fuente (CWE-
259/318/321).
• No transmitirlos en texto plano (CWE-523) ni
incluirlos en la URL. (CWE-598).
• No codificarlos dentro de un token JWT (CWE-522).
Secretos
Texto claro
@marianoit
Desarrollo seguro | Pwn3dcon
• No debe codificarlos (CWE-261/798). Ej
Base64
• Debe proteger correctamente la clave
o llave utilizada para descifrarlos
(CWE-257).
Secretos
Método
reversible
@marianoit
Desarrollo seguro | Pwn3dcon
Contraseñas:
• El hash debe ser computacionalmente
complejo, para evitar un ataque por fuerza bruta
(CWE-916).
• Debe renovarlas periódicamente (CWE-262/263)
• Deben ser robustas (CWE-1391)
Hardware:
• No transmitirlos en buses de datos sin su debida
protección anti-tamper. (CWE-1324)
SECRETOS
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-256 - Plaintext Storage of a Password
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-259 - Use of Hard-coded Password
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-526: Cleartext Storage of Sensitive
Information in an Environment Variable
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-214 Invocation of Process Using Visible
Sensitive Information
CVE-2021-32638 CodeQL Runner
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-1318 Missing Support for Security Features in On-chip
Fabrics or Buses
@marianoit
Desarrollo seguro | Pwn3dcon
• Azure KeyVault
• Apple KeyChain
• Android KeyStore
• Generación dinámica de secretos
• Separación de ambientes, regiones,
aplicaciones
Secretos
Buenas prácticas
@marianoit
Desarrollo seguro | Pwn3dcon
INFORMACIÓN CONFIDENCIAL
• Cifrar toda información confidencial (CWE-
312/538/922)
• Evitar su exposición a un autor no autorizado
(CWE-200/201/202/213)
• No debe estar presente en una cookie
(CWE-315)
@marianoit
Desarrollo seguro | Pwn3dcon
Información
confidencial
• No debe estar presente en el
código fuente.
(CWE-215/318/531/540/615)
• No debe transmitirla sin cifrar
(CWE-319). Si viaja en https/ftps, ya
está cifrada!
• Debe ser eliminada
correctamente (CWE-212)
@marianoit
Desarrollo seguro | Pwn3dcon
Configuración
del sistema
Firmar o cifrar la configuración para evitar
que se pueda manipular (CWE-15)
@marianoit
Desarrollo seguro | Pwn3dcon
Configuración
del sistema
Ubicación de bitácoras
@marianoit
Desarrollo seguro | Pwn3dcon
Configuración
del sistema
Ruta a librerías
@marianoit
Desarrollo seguro | Pwn3dcon
Firmar digitalmente todos sus activos
evita que un atacante pueda:
• Inyectar código
(CWE-94, CWE-95, CWE-470, CWE-506)
• Reemplazarlos (CWE-114),
Evitar la ejecución con privilegios
elevados (CWE-250).
Binarios
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Firma digital
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-95: Improper Neutralization of Directives in
Dynamically Evaluated Code ('Eval Injection')
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-250: Execution with Unnecessary
Privileges
@marianoit
Desarrollo seguro | Pwn3dcon
Bitácoras
• Es importante no registrar
demasiado (CWE-779 ) ni muy poco
(CWE-778)
• No establecer límites en la cantidad
de veces que sucede un evento para
registrarlo (CWE-223)
• Neutralice y codifique
correctamente la información que
escribe en bitácoras (CWE-117)
@marianoit
Desarrollo seguro | Pwn3dcon
Bitácoras
Identificación de
eventos
1. Si una acción sale mal, ¿tengo la trazabilidad
completa de lo sucedido?
2. Si se está cometiendo fraude, puedo responder
¿Quién?, ¿Cómo?, ¿Cuándo?, ¿Qué? y ¿Con qué?
3. Si están atacando el sistema o la infraestructura,
¿detecto cuál es el punto débil?
4. Si se mitigó el ataque, ¿tengo los elementos para
hacer un análisis forense detallado?
@marianoit
Desarrollo seguro | Pwn3dcon
Bitácoras
Registro de eventos
¿Cuándo?
○ Fecha y hora de registro en formato internacional.
○ Fecha y hora del evento.
¿Dónde?
○ El identificador del servidor, de la aplicación y su versión.
○ El controlador y la acción que se ejecutó.
○ La geolocalización del dispositivo.
¿Quién?
○ Si proviene de un usuario o de un proceso automático ejecutado.
○ Hash que identifica la sesión de usuario.
○ Dirección IP del dispositivo.
¿Qué?
○ El tipo de evento.
○ Uno o más agrupadores.
○ La gravedad: fatal, error, warning, info, debug, trace.
○ Indicador de evento relevante para la seguridad.
○ Descripción.
○ Resultado de la acción: Éxito, Fallo, Diferido.
@marianoit
Desarrollo seguro | Pwn3dcon
CWE-117: Improper Output Neutralization for Logs
final static Logger logger = Logger.getLogger(UserDetailsService.class);
...
logger.info("Authenticating " + username);
…
@marianoit
Desarrollo seguro | Pwn3dcon
Configuración
del sistema
Log4Net
Bitácoras sin
neutralizar
Log4Shell
@marianoit
Desarrollo seguro | Pwn3dcon
Desarrollo seguro | Pwn3dcon
www.pwnedcon.com
@marianoit
Seguridad de la red
Protegiendo los datos en tránsito
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Conexión segura
• Utilice siempre una conexión cifrada y con un certificado
validado (CWE-295, CWE-296, CWE-297, CWE-298, CWE-
299)
• No permita que se utilicen protocolos de seguridad
obsoletos, como TLSv1.0, v1.1 y SSL3.0 (CWE-757)
• Configure de manera segura las políticas de CORS
(CWE-942)
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
Encabezados
• Strict-Transport-Security (HSTS): esta opción indica a los navegadores que deben utilizar únicamente
conexiones seguras (HTTS). Su configuración protege a su sitio de ataques contra la degradación de protocolos y
el secuestro de cookies.
• X-Frame-Options: Indica al navegador que nunca debe mostrar el contenido dentro de un frame. Protege al
usuario contra ataques del tipo clickjacking.
• X-Content-Type-Options: Indica al navegador que interprete los archivos según el tipo indicado en Content-
Type.
• Content-Security-Policy (CSP): Indica al navegador cuáles serán los orígenes de confianza para cargar los
diferentes recursos de una página web. Ayuda a detectar y mitigar ciertos ataques como Cross-Site Scripting e
inyección entre sitios.
• X-Permitted-Cross-Domain-Policies: Habilita a un cliente web a intercambiar datos entre dominios
• Referrer-Policy: Modifica la política de tratamiento del encabezado Referer
• Clear-Site-Data: Indica al navegador qué información debe eliminar al finalizar la navegación en el sitio.
• Cross-Origin-Embedder-Policy: Evita que se inserten recursos de origen cruzado en el documento
• Cross-Origin-Opener-Policy: Controla cómo se pueden abrir o acceder a recursos, entre diferentes orígenes o
dominios.
• Cross-Origin-Resource-Policy: Controla el acceso a recursos entre diferentes orígenes o dominios. Ayuda a
prevenir ataques de tipo CSRF.
• Cache-Control: Establece cómo y por cuánto tiempo se deben almacenar en caché los recursos descargados.
• Permissions Policy: Establece la política de acceso a las API y funciones del navegador que están disponibles
para una página web. Esto permite limitar el uso de, por ejemplo, la cámara web o el micrófono.
@marianoit
Desarrollo seguro | Pwn3dcon
Desarrollo seguro | Pwn3dcon
www.pwnedcon.com
@marianoit
Seguridad de la aplicación
@marianoit
Desarrollo seguro | Pwn3dcon
Base de
datos
• En bases de datos estructuradas,
utilice consultas parametrizadas o
procedimientos almacenados.
(CWE-89, CWE-564)
@marianoit
Desarrollo seguro | Pwn3dcon
@marianoit
CWE-89: Improper Neutralization of Special Elements used in an SQL
Command ('SQL Injection')
@marianoit
Desarrollo seguro | Pwn3dcon
Archivos
• Verifique que la ruta del archivo a
utilizar se encuentre dentro de
una esperada (CWE-23, CWE-36)
• Valide que no se incluyan
caracteres especiales en el
nombre (CWE-22) ni en su
contenido (CWE-167, CWE-238)
• Verifique la firma del archivo en
vez de su extensión (CWE-646)
• Firme archivos transaccionales
para evitar que sean modificados
@marianoit
Desarrollo seguro | Pwn3dcon
Llamadas al
sistema
operativo
• Neutralice los caracteres
especiales utilizados para separar
comandos del sistema operativo
(CWE-77, CWE-78) y de los
argumentos de ejecución (CWE-
88)
@marianoit
Desarrollo seguro | Pwn3dcon
Entradas y
salidas
• Valide la información al inicio de
una función (CWE-457).
• Toda validación va del lado del
servidor (CWE-602).
• Verifique que la salida generada por
una función sea la esperada por el
código que la invoca (CWE-252).
• Sanee toda información recibida de
recursos externos, para asegurarse
de que un atacante no la haya
manipulado
@marianoit
Desarrollo seguro | Pwn3dcon
Neutralización
de valores
Al manipular información, asegúrese de neutralizar los siguientes valores (CWE-76):
• El caracter Null (CWE-158, CWE-170)
• Los elementos especiales que forman parte de un lenguaje de marcado como XML
(CWE-643), HTML (CWE-79, CWE-80) o JSON.
• Los caracteres utilizados para delimitar valores (CWE-140, CWE-142, CWE-143, CWE-
146), secuencias de control o escape (CWE-150), saltos de línea (CWE-93, CWE-113,
CWE-144) o como comodines (CWE-155).
• Los elementos del lenguaje dinámico que pueden ser manipulados para cambiar el
normal funcionamiento del sistema (CWE-81, CWE-82, CWE-83, CWE-616)
• Los valores numéricos que son utilizados en índices (CWE-1285), cantidades
razonables (1284) o en expresiones matemáticas que puedan irse del rango admitido
para el tipo de dato destino (CWE-190, CWE-191).
@marianoit
Desarrollo seguro | Pwn3dcon
Seguro por
defecto
• Todos los controllers deben requerir
autenticación, salvo que lo indiques
en forma explícita.
• Aplique filtrado a la base de datos de
manera global y dependiente del
usuario autenticado para evitar
exponer información sensible.
• Nunca confíe en los datos recibidos
ni en sus propias fuentes de
información, valide y sanee todo.
@marianoit
Desarrollo seguro | Pwn3dcon
Conclusión
• No confíen en la información que
vean en la web.
• Cada vez que vean un ejemplo,
analicen el “qué pasaría si…”.
• Es mejor aprender a desarrollar
seguro desde junior y no de senior.
• Las buenas prácticas no son difíciles
de incorporar, pero ninguna web de
referencia lo hace.
• Revisen todo el código que entrega
la IA.
@marianoit
Desarrollo seguro | Pwn3dcon
¡Muchas gracias!
marianomarino
marianoit

Más contenido relacionado

PPT
Incorporando la Seguridad de la Información en el Desarrollo de Aplicaciones
PDF
All your appliances are belong to us
PDF
All your appliances are belong to us
PDF
Semana de la I+D - Proyecto OPOSSUM
PPTX
10 Principales Controles Proactivos de OWASP
PDF
Tu DevOp me da trabajo: Soy auditor de seguridad
PPSX
CodeCamp 2010 | Diez formas de escribir código (in)seguro
PPTX
Conceptos fundamentales sobre Hardening en Ciberseguridad
Incorporando la Seguridad de la Información en el Desarrollo de Aplicaciones
All your appliances are belong to us
All your appliances are belong to us
Semana de la I+D - Proyecto OPOSSUM
10 Principales Controles Proactivos de OWASP
Tu DevOp me da trabajo: Soy auditor de seguridad
CodeCamp 2010 | Diez formas de escribir código (in)seguro
Conceptos fundamentales sobre Hardening en Ciberseguridad

Similar a PwnedCon - Programación segura [Mariano Marino] (20)

PDF
Seguridad en los videojuegos - GoD Mode
PDF
Seguridad en Aplicaciones Web y Comercio Electrónico
PDF
Seguridad para todos
PDF
Presentación Seguridad IoT en Sanidad
PDF
Presentación Seguridad IoT en Sanidad
PDF
Los ciberriesgos y su transferencia al sector asegurador
PDF
Welcome to Gotham - Nuevas formas ingeniosas y terroríficas de ciberataques
PDF
Paúl Santapau - Actualizando DevOps a SecDevOps [rooted2017]
PDF
OWASP Top 10 2017
PDF
Optimización de los resultados de negocios
PPT
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
PPT
Asegurando un servidor en Internet con una DMZ
PDF
7º Webinar EXIN en Castellano : Recomendaciones para la correcta gestión de l...
PDF
La guerra cibernética y cómo puede afectar a las operaciones industriales en ...
 
PDF
presentacionForodeSeguridadSectorTelcosJahir.pdf
PDF
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
PPS
Seguridad en Aplicaciones Web
PDF
Seguridad en redes
PDF
Evolution Zero Trust Ciberseguridad de Microsoft Arquitecturas de referencia.pdf
PPTX
Ciberseguridad y Seguridad Informática.pptx
Seguridad en los videojuegos - GoD Mode
Seguridad en Aplicaciones Web y Comercio Electrónico
Seguridad para todos
Presentación Seguridad IoT en Sanidad
Presentación Seguridad IoT en Sanidad
Los ciberriesgos y su transferencia al sector asegurador
Welcome to Gotham - Nuevas formas ingeniosas y terroríficas de ciberataques
Paúl Santapau - Actualizando DevOps a SecDevOps [rooted2017]
OWASP Top 10 2017
Optimización de los resultados de negocios
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
Asegurando un servidor en Internet con una DMZ
7º Webinar EXIN en Castellano : Recomendaciones para la correcta gestión de l...
La guerra cibernética y cómo puede afectar a las operaciones industriales en ...
 
presentacionForodeSeguridadSectorTelcosJahir.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Seguridad en Aplicaciones Web
Seguridad en redes
Evolution Zero Trust Ciberseguridad de Microsoft Arquitecturas de referencia.pdf
Ciberseguridad y Seguridad Informática.pptx
Publicidad

Más de Websec México (20)

PDF
PwnedCon - RaceConditions [Mariano Marino]
PDF
PwnedCon - Taller: FlipperZero 101 [Mariano Marino]
PPTX
Ciberseguridad durante la pandemia [Paulino Calderon]
PPTX
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
PDF
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
PPTX
Derrotando a changos con scanners [Paulino Calderon]
PPTX
Old fox new tricks malicious macros are back
PDF
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
PDF
Mi experiencia en el programa Google Summer of Code
PDF
Escribiendo firmas para el sistema de detección de versiones de Nmap
PDF
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
PPTX
Pwning corporate networks in a single day by Paulino Calderon Pale
PPTX
CPMX7 Pwneando redes informáticas por Paulino Calderon
PPTX
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
PPTX
Explotación práctica de señales de radio por Luis Colunga
PDF
Pentesting 101 por Paulino Calderon
PDF
Obtener contraseñas del directorio activo por hkm
PDF
OSINT vs CIBERCRIMEN por nickops
PPTX
Recuperacion de defaces con versionador Git por Alevsk
PDF
Seguridad en Bitcoin por Luis Daniel Beltran
PwnedCon - RaceConditions [Mariano Marino]
PwnedCon - Taller: FlipperZero 101 [Mariano Marino]
Ciberseguridad durante la pandemia [Paulino Calderon]
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Derrotando a changos con scanners [Paulino Calderon]
Old fox new tricks malicious macros are back
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Mi experiencia en el programa Google Summer of Code
Escribiendo firmas para el sistema de detección de versiones de Nmap
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
Pwning corporate networks in a single day by Paulino Calderon Pale
CPMX7 Pwneando redes informáticas por Paulino Calderon
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
Explotación práctica de señales de radio por Luis Colunga
Pentesting 101 por Paulino Calderon
Obtener contraseñas del directorio activo por hkm
OSINT vs CIBERCRIMEN por nickops
Recuperacion de defaces con versionador Git por Alevsk
Seguridad en Bitcoin por Luis Daniel Beltran
Publicidad

Último (6)

PPTX
sistemas de informacion.................
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
Conceptos basicos de Base de Datos y sus propiedades
sistemas de informacion.................
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Derechos_de_Autor_y_Creative_Commons.pptx
Su punto de partida en la IA: Microsoft 365 Copilot Chat
AutoCAD Herramientas para el futuro, Juan Fandiño
Conceptos basicos de Base de Datos y sus propiedades

PwnedCon - Programación segura [Mariano Marino]

  • 1. @marianoit Desarrollo seguro | Pwn3dcon Mariano Marino Programar en forma segura y no morir en el intento… Retrospectiva a +20 años de desarrollo (no tan seguro)
  • 2. @marianoit Desarrollo seguro | Pwn3dcon Desarrollo seguro | Pwn3dcon www.pwnedcon.com @marianoit Sommelier de las mejores prácticas de seguridad del código ajeno…
  • 3. @marianoit Desarrollo seguro | Pwn3dcon Desarrollo seguro | Pwn3dcon www.pwnedcon.com @marianoit Upgrade
  • 4. @marianoit Desarrollo seguro | Pwn3dcon Desarrollo seguro | Pwn3dcon www.pwnedcon.com @marianoit “Si anda, no lo toques”
  • 5. @marianoit Desarrollo seguro | Pwn3dcon @marianoit Microsoft Flask Laravel
  • 6. @marianoit Desarrollo seguro | Pwn3dcon @marianoit JAVA MongoDB
  • 7. @marianoit Desarrollo seguro | Pwn3dcon TODO ES SEGURO MIENTRAS NO SE EVALÚE EL VECTOR DE ATAQUE…
  • 8. @marianoit Desarrollo seguro | Pwn3dcon @marianoit ¿De qué se trata la charla? • Organismos que trabajan en seguridad • Marcos de trabajo • Principios de seguridad • Vulnerabilidades comunes • Malas prácticas • Mitigaciones
  • 9. @marianoit Desarrollo seguro | Pwn3dcon ORGANISMOS
  • 10. @marianoit Desarrollo seguro | Pwn3dcon @marianoit ORGANISMOS DE SEGURIDAD TOP 10 de vulnerabilades Marcos de trabajo Checklist de seguridad CAPEC CWE ATT&CK OWASP MITRE NIST Marcos de trabajo y lineamientos
  • 11. @marianoit Desarrollo seguro | Pwn3dcon PRINCIPIOS DE SEGURIDAD
  • 12. @marianoit Desarrollo seguro | Pwn3dcon Principios de seguridad Privilegio mínimo y separación de funciones Defensa en profundidad Confianza cero Security In The Open
  • 13. @marianoit Desarrollo seguro | Pwn3dcon ¿Cuáles son los puntos de ataque? Acceso al dispositivo Acceso a la red Privilegios elevados Privilegios limitados Intercepción y manipulación de mensajes Objetivo: comprometer sistemas y romper la cadena de confianza sin ser detectado
  • 14. @marianoit Desarrollo seguro | Pwn3dcon PRIVILEGIO MÍNIMO Y SEPARACIÓN DE FUNCIONES
  • 15. @marianoit Desarrollo seguro | Pwn3dcon @marianoit Privilegio mínimo y separación de funciones 01 Privilegios Solo los mínimos y necesarios para realizar el trabajo. 02 Recursos Dar acceso a la menor cantidad de recursos posibles. 03 Transacciones Asignar diferentes tareas a diferentes personas. 04 Controles Permiten mantener la integridad de los datos de una organización.
  • 16. @marianoit Desarrollo seguro | Pwn3dcon @marianoit Que puede salir mal en esta verificación de humano…
  • 17. @marianoit Desarrollo seguro | Pwn3dcon @marianoit PRIVILEGIOS Se pueden administrar de la siguiente manera: • Role Based Access Control (RBAC) • Attribute Based Access Control (ABAC) • Access Control List (ACL) • Discretionary Access Control (DAC) • Mandatory Access Control (MAC) • Relationship Based Access Control (ReBAC)
  • 19. @marianoit Desarrollo seguro | Pwn3dcon @marianoit RECURSOS Limitarlos ayuda a: • Reducir riesgos • Mejorar la seguridad • Cumplir regulaciones y estándares de seguridad
  • 20. @marianoit Desarrollo seguro | Pwn3dcon @marianoit SEPARACIÓN DE FUNCIONES Iniciador Aprueba Confirma Transacción monetaria Cliente Empleado Supervisor Auditoría
  • 21. @marianoit Desarrollo seguro | Pwn3dcon @marianoit RIESGOS Privilegio mínimo • Mayor superficie de ataque • Acceso no autorizado • Abuso de privilegios Separación de funciones • Posibilidad de fraude • Manipulación de registros • Dificultad de detectar intromisiones si todos los usuarios tienen acceso a todos los recursos • Fallas en responsabilidades
  • 22. @marianoit Desarrollo seguro | Pwn3dcon DEFENSA EN PROFUNDIDAD
  • 23. @marianoit Desarrollo seguro | Pwn3dcon @marianoit DEFENSA EN PROFUNDIDAD Datos Aplicación Dispositivo Red
  • 24. @marianoit Desarrollo seguro | Pwn3dcon 01 Secretos 02 Configuración 03 Binarios 04 Bitácoras Seguridad física
  • 25. @marianoit Desarrollo seguro | Pwn3dcon Todo SECRETO que se almacena en TEXTO PLANO o con un MÉTODO REVERSIBLE, deja VULNERABLE a sus usuarios o sistemas • Credenciales • Token de autenticación • API Keys • Contraseñas del almacén de firmas Secretos
  • 26. @marianoit Desarrollo seguro | Pwn3dcon • No almacenarlos en: archivos (CWE-256/260/313), registro del sistema (CWE-314), base de datos ni variables de entorno del SO (CWE-526). • No utilizarlos como parámetros de ejecución (CWE- 214). • No incrustarlos en el código fuente (CWE- 259/318/321). • No transmitirlos en texto plano (CWE-523) ni incluirlos en la URL. (CWE-598). • No codificarlos dentro de un token JWT (CWE-522). Secretos Texto claro
  • 27. @marianoit Desarrollo seguro | Pwn3dcon • No debe codificarlos (CWE-261/798). Ej Base64 • Debe proteger correctamente la clave o llave utilizada para descifrarlos (CWE-257). Secretos Método reversible
  • 28. @marianoit Desarrollo seguro | Pwn3dcon Contraseñas: • El hash debe ser computacionalmente complejo, para evitar un ataque por fuerza bruta (CWE-916). • Debe renovarlas periódicamente (CWE-262/263) • Deben ser robustas (CWE-1391) Hardware: • No transmitirlos en buses de datos sin su debida protección anti-tamper. (CWE-1324) SECRETOS
  • 29. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-256 - Plaintext Storage of a Password
  • 30. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-259 - Use of Hard-coded Password
  • 31. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-526: Cleartext Storage of Sensitive Information in an Environment Variable
  • 32. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-214 Invocation of Process Using Visible Sensitive Information CVE-2021-32638 CodeQL Runner
  • 33. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-1318 Missing Support for Security Features in On-chip Fabrics or Buses
  • 34. @marianoit Desarrollo seguro | Pwn3dcon • Azure KeyVault • Apple KeyChain • Android KeyStore • Generación dinámica de secretos • Separación de ambientes, regiones, aplicaciones Secretos Buenas prácticas
  • 35. @marianoit Desarrollo seguro | Pwn3dcon INFORMACIÓN CONFIDENCIAL • Cifrar toda información confidencial (CWE- 312/538/922) • Evitar su exposición a un autor no autorizado (CWE-200/201/202/213) • No debe estar presente en una cookie (CWE-315)
  • 36. @marianoit Desarrollo seguro | Pwn3dcon Información confidencial • No debe estar presente en el código fuente. (CWE-215/318/531/540/615) • No debe transmitirla sin cifrar (CWE-319). Si viaja en https/ftps, ya está cifrada! • Debe ser eliminada correctamente (CWE-212)
  • 37. @marianoit Desarrollo seguro | Pwn3dcon Configuración del sistema Firmar o cifrar la configuración para evitar que se pueda manipular (CWE-15)
  • 38. @marianoit Desarrollo seguro | Pwn3dcon Configuración del sistema Ubicación de bitácoras
  • 39. @marianoit Desarrollo seguro | Pwn3dcon Configuración del sistema Ruta a librerías
  • 40. @marianoit Desarrollo seguro | Pwn3dcon Firmar digitalmente todos sus activos evita que un atacante pueda: • Inyectar código (CWE-94, CWE-95, CWE-470, CWE-506) • Reemplazarlos (CWE-114), Evitar la ejecución con privilegios elevados (CWE-250). Binarios
  • 41. @marianoit Desarrollo seguro | Pwn3dcon @marianoit Firma digital
  • 42. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')
  • 43. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-250: Execution with Unnecessary Privileges
  • 44. @marianoit Desarrollo seguro | Pwn3dcon Bitácoras • Es importante no registrar demasiado (CWE-779 ) ni muy poco (CWE-778) • No establecer límites en la cantidad de veces que sucede un evento para registrarlo (CWE-223) • Neutralice y codifique correctamente la información que escribe en bitácoras (CWE-117)
  • 45. @marianoit Desarrollo seguro | Pwn3dcon Bitácoras Identificación de eventos 1. Si una acción sale mal, ¿tengo la trazabilidad completa de lo sucedido? 2. Si se está cometiendo fraude, puedo responder ¿Quién?, ¿Cómo?, ¿Cuándo?, ¿Qué? y ¿Con qué? 3. Si están atacando el sistema o la infraestructura, ¿detecto cuál es el punto débil? 4. Si se mitigó el ataque, ¿tengo los elementos para hacer un análisis forense detallado?
  • 46. @marianoit Desarrollo seguro | Pwn3dcon Bitácoras Registro de eventos ¿Cuándo? ○ Fecha y hora de registro en formato internacional. ○ Fecha y hora del evento. ¿Dónde? ○ El identificador del servidor, de la aplicación y su versión. ○ El controlador y la acción que se ejecutó. ○ La geolocalización del dispositivo. ¿Quién? ○ Si proviene de un usuario o de un proceso automático ejecutado. ○ Hash que identifica la sesión de usuario. ○ Dirección IP del dispositivo. ¿Qué? ○ El tipo de evento. ○ Uno o más agrupadores. ○ La gravedad: fatal, error, warning, info, debug, trace. ○ Indicador de evento relevante para la seguridad. ○ Descripción. ○ Resultado de la acción: Éxito, Fallo, Diferido.
  • 47. @marianoit Desarrollo seguro | Pwn3dcon CWE-117: Improper Output Neutralization for Logs final static Logger logger = Logger.getLogger(UserDetailsService.class); ... logger.info("Authenticating " + username); …
  • 48. @marianoit Desarrollo seguro | Pwn3dcon Configuración del sistema Log4Net Bitácoras sin neutralizar Log4Shell
  • 49. @marianoit Desarrollo seguro | Pwn3dcon Desarrollo seguro | Pwn3dcon www.pwnedcon.com @marianoit Seguridad de la red Protegiendo los datos en tránsito
  • 50. @marianoit Desarrollo seguro | Pwn3dcon @marianoit Conexión segura • Utilice siempre una conexión cifrada y con un certificado validado (CWE-295, CWE-296, CWE-297, CWE-298, CWE- 299) • No permita que se utilicen protocolos de seguridad obsoletos, como TLSv1.0, v1.1 y SSL3.0 (CWE-757) • Configure de manera segura las políticas de CORS (CWE-942)
  • 51. @marianoit Desarrollo seguro | Pwn3dcon @marianoit Encabezados • Strict-Transport-Security (HSTS): esta opción indica a los navegadores que deben utilizar únicamente conexiones seguras (HTTS). Su configuración protege a su sitio de ataques contra la degradación de protocolos y el secuestro de cookies. • X-Frame-Options: Indica al navegador que nunca debe mostrar el contenido dentro de un frame. Protege al usuario contra ataques del tipo clickjacking. • X-Content-Type-Options: Indica al navegador que interprete los archivos según el tipo indicado en Content- Type. • Content-Security-Policy (CSP): Indica al navegador cuáles serán los orígenes de confianza para cargar los diferentes recursos de una página web. Ayuda a detectar y mitigar ciertos ataques como Cross-Site Scripting e inyección entre sitios. • X-Permitted-Cross-Domain-Policies: Habilita a un cliente web a intercambiar datos entre dominios • Referrer-Policy: Modifica la política de tratamiento del encabezado Referer • Clear-Site-Data: Indica al navegador qué información debe eliminar al finalizar la navegación en el sitio. • Cross-Origin-Embedder-Policy: Evita que se inserten recursos de origen cruzado en el documento • Cross-Origin-Opener-Policy: Controla cómo se pueden abrir o acceder a recursos, entre diferentes orígenes o dominios. • Cross-Origin-Resource-Policy: Controla el acceso a recursos entre diferentes orígenes o dominios. Ayuda a prevenir ataques de tipo CSRF. • Cache-Control: Establece cómo y por cuánto tiempo se deben almacenar en caché los recursos descargados. • Permissions Policy: Establece la política de acceso a las API y funciones del navegador que están disponibles para una página web. Esto permite limitar el uso de, por ejemplo, la cámara web o el micrófono.
  • 52. @marianoit Desarrollo seguro | Pwn3dcon Desarrollo seguro | Pwn3dcon www.pwnedcon.com @marianoit Seguridad de la aplicación
  • 53. @marianoit Desarrollo seguro | Pwn3dcon Base de datos • En bases de datos estructuradas, utilice consultas parametrizadas o procedimientos almacenados. (CWE-89, CWE-564)
  • 54. @marianoit Desarrollo seguro | Pwn3dcon @marianoit CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
  • 55. @marianoit Desarrollo seguro | Pwn3dcon Archivos • Verifique que la ruta del archivo a utilizar se encuentre dentro de una esperada (CWE-23, CWE-36) • Valide que no se incluyan caracteres especiales en el nombre (CWE-22) ni en su contenido (CWE-167, CWE-238) • Verifique la firma del archivo en vez de su extensión (CWE-646) • Firme archivos transaccionales para evitar que sean modificados
  • 56. @marianoit Desarrollo seguro | Pwn3dcon Llamadas al sistema operativo • Neutralice los caracteres especiales utilizados para separar comandos del sistema operativo (CWE-77, CWE-78) y de los argumentos de ejecución (CWE- 88)
  • 57. @marianoit Desarrollo seguro | Pwn3dcon Entradas y salidas • Valide la información al inicio de una función (CWE-457). • Toda validación va del lado del servidor (CWE-602). • Verifique que la salida generada por una función sea la esperada por el código que la invoca (CWE-252). • Sanee toda información recibida de recursos externos, para asegurarse de que un atacante no la haya manipulado
  • 58. @marianoit Desarrollo seguro | Pwn3dcon Neutralización de valores Al manipular información, asegúrese de neutralizar los siguientes valores (CWE-76): • El caracter Null (CWE-158, CWE-170) • Los elementos especiales que forman parte de un lenguaje de marcado como XML (CWE-643), HTML (CWE-79, CWE-80) o JSON. • Los caracteres utilizados para delimitar valores (CWE-140, CWE-142, CWE-143, CWE- 146), secuencias de control o escape (CWE-150), saltos de línea (CWE-93, CWE-113, CWE-144) o como comodines (CWE-155). • Los elementos del lenguaje dinámico que pueden ser manipulados para cambiar el normal funcionamiento del sistema (CWE-81, CWE-82, CWE-83, CWE-616) • Los valores numéricos que son utilizados en índices (CWE-1285), cantidades razonables (1284) o en expresiones matemáticas que puedan irse del rango admitido para el tipo de dato destino (CWE-190, CWE-191).
  • 59. @marianoit Desarrollo seguro | Pwn3dcon Seguro por defecto • Todos los controllers deben requerir autenticación, salvo que lo indiques en forma explícita. • Aplique filtrado a la base de datos de manera global y dependiente del usuario autenticado para evitar exponer información sensible. • Nunca confíe en los datos recibidos ni en sus propias fuentes de información, valide y sanee todo.
  • 60. @marianoit Desarrollo seguro | Pwn3dcon Conclusión • No confíen en la información que vean en la web. • Cada vez que vean un ejemplo, analicen el “qué pasaría si…”. • Es mejor aprender a desarrollar seguro desde junior y no de senior. • Las buenas prácticas no son difíciles de incorporar, pero ninguna web de referencia lo hace. • Revisen todo el código que entrega la IA.
  • 61. @marianoit Desarrollo seguro | Pwn3dcon ¡Muchas gracias! marianomarino marianoit