Está en la página 1de 12

Seguridad y optimizacin, el camino del

guerrero hacia la paz interior del GLAMP

2013

Info y herramientas usadas en mi demo de ConectaCon.

David Hernndez (Dabo) | @daboblog | www.daboblog.com


Escenario

Para la demo de Jan, us conectando va SSH, 4 servidores bajo Debian 6


GNU/Linux propios en produccin, dentro un entorno de pruebas y alcance controlado.
La siguiente informacin es vlida tambin para Ubuntu, en otras distros, parcialmente.

El objetivo era dar otro enfoque, no slo desde el punto de la seguridad, hablamos
tambin de optimizar recursos. No olvidemos que la disponibilidad es seguridad.

Se basaba en un escenario clsico. Servidor GLAMP (GNU/Linux, Apache, MySQL


y PHP) configurado por defecto (con un Kernel compilado con el parche de grsecurity).

Revisando temas relativos a cuestiones de seguridad y optimizacin, realizando


diversos ataques y ver cmo se podan mitigar, adems de monitorizarlos en el lado del
servidor viendo trazas de los mismos y logs, mientras iba haciendo cambios.

Ir insertando en el PDF enlaces a material de apoyo y varias de las herramientas que


us, junto a otras que os pueden resultar tiles en vuestro da a da con los Sistemas.

Sobre estas cuestiones, hay gran material publicado por otros (que incluyo aqu) el mo,
tomadlo como un punto de partida ms y aplicad los cambios con precaucin -;).
Sobre Apache, MySQL, Nginx, DB, Amazon EC2

SysAdmin - Amazon

Podcast "Especial SysAdmin con Ricardo Galli (UIB Mename)

(Adems del audio, os recomiendo leer el texto inferior que le acompaa)

Podcast Especial Amazon EC2 con Ricardo Galli y Ral Naveiras.

Bases de datos

Bases de datos web : estrategias, escalado, tipos, etc. Por Ricardo Galli.

Optimizar MySQL | MySQLTuner | MySQl performance | otros scripts.


Sobre Apache (recuerda...)
Nota (En el Podcast Especial SysAdmin, diapositiva anterior, hablamos a fondo de estas configuraciones).

Apache 2 y Multiproceso (MPM).Control dinmico de los procesos segn la carga bajo demanda.
Prefork (default) Procesos hijo, mod_php. En teora ms estable y compatible con ms mdulos o soft. Mayor
capacidad de aislamiento si hay un problema con una peticin respecto al resto de procesos hijo.
Worker lanza procesos hijos e hilos (hebras o subprocesos) por hijo,PHP va comofastCGI. Menor consumo
de memoria que Prefork, ms rendimiento. Si un hilo falla, afectar al resto..
TimeOutsegundos antes de que se cancele un conexin por falta de respuesta. (Entre 20 y 30 seg ok).
Keepalive(conexiones persistentes) recomendable (salvo excepciones) activo = On. Permite mltiples
peticiones sobre la misma conexin TCP. til para sesiones HTTP de larga duracin (por ej foros).
MaxKeepAliveRequestslimita el nmero de peticionespermitidas por conexin cuando KeepAlive est
activado. Por defecto 0 (ilimitadas). Se recomienda un valor alto, veris ejemplos con 100, 1.000, etc.
KeepAliveTimeout Segundos queApache esperar peticiones subsiguientes antes de cerrar una conexin
persistente. Si ya ha sidorecibida una peticin, se aplicadirectiva Timeout para cerrarla conexin.Cuanto
mayor sea el valor de timeout, ms procesos del servidor ocupados esperando en conexiones con clientes no
activos. Recomendable entre 2 y 5 segundos.
Despus veremos cmo monitorizar Apache y ms servicios, pero en mi demo tambin mostr Server
Status, desde el terminal apachectl fullstatus, o accediendo va web. Tutorial de configuracin e info.

