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.