Filtrar ataques en log http

Con el siguiente comando filtrare el registro de accesos http sacando solo las lineas de posibles intentos de ataque.
No os podeis imaginar la informacion para hardening que se puede sacar de un log

Debian/Ubuntu Apache:

cat /var/log/apache2/access.log |grep 404 |grep -v nextcloud |grep -v favicon | awk '{print $1,substr($7,1,36),$12}' | tr -d \"


Debian/Ubuntu Nginx:

cat /var/log/nginx/access.log |grep 404 |grep -v favicon |grep -v robots.txt | awk '{print $1,substr($7,1,22),$12}' | tr ' "' ' '


CentOs

cat /var/log/httpd/error_log* |grep "not found"|grep -v favicon |grep -v robots.txt | awk '{print $8,$3$2$5,substr($10,1,32),$18}'| tr '] ' ' '|tr "'" '\0'


Aqui teneis el resultado de este comando en un servidor.

145.239.252.63 /admin/images/tango.pn  python-requests/2.18.4 
166.84.6.79 /js/slinkroot.js  Mozilla/5.0
190.8.42.10 /admin/config.php  curl/7.15.5
190.34.195.227 /admin//config.php  curl/7.29.0 
190.34.195.227 /admin//config.php  curl/7.29.0 
124.235.138.212 /login.html  - 
146.196.53.147 /admin//config.php  curl/7.29.0 
54.255.148.42 /admin//config.php  curl/7.35.0 
54.179.153.41 /admin//config.php  curl/7.35.0 
119.28.77.20 /README.txt  python-requests/2.9.1  
119.28.77.20 /README.txt  python-requests/2.9.1 
119.28.77.20 /core/CHANGELOG.txt  python-requests/2.9.1 
74.118.139.245 //login/  Mozilla/5.0
183.136.202.244 /wls-wsat/CoordinatorP  Mozilla/5.0
183.136.202.244 /invoker/readonly  python-requests/2.18.4 
183.136.202.244 /plugins/weathermap/co  python-requests/2.18.4 
183.136.202.244 /jbossmq-httpil/HTTPSe  python-requests/2.18.4 
209.239.116.29 /admin/images/tango.pn  python-requests/2.18.4 
180.95.225.132 /currentsetting.htm  - 
66.70.218.233 /wp-content/plugins/ez  Mozilla/5.0
182.48.105.210 /l.php  Mozilla/5.0
37.72.173.162 /.git/config  Mozilla/5.0
31.4.128.179 /rpi.ovpn  Mozilla/5.0
93.158.123.214 /.env  Mozilla/5.0
221.212.99.106 /admin/config.php  curl/7.19.7
95.216.5.48 /.git/config  Java/1.8.0_171 
37.49.231.100 /a2billing/admin/confi  curl/7.29.0 
37.49.231.100 /recordings/  curl/7.29.0 
37.49.231.100 /a2billing/admin/Publi  curl/7.29.0 
39.108.54.16 /manager/html  User-Agent:Mozilla/4.0
94.244.149.27 /ads.txt  Java/1.8.0_171 
31.4.136.154 /status.php  Dalvik/2.1.0

......

Explicacion:

  • cat /var/log/apache2/access.log : muestra el archivo con el registro de accessos a paginas web.

  • |grep 404 : lo filtra mostrando solo las lineas que tienen el texto 404 (not found)

  • |grep -v favicon : filtro inverso omite las lineas con el texto favicon. asi omito errores mas comunes

  • |grep -v ***** : añadir todos los filtros que sean necesarios….

  • | awk '{print $1,substr($7,1,22),$12}' formateo la salida para mostrar solo los campos necesarios

  • | tr ' "' ' ' Formateo salida eliminando caracteres confusos.

Analisis de la salida.

humm. aunque no lo parezca hay mucha informacion util de cara al hardening.
Por ejemplo este acceso se repite desde bastantes ips

/admin//config.php  curl/7.29.0 

Buscando en google el texto:”/admin//config.php exploit
veo que hay un exploit para FreePBX y otro para wordpress
Si mi servidor habria tenido cualquiera de esos dos programas ya habria caido en las garras del atacante.

Conclusion de seguridad.

  • Obiamente cuando diseñes alguna pagina en php ni se te ocurra nombrar a ningun archivo como config.php ya sabes que lo van ha pillar en nada
  • Evita las carpetas admin si las tienes en una instalacion renombralas.
  • veo que casi todos los ataques serios provienen de curl y python (ver Defensas)

Defensas

Añadiendo estas sencillas lineas de codigo al principio de nuestro php bloqueariamos los accesos a la web con curl y python

<?php
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    if(preg_match('/curl/i',$user_agent)) {die("Error acceso no autorizado");}
    if(preg_match('/python-requests/i',$user_agent)) {die("Error acceso no autorizado");}
?>

Analisis predictivo.

  • Exacto. si pasamos la salida de estos log a un analisis predictivo podremos detectar zero-days
  • Me explico en cuanto salga un exploit que aproveche algun fallo de seguridad los intentos de explotarlo se veran reflejados en este tipo de logs.

Por hacer

  • Estaria bien hacer una herramienta de analisis a la que le pases este log y te saque una grafica de los ataques mas realizados.