(Recordad lo que dije de Apache 2.4. I/O asncrona, proxy inverso tipo Nginx, menos memoria, caching, etc).
Sobre Apache (Caching)
Si recordis las herramientas que instal en la demo, us tanto Memcached a nivel de Server,
como el mdulo para Apache memcache y X-Cache como sistema de caching para scripts de
PHP. Si est instalado Memcached, hay muchos CMS que pueden usarlo bien de forma nativa
(Foros SMF) o va un plugin como en el caso de WordPress (Memcached Object Cache Plugin).
Estas soluciones, estn disponibles desde los sources de Debian (o Ubuntu) y con un aptitude
install memcached php5-xcache php5-memcache quedaran instaladas. Despus podis
comprobar si estn cargados los mdulos tanto con un php info, como tecleando en la lnea de
comandos php - - ri (y detrs ira el mdulo, por ejemplo memcache o xcache).
Podis seguir este tutorial de Falko para instalar Memcached y el mdulo de Apache y este otro
(con ms opciones) de Jos Mara en el que incluye el soporte para WordPress.
De todos modos, no olvidis cambiar las configuraciones por defecto de los mdulos ya que
no son las adecuadas tal y como se instalan. Hay otras soluciones tipo APC (las repasamos en el
podcast) pero con PHP 5.5 ha llegado Opscode y a falta de probarlo, lo veo interesante.
Recordad que para ver si todo est ok cuando se carga algn mdulo en Apache, se cambia la
configuracin (o del fichero php.ini), con un tail -f /var/log/apache2/error.log, veris si es correcto,
tambin despus de ejecutar un apachectl restart o /etc/init.d/apache2 reload.

Para ver si la sintaxis de Apache est ok: apachectl configtest, las opciones de compilacin:
apachectl -V, mdulos cargados: en /etc/apache2/mods-enabled/ otros comandos de Apache.
Seguridad por Oscuridad
En la demo, hice varias pruebas con Nmap, Curl, Server Spy o xprobe2 para identificar puertos
abiertos o servicios activos en el server, detectar la versin del S.O o mdulos de Apache.
Ataques automatizados buscando versiones de software vulnerables, un posible 0 day, o
cuando no siempre se puede parchear, hacen necesario cambiar las configuraciones por defecto.
Apache > En /etc/apache2/conf.d/security: ServerTokens Prod y ServerSignature Off.
Para evitar listados de directorios, us Options Indexes, tambin se puede via .htaccess.
No olvidis cargar la nueva conf de Apache con /etc/init.d/apache2 reload o apachectl restart).
PHP > Tras el cambio, vimos que con un curl -i laweb.com | less, seguamos viendo versiones de
SSL o PHP. En /etc/php5/apache2/php.ini dejamos en Off el valor de expose_php. Como en el
caso anterior, para cargar una nueva configuracin de PHP, hay que relanzar la de Apache.
SSH > Tambin vimos como an con un firewall activo, segua saliendo la versin y S.O por el
banner de SSH. En este caso (Debian Based), la versin de SSH se oculta como una opcin de
compilacin.
Editando /etc/ssh/sshd_config e incluyendo DebianBanner no (y /etc/init.d/sshd restart para
actualizar cambios) no revela tanta informacin, slo la versin. Ms sobre seguridad en SSH.
MySQL > Recordad que para que slo admita conexiones desde el localhost, hay que insertar en
my.cnf la siguiente lnea: bind-address = 127.0.0.1 (y despus, un /etc/init.d/mysql restart).
Otros > (BIND, Postfix, etc) Os recomiendo leer esta entrada de Infosec Institute sobre el tema.
Seguridad en PHP
Dimos un repaso a las directivas ms importantes de cara a la seguridad en PHP: lmites de
memoria, errores, Suhosin Patch (a 19/06/2013 fuera de Debian 7 por un bug) funciones, etc.
Como punto de partida, recomend el uso de PhpSecInfo. Se descomprime en la raz del sitio el
fichero y se accede va web para comprobar el estado por defecto de vuestra instalacin.
Junto a cada seccin, tenis un enlace al motivo por el cual algn valor puede estar marcado
como un problemtico (segn colores, dependiendo del impacto). Resumen y explicacin.
Tambin con un ejemplo de un info.php que no deba estar activo, inclu en php.ini algunos
valores deshabilitando funciones para evitar posibles brechas de seguridad:
disable_functions = system, exec, passthru, shell, shell_exec, popen, pclose, proc_nice, proc_terminate,
proc_get_status, proc_close, pfsockopen, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid,
posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, phpinfo, proc_open, show_source, passthru

