<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WEBlog de Félix Aimé &#187; waf</title>
	<atom:link href="http://blog.felix-aime.fr/tag/waf/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.felix-aime.fr</link>
	<description>{ OpenSource Intelligence, Information Security, Information Warfare }</description>
	<lastBuildDate>Tue, 31 Jan 2012 20:06:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fuzz or not to fuzz ?</title>
		<link>http://blog.felix-aime.fr/securite-des-systemes-dinformation/skipfish-fuzzing-des-applications-web/</link>
		<comments>http://blog.felix-aime.fr/securite-des-systemes-dinformation/skipfish-fuzzing-des-applications-web/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 22:31:04 +0000</pubDate>
		<dc:creator>feu</dc:creator>
				<category><![CDATA[Sécurité des systèmes d'information]]></category>
		<category><![CDATA[applications web]]></category>
		<category><![CDATA[failles]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[vulnérabilités]]></category>
		<category><![CDATA[waf]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://blog.felix-aime.fr/?p=486</guid>
		<description><![CDATA[Il y a quelques jours, un nouveau fuzzer d&#8217;applications web pointait le bout de son nez. Nommé SkipFish, ce dernier s&#8217;est annoncé comme une sorte de renouveau parmi les fuzzers d&#8217;applications web. Cependant, le buzz dépasse largement la technique et ce dernier possède encore beaucoup de défauts inhérents aux fuzzers. Faisons le tour des particularités [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques jours, un nouveau fuzzer d&#8217;applications web pointait le bout de son nez. Nommé <a href="http://code.google.com/p/skipfish/">SkipFish</a>, ce dernier s&#8217;est annoncé comme une sorte de renouveau parmi les fuzzers d&#8217;applications web. Cependant, le buzz dépasse largement la technique et ce dernier possède encore beaucoup de défauts inhérents aux fuzzers. Faisons le tour des particularités des fuzzers et démontrons pourquoi un fuzzer ne remplacera jamais un cerveau bien entraîné à la chasse aux vulnérabilités.</p>
<p>De <a href="http://w3af.sourceforge.net/">w3af</a> (mon préféré&#8230;) à <a href="http://code.google.com/p/skipfish/">Skipfish</a> en passant par <a href="http://sourceforge.net/projects/wapiti/">Wapiti</a>, le petit français : les fuzzers deviennent de plus en plus évolués pour déceler une très large variété de vulnérabilités ou d&#8217;information disclosures. Cependant, les applications web sont, comme toutes applications, systémiques. De ce fait, dans une grande majorité des cas, des conditions doivent souvent être remplies afin d&#8217;accéder à certaines vulnérabilités. Ces conditions (authentifications, patterns à respecter etc.), souvent additionnelles entre elles sont très largement omises par les fuzzers, ne lisant pas, sauf dans le cadre de certains PoCs, les informations contenues dans la page (tels que les names/types des champs inputs pouvant donner pas mal d&#8217;information sur la nature des données attendues en POST/GET). Ceci aboutissant le plus généralement à de faux négatifs et donc au passage à la trappe d&#8217;un très grand nombre de vulnérabilités potentielles.</p>
<p>Le nombre de requêtes vers une application ciblée durant une phrase de fuzzing est aussi à ne pas négliger. Ainsi, elles se comptent en dizaines de milliers, voir, centaines de milliers pour le petit dernier Skipfish laissant une trace plus que repérable dans les logs pouvant par la suite être interprétée par un IDS/IPS.</p>
<p>En parlant de dispositifs ajoutés un serveur web lambda nous pouvons de plus mentionner les <a href="http://www.owasp.org/index.php/Web_Application_Firewall">WAF</a>. Ces derniers ne permettront pas de déceler une vulnérabilité même si elle est présente dernière le reverse proxy et exploitable (par exemple en utilisant des attaques du type HPP, HPF ou même plus inhérentes aux services SGBD ; voir cette très <a href="http://www.ptsecurity.com/download/PT-devteev-CC-WAF-ENG.pdf">bonne présentation</a> pour plus de détails). Ce, pour la simple et bonne raison que les fuzzers sont développés pour déceler les vulnérabilités et non bypasser certaines protections tierces protégeant l&#8217;accès à ces vulnérabilités.</p>
<p>Bref, les tests d&#8217;intrusions sur les applications web en front-end avec un simple navigateur et quelques plugins ont encore de beaux jours devant eux, rien ne remplacera l&#8217;expérience de l&#8217;auditeur dans son travail tant dans l&#8217;analyse du code que dans une attaque en font-end. Cependant, fuzzer une application peut s&#8217;avérer utile en appoint, notamment en local.</p>
<p>Pour information, j&#8217;ai passé sur w3af et sur Skipfish le script <a href="http://directory.felix-aime.fr/_SecurityBugsHunter/">php calendar</a> avant de réaliser cet article. Voici ce qu&#8217;ils ont découverts :</p>
<p><strong>[-] Skipfish : </strong></p>
<p>Il a simplement découvert l&#8217;injection SQL et une XSS dans le formulaire d&#8217;authentification de la zone d&#8217;admin (et le dossier de la zone d&#8217;admin). Aucune SQL injection dans l&#8217;index de l&#8217;application ni même l&#8217;include locale présente aussi dans l&#8217;index de l&#8217;application.</p>
<p><strong>[-] w3af : </strong></p>
<p>Il découvre le full path disclosure lorsque la valeur de la variable lang passée en GET n&#8217;est pas celle attendue. Il découvre aussi la LFI et une XSS (que je n&#8217;avais pas vu, présente grâce à l&#8217;erreur de retour en cas de non inclusion du fichier) mais aucune SQL injection dans l&#8217;index là aussi. Il ne découvre pas la zone d&#8217;administration, donc pas d&#8217;SQL injection ou de XSS dans le formulaire d&#8217;authentification de cette dernière.</p>
<p>Je ferai peut-être, un audit plus complet, avec de vraies statistiques pour comparer les fuzzers avec un audit fait à la main.</p>
<p>PS : Merci à @<a href="http://twitter.com/wadael">wadael</a> pour me pousser à faire des articles =)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felix-aime.fr/securite-des-systemes-dinformation/skipfish-fuzzing-des-applications-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Passive &amp; Active fingerprinting : Méthodes, limites et défenses</title>
		<link>http://blog.felix-aime.fr/securite-des-systemes-dinformation/passive-active-fingerprinting-methode-limites-et-defenses/</link>
		<comments>http://blog.felix-aime.fr/securite-des-systemes-dinformation/passive-active-fingerprinting-methode-limites-et-defenses/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 20:49:43 +0000</pubDate>
		<dc:creator>feu</dc:creator>
				<category><![CDATA[Sécurité des systèmes d'information]]></category>
		<category><![CDATA[Tips&tricks]]></category>
		<category><![CDATA[fingerprinting]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[os]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[systèmes d'exploitations]]></category>
		<category><![CDATA[waf]]></category>

		<guid isPermaLink="false">http://blog.felix-aime.fr/?p=302</guid>
		<description><![CDATA[
La prise d’empreinte d’un hôte ou réseau distant est une certaine science en attaque des systèmes d’information. Le but avoué est simplement de connaitre, dans le cadre d’un hôte, son système d’exploitation ou la présence de certains équipements réseau entre l’attaquant et la cible (reverse-proxy, load-balancers, firewalls, routeurs etc.) pouvant certaines fois aboutir à un [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.felix-aime.fr/pics/fringerprint.jpg" alt="Fingerprinting" class="topimg" />
<p>La prise d’empreinte d’un hôte ou réseau distant est une certaine science en attaque des systèmes d’information. Le but avoué est simplement de connaitre, dans le cadre d’un hôte, son système d’exploitation ou la présence de certains équipements réseau entre l’attaquant et la cible (reverse-proxy, load-balancers, firewalls, routeurs etc.) pouvant certaines fois aboutir à un cartographie très relative du réseau visé.</p>
<p><em>Obfusquer</em> un système d’exploitation ou même le nombre d’hôtes/sous réseaux derrière un routeur ou tout autre périphérique réseau actif est une des principales mesures à réaliser face à un possible attaquant déterminé. Comme le dit souvent l’oncle Sun Tzu, il faut avant tout aveugler l’ennemi. Un ennemi aveuglé aura du mal à avancer et son attaque sera beaucoup plus longue.</p>
<p>De plus, le fait d’<em>obfusquer</em> un système montre bien que l’administrateur n’est pas né de la dernière pluie et qu’il possède des connaissances en sécurité informatique (wahou). En outre, dans le cadre de serveurs accessibles depuis le net, cette sécurisation évitera de se faire ficher par le nouveau né <a href="http://shodan.surtri.com">SHODAN</a> qui se base sur les bandeaux des services du type SSH, Apache, IIS, Nginx ou toute autre application un peu trop bavarde.[1]</p>
<p><strong>Il existe deux types de prise d’empreinte à distance, une active et une passive. (Et une autre un peu <em>#WTF</em> mais pas<em>#NSFW</em> pour certaines attaques)</strong></p>
<p><strong>La prise d’empreinte active,</strong> la plus connue, interagit directement avec le système distant. Nous pouvons citer comme logiciels Nmap ou Xprobe permettant ainsi, &#8211; suite à l’envoi de certains paquets forgés &#8211; déterminer grâce aux réponses faites par l’host, le système d’exploitation. Ce type de scanners, bien que répandus sont souvent utilisés dans leurs fonctions standard et les fonctions avancées sont souvent oubliées pour un Scan « basique ». De plus, ces dernières permettent de reconnaitre un OS de façon plus ou moins fiable suivant le type d’équipements réseaux/sécurités ou même les spécificités du scanner…</p>
<p>En ce qui concerne les services tournant sur les hôtes, la technique la plus triviale consiste en la récupération de bandeaux émis par ces derniers afin de déterminer de façon plus ou moins fiable la version des services et des fois, les modules ajoutés pouvant êtres faillibles. Cette technique, bien que sa mise en œuvre soit plus que facile, peut être facilement bloquée en quelques modifications sur les fichiers de configuration de ces services.</p>
<p>Pour ce qui est de la reconnaissance de load-balancers, il existe un petit tool sympa se basant sur la couche application (HTTP) du modèle OSI. Ainsi, <a href="http://halberd.superadditive.com">Halberd</a> compare les entêtes HTTP reçues telles que l’heure des serveurs, l’ordre des entêtes ou même le fameux header « X-Forwarded-For » (le tout par hash notamment) afin de déterminer la possible présence de plusieurs serveurs derrière un load-balancer. Pour résumé, cette méthode est simple mais surtout très astucieuse.</p>
<p>Enfin, nous n’allions pas parler de fringerprinting actif distant sans parler de WAF, aujourd’hui thème à la mode, les Firewalls pour Applications Web sont disposés tels des reverse-proxy. Ces derniers, permettent principalement de contrer les attaques par Injections (JS, LDAP, SQL etc.) mais possèdent bien des spécificités permettant de les <em>fingerprinter</em>. Aujourd’hui, un tool sort du lot pour cela, <a href="http://code.google.com/p/waffit/">Wafwoof</a> permettant de <em>fringerprinté</em> plus de 20 WAF différents parmi le plus connu dans l’OpenSource Mod_Security d’Apache. (Qui d’ailleurs avait une petite technique d’évasion sur les SQL injections il y a quelques jours… ;)</p>
<p><strong>La prise d’empreinte passive</strong> quant à elle s’inscrit lorsqu’on n’a pas un « accès direct » (pour faire simple) vers l’hôte (réseau NATé, firewallé, load-balancé, IDSé etc.). Elle peut se faire par différents moyens. Cependant, les plus connus restent la prise d’empreinte de la pile TCP/IP, les TTL des paquets reçus (façon vague de déterminer l’OS – sert pour architecture interne d’un réseau NATé – mais tout de même performante lorsqu’on a pas de tools[2]). D’autres logiciels beaucoup plus fiables mais plus complexes se basent sur l’entête TCP/IP des systèmes d’exploitation grâce à (liste non exhaustive) : la taille de la fenêtre, TTL, les flags ou même les options contenues dans l’entête (avec <a href="http://lcamtuf.coredump.cx/p0f.shtml">p0f</a> notamment &lt;3. Il faut pour cela que l&#8217;hôte distant se connecte à un serveur dont l&#8217;attaquant possède les droits dessus (compromis ou pas, au bon vouloir de l&#8217;attaquant) ou qu&#8217;il sniffe la connexion entre deux systèmes (donc doit être déjà présent sur un réseau).</p>
<p>Nous pouvons aussi réaliser le fingerprinting passif grâce aux numéros de séquence (pseudo aléatoires) contenus dans les entêtes des paquets TCP-IP. Du fait de leur randomisation non parfaite, chaque système possède sa propre &laquo;&nbsp;empreinte ISN&nbsp;&raquo; pouvant être comparable dans le temps avec d&#8217;autres empreintes ISN. Ce type de fingerprinting est très bien documenté par son créateur sur ce site internet [3]). Cette technique possède cependant des limites. Ainsi il faut un grand nombre de paquets échangés afin de posséder une bonne empreinte permettant de déterminer quel est le système distant. En outre les systèmes actuels s&#8217;orientent vers une randomisation plus fiable. Cependant, sa mise en place peut être utilisée pour déterminer le nombre de serveurs derrière un load-balancer (avec ISNprober notamment). &#8211; Ci dessous, un fingerprinting des ISN générées par Windows XP (voir [3]) :</p>
<p><img src="http://blog.felix-aime.fr/pics/isn.jpg" alt="Fingerprinting" /></p>
<p>Un « troisième type », encore plus &laquo;&nbsp;rock’n&#8217;rool&nbsp;&raquo; et beaucoup moins &laquo;&nbsp;matheu&nbsp;&raquo; peut permettre la prise d’empreinte d’un système utilisé en regardant simplement les META-DONNES des fichiers déposés sur des serveurs web ou envoyés directement par l’entité par le biais de simples emails. Ainsi, certaines applications trop bruyantes laissent des infos pouvant permettre à un attaquant de déterminer le système cible (grâce à des full path, les applications etc. contenus dans les fichiers) et les versions (les paths users diffèrent par exemple d’un WinXP à un Vista) des programmes spécialisés permettent de récupérer ses informations juteuses telles que <a href="http://www.edge-security.com/metagoofil.php">Metagoofil</a> (par le biais de Google) ou des fois un bon éditeur full-text fera l&#8217;affaire. Certaines informations dépassent totalement le cadre du simple fingerprinting système mais sont croustillantes à souhait (noms d’utilisateurs, paths, applications utilisées avec leur version etc.).</p>
<p>Cependant, pour cette dernière, il faut absolument que le fichier ai été modifié ou créé sur le poste (ou le domaine si utilisateurs) que l’attaquant veut « visiter ». Donc en d’autres termes, c’est bien pour se renseigner sur des hôtes de (sous)-réseaux d’entreprises et les logiciels employés (quoi ? le service de com’ utilise semble-t-il une version vulnérable d’OpenOffice ?), cependant, dans le cadre d’un bastion, cela ne servira totalement à rien… après tout, c’est logique. (Note : Regarder les META des communiqués de presse et etc. sur les sites institutionnels des entreprises ;)</p>
<p><strong>Peut-on se protéger contre le fingerprinting ?</strong></p>
<p>Comme toujours, la sécurité d’un bastion ou d’une station en particulier est beaucoup plus facile à mettre en œuvre que la sécurité d’un système d’information composée de plusieurs hôtes, réseaux, sous-réseaux, serveurs etc… Je vais vous présenter quelques pistes pour sécuriser ce petit monde, cependant, il vous faudra poursuivre par vous-même la sécurisation de vos équipements, car comme dirait papy geek « Read that fu*king manual ».</p>
<p><strong>Protection des services</strong></p>
<p>Ainsi, pour bien protéger les services, il faut faire taire ses applications, la plupart des services http, ftp,  ssh ou autres possèdent leurs propres directives à changer dans les fichiers de configuration des services afin de réduire le bruit émi et la possibilité de reconnaissance de services à distance. On essayera de réduire un max les infos, essayant de ne plus rien divulger.</p>
<p>Cependant, certains services laissent encore le nom du service tout en rendant invisible sa version (c’est le cas d’<strong>Apache</strong> par exemple ou il faut aller voir dans le <a href="http://httpd.apache.org/docs/1.3/mod/core.html">apache2.conf</a> et mettre ServerTokens sur Prod – et ne pas oublier par la même occasion ServerSignature sur off ;). En ce qui concerne <strong>IIS</strong> (éh oui…) il faut simplement valeur de registre DisableServerHeader à cette adresse <em>HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters</em> et hop, plus de signature. Et pour finir, autant faire ça pour <strong>Nginx</strong> où la manœuvre est un peu plus complexe. Pour cela, DIY dans le code source en éditant les constantes de version dans les fichiers <em>src/core/nginx.h</em> &amp; <em>src/http/modules/perl/nginx.pm</em> et enfin, en re-compilant le tout. Dans le cas d’autres services c’est à peu prêt les mêmes méthodes, pour savoir comment faire, il vous suffit de faire un simple « <em>[nom du service] disable server signature</em> » ou même « <em>[nom du service] disable welcome message</em> » dans google pour avoir des réponses à vos questions :)</p>
<p>En ce qui concerne la protection de WAF, à ce que j&#8217;ai pu lire <a href="http://tacticalwebappsec.blogspot.com/2009/06/waf-detection-with-wafw00f.html">sur ce site</a>, que nous pouvons facilement protéger <strong>mod_security</strong> en customisant les réponses du firewall suite à certaines requêtes ou en changeant simplement la signature du serveur apache (dans les headers HTTP) en utilisant l&#8217;option SecServerSignature dans la configuration de mod_security (contenue dans apache2.conf)  (<a href="http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/06-special_features.html">voir ici</a>). Je n&#8217;ai jamais utilisé d&#8217;autres WAF donc l&#8217;aide sera limitée à cela.</p>
<p><strong>Protection des bastions &amp; hôtes</strong></p>
<p>En ce qui concerne les scans liés au SI (hosts, bastions, firewalls, passerelles etc.) beaucoup de logiciels ont étés développés il y a quelques années afin de limiter les tentatives de fingerprinting de stations comme IPpersonnality ou Fingerprint Fucker patchant le kernel afin de modifier la pile TCP/IP des systèmes Linux pour se faire passer pour d’autres systèmes ou périphériques réseaux. Aujourd’hui est développé <a href="http://blog.hynesim.org/fr/ipmorph/">IPMorph</a> permettant là aussi d’obfusquer le système d’exploitation réel et de le faire passer pour un autre (plus que prometteur car permettant de tromper des logiciels de fingerprinting actifs et passifs tels que Nmap, p0f, Xprobe2, ou même SinFP). Vous trouverez une bonne documentation technique sur le site du SSTIC’09 <a href="http://actes.sstic.org/SSTIC09/IpMorph-unification_de_la_mystification_de_prise_d_empreinte/SSTIC09-article-G-Prigent-F-Vichotet-F-Harrouet-IpMorph-unification_de_la_mystification_de_prise_d_empreinte.pdf">ICI</a>. Je ne l’ai pas encore utilisé/testé mais j’ai vraiment hâte à la suite de cette lecture :)</p>
<p>Concernant le réseau, un attaquant peut s’amuser aussi à déterminé l’architecture interne de ce dernier de façon très superficielle (os et équipements) à l’aide des TTL des paquets. Effectivement, certains équipements réseaux décrémentent les TTL lors du passage d’un paquet. Il est donc bon de rétablir à une valeur par défaut le champ TTL des paquets sortant du réseau. Pour cela, il existe des options pour <a href="http://security.maruhn.com/iptables-tutorial/x10539.html">IPtables</a>.</p>
<p>Je ne sais pas si PF le fait (sale inculte – je connais que la limitation de TTL de PF), cependant, il est fort probable que comme IpTables nous pouvons le faire en cherchant un peu dans les mailinglists ou docs de PF. En ce qui concerne les autres Firewalls, à vous de voir, je ne pourrai pas trop vous aider. On peut également aller voir dans /proc/sys/net/ipv4/ip_default_ttl pour Linux et je ne sais plus quelle clé de registre pour Windows.</p>
<p>Ensuite, pour le reste, libre à vous pour ce qui est de la configuration des firewalls pour laisser passer certains paquets (ICMP etc.)  ou non dans vos DMZ, réseaux internes etc. Je ne vais pas rentrer dans ce débat troolesque à souhait aujourd&#8217;hui.</p>
<p><strong>Conclusion</strong></p>
<p>Le procédé fingerprinting système/réseau est une science où chaque système/réseau possède ses particularités. Aujourd&#8217;hui, les principales attaques possèdent des contre-mesures pouvant être mises en place plus ou moins facilement par rapport à l&#8217;architecture du SI associé.</p>
<p>Cependant, il faut trouver comme toujours <strong>le juste milieu</strong> entre la sécurité voulue, le coup de mise en place de cette dernière et l&#8217;importance des données contenues dans le systèmes pouvant être la cible d&#8217;une tentative d&#8217;attaque (qu&#8217;elle soit bien évidement interne à l&#8217;entité ou externe.).</p>
<p><strong>[1]</strong> SHODAN : Le grand jeu aujourd’hui est de trouver des tips&amp;tricks sur Shodan shells disants ouverts (<a href="http://www.twitter.com/hdmoore/statuses/6009657364">root</a> ou non), serveurs vulnérables ou déjà compromis etc.</p>
<p><strong>[2] </strong>PING/TTL : Un simple tracereoute ou un ping et roule ma poule. (Dans le cadre d&#8217;un bastion avec les requêtes ICMP vers ce dernier non dropées par un éventuel firewall.)</p>
<p><strong>[3] </strong><a href="http://lcamtuf.coredump.cx/oldtcp/tcpseq/print.html">Strange Attractors and TCP/IP Sequence Number Analysis</a></p>
<p><strong>[4] </strong>Voir les champs /Producer /Creator et /CreationDate afin d’être sur que le PDF publié est récent, cependant, certains sont encodés demandant l&#8217;ouverture par Adobe AR ou tout autre logiciel lisant les &laquo;&nbsp;entêtes&nbsp;&raquo; des PDF.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felix-aime.fr/securite-des-systemes-dinformation/passive-active-fingerprinting-methode-limites-et-defenses/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

