Seguridad en Apache VIII: Monitorización

En la última entrega de esta serie se describen las opciones de configuración de log y las principales herramientas de monitorización de Apache.

Todo sistema de información, sobre todo aquellos expuestos como los servidores web, necesitan ser monitorizados para detectar errores, ataques o cargas de trabajo excesivas.

Se pueden supervisar varios aspectos de los servidores web. Una manera de clasificarlos es la siguiente:

•Caídas y errores del servidor web.
•Consumo de recursos.
•Ataques informáticos.

Monitorización del servicio
En la anterior entrega se describió mod_status, un módulo utilizado para supervisar la carga de los procesos e hilos de Apache. Además del consumo de recursos, quizás el evento más importante que se debe detectar son las caídas del servicio, o demonio, de Apache.

Una herramienta que se puede utilizar para detectar estos eventos y ejecutar de nuevo el servicio en caso de caídas es Monit. En la siguiente configuración de Monit se aprecia como se especifica el proceso a supervisar, los comandos para ejecutar y parar el servicio y las condiciones que provocan que Monit reinicie el servicio:

check process apache with pidfile /var/run/apache2.pid
group www
start program = "/etc/init.d/apache start"
stop program = "/etc/init.d/apache stop"
if failed host localhost port 80
protocol HTTP request "/~hauk/monit/token" then restart
if failed host 192.168.1.1 port 443 type TCPSSL
certmd5 12-34-56-78-90-AB-CD-EF-12-34-56-78-90-AB-CD-EF
protocol HTTP request http://localhost/~hauk/monit/token then restart
if 5 restarts within 5 cycles then timeout
depends on apache_bin
depends on apache_rc

Otra herramienta similar que se puede utilizar es Nagios.

Configuración y revisión de logs
Apache posee dos tipos de logs. Uno almacena información sobre las URLs a las que se han accedido y otro recoge los errores de Apache.

Es conveniente revisar los archivos de log de Apache para detectar errores de configuración, de archivos inexistentes o errores en CGI.
Log de error

En este archivo se almacena información sobre eventos importantes, como inicio de la ejecución de Apache, y sobre los errores que se han producido. La localización de este archivo se establece mediante ErrorLog y su detalle mediante LogLevel:

LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log

En sistemas Unix, se puede filtrar la información de interés de este fichero mediante comandos como el siguiente que genera una lista de errores únicos:

$ cat error.log | cut -d']' -f 4-99 | sed -e "s/, referer.*//g" | sort | uniq
Log de acceso

El archivo de log y su formato se configura mediante la directiva CustomLog. Se puede utilizar LogFormat para especificar un formato aparte. En el ejemplo siguiente se ha creado un formato llamado combined.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined

Las especificaciones del formato combined tienen el siguiente significado:

•%h: dirección IP de la petición.
•%l: nombre de usuario de identd o protocolos similares.
•%u: usuario que ha realizado la petición si se ha solicitado autenticación.
•%t: la fecha de la petición.
•\"%r\": la URL de la petición entre comillas dobles.
•%>s: código de respuesta del servidor.
•%b: tamaño de la respuesta, sin incluir las cabeceras.
•\"%{Referer}i\": la cabecera Referer.
•\"%{User-agent}i\": la cabecera User-Agent.
Se pueden utilizar herramientas con AWStats o W3Perl que procesan la información de este fichero para extraer estadísticas y facilitar su acceso mediante formularios, gráficos y rankings.

En vez de guardar la información directamente en un archivo se puede enviar a otra aplicación mediante pipes. Este mecanismo se utiliza para poder rotar los archivos de log automáticamente mediante la aplicación rotatelogs que incluye Apache.

Detección de ataques
La última fase en el proceso de monitorización es la detección de ataques. Sería extenso definir en profundidad las distintas herramientas que se pueden utilizar con este objetivo. Pero, por citar alguna, se podría utilizar un Web Application Firewall (WAF) como mod_security, entre los ataques que detecta por defecto se pueden resaltar los siguientes:

•Violaciones del protocolo HTTP.
•IPs pertenecientes a listas negras.
•Detección de malware utilizando el API Google Safe Browsing.
•Detección y prevención de ataques de denegación de servicio.
•Ataques web comunes.

Fuente: http://cert.inteco.es/cert/Notas_Actualidad/seguridad_apache_viii_monitorizacion_20120705?origen=boletin

Comentarios

Entradas populares de este blog

El Modelado de Amenazas de Seguridad

¿Como atacar Kerberos?

Trámites a Distancia: Serie de vulnerabilidades permiten el acceso a datos personales de terceros