Otras lecturas recomendadas:

eBook Pro PHP Security 2 edicin (actualizado a la versin 5.3) | PHP Insecurity Notes.
25 PHP Security Best Practices | Inserting Vulnerabilities in Web Applications | PHP IDS.
Evitar ataques XSS con PHP Input Filter | Seguridad en PHP | Manual online de PHP, seguridad.
IDS / IPS - iptables
Una vez ocultadas las versiones, utilic Portsentry como IDS / IPS y vimos su funcionamiento
tanto en modo IDS (sistema de deteccin de intrusos) como IPS (prevencin / bloqueo).
Para ello, lanc un portscan con Nmap 6.25 intentando identificar puertos, servicios y S.O.
Despus de ver el resultado, ya con menos informacin que al principio, instal Portsentry
Recordad que durante la instalacin, (aptitude install portsentry) nos informaba que por defecto
acta en modo IDS y para que realice un bloqueo de la IP atacante, haba que poner en 1 en
etc/portsentry/portsentry.conf los valores BLOCK_UDP y BLOCK_TCP (por defecto en 0).
Otro valor a tener en cuenta es el SCAN_TRIGGER, en una de las pruebas que realic, Nmap
pas la barrera de Porsentry, despus baj el valor a 0 y el siguiente ataque ya fue bloqueado.
No olvidis una vez realizados los cambios ejecutar un /etc/init.d/porsentry restart. Con un lsof -i
veris cmo est a la escucha en sus correspondientes puertos tanto en modo IDS como IPS.
Es muy importante en cualquier herramienta de este tipo, usar las listas blancas para evitar
bloqueos indeseados a la propia IP del server, balanceador, failover, etc (portsentry.ignore).
Despus, levant y revis la configuracin de APF Firewall, un interface para interactuar con
iptables (tuto) de una forma ms amigable para los que empiezan, con interesantes funciones.
Realic un ataque con Nmap y vimos como APF ralentizaba y bloqueaba el escaneo de puertos
segn el timming de Nmap, consiguiendo este ltimo una escasa informacin del sistema.
Insisto en la necesidad de documentarse bien antes de poner en produccin estas medidas.
Fuerza Bruta - DoS - WAF
Para ataques SSH / fuerza bruta us Denyhosts y Fail2ban que vigila ms servicios como FTP,
mail o por ej Apache (ambos va aptitude). Mirad la documentacin y listas blancas / exclusiones.
Tambin BFD desde el cron bloqueando con APF Firewall. Otra opcin puede ser SSHGuard.
Como dije en Jan, un DoS o DDoS bien realizado, no lo vais a mitigar con estas
herramientas, pero ayudarn en muchas ocasiones a bloquear picos de trfico indeseado, o
ataques desde una o varias direcciones IP. Pero es importante volver de nuevo a la seccin de
Caching y Apache porque est todo muy relacionado hablando de peticiones masivas.

Os resultar interesante leer este post en SbD sobre Ataques DoS basados en mitigacin.

Sobre Mod Security, junto al libro de Ivan Ristic, os recomiendo leer esta gran saga de Adastra.
Recomendable tutorial de sobre Mod Security y Mod Evasive (ojo con el mail bug de Evasive).

