Er du også træt af at hackere roder rundt på dit webhotel? Nåh ikke … nå men jeg har altså et par kunder der koder cirka ligeså godt som smeden laver konfekture … og det har været lidt en udfordring at finde ud af hvordan hackerne kommer ind når man ikke kender koden. I den situation er det rart at kunne genskabe de requests en angriber laver … og der kommer mod_log_forensic ind i billedet, det er et modul til Apache der logger hele requesten.
apt-get update apt-get upgrade apt-get install apache2-utils apache2 libapache2-mod-php5 vim
Rediger /etc/apache2/sites-enabled/000-default og sæt flg. ind i VirtualHost blokken:
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" \"%{forensic-id}n\"" combined-fid ForensicLog /tmp/forensic.log
og ret:
CustomLog ${APACHE_LOG_DIR}/access.log combined
til:
CustomLog ${APACHE_LOG_DIR}/access.log combined-fid
Afslut med:
a2enmod log_forensic /etc/init.d/apache2 restart
Tast nu serverens ip i din browser og refresh et par gange, og tjek så din accesslog:
root@mcsweb:~# tail -n1 /var/log/apache2/access.log 10.0.0.2 - - [24/Feb/2016:22:48:03 +0000] "GET / HTTP/1.1" 200 485 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4" "11709:56ce3323:0"
Her ser du din almindelige log-linie, med med et forensics id tilføjet. Første del af forensics id’et (11709) er process-id på den apache process der har serviceret klienten. Forensics id kan bruges til at slå op i forensics loggen med:
root@mcsweb:~# cat /tmp/forensic.log | grep 11709:56ce3323:0 +11709:56ce3323:0|GET / HTTP/1.1|Host:mcsweb.mikjaer.com|Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8|Connection:keep-alive|Cookie:PHPSESSID=rdurmvuiulrefbud44aviun0c7; user=John+Doe|User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4|Accept-Language:da-dk|Cache-Control:max-age=0|Accept-Encoding:gzip, deflate -11709:56ce3323:0
Har har du både post og get variabler, http headers, coockies, url … ja generelt alt hvad du skal bruge for at kunne genskabe requesten.
Lige pt. anvender jeg det bare som beskrevet her, men jeg har overvejet at koble noget automatik på der automatisk detekterer og logger hackerangreb.