Analisis forense de logs de Apache/Nginx

En este artículo voy a describir técnicas y herramientas para llevar a cabo un análisis forense de un archivo (o archivos) de log de un servidor Web Apache o Nginx.

Por defecto, los servidores Web Apache y Nginx (como así también IIS) utilizan el formato de log NCSA Common Log Format para registrar las solicitudes de clientes y errores. Este formato registra la URL completa de cada recurso al que se accede. De esta forma, realizar un análisis forense sobre un archivo de log se reduce a buscar actividad sospechosa en URLs, esto es, intentos de inyección, accesos inadecuados, manipulación de parámetros GET, accesos a archivos sospechosos, etc.

Es posible utilizar comandos comunes para filtrar y buscar patrones de ataque desde línea de comandos (de manera artesanal), o utilizar herramientas específicas de análisis forense, como por ejemplo LORG.

Análisis de forma manual con herramientas de línea de comandos

Efectuar búsquedas de patrones en cadenas de texto es una tarea trivial que puede ser realizada con infinidad de herramientas, solo basta con conocer un poco acerca de la codificación de URLs (URL encoding), la cual convierte los caracteres de las URLs a un formato estándar que pueda ser transmitido a través de Internet.

Las URLs sólo pueden ser enviadas a través de Internet utilizando el conjunto de caracteres ASCII. Además, una cierta porción de los caracteres ASCII están reservados por el protocolo HTTP, son especiales. Sin embargo, debido a que las URLs generalmente utilizan caracteres fuera del conjunto ASCII y caracteres considerados especiales, deben ser convertidas a un formato ASCII válido y seguro. El proceso de URL encoding reemplaza caracteres no ASCII por un caracter % seguido de dos números hexadecimales que indican su codificación. Este proceso es también conocido como percent-encoding.

Esto implica que, al momento de buscar una cierta cadena, es necesario buscar tanto las forma plana como la versión codificada. Incluso se deberían probar todas las combinaciones posibles de caracteres codificados y sin codificar, para detectar los ataques más avanzados (aquellos que tratan de pasar desapercibidos al ojo del monitor de seguridad).

En sistemas operativos de la familia Unix, es posible filtrar y buscar cadenas que caracteres que den indicios de ataques o intentos de ataques utilizando herramientas de línea de comandos como grep, sed, awk, cut, etc.

SQLi

Buscar palabras clave del lenguaje SQL (union, insert, select, etc) que den indicios de intento de inyección de código:

Por ejemplo:

Esto fue encontrado en un log real de un servidor en producción.

Se supone que este fenómeno vive en:

28279955242_cae61d7790_o Analisis forense de logs de Apache/Nginx

Para que la búsqueda sea eficaz, es necesario restringir la búsqueda sólo al campo que almacena la URL (delimitado por comillas dobles). Luego, de ser necesario, buscar más información relacionando los resultados. De lo contrario es imposible buscar ciertos caracteres como coma (,), punto y coma (;), etc.

Buscar comillas simples ‘ ( %27):

Buscar asteriscos * ( %2A) en URLs:

Buscar palabras clave de motores de bases de datos (como system, exec, etc.):

Buscar comentarios de MySQL (–):

Por ejemplo:

Ataques clásicos/path traversal

Buscar ataques comunes, como intentos de acceso al archivo /etc/passwd o directorios de niveles superiores:

Al buscar la cadena “–” en las URLs pueden aparecer cientos de falsos positivos.

XSS

Buscar menor ( %3C) y mayor ( %3E):

Buscar punto y coma ( %3B):

Buscar comillas simples ( %27) y dobles ( %22):

Rootkits

Buscar intentos de acceso a shells PHP conocidas:

Del mismo modo, aplicar esta técnica para buscar otros ataques o actividad sospechosa.

Análisis con una herramienta automatizada: LORG

En general existe siempre una amplia variedad de herramientas automatizadas para realizar estas tareas de escaneo, análisis forense, monitoreo, etc. La ventaja que tienen estas herramientas es que son simples, no involucran tiempo o trabajo, y no requieren un profundo conocimiento de las técnicas de ataque. Sin embargo, toda herramienta automatizada tiende a generar toneladas de falsos positivos (pues realizan chequeos genéricos que no se ajustan a la implementación de la aplicación Web que se está analizando), los cuales son difíciles de identificar justamente para alguien que no tiene conocimientos profundos sobre las técnicas de ataque y la materia en general (Seguridad de la Información). El análisis manual es engorroso, lleva tiempo, pero también mucho más exhaustivo y a medida de la aplicación Web en cuestión.

Habiendo dicho ésto, es bueno correr tests con herramientas automáticas para contrastar resultados, obtener resúmenes e información estadística derivada, recopilar material para elaborar reportes, y evitar pasar por alto algún detalle. En este caso decidí probar LORG, una herramienta para el análisis forense de logs de servidores Web, llamada originalmente “Web Forensik”.

Para instalar LORG basta con clonar sus fuentes desde GitHub:

Previamente es necesario instalar PHP junto con los módulos requeridos (pcntl, simplexml, filter, mbstring y ctype). En FreeBSD se instalan desde paquetes ejecutando:

Es recomendable aumentar el tamaño máximo permitido en memoria para scripts PHP a través de la variable de entorno memory_limit dentro del archivo de configuración php.ini:

Para realizar un escaneo básico con LORG, ejecutar ./lorg -d phpids -u -g ARCHIVO. Por ejemplo:

Luego de unos minutos (dependiendo del tamaño del archivo de log)…

LORG genera un reporte completo y detallado en formato HTML:

27767591514_ed9ae54eed_o Analisis forense de logs de Apache/Nginx

Encontrar ésto en el reporte me hizo llorar de risa: “The incident happened during unusual working hours in Argentina, so it might be carried out by a hobbyist on caffeine.”.

En este caso la aplicación Web en cuestión está tan horriblemente diseñada (utiliza expresiones en variables GET que son interpretadas como intentos de inyección, cuando en realidad es tráfico válido) que el escáner detecta a la mayoría de los accesos como ataques. Sin embargo es una gran herramienta a tener en cuenta para futuros análisis forenses.

Referencias

NCSA Common Log Format

percent-encoding

HTML URL Encoding Reference

Common php webshells

LORG

IP Location Lookup

 

Fuente: linuxito

 

facebook Analisis forense de logs de Apache/Nginxtwitter Analisis forense de logs de Apache/Nginxgoogle Analisis forense de logs de Apache/Nginxdiggit Analisis forense de logs de Apache/Nginxpinterest Analisis forense de logs de Apache/Nginxlinkedin Analisis forense de logs de Apache/Nginxprint Analisis forense de logs de Apache/Nginxemail Analisis forense de logs de Apache/NginxSi te gusto, comparte el articulo.

Artículos Relacionados

Agregar comentario


*

Recibe nuestro newsletter

Suscribete a nuestro newsletter y mantente informado con nuestros últimos artículos, noticias y más. Todo completamente gratis.