Tambin su entrada sobre otro clsico para los DoS, Mod Evasive (en el post menciona un viejo
bug que tiene del que os habl all). Como antes, un ifconfig y detectar las IP para las exclusiones.
Instal DoS Deflate y vimos la proteccin Anti DoS de APF. Atacando desde 3 servers con
PenTBox (Net DoS Tester) y Apache Benchmark, simulando cientos de peticiones / conexiones.
Pudindose ver el incremento de trfico, logs y bloqueos con aplicaciones a bajo nivel de sistema
como iptraf (lo puse en modo Sniffer), vnstat -l, comandos de netstat y otros tiles como pueden
ser: lsof, iostat, iotop, iftop, Arpwatch, Monitorix (encontraris otros ms en el enlace) etc.
Logs - Monitorizacin
Logcheck (aptitude install logcheck), aplicacin que analiza los logs de la mquina y muestra o
enva por email un informe (por defecto cada hora) sobre sucesos relevantes del sistema.
Logwatch (aptitude install logwatch), similar a logcheck, pero proporcionando ms informacin.
Enva un informe diario por email con registros de /var/log (revisad el fichero de configuracion).
Monit, permite monitorizar procesos daemon (sendmail, Apache, MySQL, etc). La ventaja frente a
otros sistemas es que puede reaccionar a los eventos, intentando levantar el proceso cado,
avisando por email de su intervencin. Es interesante tambin el servicio M/Monit.
Munin es otra herramienta de monitorizacin con mltiples plugins que permiten hacer un
seguimiento detallado y ver de forma grfica de lo que sucede en el sistema (post de n1mh).
Monit y Munin se instalan va aptitude. Rec, gua de instalacin / configuracin en Debian 7.
GoAccess, tutorial de Israel, para analizar logs de Apache y Nginx. Rel, apachetop, Afterglow.
Nagios puede realizar el trabajo de los 4 anteriores. Es muy robusto y fiable, cuenta con mltiples
plugins, monitoriza tanto Software como Hardware, permite configurar mltiples alertas, acceso
va web a las grficas bajo SSL o por SSH, alertas SMS, clientes para mviles, tablets, etc.
Va aptitude podis instalar Nagios 3, pero os sugiero leer este completo tutorial (rama 2.x) junto
a este otro sobre la versin 3.3.1 y Debian 6.0.1. Recomendable: blog Nagios en Espaol.
Pandora FMS es otra opcin similar a Nagios, altamente configurable, muy bien documentado y
con un monitor muy potente y alertas para controlar en tiempo real lo que sucede en el server.
Rootkits Malware - Otros
En uno de los servers de la demo, sub un rootkit de los tpicos que se ven en
un WordPress o Joomla comprometidos. Lo detect con LMD. Una vez instalado, analiza todos
los ficheros buscando cadenas sospechosas y luego va el cron, lo hace de forma incremental con
cada fichero nuevo a diario (sintaxis bsica: maldet -a /path). Otra alternativa interesante es
Webserver Malware Scanner que puede trabajar perfectamente en conjuncin con LMD.
Hablando de WordPress y ataques, en esta entrada recopilo una serie de plugins y medidas a
poner en marcha nivel de Apache para mejorar su seguridad, backups, detectar malware, etc.
Tambin mostr varias aplicaciones para detectar rootkits como RKHunter + Unhide (dentro de
las opciones, hay una para que mande una alerta por email si detecta alguno) y Chkrootkit. De
todas formas, en la pgina anterior hay comandos tiles para controlar conexiones de Red.
Otra aplicacin que puse en funcionamiento es Lynis (sintaxis bsica lynis -c). Es prctica para
ver de forma rpida el estado general de la seguridad del sistema. Un ejemplo e info.
Siguiendo con Apps de este estilo, cit varias para comprobar la integridad de ficheros o binarios
tales como AIDE o Tripwire (Rkhunter tambin compara los hashes MD5 de ficheros importantes
con su firma correcta en una base de datos en lnea, aunque puede dar algn falso positivo).
Otros. Recomendable JackTheStripper por mi compaera en DebianHackers Eugenia Bahit.
Es un script para instalar, configurar y asegurar Ubuntu Server. Del gran Forat, su Project.
De INTECO CERT su gua en PDF sobre seguridad y Servers (2012). De Tecmint, esta entrada.
Y en DragonJar TV, podis ver mi demo con varios temas comentados aqu (las diapositivas).
# Disclaimer / Final
Asume tu grado de exposicin y gestinalo dije en Jan. Las soluciones comentadas aqu
ayudan, pero un servidor web es inseguro desde la base y como ms se aprende, es estando
en ambos lados. Es el punto de vista que quise compartir en mi Demo, espero que os sea til.
Muchas gracias a la organizacin, asistentes, ponentes y patrocinadores de ConectaCon, fue una
experiencia para repetir. Debajo, la foto de grupo (el resto), aprend mucho con vosotros -;)

La entrada original en mi blog, podis dejar ah vuestros comentarios. (updated 29/10/2014)

Relacionado: En PDF, DebianHackers Elementals, actualizado con alguna explicacin ms.

David Hernndez (Dabo) | @daboblog | www.daboblog.com