Desarrollo Seguro en Drupal - DrupalCamp Spain 2013
1. Desarrollo seguro en Drupal
Ezequiel V´zquez De la calle
a
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
2. Sobre mi
Estudios
Ingeniero T´cnico en Inform´tica - UCA
e
a
M´ster en Ingenier´ del Software - US
a
ıa
Experto en Seguridad de las TIC - US
Experiencia
3+ a˜os como desarrollador web, casi 2 en Drupal
n
Actualmente: DevOps Drupal
Python, C++, GNU/Linux, network programming. . .
Aficiones
Rock’n’Roll (guitarra) y videojuegos
Narrativa fant´stica, rol, cine. . .
a
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
5. Seguridad
¿Y esto de qu´ va?
e
Seguridad web
Exposici´n a internet
o
Vulnerabilidades
Explotaci´n
o
¿Hackers?
...
Dinero
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
6. Seguridad
Pilares de la seguridad
Confidencialidad
Integridad
Disponibilidad
Autenticaci´n
o
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
7. Seguridad
Principios b´sicos
a
M´
ınimo privilegio
Eslab´n m´s d´bil
o
a e
Proporcionalidad
Participaci´n universal
o
Integraci´n con ciclo de
o
vida completo
Seguridad en profundidad
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
12. Servidor
Apache
Ocultar versi´n: ServerSignature Off
o
P´ginas de error personalizadas
a
Limitar m´todos HTTP (s´lo GET, POST y HEAD)
e
o
SSL: Forzar conexi´n cifrada, si est´ disponible
o
a
Ajustar timeout, tama˜o de peticiones, m´ximo de clientes
n
a
simult´neos. . .
a
Permisos sobre directorios (Allow/Deny, -Indexes, -Multiviews)
Mod security, mod chroot
¡Monitorizar los logs!
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
13. Servidor
PHP
Actualizar → 5.2 ¡deprecated!
Limitar funciones: phpinfo, eval,
exec, shell exec, system. . .
Hijacking : asociar IP y sesi´n
o
HTTP Only cookies
Evitar fugas: expose php=Off
Desactivar ejecuci´n remota
o
Desactivar “magic quotes” (5.2)
Controlar tama˜o de POST
n
Controlar uso de recursos
Proteger configuraci´n contra
o
escritura
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
14. Servidor
MySQL
Limitar usuario a una base de datos
root con contrase˜a segura, no conectar remotamente
n
No permitir acceso an´nimo
o
Emplear la mysql secure installation
skip-networking o bind=localhost
Ejecutar MySQL enjaulado con chroot
Activar el registro de logs (¡y revisarlos!)
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
17. Cross Site Scripting
¿Qu´ es?
e
Ejecuci´n de c´digo Javascript
o
o
Reflejado o almacenado
Ataca al cliente: robo de cookies, descarga de malware. . .
¡La m´s com´n en Drupal!
a
u
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
18. Cross Site Scripting
En Drupal. . .
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
21. SQL Injection
¿Qu´ es?
e
Modificaci´n de consultas a base de datos
o
B´sico, blind o time based
a
Ataca al servidor: extrae informaci´n, o la modifica
o
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
23. Cross Site Request Forgery
¿Qu´ es?
e
Hacer que usuario pida URL sin que lo sepa
Petici´n a un formulario con par´metros GET
o
a
Eliminar nodos, cambiar contrase˜a. . .
n
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
24. Cross Site Request Forgery
En Drupal. . .
Utilizar siempre la Forms API
drupal valid token para env´ GET
ıos
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
25. Hijacking de sesi´n
o
¿Qu´ es?
e
Robo de cookies para suplantar a un usuario identificado
Drupal se encarga de la gesti´n de la sesi´n
o
o
Mejor pr´ctica: utilizar SSL en todo el portal
a
Certificado v´lido, m´dulo securepages
a
o
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
26. Bypass de autorizaci´n
o
¿Qu´ es?
e
Usuario accede a URLs o
secciones no permitidas
En Drupal. . .
Controlado mediante el
sistema de men´, roles y
u
permisos
Mejor pr´ctica:
a
M´
ınimo privilegio posible
Granularizar permisos tanto
como sea necesario
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
27. Referencias inseguras
¿Qu´ es?
e
Acceder a contenido para el cual no se tiene permiso
Permisos definidos, pero ¿se comprueban?
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
28. Referencias inseguras
Prevenci´n
o
Comprobar permisos: user access
Comprobar acceso a contenido: node access
En consultas SQL: $select→addtag(’node access’);
Utilizar la Forms API
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
29. Securizar la configuraci´n
o
Instalaci´n segura
o
M´dulo paranoia
o
M´dulo security review
o
M´dulo update
o
M´dulo password policy
o
Limitar duraci´n de sesi´n
o
o
Permisos “administer . . . ”
¡Ojo con los filtros de entrada!
Desactivar y eliminar m´dulo php
o
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
31. En resumen. . .
Defensa en todas las capas
Buenas pr´cticas
a
Mucha documentaci´n, ¡no hay excusa!
o
Siempre habr´ fallos de seguridad
a
Buscar la proporcionalidad
La importancia de la formaci´n
o
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
32. En resumen. . .
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
34. Referencias
Linux Administrator’s Security Guide
http://www.seifried.org/lasg
Apache Security Tips
http://httpd.apache.org/docs/current/misc/security tips.html
PHP security manual
http://php.net/manual/en/security.php
Cracking Drupal
http://www.crackingdrupal.com
Writing secure code
https://drupal.org/writing-secure-code
Securing your site
https://drupal.org/security/secure-configuration
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal
35. Esto es todo, amigos...
¡Gracias!
¿Preguntas?
@RabbitLair
ezequielvazq[at]gmail[dot]com
Ezequiel V´zquez De la calle
a
Desarrollo seguro en Drupal