Blog

Realizando un forense de logs con comandos de linux

Buenas a todos! En este nuevo post os voy a mostrar como podríamos realizar de forma muy sencilla un análisis forense de cualquier tipo de logs haciendo uso únicamente de un par de comandos en linux.

Para poder hacer las pruebas he cogido el siguiente log de internet que estaba abierto y tiene bastantes datos para que podamos hacer las pruebas de forma correcta.

http://www.bodybybodyology.com/log/access.log

 

En este caso los logs que vamos a analizar tienen el siguiente formato:

IP-Origen - - [Fecha] Metodo Documento-Pedido Version-HTTP Cod-Respuesta-HTTP Bytes-Respuesta Referer User-Agent

 

Siendo un ejemplo el siguiente:

74.89.247.158 - - [21/Jul/2010:15:30:50 +0000] "GET /favicon.ico HTTP/1.1" 404 312 "http://bodybybodyology.com/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16"

 

En la mayoría de los casos necesitaremos investigar ficheros tremendamente grandes, que a mano nos podría llevar mucho tiempo ademas de que normalmente nos sobran datos en dichos ficheros. Por lo tanto vamos a ver como podríamos seleccionar únicamente los datos que nos interesen de dicho log.

Podemos utilizar el comando “awk” para seleccionar únicamente las columnas que nosotros queramos, así podríamos mostrar por ejemplo la IP desde la que se hizo la petición, la fecha y cual fue la petición. Para ello utilizamos “$” seguido del numero de la columna, para mostrar únicamente las columnas seleccionadas de cada linea vemos en la imagen.

forense-linux-1

 

En este caso yo lo he dado un formato que para mi es entendible, pero aquí cada uno podría hacerlo como quisiera.

Una vez sabemos como seleccionar únicamente unas columnas dadas, vamos a ver como podríamos mostrar únicamente las primeras lineas del fichero y las ultimas, que para algunos casos concretos nos puede servir.

Para mostrar las primeras lineas del fichero hacemos uso del comando “head” como vemos a continuación:

forense-linux-02

 

Y para mostrar las ultimas lineas utilizamos el comando “tail”.

forense-linux-03

 

Como habéis visto, en ambos casos utilizamos elargumento “-n” para indicar el numero de lineas.

Vamos a ver ahora otras utilidades como por ejemplo como podríamos organizar los resultados y hacer que solo nos muestre los únicos. Es decir, imaginar que necesitáis saber solo que IPs se han conectado al servidor, pues para ello haríamos uso del comando “sort” para ordenar según una determinada columna (En caso de haber mas de una) y del comando “uniq” para mostrar los resultados únicos.

En este caso vamos a ver como podríamos hacerlo primero sacando solo las IPs:

forense-linux-04

 

Como podéis ver he sacado únicamente las 2 ultimas debido a que hay una gran cantidad de IPs distintas al ser un log de un servidor.

En el caso de que quisiéramos sacar mas de una columna y seguir ordenándolo y sacando resultados únicos podríamos hacerlo de la siguiente forma:

forense-linux-05

 

Donde podemos ver las peticiones realizadas agrupadas por IP.

Y por ultimo y para terminar, no nos podemos olvidar del comando “grep” que nos permite buscar una determinada cadena en el texto, en este caso vamos a sacar las direcciones IP que hayan realizado una peticion al fichero “robots.txt” como vemos en la imagen.

forense-linux-06

 

Y con esto llegamos al final de este post sencillito sobre como podríamos realizar un análisis forense de log mediante comandos en linux. Mas adelante sacare otro post mas avanzado sobre el mismo tema.

Espero que os haya gustado!

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos

Leave a Reply

*

    No Twitter Messages