Hoo quoi les mecs, c'est dégeulasse et la RFC alors c'est
pour les
chiens, il est ou le Host Name !! Cela ne passera jamais un reverse
proxy, vous n'ètes pas prèt de l'user le backend ! Ce n'est pas finis
cette affaire. Je
comprends maintenant pourquoi il est recommandé de ne pas
utiliser
Loic. Et en plus, il lache pas la session le pitbull. On peut se dire,
tient le serveur va mange, mail au final, le poste client mange aussi.
Bref loic c'est plein
de petite sessions avec des requettes http invalides. C'est là que l'on
apprécie la rigeur d'implémentation des RFC, http 1.0 est supposé
fermer la connections après la requete, un objet une session, au final,
ici un exemple répond en HTTP 1.1 et tient la connection ouverte..
c'est formidable.
Le constat est évident pour attraper le bitonio, la regle est la suivante :
Si (HOSTNAME pas Présent) et (Requete=1.0) = Ca Pue
En bluecoat on dit :
FORCE_DENY http.request.version="1.0"
request.header.host.exists=no
force_exception(client_failure_limit_exceeded,"Request seems malicious")
Risque de faux positifs : décemment aucun !!!
Passons à l'évolution suivante. Loic en version libre et d
isponible sur
GIT HUB, il dispose d'améliorations notables. Pour tous le monde,
c'est sympathique pour une fois que le code est fournis c'est quand meme plus facile pour analyser. Une des
nouvelles particularités de l'outil c'est qu'il peut se comporter
comme un membre de botnet volontaire, il est capable de se connecter
automatiquement à un serveur IRC pour obtenir la cible. Il peut
même être lancé en ligne de commande afin de faire son affaire
sans être vu. Le bonheur dans les cybers cafés !
D'un point de vu
technique, il à bien évolué. Ses requêtes ressemblent beaucoup
plus à un vrai navigateur. enfin le HTTP 1.1 fait son aparition dans les headers, Il est possible de
spécifier un path à utiliser sur le site pour l'attaque ainsi que
d'ajouter des caractères aléatoires derrière ce path. Si on regarde le
source, on se rassure sur plusieurs choses, Le user agent est
Unique, et la position des headers est fixe.
Byte[] buf =
System.Text.Encoding.ASCII.GetBytes(String.Format("GET {0}{1}
HTTP/1.1{4}Accept: */*{4}User-Agent: Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 6.0){4}{3}Host: {2}{4}{4}{4}", Subsite, ( AllowRandom ? new
Functions().RandomString() : null ), Host, (AllowGzip ?
"Accept-Encoding: gzip, deflate"+Environment.NewLine :
null),Environment.NewLine));
C'est l'option coté
aléatoire qui est l'erreur de cette version. C'est le plus mauvais
random que l'on ai vu ces dernier temps. 6 caractères et uniquement
et en majuscules. Monsieur niol, vous apprécierez.
public
string RandomString()
{
StringBuilder
builder = new StringBuilder();
Random random = new
Random();
char ch;
for (int i = 0; i <
6; i++)
{
ch =
Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() +
65)));
builder.Append(ch);
}
return builder.ToString();
}
Au final,
c'est la repère. Sur une requête
http quelle est la probabilité que JUSTE les 6 derniers
caractères de la requête soient des lettres en majuscules ? Je ne
sais pas pour votre site, mais généralement c'est très rare.
La détection via
une expression régulière insensible à la casse de cette chose
remarquable sera :
Si query string= "[^A-Z]
[A-Z]{6} HTTP\/1.1$" et user Agent = "Mozilla/4.0 (compatible;
MSIE 7.0; Windows NT 6.0)" CA PUE.
En bluecoat on dit :
FORCE_DENY url.query.regex.case_sensitive="[^A-Z][A-Z]{6}$"
request.header.user-agent="Mozilla/4.0 (compatible;
MSIE 7.0; Windows NT 6.0)" force_exception(client_failure_limit_exceeded,"Request
seems malicious")
Risque de faux positifs : à apprécier en fonction de votre site, la requete peut etre trop "greedy" !!!
Mais cela ne
détectera que si l'attaquant a précisé un path en minuscule et
qu'il a coché la case Append random. Comment détecter LOIC sinon .. on
pourrait sachant que la requete est "fixe" matcher ceci avec la
directive request.raw_headers.regex si j'a le temps, je testerai.
Hoic... Comment ca marche
Hoic est un nouveau tools pour DDoSseur débutant qui semble etre aparu
en novembre derniere d'après quelques forum de haut niveau,
http://www.ubers.org/Thread-Best-DoS-TOOL-NEW-LOIC-HOIC,
Sur le papier, Hoic est prometteur, il utilise des fichiers appelés
HOIC Boosters, qui sont des fichiers de configuration qui permettent
d'étoffer les requetes (notez après loic c'était pas dur). Cela perment
nottament d'ajouter des User Agent aléatoires, des referer, et des
headers "If Modified Since" entre autre.Tous cela dans le but de se
cacher dans la masse de hit "légaux". Ma version était encore exempte
de malwares, décidément un jour de chance.
Coté soft, voila encore un Soft pas Sec, mais alors vachement moins
finis que LOIC, Si on met moins de 2 Thread sur ma vm mono cpu, il part
en vrac, on peut
même demander des threads négatives !!. Mais enfin que fait l'équipe
Quality Control d'anonymous ? Et puis c'est quoi ce soft, les images et sprites sont dans un sous répertoire.
Flirt est formel, Le soft est linké avec le debug, et c'est en visual C.. on progresse :) Mais bon, puisqu'il contient des features
intéressante pour tenter de se cacher pardonnons lui et vivement la
version 3 (les mecs pour le nom du 3 je propose Foic.. Le "Fucking
Orbit Ion Canon", et on peut le prononcer à la "De Niro".. "You Foic my
Site ?") .. soit reprenons.
Après l'avoir passé dans WireShark le constat est le même : Fichtre,
lui aussi il fait des requêtes de type HTTP 1.0.. D'ou leur vient donc à tous cette
drôle d'idée, mais soit c'est un bon point d'accroche sachant que de
nos jours un navigateur moderne ne fait pas de requête 1.0. La seul
fois ou j'en ai croisé des légitimes c'est après le passage dans un
proxy. Et là comme tout bon proxy, il MUST mettre le header via (
RFC 2616 section 14.45).
C'est ma foi un bon critère:
Voici 2 exemples de requetes Hoic, générées avec un booster quelquonque.
GET /onderwerpen/commissie_evaluatie/ HTTP/1.0
Accept: */*
Accept-Language: en
Keep-Alive: 115
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://thanatos.trollprod.org/actueel/omtv_0/2010/video_om_congres/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
If-Modified-Since: Tue, 18 Aug 2009 08:49:15 GMT
Host: thanatos.trollprod.org
GET /actueel/agenda/ HTTP/1.0
Accept: */*
Accept-Language: en
Keep-Alive: 115
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://thanatos.trollprod.org/actueel/
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6)
Gecko/20070725 Firefox/2.0.0.6
If-Modified-Since: Sun, 13 Oct 2007 11:59:59 GMT
Host: thanatos.trollprod.org
Et c'est là que l'on constate une fois de plus l'affligeante
souplesse du protocole HTTP, même si la requête est demandée en http
1.0, quand on a demandé au Hoic via le booster d'ajouter le header
"Connection: Keep-Alive". La connection est maintenue (ici un apache 2)
jusqu'a la limite du timeout de l'apache. Moralité, celui là aussi est pas
cool, les sessions TCP vont se stacker dans le firewall, le reverse
proxy si vous en avez un et sinon dans votre serveur web.
Autre fait remarquable, la position du header Host: il est en dernier, et en vrai avec un navigateur réel cela n'existe pas
Un vrai Chrome
GET /common/waf/dir/ HTTP/1.1
Host: acme.dirtylab.forme
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7
(KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Un vrai Firefox
GET /common/waf/dir/ HTTP/1.1
Host: acme.dirtylab.forme
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0.1)
Gecko/20100101 Firefox/8.0.1
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Un vrai Interner Explorer 7, celui qui s'en rapproche le plus ne le met toujours pas en dernier.
GET /common/waf/dir/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-quickviewplus, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword,
application/x-shockwave-flash, application/x-ms-application,
application/x-ms-xbap, application/vnd.ms-xpsdocument,
application/xaml+xml,
*/*
Accept-Language: fr-be
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT
5.1; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR
3.0.4506.2152;
.NET CLR 3.5.30729)
Host: acme.dirtylab.forme
Connection: Keep-Alive
Une des source intéressancte pour détecter la version de navigateur rééls est de regarder dans les ressources de p0f un scanner passif en vogue ces temps ci.
Mais bon... meme sans cela, ils sont aisément repérables :
Première solution :
Si (UA = (Chrome ou FireFox ou Opera
ou Iexplorer) et (Requete=1.0) et
(pas de Header via)) = Ca PUE.
En bluecoat on dit :
FORCE_DENY http.request.version="1.0"
request.header.via.exists=no request.header.user-agent.regex="(Chrome/[0-9]|Firefox/[0-9]|Opera/[0-9]|MSIE
[0-9])" /
force_exception(client_failure_limit_exceeded,"Request seems
malicious")
Risque de faux positifs : décemment aucun, mais cela peut attraper moultes scanners crapuleux !!! Désolé, dommages collatéraux.
Seconde solution :
Il y a un autre UA (User Agent) souvent utilisé dans les booster, c'est
le Google
Bot..et
Mr Google il ne vient pas en http
1.0 Google normalement (ils aiment trop performance chez Google, déja
qu'ils veulent changer le tcp, ca les tuerait) donc on peut en conclure
:
Si (UA = Google Bot) et (Requete=1.0)
= Ca Pue
En bluecoat Policy on dit :
FORCE_DENY http.request.version="1.0"
request.header.user-agent.regex="Googlebot/[0-9]" force_exception(client_failure_limit_exceeded,"Request seems
malicious")
Risque de faux positifs : décemment
aucun vrai, mais encore une fois, cela peut attraper aussi moultes scanners et mails grabers. Pour vous
rassurer, sachez que Mr Google à le reverse dns toujours propre. comme précisé dans le lien qui est contenu dans le user agent
http://www.googlebot.com/bot.html
Prenons ces deux lignes de logs Apache, d'après la ligne, c'est des googles bots :
thanatos.trollprod.org 213.135.240.102 - - [05/Feb/2012:01:02:43 +0100]
"GET / HTTP/1.0" 200 8188
"http://www.google.com/?q=http://thanatos.trollprod.org" "Googlebot/2.1
( http://www.googlebot.com/bot.html)"
thanatos.trollprod.org 66.249.71.13 - - [05/Feb/2012:08:08:47 +0100]
"GET / HTTP/1.1" 200 4899 "-" "Mozilla/5.0 (compatible; Googlebot/2.1;
+http://www.google.com/bot.html)"
déja le 1er, fait de l'http 1.0 et vient depuis google semble t'il,
enfin, si on croit le referer
http://www.google.com/?q=http://thanatos.trollprod.org. Depuis google,
non mais sans dec.. mais voyons depuis quand les crawlers de google
passent par le moteur de recherche pour trouver leur petits. c'est eux
qui l'abreuvent pas le contraire, on a jamais vu une vache teter son
veau.
Demandons donc a nslookup ce qu'il en pense :
102.240.134.216.in-addr.arpa name = ip-216-134-240-102.static.luxdsl.pt.lu.
13.71.249.66.in-addr.arpa name = crawl-66-249-71-13.googlebot.com.
Alors, c'est qui le vrai google à votre avis et qui est le petit con ?
Voici donc 2 règles qui vont rapidement détecter le bousin, même si ils vont
en rater un hit ou deux, ils seront vite sanctionnés, et avec eu quelques scanner et bots indésirables.
Il y a encore un super bon critère en cas d'attaque garantit sans dommages collatéraux, c'est le fichier
booster en
lui-même, ce n'est pas Random, c'est écrit dans le fichier. En période
d'attaque ils fleurissent et là il contient tous les paramètres qui
vont vous tomber sur le ràble. Et heureusement l'anonymous DDoSseur de
type Sheep n'aime pas éditer un fichier pour changer deux ou trois parametres. Il suffit donc de convertir
celui ci en règles adéquates. Voir
l'ustensoir en bas de page.
JS LOIC comment ca marche
En voila un qui au moins n'est pas paniquant à installer, c'est un
javascript. je peux meme le lancer depuis mon poste via mon proxy avec
le browser de mon choix.. C'est joli c'est simple Merci !!...
À un
moment je me suis dit.
c'est un fake. parce que quand j'ai regardé le source de la page, le gars il a posé sur le site qui sert a lancer les
DDoS. un "google analitics" like sur le site .. je suis
estomaqué.. soit. Rappel en
france, la mise à disposition d'outil est punie pareil que utiliser
l'outil lui meme. bref si on fait le con avec sa page, Merci
hosting24.com , ne quittez pas nous vous mettons
en relation avec la police.
| |
| <script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
|
| <noscript><a
href="http://www.hosting24.com/"><img
src="http://analytics.hosting24.com/count.php" alt="web hosting"
/></a></noscript>
|
|
|
Le
fait, sans motif légitime, d'importer, de détenir, d'offrir, de céder
ou de mettre à disposition un équipement, un instrument, un programme
informatique ou toute donnée conçus ou spécialement adaptés pour
commettre une ou plusieurs des infractions prévues par les articles
323-1 à 323-3 est puni des peines prévues respectivement pour
l'infraction elle-même ou pour l'infraction la plus sévèrement réprimée.
Au
début j'était sceptique, mais après j'ai compris, le google analytics
like est placé après </html>, j'ai bien peur que cela ne soit pas
volontaire mais soit l'oeuvre du hosteur.Mais penchons nous plutot sur
le code javascript...
La je paniquais, enfin un DDoSeur qui pour une fois aura des headers correct, mais alors quand j'ai
regardé le source, là je suis tombé de ma chaise... POURQUOI..
…
img.setAttribute("src", targetURL + "?id=" + rID + "&msg=" +
messageNode.value);
requestsHT[rID] = img;
onRequest(rID);
…
Le gars il a un tools qui est quasi parfaitement indiscosciable d'un hit normal, ils est certes moins violent que
les autre, mais la requête est imparable.. c'est indiscociable d'une
requete légitime. Et là drame, il casse son jouet en ajoutant deux parametres id et msg qui confère un
caractère unique a son attaque, tout cela pour insérer un message
d'insulte..Sniff, pathétique.
Bon... Bin c'est simple, si votre site web n'a pas de 1er
paramètre qui est id et en meme temps un autre qui est msg vous êtes sauvés. voila a quoi cette attaque ressemble
GET /?id=1328430531135&msg=BOOM%20HEADSHOT! HTTP/1.1
Host: thanatos.trollprod.org
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 (KHTML, like
Gecko) Chrome/16.0.912.63 Safari/535.7
Accept: */*
Referer:
http://roy.webege.com/?msg=merdejelaiditlesite&sanction=quefaitlapolice
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
En bluecoat policy on dit :
FORCE_DENY url.query.regex="\?id="
url.query.regex="\&msg="
force_exception(client_failure_limit_exceeded,"Request seems malicious")
Un BlueCoat Comment que ca se défend,
Vous aviez trop de sous, vous avez décidé de confier la sécurité
périmétrique de vos Site web a un proxy BlueCoat SgOs utilisé en
Reverse Proxy. C'est enfin un jour avec une bonne nouvelle (Si vous
travaillez avec du bluecoat, vous savez de quoi je parle). Aujourd'hui
vous ne le regretterez pas. SGos depuis la version 4 dispose d'un mode
"d'attack detection". L'idée est la suivante. Si un client rencontre
disons 50 erreurs http 500 ou >, il est bannis au niveau TCP pendant
30 mn.. Le nombre d'erreurs et la période de pénalité est évidemment à
votre discrétion.
En cas de DDos, l'idée est de détecter le HIT malsain, et d'y répondre
une page d'erreur, le reste sera fait tout naturellement par l'attaque
détection de BlueCoat, au bout de X Hit qui répondent 500, le Bluecoat
ne répondra plus à votre DDoSseur et celui-ci devra remplir votre bande
passante uniquement avec des paquet SYN.
Cela se configure assez simplement, uniquement en console :
SG9000#con t
Enter configuration commands, one per line. End with CTRL-Z.
SG9000#(config)attack-detection
SG9000#(config attack-detection)client
SG9000#(config client)default ?
block-action Set behavior for blocked client connections
connection-limit Set client connection limit
failure-limit Set client request failure limit
unblock-time Set client unblock time
warning-limit Set client request warning limit
alors le premier paramètre, block action, tout dépend de votre
firewall que vous avez probablement en amont du reverse proxy, s'il
peut enquiller des sessions à crever sans moufter, laissez sur drop,
cela ralentira bien plus les requetes éffrénées de nos jeunes hacker,
Si maintenant, c'est pas une bete de concour votre firewall, Je vous
conseille de laisser partir des reset afin de nettoyer les table du
firewall que vous . Ici je configure pour envoyer des Reset
SG9000#(config client)default block-action ?
drop Drop without sending a response
send-tcp-rst Send a TCP RST to blocked connections
SG9000#(config client)default block-action send-tcp-rst
ok
Ici, on limite à 25 connections TCP Simultanée par Client. Ca
calme toujours les plus chauds.
SG9000#(config client)default connection-limit 25
ok
Enfin la config intéressante , 30 minutes de punition si plus de 30
(25+5) erreurs ( Code 500 ou plus) par ip et par 10 minutes.
SG9000#(config client)default warning-limit 5
oks
SG9000#(config client)default failure-limit 25
ok
SG9000#(config client)default unblock-time 30
ok
SG9000#(config client)interval 10
ok
Pour voir les heureux gagnants, c'est la commande "sh
attack-detection client blocked"
Notez que c'est aisément convertible en d'autre techniques, sur des
serveurs linux avec un fail2ban et un serveur apache ou un nginx, ou de
facons identique avec un Snort etc.. Si j'ai le courage, je tenterai peu etre.
L'ustensoir
En cas d'attaque ciblée, on de dépèche de convertir le
booster en
Policy... c'est par ICI
Copier ici votre Hoic Booster: Ci joint
Un
example de Hoic Booster
Note : en SGos 4 (c'est pas tout jeune) il sera nécessaire de remplacer
quelques headers par x_header, le bluecoat vous dira lequels.