A közelmúltban érdekes bejegyzésekre lettem figyelmes a logwatch által küldött riport fájlban.
[..]
404 Not Found
//%63%67%69%2D%62%69%6E/%70%68%70?%2D%64+% ... 70%75%74+%2D%6E: 1 Time(s)
[..]Gondoltam, közelebbről is megnézem a logokat, s az alábbi kérés ütött szembe:
[..]
193.226.98.239 - - [05/Nov/2013:16:22:03 +0100] "POST //%63%67%69%2D%62%69%6E/%70%68%70?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%6E HTTP/1.1" 404 297 "-" "-"
[..]
Namármost. Nézegettem valamikor az URL en-, dekódolást, de ez már nekem is kifejezetten sok volt, úgyhogy segítséget ragadtam (URL Decoder/Encoder), aminek ez lett az eredménye:
//cgi-bin/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -d auto_prepend_file=php://input -n
Hmm. Kicsit bosszús lettem. A magam képességeihez mérten mindent megteszek az általam üzemeltetett szerverek biztonságáért, ezért - többek mellett - a sokak által is kedvelt fail2bant használom a kéretlen látogatók ellen.
Most jön a lényeg:
Hogyan tudnám a fent idézett enkódolt URLt megemészteni a fail2ban részére? Merre induljak el? Mert mire ezt a
failregex
szel megemésztetem, én magam is megzöldülök.
Segítségeteket előre is köszönöm.
Szerk.
A keresett kifejezés végül ez lett:
failregex = ^< HOST> -.*"POST //%%63%%67%%69%%2D%%62%%69%%6E/%%70%%68%%70?.*"
Valamint találtam egy másik (kiegészítő) megoldást is, ami hasznos lehet:
failregex = \[client < HOST>\] (File does not exist|script not found or unable to stat): [^ ]*/([^ ]*\.asp|[^ ]*\.dll|[^ ]*\.exe|admin|Admin|Ads|ads|apps|archive|awstats|b0ard|bin|blog|board|cgi|clan|cms|community|cube|database|datenbank|directforum|drupal|f0rum|file:|forum|horde|Horde|html|mail|myadmin|mysql|padmin|page|php|pma|PMA|rc|README|rms|round|scgi|script|seite|sql|stat|ucp.php|wbb|WBB|web|wm|wp-login.php|xmlrpc|xmlsrv)
(A motor sajnos kivágja a HOST kifejezést, ezért értelemszerűen nincs szóköz a
^<
és a
HOST
között!)
- 7446 megtekintés
Hozzászólások
A teljes kódolt regexpre átírás nem lenne annyira bonyolult, mint amilyennek látszik ill. amilyen hosszú, de ha rövidet és átláthatót szeretnél, nem lenne egyszerűbb azt megnézni, hogy pontosan honnan kezdve dől el, amikortól nem szeretnél ilyen látogatókat?
Példa:
minta: "//cgi-bin/php?"
failregex = ^<HOST> -.*"POST.*//%63%67%69%2D%62%69%6E/%70%68%70\?
- A hozzászóláshoz be kell jelentkezni
Jogos! Köszönöm, igazad van. Tudod, fától az erdőt... Kicsit belebonyolódtam. Mindenképp megpróbálok illeszteni egy rövidített kifejezést.
Szerk.
A javaslatoddal sikerült megoldani. Köszönöm.
---
Lehet, hogy kívül szőke vagyok, de belül sötét, oké?!
- A hozzászóláshoz be kell jelentkezni
Fura nalam is 2013.11.05 ugyan ezzel megproblakoztak de nalam ez az ip van: 66.197.237.101
fail2ban megoldast lehet en is megnezem.
- A hozzászóláshoz be kell jelentkezni
Különböző címekről jönnek. A fenti IP csak egy volt a sok közül. Viszont a fail2bant igencsak szigorúra állítottam ezzel a kéréssel kapcsolatban. Tettem ezt azért, mert ha az ember egy scripten keresztül is hivatkozik valamire, akkor igen kevés százalékban használ encode-olt urlt az elérési útban... Úgyhogy ha érzékel egy ilyet, akkor már rá is cuppan, s nagyon sokáig nem engedi. :) Esetleg még lehetne finomítani, hogy ugorjon még a különböző hívószavakra (allow_url_include=on, safe_mode=off, stb.), de most egyelőre így tesztelgetem.
---
Lehet, hogy kívül szőke vagyok, de belül sötét, oké?!
- A hozzászóláshoz be kell jelentkezni
Erre van lehetőség, hogy iptables-el dropoljam a csomagokat amik tartalmazzák ezt a stringet?
A fail2ban azért nem tetszik, mert az 1 próbálkozás után adja a tűzfalhoz a szabályt, viszont nálunk mér sok ilyen próbálkozás van és idegel... Kézzel bannolgatni őket meg szélmalomharc.
Jelenleg 80 cimnél tartok és ezek a mocskok csak egyszer próbálkoznak 1 címről.
-------------------------
neut @ présház
- A hozzászóláshoz be kell jelentkezni
Emlékem szerint lehet változtatni hágy próbálkozás után adja..
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Persze lehet >1 alapon.
Időközben kisilabizáltam az iptables szabályt:
iptables -A INPUT -m string --algo bm --string "?%2D%64+%61%6C%6C%6F%77%5F%75%72" -j DROP
Működik is.
-------------------------
neut @ présház
- A hozzászóláshoz be kell jelentkezni
A maxretry értékre gondoltam inkább :)
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni