{"id":444,"date":"2009-07-16T14:21:25","date_gmt":"2009-07-16T13:21:25","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=444"},"modified":"2009-07-16T14:21:25","modified_gmt":"2009-07-16T13:21:25","slug":"scans-web-engluer-les-requetes-automatisees","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/07\/16\/scans-web-engluer-les-requetes-automatisees\/","title":{"rendered":"Scans web, engluer les requ\u00e8tes automatis\u00e9es"},"content":{"rendered":"<p>Aujourd&rsquo;hui un petit billet pour s&rsquo;amuser un peu avec les scripts kiddies.<\/p>\n<p>Si vous h\u00e9bergez votre propre serveur web, vous avez s\u00fbrement remarqu\u00e9 l&rsquo;acc\u00e8s ind\u00e9sirable \u00e0 votre serveur http par des requ\u00eates plus ou moins automatis\u00e9es dans le but de d\u00e9couvrir une faille potentielle.<\/p>\n<p>Dans le genre :<\/p>\n<pre lang=\"text\">\r\n[Sun Jul 12 06:26:57 2009] [error] [client 1.2.3.4] File does not\r\nexist: \/var\/www\/phpmyadmin\r\n[Sun Jul 12 06:26:58 2009] [error] [client 1.2.3.4] File does not\r\nexist: \/var\/www\/phpMyAdmin\r\n<\/pre>\n<p>Bien entendu, en bon admin que vous \u00eates, vous avez greff\u00e9 <a title=\"modsecurity\" href=\"http:\/\/www.modsecurity.org\/\" target=\"_blank\">ModSecurity<\/a> sur votre Apache pr\u00e9f\u00e9r\u00e9, ce qui limite grandement la casse et renvoi le petit <span style=\"text-decoration: line-through;\">merdeux<\/span> bonhomme dans sa chaumi\u00e8re avec un joli code 400 :<\/p>\n<pre lang=\"text\">\r\n[Wed Jul 15 19:30:36 2009] [error] [client 87.229.108.30] ModSecurity: Warning. Operator EQ match: 0. [id \"960009\"] [msg \"Request Missing a User Agent Header\"] [severity \"WARNING\"] [hostname \"1.2.3.4\"] [uri \"\/phpMyAdmin\/main.php\"] [unique_id \"6cDOIV4XBY0AABEgIhMAAAAD\"]\r\n[Wed Jul 15 19:30:36 2009] [error] [client 87.229.108.30] ModSecurity: Access denied with code 400 (phase 2). Pattern match \"^[\\\\\\\\d\\\\\\\\.]+$\" at REQUEST_HEADERS:Host. [id \"960017\"] [msg \"Host header is a numeric IP address\"] [severity \"CRITICAL\"] [hostname \"1.2.3.4\"] [uri \"\/phpMyAdmin\/main.php\"] [unique_id \"6cDOIV4XBY0AABEgIhMAAAAD\"]\r\n<\/pre>\n<p>Et bien s\u00fbr coupl\u00e9 \u00e9galement \u00e0 un <a title=\"fail2ban\" href=\"http:\/\/www.fail2ban.org\/wiki\/index.php\/Main_Page\" target=\"_blank\">fail2ban<\/a> ou un <a title=\"Ossec\" href=\"http:\/\/www.ossec.net\/\" target=\"_blank\">ossec<\/a> dans les r\u00e8gles :<\/p>\n<pre>\/var\/ossec\/active-response\/ossec-hids-responses.log\r\nWed Jul 15 19:30:36 CET 2009\r\n\/var\/ossec\/active-response\/bin\/firewall-drop.sh add - 87.229.108.30<\/pre>\n<p>Pan, <a title=\"Mapa\" href=\"http:\/\/www.mapa-professionnel.com\/francais\/validsteril.php3?famille=ES&amp;Submit.x=154&amp;Submit.y=39&amp;Submit=valider\" target=\"_blank\">gant Mapa<\/a>, <a title=\"gravier\" href=\"http:\/\/www.batiproduits.com\/materiaux_construction\/structure_maconnerie_facades\/graviers_1000141643.htm\" target=\"_blank\">gravier<\/a> et <a title=\"be seeing you\" href=\"http:\/\/www.youtube.com\/watch?v=c-X5Hgbc688\" target=\"_blank\">bonjour chez toi<\/a>&#8230;<\/p>\n<p>C&rsquo;est bien mais moi, qu&rsquo;on vienne m&#8217;emb\u00eater, je n&rsquo;aime pas \u00e7a et sadique comme je sais l&rsquo;\u00eatre, je suis assez fervent de rendre la monnaie de leur pi\u00e8ces a ces \u00ab\u00a0cliqueurs-de-truc-ki-marche-tout-seul-pour-hack\u00a0\u00bb<\/p>\n<p>Donc j&rsquo;ai chercher un moyen de m&rsquo;amuser avec eux et surtout, ce qui est le pire pour un spammeur\/script-kiddies, leur faire perdre du temps.<\/p>\n<p>Cette technique d&rsquo;engluage, appel\u00e9e aussi \u00ab\u00a0sticky honeypot\u00a0\u00bb, est d\u00e9j\u00e0 utilis\u00e9e pour ralentir les vers, bots, etc&#8230; gr\u00e2ce \u00e0 l&rsquo;excellent <a title=\"LaBrea\" href=\"http:\/\/labrea.sourceforge.net\/labrea-info.html\" target=\"_blank\">LaBrea<\/a>.<\/p>\n<p>Ce programme est ce que l&rsquo;on appele un \u00ab\u00a0<a title=\"tarpit\" href=\"http:\/\/en.wikipedia.org\/wiki\/Tarpit_(networking)\" target=\"_blank\">tarpit<\/a>\u00ab\u00a0. Un service r\u00e9seau dont le seul but est de ralentir la connexion a ce service aussi longtemps que possible.<\/p>\n<p>En effet, un spammeur pour qui l&rsquo;envoi de masse et la rapidit\u00e9 sont primordiaux, si le serveur de mail en face met 10 secondes a lui r\u00e9pondre au lieu de 1 seconde, vous comprendrez qu&rsquo;il a de quoi enrager&#8230;<\/p>\n<p>Bref, je vous invite \u00e0 lire les diff\u00e9rents articles sur les liens donn\u00e9es ci-dessus si vous voulez jouer avec cette technique (il y a m\u00eame un <a title=\"patch tarpit\" href=\"http:\/\/www.netfilter.org\/projects\/patch-o-matic\/pom-external.html\" target=\"_blank\">patch Tarpit pour iptables<\/a> \ud83d\ude09 )<\/p>\n<ul>\n<li>ModSecurity, la solution qui va bien<\/li>\n<\/ul>\n<p>Je cherchais une solution plut\u00f4t simple et rapide \u00e0 mettre en oeuvre (apr\u00e8s tout, ce n&rsquo;est qu&rsquo;un Proof of Concept \ud83d\ude00 ), et utilisant d\u00e9j\u00e0 ModSecurity, il devait exister un moyen de combiner tout cela.<\/p>\n<p>Apr\u00e8s avoir fouill\u00e9 la documentation et effectu\u00e9 quelques recherches sur le Nain Ternet, j&rsquo;ai d\u00e9couvert une option magique de ModSecurity : \u00ab\u00a0pause\u00a0\u00bb.<\/p>\n<p>Avant toutes choses, je vous invite fortement \u00e0 utiliser l&rsquo;excellentissime ModSecurity sur vos serveurs Apache. Vous trouverez de tr\u00e8s bons articles et documentation sur le site de <a title=\"modsecurity\" href=\"http:\/\/www.modsecurity.org\/\" target=\"_blank\">Breach<\/a> (l&rsquo;\u00e9diteur de ModSecurity, chez <a title=\"hsc\" href=\"http:\/\/www.hsc.fr\/ressources\/breves\/modsecurity.html.fr\" target=\"_blank\">HSC<\/a>, ou le tuto de <a title=\"Lindev\" href=\"http:\/\/lindev.fr\/index.php?post\/2008\/11\/11\/mod_security-et-apache2\" target=\"_blank\">Lindev<\/a>.<\/p>\n<p>Pour r\u00e9sumer, ModSecurity est un filtre qui va intercepter les requ\u00eates adress\u00e9es \u00e0 votre serveur Apache et v\u00e9rifier dans une liste de r\u00e8gles pr\u00e9-d\u00e9finies ou \u00e9crites par vous si elles correspondent et r\u00e9agir en cons\u00e9quence.<\/p>\n<p>Contre les injections SQL, les attaques transversales ou tout les petits trucs joyeux du monde web, c&rsquo;est quand m\u00eame ce qu&rsquo;il se fait de mieux.<\/p>\n<p>Bref, Modsecurity permet de d\u00e9finir ses propres \u00ab\u00a0SecRule\u00a0\u00bb et c&rsquo;est cela que nous allons utiliser pour retarder les requ\u00e8tes.<\/p>\n<p>Je consid\u00e8re que votre module ModSecurity est actif et fonctionnel.<\/p>\n<p>Basons nous sur les scans \u00ab\u00a0RoundCube\u00a0\u00bb qui tourne actuellement suite \u00e0 des failles de s\u00e9curit\u00e9 d\u00e9couvertes dans le Webmail (<a title=\"roundcube alert\" href=\"http:\/\/isc.sans.org\/diary.html?storyid=5659\" target=\"_blank\">http:\/\/isc.sans.org\/diary.html?storyid=5659<\/a>).<\/p>\n<p>J&rsquo;utiliserais le fichier .\/modsecurity.d\/modsecurity_crs_15_custom_rules.conf pour int\u00e9grer mes r\u00e8gles :<\/p>\n<pre lang=\"text\">\r\nSecRule REQUEST_URI \"\/roundcube\" \"pause:30000,log,status:400,deny\"\r\nSecRule REQUEST_URI \"\/roundcubemail\" \"pause:30000,log,status:400,deny\"\r\nSecRule REQUEST_URI \"\/roundcubemail-0.1\" \"pause:30000,log,status:400,deny\"\r\nSecRule REQUEST_URI \"\/roundcubemail-0.2\" \"pause:30000,log,status:400,deny\"\r\nSecRule REQUEST_URI \"\/roundcube-0.1\" \"pause:30000,log,status:400,deny\"\r\nSecRule REQUEST_URI \"\/roundcube-0.2\" \"pause:30000,log,status:400,deny\"\r\nSecRule REQUEST_URI \"\/round\" \"pause:30000,log,status:400,deny\"\r\n<\/pre>\n<p>Petite explication.<\/p>\n<p>&#8211; Je d\u00e9finis une r\u00e8gle de s\u00e9curit\u00e9 par le champ \u00ab\u00a0SecRule\u00a0\u00bb<\/p>\n<p>&#8211; Je demande a ModSecurity de v\u00e9rifier les requ\u00eates qui contiennent le chemin \/round, \/roundcube, etc..<\/p>\n<p>&#8211; Si la r\u00e8gle match, on attend 30000 millisecondes, on log, on sort une erreur 400 et un acc\u00e8s refus\u00e9.<\/p>\n<p>Ne reste plus qu&rsquo;a tester \ud83d\ude00\u00a0 :<\/p>\n<pre lang=\"text\">\r\nguiguiabloc@bofh:~$ wget -E -H -k -K -p http:\/\/monserveur.net\/round\r\n--15:05:54--\u00a0 http:\/\/monserveur.net\/round\r\n=&gt; `monserveur.net\/round'\r\nR\u00e9solution de monserveur.net... 12.34.56.67\r\nConnexion vers monserveur.net|12.34.56.67|:80...connect\u00e9.\r\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse...400 Bad Request\r\n15:06:25 ERREUR 400: Bad Request.\r\n\r\nTermin\u00e9 --15:06:25--\r\nT\u00e9l\u00e9chargement: 0 octets dans 0 fichiers\r\n<\/pre>\n<p>Ah Ah Ah ! Je me gausse \ud83d\ude42  \ud83d\ude42  \ud83d\ude42<\/p>\n<p>Ou comment faire perdre du temps aux scanners web&#8230;<\/p>\n<p>Je sais, ce n&rsquo;est qu&rsquo;une goutte d&rsquo;eau dans le vase immense du Nain Ternet mais c&rsquo;est fichtrement amusant&#8230;<\/p>\n<p>Amusez vous bien \ud83d\ude00<\/p>\n<p>PS : Ce billet me permet en m\u00eame temps de remercier les <a title=\"Cleopatre\" href=\"http:\/\/www.colle-cleopatre.com\/\" target=\"_blank\">colles Cleopatre<\/a> pour toutes ses ann\u00e9es d&rsquo;\u00e9cole pass\u00e9es a les renifler :-p<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd&rsquo;hui un petit billet pour s&rsquo;amuser un peu avec les scripts kiddies. Si vous h\u00e9bergez votre propre serveur web, vous avez s\u00fbrement remarqu\u00e9 l&rsquo;acc\u00e8s ind\u00e9sirable \u00e0 votre serveur http par des requ\u00eates plus ou moins automatis\u00e9es dans le but de &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/07\/16\/scans-web-engluer-les-requetes-automatisees\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,8],"tags":[28,118,117],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/444"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=444"}],"version-history":[{"count":6,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/444\/revisions"}],"predecessor-version":[{"id":450,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/444\/revisions\/450"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=444"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}