<?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>Je pensais qu&#039;il était avec vous... &#187; Sécurité</title>
	<atom:link href="http://www.patpro.net/blog/index.php/tag/securite/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.patpro.net/blog</link>
	<description>patpro.net</description>
	<lastBuildDate>Mon, 23 Jan 2012 23:09:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Utiliser auditd sur Mac OS X et FreeBSD &#8211; 3</title>
		<link>http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 16:17:00 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1895</guid>
		<description><![CDATA[Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 2 Exploiter les résultats de l'audit Dans le premier article j'ai mentionné très succinctement une commande qui permet de lire les logs d'audit en temps réel. Et finalement la consultation de ces logs est sans doute la chose la plus [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 3 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Cet article est la suite de <ins datetime="2011-06-01T13:53:14+00:00"><a href="/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/">Utiliser auditd sur Mac OS X et FreeBSD - 2</a></ins></p>
<h4>Exploiter les résultats de l'audit</h4>
<p>Dans le premier article j'ai mentionné très succinctement une commande qui permet de lire les logs d'audit en temps réel. Et finalement la consultation de ces logs est sans doute la chose la plus intéressante. Personne n'a envie d'activer l'audit sur une machine pour le simple plaisir de remplir son disque dur. Tout ceci doit avoir une raison d'être&nbsp;: pouvoir ensuite (ou en temps réel) exploiter les logs d'<code>auditd</code>.<span id="more-1895"></span><br />
Comme précisé par défaut dans le fichier <code>audit_control</code>, la taille maximale d'un fichier de log d'audit est 2Mo, et les anciens fichiers sont supprimés pour que le volume total ne dépasse pas 10 Mo&nbsp;:</p>
<pre>filesz:2M
expire-after:10M</pre>
<p>Il existe plusieurs options intéressantes pour <code>expire-after</code> que je vous laisse découvrir dans le <a href="x-man-page://audit_control">man audit_control</a>. Sachez seulement qu'en fonction de ce que vous choisirez de surveiller, vous allez devoir modifier ces paramètres. Sur une machine assez sollicitée, 10 Mo de log peuvent représenter moins d'une heure d'audit. Si vous avez besoin d'enquêter sur un événement de la veille, il vous sera alors impossible d'en retrouver la trace.</p>
<p>Il y a deux moyens immédiats d'exploiter les logs d'audit. Vous pouvez soit les suivre en direct comme je l'ai montré dans le premier article via la commande <code>praudit /dev/auditpipe</code>, soit les étudier <em>a posteriori</em>. C'est sans doute cette option qui sera le plus souvent utilisée. Vous pouvez ainsi utiliser <code>praudit</code> pour lire les fichiers de logs enregistrés dans <code>/var/audit/</code>.<br />
Comme les logs d'audit peuvent grossir très vite, et qu'on cherche souvent l'aiguille dans la meule de foin, il est bon de pouvoir réduire les logs à ce que l'on cherche avant de les afficher. C'est le rôle de la commande <a href="x-man-page://auditreduce">auditreduce</a>. Cette commande permet de filtrer les logs selon une série de critères tels que la date, le ou les flags d'évènement (<code>fc</code>, <code>ex</code>, ...), l'UID, le ou les évènements précis (tels qu'ils sont répertoriés dans le fichier <code>audit_event</code>), et d'autres encore.<br />
auditreduce s'utilise sous la forme générale suivante&nbsp;:</p>
<pre>auditreduce paramètres fichiers_de_log | praudit</pre>
<p>Comme les logs sont binaires, il est impératif de les traduire via <code>praudit</code>.<br />
Sur Mac OS X, voici un exemple de ce que l'on peut obtenir avec la configuration par défaut d'<code>auditd</code>. Je cherche ici tous les événements pour l'UID réelle patpro ayant eu lieu après le 5 juin 2011 à 12h. Je fais cette recherche dans le fichier de log ouvert par <code>auditd</code>.</p>
<pre># auditreduce -a 2011060512 -r patpro /var/audit/current | praudit
header,68,11,logout - local,0,Sun Jun  5 15:47:35 2011, + 877 msec
subject,patpro,root,patpro,patpro,patpro,10485,10485,0,0.0.0.0
return,success,0
trailer,68
header,68,11,logout - local,0,Sun Jun  5 15:57:05 2011, + 718 msec
subject,patpro,root,patpro,patpro,patpro,10948,10948,0,0.0.0.0
return,success,0
trailer,68</pre>
<p>Ces deux évènements correspondent à la fermeture d'une fenêtre de terminal. On voit que chacun d'eux commence par "header" et termine par "trailer". Je ne vais pas couvrir l'intégralité des champs d'un enregistrement de log d'audit, il y a beaucoup trop de possibilités. Reportez-vous au <a href="x-man-page://audit.log">man audit.log</a> pour le détail. Ceux qui ont un intérêt sinon universel, au moins relativement général, sont <code>subject</code> qui décrit le sujet qui a généré les évènements, <code>path</code> qui décrit le chemin du fichier concerné, et <code>return</code> qui indique si l'opération a réussi ou non.<br />
Le champ <code>subject</code> contient les UID et GID (audit UID, effective UID et GID, real UID et GID), le PID, et le port et l'IP de la machine connectée.<br />
Le champ <code>path</code> donne par exemple le chemin d'un exécutable lancé, ou le chemin d'un fichier créé/modifié/détruit.<br />
Le champ <code>return</code> indique success ou failure.</p>
<p>Voici un second exemple, pour un serveur Apache sur Mac OS X, lancé via l'utilitaire <code>setaudit</code>&nbsp;:</p>
<pre>header,127,11,execve(2),0,Wed Jun  1 14:50:44 2011, + 667 msec
exec arg,ls
path,/bin/ls
path,/bin/ls
attribute,100555,root,wheel,234881026,24767,0
subject,_www,_www,_www,_www,_www,26696,100031,0,0.0.0.0
return,success,0
trailer,127
header,131,11,open(2) - write,creat,trunc,0,Wed Jun  1 14:50:44 2011, + 735 msec
argument,3,0x1a4,mode
argument,2,0x601,flags
path,/Users/patpro/Sites/testFile.txt
subject,_www,_www,_www,_www,_www,26694,100031,0,0.0.0.0
return,failure : Permission denied,4294967295
trailer,131</pre>
<p>La requête http s'est faite sur la machine locale (http://localhost/...) vers un fichier PHP dont le code exécute la commande <code>system("ls");</code>  puis tente d'écrire un fichier testFile.txt.<br />
Le premier évènement enregistré montre le lancement de la commande <code>ls</code>, avec succès. Le second évènement montre la tentative d'écriture du fichier testFile.txt qui échoue.<br />
Cet exemple montre donc clairement comment les logs d'audit peuvent permettre, par exemple, de remonter la trace d'une compromission d'un serveur web. Notez que si j'avais lancé le serveur web normalement, sans utiliser <code>setaudit</code>, la ligne <code>subject</code> aurait indiqué <code>subject,patpro,_www,_www,_www,_www...</code>, patpro étant l'UID suivi par auditd. Il aurait donc fallu que le fichier <code>audit_user</code> indique les flags <code>ex</code> et <code>fc</code> pour le login patpro, sans quoi les évènements pour le serveur web n'auraient pas été enregistrés.</p>
<p><code>auditreduce</code> permet de filtrer les évènements selon un critère beaucoup plus fin que le simple flag (<code>fc</code>, <code>fd</code>, <code>ex</code>, ...). Il vous autorise à différencier chaque évènement avec la granularité du fichier <code>audit_event</code>. Si vous avez eu la curiosité d'ouvrir ce fichier, vous savez qu'il contient plus de 600 lignes de ce genre&nbsp;:</p>
<pre>0:AUE_NULL:indir system call:no
1:AUE_EXIT:exit(2):pc
2:AUE_FORK:fork(2):pc
3:AUE_OPEN:open(2) - attr only:fa
4:AUE_CREAT:creat(2):fc
5:AUE_LINK:link(2):fc
6:AUE_UNLINK:unlink(2):fd
7:AUE_EXEC:exec(2):pc,ex
8:AUE_CHDIR:chdir(2):pc
9:AUE_MKNOD:mknod(2):fc</pre>
<p>La nomenclature est simple. Chaque colonne est séparée des autres par ":". La première donne le numéro de référence d'un événement, la seconde donne son nom, la troisième le nom de la fonction correspondante, avec éventuellement un complément d'information, et la dernière indique le ou les flags correspondants.<br />
Sur les 10 lignes citées au dessus, vous notez qu'il y a déjà 4 évènements correspondants au flag <code>pc</code>, et 3 au flag <code>fc</code>. Donc si on se contente de faire un filtrage sur <code>pc</code> ou <code>fc</code>, on peut remontrer beaucoup trop d'évènements par rapport à ce que l'on cherche vraiment. Par ailleurs, dans certains cas, un même évènement peut correspondre à plusieurs flags contradictoires. Par exemple&nbsp;:</p>
<pre>75:AUE_OPEN_RTC:open(2) - read,creat,trunc:fc,fd,fr,fa,fm</pre>
<p>Cet évènement peut être détecté si on souhaite suivre les flags fc, fd, fr, fa ou fm !<br />
C'est ici qu'intervient le contenu de la ligne header des logs d'audit. En effet, l'entête indique clairement l'évènement qui est capturé. Par exemple <code>open(2) - write,creat,trunc</code>. Il suffit alors de chercher son nom dans le fichier <code>audit_event</code> pour pouvoir s'en servir de clé de filtrage&nbsp;:</p>
<pre>grep 'open(2) - write,creat,trunc' /etc/security/audit_event
79:AUE_OPEN_WTC:open(2) - write,creat,trunc:fc,fd,fw,fa,fm</pre>
<p>Il est alors possible d'utiliser <code>AUE_OPEN_WTC</code> comme ceci pour obtenir en sortie une sélection parfaite des évènements qu'on recherche&nbsp;:</p>
<pre>auditreduce -m AUE_OPEN_WTC -r www -o file=".*/bd/.*" /var/audit/current | praudit</pre>
<p>Cette commande permet de trouver tous les évènements <code>AUE_OPEN_WTC</code> pour l'utilisateur www qui ont eu pour cible des fichiers dont le chemin contient la chaîne "/bd/" dans le fichier de log d'audit courant.<br />
Il ne vous reste plus qu'à essayer par vous même !</p>
<h4>Bibliographie sommaire</h4>
<p><a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html">http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html</a><br />
<a href="https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf">https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf</a><br />
<a href="x-man-page://auditreduce">man auditreduce</a><br />
<a href="x-man-page://auditd">man auditd</a><br />
<a href="x-man-page://audit_user">man audit_user</a><br />
<a href="x-man-page://audit_control">man audit_control</a><br />
<a href="x-man-page://audit_event">man audit_event</a><br />
<a href="x-man-page://audit.log">man audit.log</a><br />
<a href="http://forums.freebsd.org/showthread.php?t=23716">http://forums.freebsd.org/showthread.php?t=23716</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 3 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser auditd sur Mac OS X et FreeBSD &#8211; 2</title>
		<link>http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 13:45:02 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1840</guid>
		<description><![CDATA[Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 1 Configuration : quid des utilisateurs comme www ? J'expliquais précédemment que le système d'audit ne peut suivre un utilisateur que si ce dernier se connecte à la machine (par ssh par exemple), et que quelques soient les ruses utilisées [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 2 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Cet article est la suite de <ins datetime="2011-06-01T13:55:03+00:00"><a href="/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/">Utiliser auditd sur Mac OS X et FreeBSD - 1</a></ins> </p>
<h4>Configuration : quid des utilisateurs comme www ?</h4>
<p>J'expliquais précédemment que le système d'audit ne peut suivre un utilisateur que si ce dernier se connecte à la machine (par ssh par exemple), et que quelques soient les ruses utilisées (su, sudo...) c'est toujours l'UID réelle de l'utilisateur qui est suivie.</p>
<p>À cause de cela, il est totalement impossible de traquer des évènements appartenant à des utilisateurs qui ne peuvent pas se connecter au système. Ainsi, une ligne comme celle-ci dans <code>audit_user</code> ne permettra de traquer aucun évènement : </p>
<pre># pour freebsd remplacer _www par www
_www:fc,fd,ex:</pre>
<p>Il serait pourtant très intéressant de savoir ce que fait Apache dans votre dos, parfois sous la direction de méchants pirates.<br />
De nos jours, La plupart des serveurs utilisent des protocoles comme l'HTTP qui permettent aux utilisateurs d'accéder aux ressources sans être authentifiés au niveau du système. Les utilisateurs en question n'existent d'ailleurs pas au niveau du système. Néanmoins, les applications web permettent de faire énormément de choses via les langages comme le PHP, y compris d'interagir avec le système, en lançant des commandes, en créant des fichiers, etc.</p>
<p>Si on souhaite qu'auditd puisse contrôler les actions de www, il faut recourir à un artifice. Attention tout de même, ce qui suit est plus proche d'un hack que d'une méthode vraiment propre, et je ne peux pas garantir son fonctionnement correct dans un environnement de production.</p>
<p>En premier lieu il faut installer un programme spécifique, qui va permettre de forcer <code>auditd</code> à suivre les actions pour une UID donnée, sans que l'utilisateur correspondant ait besoin de se connecter à la machine.</p>
<pre>curl -LO http://www.freebsd.org/~csjp/setaudit.c
cc -o setaudit -lbsm setaudit.c </pre>
<p>Cela vous donne, si tout se passe bien, le binaire <code>setaudit</code>, que l'on va utiliser sous cette forme&nbsp;: </p>
<pre>setaudit -a UID_WWW -m FLAGS /programme/de/lancement/d/apache</pre>
<p>Pour suivre les évènements d'exécution de commande sous respectivement FreeBSD et Mac OS X, cela donnera :</p>
<pre>setaudit -a www -m ex /usr/local/etc/rc.d/apache22 restart
setaudit -a _www -m ex /usr/sbin/apachectl restart</pre>
<p>Ainsi, toutes les commandes lancées par Apache (donc sous l'UID www) sont enregistrées par <code>auditd</code>.<br />
Comme le masque des évènements (les flags de l'argument <code>-m</code>) décrit ce que l'on doit suivre, il est même inutile de renseigner le fichier <code>audit_user</code>.</p>
<p><strong>Pour résumer</strong> : </p>
<ul compact="" type="square">
<li>Si vous souhaitez que l'audit suive les utilisateurs qui se connectent à la machine, vous pouvez régler les classes d'évènements qui seront soumises à l'audit pour l'ensemble des utilisateurs dans le fichier <code>audit_control</code>, et gérer les cas particuliers dans <code>audit_user</code>.</li>
<li>Si vous souhaitez que l'audit suive des UID "interne", pour traquer tout signe de compromission sur un serveur web, un serveur de mail, etc. il faudra recourir à <code>setaudit</code> pour activer l'audit au moment du lancement du service correspondant.</li>
<li>Faites attention à la liste de flags que vous choisissez. Le volume des logs d'audit peut grossir très rapidement.</li>
</ul>
<p><a href="/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/">Troisième partie de l'article -&gt;</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 2 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser auditd sur Mac OS X et FreeBSD &#8211; 1</title>
		<link>http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/#comments</comments>
		<pubDate>Tue, 31 May 2011 21:51:19 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1822</guid>
		<description><![CDATA[FreeBSD et les versions récentes de Mac OS X sont livrées avec un système d'audit intégré, dérivé du Basic Security Module de SUN, et disponible en logiciel libre sous le nom d'OpenBSM. Ce système d'audit se décompose en deux parties : un ensemble d'appels systèmes dédiés et de librairies d'un côté, et des logiciels "utilisateur" [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 1 '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><strong>FreeBSD</strong> et les versions récentes de <strong>Mac OS X</strong> sont livrées avec un système d'audit intégré, dérivé du Basic Security Module de SUN, et disponible en logiciel libre sous le nom d'<strong><a href="http://en.wikipedia.org/wiki/OpenBSM">OpenBSM</a></strong>. Ce système d'audit se décompose en deux parties : un ensemble d'appels systèmes dédiés et de librairies d'un côté, et des logiciels "utilisateur" de l'autre. Sauf précision contraire, les explications présentées ici sont valables à la fois pour FreeBSD 7 et 8, et Mac OS X 10.6. Dans cette série d'articles je ne vais aborder que l'aspect "utilisateur" du système d'audit : comment l'activer, comment le configurer, comment exploiter les résultats.<br />
Le système d'audit fourni par OpenBSM a pour but la surveillante des actions des utilisateurs. Un certain nombre d'évènements peuvent être mis sous surveillance, pour tout ou partie des utilisateurs. Quand le système d'exploitation détecte qu'un utilisateur sous surveillance génère un des évènements à surveiller, il averti le démon <code>auditd</code> qui se charge de reporter cet évènement dans un fichier de log.<span id="more-1822"></span><br />
On parle ici d'évènements de bas niveau, c'est à dire que le système d'audit ne peut pas dire que tel utilisateur à envoyé un email ou passé quinze minutes à coder en AppleScript. Par contre, il est capable de dire qu'un utilisateur à ouvert un fichier en écriture, ou juste en lecture, ou qu'il a exécuté un programme, etc.<br />
On parle donc d'un système d'audit de sécurité, totalement sans rapport avec des logiciels comme <a href="/blog/index.php/2008/10/19/541-slife-le-time-tracking-pour-tous/">SLife</a>. </p>
<p><a href="#activation">Activation du système d'audit</a><br />
<a href="#config">Configuration</a><br />
<a href="/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/">Configuration : quid des utilisateurs comme www ?</a><br />
<a href="/blog/index.php/2011/06/05/1895-utiliser-auditd-sur-mac-os-x-et-freebsd-3/">Exploiter les résultats de l'audit</a></p>
<p><a id="activation"></a></p>
<h4>Activation du système d'audit</h4>
<p>Sous FreeBSD 7 et 8, le noyau est déjà compilé avec <code>options AUDIT</code>, il ne reste donc qu'à lancer le démon <code>auditd</code> en ajoutant la ligne suivante au fichier <code>/etc/rc.conf</code> :</p>
<pre>auditd_enable="YES"</pre>
<p>puis en lançant le démon à la main :</p>
<pre>sudo /etc/rc.d/auditd start</pre>
<p>Sous Mac OS X 10.6, <code>auditd</code> est lancé d'office par <code>launchd</code>, il n'y a rien à faire.<br />
<a id="config"></a></p>
<h4>Configuration</h4>
<p>Une fois lancé, le système d'audit va enregistrer très peu d'évènements par défaut. Il convient donc de faire quelques réglages en fonction de ce que l'on cherche à accomplir.<br />
Les fichiers de configuration d'<code>auditd</code> se trouvent dans le répertoire <code>/etc/security</code> où seul root peut écrire. </p>
<ul compact="" type="square">
<li><code>audit_class</code> : décrit les différentes classes d'évènements qu'il est possible de surveiller. Il est sage de ne pas éditer ce fichier.</li>
<li><code>audit_control</code> : lisible seulement par root, ce fichier défini la politique d'audit par défaut.</li>
<li><code>audit_event</code> : le grand frère de <code>audit_class</code>, on ne le modifie pas.</li>
<li><code>audit_user</code> : le fichier de réglages par utilisateur. Il complète <code>audit_control</code> et n'est lisible que par root.</li>
<li><code>audit_warn</code> : un fichier exécutable qui est lancé quand <code>auditd</code> manque de place sur le disque pour écrire les logs.</li>
</ul>
<p>Pour un usage courant, seuls les fichiers <a href="x-man-page://audit_control">audit_control</a> et <a href="x-man-page://audit_user">audit_user</a> sont intéressants. La première chose à faire est d'aller lire leur page man respective.</p>
<p>Par défaut, le contenu du fichier <code>audit_control</code> est le suivant : </p>
<pre>dir:/var/audit
flags:lo,aa
minfree:5
naflags:lo,aa
policy:cnt,argv
filesz:2M
expire-after:10M</pre>
<p>Avec ces valeurs, <code>auditd</code> ne va répertorier que les évènements des classes "<code>lo</code>" (login/logout) et "<code>aa</code>" (authentification/autorisation). Et il va le faire pour l'ensemble des utilisateurs.<br />
Attention : après avoir lu le <a href="x-man-page://audit_control">man audit_control</a>, vous serez peut être tenté d'ajouter le champs "host" pour compléter la configuration. N'en faites rien. Cela peut perturber les outils utilisateur et rendre l'exploitation des résultats hasardeuse, voire impossible.<br />
Le contenu de <code>audit_user</code> quant à lui nous permet de préciser des flags en se basant sur le login des utilisateurs. Par défaut, le fichier <code>audit_user</code> contient :</p>
<pre>root:lo:no
</pre>
<p>C'est à dire que, quelque soit la liste des flags <code>audit_control</code>, les évènements de la classe "<code>lo</code>" seront suivis pour l'utilisateur root, et les évènements de la classe "<code>no</code>" (invalides) ne seront jamais suivis.<br />
Vous pouvez immédiatement vérifier que votre système d'audit fonctionne en lisant en direct les évènements qu'il enregistre. Il suffit pour cela de taper la commande suivante en root (ou via <code>sudo</code>) :</p>
<pre># praudit /dev/auditpipe</pre>
<p>Utilisez alors une autre fenêtre de terminal pour gérer des traces. Sous Mac OS X vous pouvez faire un sudo, ou simplement fermer la fenêtre de terminal, par exemple. Vous pourrez alors lire des choses comme cela :</p>
<pre>header,104,11,user authentication,0,Wed Jun  1 14:53:39 2011, + 965 msec
subject,root,root,wheel,root,wheel,26712,0,0,0.0.0.0
text,Authentication for user &lt;patpro&gt;
return,success,0
trailer,104
header,68,11,logout - local,0,Wed Jun  1 15:36:12 2011, + 554 msec
subject,patpro,root,patpro,patpro,patpro,28079,28079,0,0.0.0.0
return,success,0
trailer,68</pre>
<p>Nous en reparlerons dans le dernier article de la série.</p>
<p>Faites bien attention aux flags que vous allez régler. Dans certains cas, le nombre d'évènements enregistrés par le système d'audit peut être extrêmement élevé. Par défaut peu de choses sont soumises à l'audit, si bien qu'en 18 mois sur une station de travail, le contenu de <code>/var/audit</code> représente moins de 10 Mo. A contrario, sur un serveur web assez actif, où les classes d'audit sont "<code>fd,^fc,ex:no,fc</code>", on dépasse les 43 Mo en a peine 4 heures d'audit. </p>
<p>Il faut bien comprendre que l'activation de l'audit pour un utilisateur ne se produit qu'au moment de la première connexion de l'utilisateur au système. Prenons un exemple. Le fichier <code>audit_user</code> contient :</p>
<pre>root:lo:no
patpro:fc,fd,ex:
</pre>
<p>Donc pour l'utilisateur patpro, les créations, ouvertures, suppression de fichier, ou exécutions de programmes doivent être suivis. Cet utilisateur a une crontab qui tourne toutes les nuits et télécharge un fichier. Pourtant, auditd ne capturera aucun de ces évènements tant que l'utilisateur patpro ne se sera pas connecté à la machine, alors même que de nombreux évènements correspondants aux critères de l'audit se produisent.<br />
Dès que l'utilisateur patpro se sera connecté à la machine, auditd se mettra à enregistrer toutes les actions correspondant aux classes <code>fc</code>, <code>fd</code> et <code>ex</code> exécutées sous l'UID patpro. Cet audit se poursuivra même après la déconnexion de l'utilisateur.<br />
Par ailleurs, l'UID qui est traquée par auditd n'est pas l'UID apparente, mais l'UID d'origine de l'utilisateur. Si je me connecte en tant que patpro, et que je fais un <code>su -</code> ou un <code>sudo -Es</code>, je deviens root dans le shell (UID apparente), mais je reste patpro aux yeux d'auditd.<br />
Nous verrons dans un second article pourquoi ces deux contraintes sont importantes. D'ici là, vous pouvez approfondir les aspects simples de la configuration en lisant ces différents documents : </p>
<p><a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html">http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit-config.html</a><br />
<a href="https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf">https://ssl.apple.com/support/security/commoncriteria/CommonCriteriaAdminGuide.pdf</a></p>
<p><a href="/blog/index.php/2011/06/01/1840-utiliser-auditd-sur-mac-os-x-et-freebsd-2/">Deuxième partie -&gt;</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/' addthis:title='Utiliser auditd sur Mac OS X et FreeBSD &#8211; 1 '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/05/31/1822-utiliser-auditd-sur-mac-os-x-et-freebsd-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rendre des logs anonymes</title>
		<link>http://www.patpro.net/blog/index.php/2011/05/26/1814-rendre-des-logs-anonymes/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/05/26/1814-rendre-des-logs-anonymes/#comments</comments>
		<pubDate>Thu, 26 May 2011 14:50:03 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Surveillance]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1814</guid>
		<description><![CDATA[En tant qu'administrateur système, je gère un certains nombre de serveurs qui voient passer des données personnelles, soit en tant que simple intermédiaire (passerelle de messagerie) soit en tant que destination finale (connexion/authentification des utilisateurs). Ces serveurs stockent alors sous forme de fichier de log des quantités phénoménales de données nominatives comme des identifiants, des [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/26/1814-rendre-des-logs-anonymes/' addthis:title='Rendre des logs anonymes '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>En tant qu'administrateur système, je gère un certains nombre de serveurs qui voient passer des données personnelles, soit en tant que simple intermédiaire (passerelle de messagerie) soit en tant que destination finale (connexion/authentification des utilisateurs). Ces serveurs stockent alors sous forme de fichier de log des quantités phénoménales de données nominatives comme des identifiants, des adresses email, des adresses IP. Ces données sont bien évidemment confidentielles, et seule une réquisition judiciaire peut m'autoriser à en divulguer tout ou partie. Je suis moi-même autorisé à les exploiter dans le cadre de mon travail, mais uniquement à des fins statistiques, ou pour vérifier le bon fonctionnement des systèmes.<br />
Il peut pourtant arriver qu'on soit tenté de fournir des extraits de log à certaines personnes. Un jour ce sera pour un prestataire ou un support technique, un autre jour ce sera pour alimenter des chercheurs universitaires qui ont besoin de données brutes. Il est alors impératif de faire disparaître toute trace de données personnelles et nominatives de ces fichiers, tout en s'assurant que le destinataire des fichiers sera en mesure de faire son travail.<br />
Les données doivent être anonymes, mais pour autant elles doivent rester intègres et cohérentes. Par exemple, il faut que l'on puisse suivre le trajet d'un message électronique entre le serveur d'entrée, l'antispam, la passerelle interne, et le serveur de stockage final, sans pour autant connaître ni l'adresse IP du serveur de provenance, ni les adresses email de l'expéditeur et des destinataires.<br />
Après quelques recherches infructueuses, j'ai décidé de créer moi-même le script dont j'ai besoin pour rendre des log de serveurs de mails anonymes.<br />
En Perl, le module <a href="http://search.cpan.org/dist/IP-Anonymous/">IP::Anonymous</a> fourni une méthode cryptographique puissante basée sur <a href="http://www.cc.gatech.edu/computing/Telecomm/projects/cryptopan/">Crypto-PAN</a>. Cette méthode permet de rendre les adresse IPv4 anonymes tout en préservant une très grande cohérence des données. Voyez cet exemple avec à gauche les IP réelles, et à droite les IP anonymes obtenues par chiffrement :</p>
<pre>192.168.0.15 -&gt; 54.42.0.48
192.168.0.20 -&gt; 54.42.0.43
192.168.1.15 -&gt; 54.42.1.56
192.168.1.20 -&gt; 54.42.1.43</pre>
<p>En me basant sur un exemple de script Perl utilisant <code>IP::Anonymous</code>, j'ai créé un script qui permet en plus de rendre anonyme les adresses email, les message-IDs, et les noms de machines. Ainsi, et à condition de rester en IPv4, le script final permet de rendre totalement anonyme des logs Postfix :</p>
<pre>   1: #!/usr/bin/perl -wT
   2:
   3: # script brodé à partir d'un exemple
   4: # trouvé en ligne sur le forum CPAN
   5: # http://cpanforum.com/posts/1304
   6:
   7: # à utiliser sous la forme :
   8: # logs_anonymes.pl fichier.log &gt; sortie_anonyme.log
   9:
  10: use strict;
  11: $|=1;
  12:
  13: use IP::Anonymous;
  14: use Digest::MD5;
  15:
  16: # 32 integers entre 0 et 255 (jot -r 32 0 255)
  17: my @key = (135,229,13,26,29,84,46,37,231,95,211,
  18:            196,243,11,87,5,23,217,173,214,66,241,
  19:            164,67,132,149,161,151,114,137,238,75);
  20:
  21: my $obj = new IP::Anonymous(@key);
  22: my $md5 = Digest::MD5-&gt;new;
  23:
  24: # seed pour le md5
  25: my $seed = '766326241f69b1244792587f556d02b8';
  26:
  27: while(defined(my $line=&lt;&gt;)) {
  28:     chomp $line;
  29:     # les IP
  30:     if($line =~ /\d{1,3}(?:\.\d{1,3}){3}/) {
  31:         $line =~
  32:             s/(\d{1,3}(?:\.\d{1,3}){3})/$obj-&gt;anonymize($1)/eg;
  33:     }
  34:     # les adresses email et messageID
  35:     if($line =~ /[=&lt; ][^@ ]*@/) {
  36:         $line =~
  37:             s/([=&lt; ])([^@=&lt; ]*@)/$1.$md5-&gt;add($seed)-&gt;add($2)-&gt;hexdigest."@"/eg;
  38:     }
  39:     # les hostnames
  40:     if($line =~ /([=&lt; @])(([a-zA-Z0-9]***TRONQUÉ***|ZW)/i ) {
  41:         $line =~
  42:             s/([=&lt; @])((?:(?:[a-zA-Z0-9]***TRONQUÉ***|ZW)/$1.$md5-&gt;add($seed)-&gt;add($2)-&gt;hexdigest.".".$3.".".$4/egi;
  43:     }
  44:     # suppression des HELO
  45:     if($line =~ /(helo=&lt;[^&gt;]*&gt;)/i ) {
  46:         $line =~
  47:             s/(helo=&lt;[^&gt;]*&gt;)//gi;
  48:     }
  49:
  50:     print $line."\n";
  51: }</pre>
<p>Attention : certaines lignes du script ci-dessus sont tronquées volontairement. Cliquez ici pour obtenir le code du script fonctionnel :<a href="http://www.patpro.net/images/logs_anonymes.pl"> logs_anonymes.pl</a>.</p>
<p>Pour utiliser ce script, il vous faudra installer <code>IP::Anonymous</code>, comme ceci par exemple :</p>
<pre>$ sudo cpan
cpan[1]&gt; install IP::Anonymous</pre>
<p>Il vous faudra aussi personnaliser le contenu de <code>@key</code> (lignes 17 à 19), en utilisant par exemple la commande jot pour générer une liste de 32 entiers aléatoires compris entre 0 et 255 :</p>
<pre>$ jot -r -s , 32 0 255</pre>
<p><code>@key</code> doit être gardée secrète, donc votre script devra être lisible seulement par vous.<br />
Pour finir il faudra personnaliser le contenu de <code>$seed</code> (ligne 25), en saisissant la chaîne de caractères qui vous plait.<br />
Aux lignes 40 et 42 figure une liste quasi complète des TLD, obtenue auprès de l'<a href="http://data.iana.org/TLD/tlds-alpha-by-domain.txt">IANA</a>.</p>
<p>Pour utiliser le script, que vous aurez rendu exécutable, il suffit de l'invoquer comme cela :</p>
<pre>$ /chemin/de/logs_anonymes.pl fichier.log &gt; sortie_anonyme.log</pre>
<p>Testé sous Mac OS X 10.6 et FreeBSD 8.</p>
<p>Enjoy.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/05/26/1814-rendre-des-logs-anonymes/' addthis:title='Rendre des logs anonymes '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/05/26/1814-rendre-des-logs-anonymes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sauvegarde : ceinture et bretelles</title>
		<link>http://www.patpro.net/blog/index.php/2011/01/07/1740-sauvegarde-ceinture-et-bretelles/</link>
		<comments>http://www.patpro.net/blog/index.php/2011/01/07/1740-sauvegarde-ceinture-et-bretelles/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 10:17:25 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1740</guid>
		<description><![CDATA[Les recommandations sur le thème des sauvegardes foisonnent sur internet et dans la presse informatique. Chacun y vante sa méthode, ses logiciels, etc. Pour ne pas être en reste, et parce que je pense que la manière dont je procède à mes sauvegardes personnelles est intéressante, je vais présenter ci-dessous les quelques principes sur les [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/01/07/1740-sauvegarde-ceinture-et-bretelles/' addthis:title='Sauvegarde : ceinture et bretelles '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Les recommandations sur le thème des sauvegardes foisonnent sur internet et dans la presse informatique. Chacun y vante sa méthode, ses logiciels, etc. Pour ne pas être en reste, et parce que je pense que la manière dont je procède à mes sauvegardes personnelles est intéressante, je vais présenter ci-dessous les quelques principes sur les quels je m'appuie.<span id="more-1740"></span></p>
<p>La sauvegarde est une des briques de la sécurité informatique. En tant que telle, elle en hérite deux caractéristiques élémentaires : c'est un compromis, et c'est indispensable.</p>
<p>Les seules variables réelles pour l'utilisateur se trouvent donc au niveau de ce compromis. Sauvegarder des données, cela prend du temps, de la place, éventuellement de la bande passante, c'est contraignant, cela requière de l'attention. Il faut donc faire un compromis entre ce que l'on veut sauvegarder et les moyens qu'on est prêt à mettre en œuvre.</p>
<p>Par exemple, il est très facile de faire une sauvegarde de toutes ses données, mise à jour toutes les heures, avec possibilité de remonter dans le temps sur un an d'historique ou plus. Vous branchez un disque dur sur votre machine, et vous configurez Time Machine (si vous êtes sur Mac, pour les autres plateformes charge à vous de trouver le logiciel équivalent). Les sauvegardes sont alors totalement automatiques.<br />
L'accès aux données est rapide, et très simple. Mais si votre logement est cambriolé, incendié, innondé, ou que votre machine est victime d'un pirate ou d'un gros virus, vous avez toutes les chances de perdre à la fois les données de votre machine et leurs sauvegardes.<br />
Il faut donc éloigner la sauvegarde de l'ordinateur pour assurer la sécurité de vos données. Cela se complique. On peut mettre le disque externe en lieu sûr, mais alors cela oblige à des manipulations entre chaque sauvegarde : sortir le disque de sa cachette, le brancher, sauvegarder, le débrancher, le remettre en lieu sûr... Pénible !<br />
La solution simple est alors de passer par internet, mais c'est lent. Allez donc sauvegarder 200 Go de données via votre ligne ADSL. Et puis d'abord, où allez vous trouver autant de place ? Il faut payer un hébergement spécialisé. On en trouve des pas trop chers, mais contrairement à un disque dur, la dépense est mensuelle.<br />
Tel que je vois les choses, il faut utiliser la sauvegarde locale cumulée à la sauvegarde distante. Plus la sauvegarde est éloignée (et donc pénible d'accès), moins je sauvegarde de données. C'est aussi simple que ça.<br />
La seule réflexion que doit mener l'utilisateur dans ce cas de figure, est la hiérarchisation de ses données. Il doit décider parmi ses données les quelles il est inutile de sauvegarder, les quelles il est utile de sauvegarder, les quelles il est important de sauvegarder, etc.<br />
Pour la sauvegarde locale, on est sur du disque dur. L'accès est performant, c'est de la sauvegarde de confort. On peut y placer toutes les données, même les données peu importantes.<br />
Pour une sauvegarde intermédiaire (sur une autre machine du réseau par exemple), on est en accès relativement rapide, mais moins que le disque local, et on a aussi sans doute un peu moins de place. On va donc omettre les données peu importantes (les gros logiciels installés dont on a le CDROM dans l'étagère, les fichiers volumineux qu'on peut retrouver facilement ailleurs...).<br />
Pour la sauvegarde hors-site (sur un serveur accessible via internet), on sait que l'accès est lent, que l'espace est compté et facturé, on doit donc se limiter à l'essentiel (emails, documents personnels, photos de famille irremplaçables, factures électroniques...).</p>
<p>C'est un fonctionnement en entonoir. Plus la sauvegarde est contraignante (distance, temps d'accès, coût), plus vous la limitez en volume.</p>
<p>À titre d'illustration, voici comment mes sauvegardes "ceinture et bretelles" fonctionnent :</p>
<p>- Dans mon Mac, j'ai un second disque dur qui sert pour Time Machine, j'ai donc une sauvegarde incrémentale sur plus de 2 ans de toutes mes données. Toutes les heures, Time Machine fait une sauvegarde sur ce disque. L'accès est rapide, mais le disque de sauvegarde est dans la même machine que le disque sauvegardé. Le risque de perdre les deux en même temps est maximal.</p>
<p>- Sur mon réseau local, j'ai une seconde machine, avec un disque dur dédié aux sauvegardes. J'ai sur le Mac un script qui se lance tous les deux jours, et qui envoie sur cette seconde machine une partie de ma dernière sauvegarde Time Machine. Cette machine a peu à craindre d'un cambrioleur ou d'un pirate, rien à craindre des virus, mais un sinistre pourrait lui être fatal. L'accès est plus lent qu'un disque local, mais plus rapide que via internet.</p>
<p>- Ensuite, le même script envoie sur un serveur distant, au travers de ma liaison ADSL, un sous-ensemble encore plus petit de ces données. Et ce serveur distant garde l'historique des données une fois par semaine pendant 20 semaines. Je peux donc revenir en arrière de 5 mois sur les données sauvegardées.<br />
Ce serveur est à 400 km, dans un datacenter sécurisé. La probabilité pour que mes deux sauvegardes "maison" et cette sauvegarde distante disparaissent en même temps est nulle.</p>
<p>L'intégralité des trois étapes est bien sûr entièrement automatisée, et tout fonctionne sans intervention humaine. C'est primordial. Si vous utilisez un système de sauvegarde manuelle, vous pouvez être sûr qu'un jour vous oublierez, ou vous vous lasserez.</p>
<p>Pour résumer tout ceci en une ligne : ayez toujours une sauvegarde locale pour votre confort, et une sauvegarde distante pour les données vraiment importantes. Si vous réfléchissez à cela sérieusement, cela vous forcera aussi à considérer l'ensemble de vos habitudes de stockage : qu'est ce que je stocke sur ma machine ? Est-ce vraiment utile de garder tout ça ? Qu'est ce que je peux supprimer ou perdre sans états d'âme ? etc.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2011/01/07/1740-sauvegarde-ceinture-et-bretelles/' addthis:title='Sauvegarde : ceinture et bretelles '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2011/01/07/1740-sauvegarde-ceinture-et-bretelles/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Que nous apprend l&#8217;affaire &#171;&#160;Gawker&#160;&#187;</title>
		<link>http://www.patpro.net/blog/index.php/2010/12/24/1733-que-nous-apprend-laffaire-gawker/</link>
		<comments>http://www.patpro.net/blog/index.php/2010/12/24/1733-que-nous-apprend-laffaire-gawker/#comments</comments>
		<pubDate>Fri, 24 Dec 2010 00:45:09 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1733</guid>
		<description><![CDATA[Comme je l'évoquais brièvement dans un précédent article, les serveurs de l'entreprise de média en ligne Gawker ont été piratés récemment, avec pour conséquence immédiate la diffusion au public des logins, emails, et mots de passe chiffrés de plus d'un million d'utilisateurs. Pour plusieurs centaines de milliers d'entre eux, les mots de passe avaient même [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/12/24/1733-que-nous-apprend-laffaire-gawker/' addthis:title='Que nous apprend l&#8217;affaire &#171;&#160;Gawker&#160;&#187; '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Comme je l'évoquais brièvement dans un <a href="/blog/index.php/2010/12/14/1723-de-la-securite-de-vos-mots-de-passe">précédent article</a>, les serveurs de l'entreprise de média en ligne Gawker ont été piratés récemment, avec pour conséquence immédiate la diffusion au public des logins, emails, et mots de passe chiffrés de plus d'un million d'utilisateurs. Pour plusieurs centaines de milliers d'entre eux, les mots de passe avaient même été déchiffrés avant leur diffusion.<br />
Pour quelqu'un comme moi les dessous de l'affaire sont croustillants, et les détails techniques sont même passionnants. Mais, plus important : tout le monde a une leçon à tirer de ce fiasco monumental.<br />
Cette leçon, et non des moindres, est la suivante : dès l'instant où vous confiez un mot de passe à quelqu'un, ce mot de passe est vulnérable. Ça paraît tout bête comme ça, on se dit "mais oui, c'est sûr qu'en donnant mon mot de passe à mon voisin, alors il n'est plus secret". Non. Relisez bien la leçon, elle est à prendre au premier degré. Oubliez votre voisin, votre copine. Vous créez un compte chez Hotmail, vous choisissez un mot de passe pour pouvoir accéder plus tard à votre boîte mail, vous fournissez ce mot de passe à Hotmail. Ça y est, ce mot de passe n'est plus sûr. Un jour, c'est inévitable, c'est déjà arrivé, et ça arrivera à nouveau, des serveurs Hotmail seront piratés et votre mot de passe pourrait tomber dans les mains de quelqu'un.<br />
L'affaire Gawker est bourrée d'exemples illustrants parfaitement ce principe. Les employés de chez Gawker s'échangeaient des mots de passe par chat, dont les archives des conversations ont été piratées. Le piratage des bases de données des sites de Gawker a montré que les mots de passe des utilisateurs n'étaient pas sécurisés : le chiffrement utilisé était archaïque et connu depuis des années pour être déficient, etc. etc.<br />
<span id="more-1733"></span><br />
Bref, votre mot de passe, dès l'instant où il quitte votre tête pour entrer dans un système que vous ne maîtrisez pas, n'est plus en sécurité. Vous ne pouvez pas garantir son inviolabilité, car vous ne contrôlez pas la manière dont il est transmis, stocké, et utilisé.<br />
Cela doit donc vous encourager à utiliser plusieurs mots de passe et plusieurs identifiants. Bien sûr, c'est pénible. Nombreux sont les utilisateurs pour qui la simple contrainte d'un mot de passe est un supplice médiéval à base de lame rouillée et de plomb fondu. Mais à chaque fois que vous hésitez, pensez aux conséquences : que se passera-t-il si le mot de passe que je viens de saisir pour m'enregistrer sur ce forum tombe entre de mauvaises mains ? Est-ce que les pirates pourront alors accéder à ma boîte mail avec le même mot de passe ? Est-ce qu'ils pourront entrer dans ma machine ? etc.<br />
Il ne s'agit donc pas de mettre un login et un mot de passe différents partout (même si idéalement ce devrait être le cas). Il s'agit plutôt de hiérarchiser les risques, de définir des périmètres de sécurité. Votre machine est un périmètre de haute sécurité. Un pirate qui y aurait accès pourrait sans doute récupérer des informations bancaires, des informations professionnelles confidentielles, détruire 10 ans de photos de familles non sauvegardées, etc. Votre email professionnel est sans doute au même niveau de sécurité. Un forum internet concernant vos loisirs, sur le quel vous être très assidu, est important, mais moins que votre messagerie. Des forums ou des sites fréquentés très occasionnellement ne méritent probablement pas autant de précautions.<br />
Dans le périmètre "haute sécurité", chaque accès devra avoir un mot de passe fort, et unique. À l'opposé, dans le périmètre "basse sécurité", vous pourrez sans risque réel utiliser le même mot de passe partout. La sécurité est à tout les coups une affaire de compromis entre le confort et les risques que vous acceptez. Plus votre confort est grand, plus vous prenez des risques. Meilleure est votre sécurité, plus elle est contraignante. Il y a simplement des domaines où vous ne pouvez pas vous permettre d'avoir une faible sécurité.</p>
<p>Ne faites pas comme Nick Denton, le fondateur de Gawker Media : n'utilisez pas le même mot de passe ridicule (24862486) partout. Ne partagez jamais un mot de passe par email, chat, ou autre, mais partez du principe que les autres le font. Pour finir, ne faites pas confiance aux dépositaires de vos mots de passe.</p>
<p>Joyeux Noël ;)</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/12/24/1733-que-nous-apprend-laffaire-gawker/' addthis:title='Que nous apprend l&#8217;affaire &laquo;&nbsp;Gawker&nbsp;&raquo; '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2010/12/24/1733-que-nous-apprend-laffaire-gawker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De la sécurité de vos mots de passe</title>
		<link>http://www.patpro.net/blog/index.php/2010/12/14/1723-de-la-securite-de-vos-mots-de-passe/</link>
		<comments>http://www.patpro.net/blog/index.php/2010/12/14/1723-de-la-securite-de-vos-mots-de-passe/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 11:26:24 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1723</guid>
		<description><![CDATA[En terme de mot de passe, on nous rebat souvent les oreilles avec des recommandations sécuritaires qui tombent sous le sens. Par contre, les arguments qui sous-tendent ces recommandations sont parfois largement infondés. Tout d'abord, on nous dit de ne pas choisir un mot de passe facile à deviner, c'est bien sûr du bon sens. [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/12/14/1723-de-la-securite-de-vos-mots-de-passe/' addthis:title='De la sécurité de vos mots de passe '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>En terme de mot de passe, on nous rebat souvent les oreilles avec des recommandations sécuritaires qui tombent sous le sens. Par contre, les arguments qui sous-tendent ces recommandations sont parfois largement infondés.<br />
Tout d'abord, on nous dit de ne pas choisir un mot de passe facile à deviner, c'est bien sûr du bon sens. On nous dit que le mot de passe doit être long, car les ordinateurs actuels permettent de tester des milliers de mots de passe par seconde. Plus le mot de passe est long, plus il sera long à trouver. Certes. C'est mathématiquement exact. Mais à quoi arrive-t-on si on force les gens à utiliser un mot de passe à la fois long et compliqué ? Ils vont utiliser le même mot de passe partout, ils vont le noter quelque part, etc.<br />
Imaginons un instant qu'un pirate tente de deviner votre mot de passe de messagerie. Il a une très bonne connexion internet, et son ping (le délai qui s'écoule entre le moment où il envoie une requête au serveur, et le moment où le serveur dit qu'il a bien reçu cette requête) est de 10 millisecondes. Il faut ajouter à cela le temps de traitement sur le serveur, et l'envoi de la réponse. Mettons pour simplifier que la totalité de la transaction dure 20 ms. Si votre mot de passe de messagerie fait 8 caractères différents et qu'il utilise des lettres minuscules (26 possibilités), des lettres majuscules (26 possibilités), et des chiffres (10 possibilités), c'est probablement assez correct. Ce mot de passe utilise donc 8 caractères différents pris dans une série de 62. Soit un total de 136325,9 milliards de mots de passe possibles. À raison d'un mot de passe testé toutes les 20 ms, cela donne plus de 864 siècles, pour tester tous les mots de passe.<br />
Maintenant, ajoutez des caractères parmi @#&#038;"'(§!)-_$*/:;.,?+ (20 possibilités), et il faudra presque 9114 siècles pour tester tous les mots de passe.<br />
Moralité, la puissance des ordinateurs permet effectivement de tester des millions de mots de passe par heure, mais la latence des connexions internet rend ce mode d'attaque quasiment impossible, car elle ralentit terriblement le processus.<br />
<span id="more-1723"></span><br />
Les pirates se sont donc rabattus sur trois types d'attaques : l'ingénierie sociale, l'attaque de type "dictionnaire", et l'attaque directe des serveurs.<br />
L'ingénierie sociale, c'est le processus qui consiste à vous faire fournir vous même votre mot de passe, ou à deviner votre mot de passe par les données personnelles que le pirate connaît de vous. Un proche avec qui vous êtes en mauvais terme pourrait tester votre date de naissance, le nom de votre chien, etc. Un pirate qui ne vous connaît pas peut envoyer un <a href="http://www.urbanbike.com/index.php/site/comments/piegeakon-du-jour-caisse-depargne">mail de phishing</a> à toute la planète pour pousser les destinataires à révéler leur login et mot de passe, ou d'autres informations qui ont de la valeur.<br />
Certains poussent le vice jusqu'à mettre en pratique ces techniques au téléphone. Ils vous appellent et font croire qu'ils sont techniciens de tel fournisseur de service, et qu'ils ont besoin de votre mot de passe pour corriger quelque chose sur votre compte.<br />
Les attaques de type "dictionnaire" consistent à tester des couples login/mot de passe, pour une liste de valeurs très répandue uniquement. Le pirate teste quelques milliers d'identifiants classiques (john, root, user1, admin, test...) avec une liste de mots de passe classiques (mots du dictionnaire, mots dérivés du dictionnaire, séries de chiffres come 123456, mots de passe par défaut d'équipement grand public, etc.).<br />
Croyez-le ou pas, ça marche. Les deux techniques précitées sont les plus fréquentes, car elles demandent le moins d'efforts, et peuvent rapporter très gros.<br />
La troisième est la plus spectaculaire. Un groupe de pirates peut s'attaquer à un serveur d'une grosse entreprise spécialisée dans les contenus en ligne, par exemple <a href="http://www.dailytech.com/Gawker+Media+Suffers+Massive+Data+Breach+Courtesy+of+Gnosis/article20384.htm">Gawker Media</a>. Les pirates obtiennent alors l'accès à l'ensemble des comptes utilisateurs (plus d'un million dans le cas de Gawker Media) avec l'ensemble des données personnelles enregistrées : email, login, mot de passe... Bien sûr, les mots de passe sont chiffrés. Mais maintenant que les pirates ont l'accès direct aux mots de passe sans devoir les tester au travers d'une connexion internet, ils peuvent les déchiffrer en utilisant toute la puissance des machines actuelles. Et bien sûr, ils peuvent revendre la liste d'adresse email à des spammers.</p>
<blockquote><p>This weekend we discovered that Gawker Media's servers were compromised,<br />
resulting in a security breach at Lifehacker, Gizmodo, Gawker, Jezebel,<br />
io9, Jalopnik, Kotaku, Deadspin, and Fleshbot. As a result, the user name<br />
and password associated with your comment account were released on the<br />
internet. If you're a commenter on any of our sites, you probably have<br />
several questions.
</p></blockquote>
<p>Outch.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/12/14/1723-de-la-securite-de-vos-mots-de-passe/' addthis:title='De la sécurité de vos mots de passe '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2010/12/14/1723-de-la-securite-de-vos-mots-de-passe/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Capture et analyse distante avec Wireshark</title>
		<link>http://www.patpro.net/blog/index.php/2010/10/13/1698-capture-et-analyse-distante-avec-wireshark/</link>
		<comments>http://www.patpro.net/blog/index.php/2010/10/13/1698-capture-et-analyse-distante-avec-wireshark/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 10:00:28 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1698</guid>
		<description><![CDATA[Wireshark est un outil sympathique, quand vient le moment d'analyser ce qui passe sur un réseau, qui fait quoi, quel protocole prend toute votre bande passante, etc. Malheureusement, la machine sur la quelle on voudrait faire l'analyse n'est pas toujours celle sur la quelle vous pouvez lancer le logiciel. Il est possible facilement de capturer [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/10/13/1698-capture-et-analyse-distante-avec-wireshark/' addthis:title='Capture et analyse distante avec Wireshark '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wireshark.org/">Wireshark</a> est un outil sympathique, quand vient le moment d'analyser ce qui passe sur un réseau, qui fait quoi, quel protocole prend toute votre bande passante, etc. Malheureusement, la machine sur la quelle on voudrait faire l'analyse n'est pas toujours celle sur la quelle vous pouvez lancer le logiciel.<br />
Il est possible facilement de capturer les paquets voulus sur une machine, et de les analyser à postériori sur une autre. Par contre, effectuer une analyse en direct et à distance nécessite d'utiliser quelques astuces.<br />
Avant d'aller plus loin dans les explications, voici quelques pré-requis :</p>
<ul type="circle">
<li>Vous devez installer Wireshark sur votre machine (<strong>A</strong>)</li>
<li>Vous devez aussi pouvoir vous connecter en root via SSH sur la machine que vous voulez utiliser pour la capture (<strong>B</strong>)</li>
</ul>
<p>Dans un premier temps, il s'agit de créer un socket UNIX via <code>mkfifo</code>. C'est ce socket que votre Wireshark va lire en local sur la machine <strong>A</strong>.</p>
<pre>mkfifo capture.fifo</pre>
<p>Dans un deuxième temps, il faut ouvrir une connexion SSH de <strong>A</strong> vers <strong>B</strong>, lancer <code>tcpdump</code> dans cette connexion, et rediriger la sortie standard dans votre tout nouveau socket.</p>
<pre>ssh root@machineB tcpdump -s 0 -U -n -w - -i ath0 &gt;  capture.fifo</pre>
<p>Remplacez <code>ath0</code> par le nom de l'interface réseau qui vous intéresse, et éventuellement, ajoutez aux options de <code>tcpdump</code> les filtres adéquats pour affiner votre analyse.<br />
Attention, pour une connexion avec mot de passe, ssh ne vous demandera le fameux sésame qu'au moment où Wireshark ouvrira le socket. C'est à dire à l'étape suivante.</p>
<p>Dans un troisième et dernier temps, vous pouvez lancer Wireshark sur la machine <strong>A</strong> si ce n'est déjà fait, et le configurer pour lire votre socket <code>capture.fifo</code>. Pour cela, ouvrez les options de capture, et saisissez le chemin de votre socket dans le champ "interface" :</p>
<p><img src="/blog/wp-content/uploads/2010/10/wireshark_capture.jpg" alt="" title="wireshark_capture" width="580" height="526" class="alignnone size-full wp-image-1699" /></p>
<p>Enfin, cliquez sur "Start" pour lancer la capture, et si nécessaire, tapez votre mot de passe pour la machine <strong>B</strong> dans la fenêtre de terminal où votre connexion SSH est établie.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/10/13/1698-capture-et-analyse-distante-avec-wireshark/' addthis:title='Capture et analyse distante avec Wireshark '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2010/10/13/1698-capture-et-analyse-distante-avec-wireshark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De la sécurité des applications web</title>
		<link>http://www.patpro.net/blog/index.php/2009/09/04/1077-de-la-securite-des-applications-web/</link>
		<comments>http://www.patpro.net/blog/index.php/2009/09/04/1077-de-la-securite-des-applications-web/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 08:20:22 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1077</guid>
		<description><![CDATA[Je suis retombé il y a peu de temps sur quelques messages échangés avec le développeur d'un jeu en ligne sur plateforme LAMP (Linux Apache MySQL PHP). C'était entre février et juin 2004, nous (#sden "canal historique") avions beaucoup trop de temps libre, et pas assez de choses intelligentes à faire. À l'époque, le concepteur [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2009/09/04/1077-de-la-securite-des-applications-web/' addthis:title='De la sécurité des applications web '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Je suis retombé il y a peu de temps sur quelques messages échangés avec le développeur d'un jeu en ligne sur plateforme LAMP (Linux Apache MySQL PHP). C'était entre février et juin 2004, nous (<a href="irc://ircnet.nerim.fr/sden">#sden "canal historique"</a>) avions beaucoup trop de temps libre, et pas assez de choses intelligentes à faire. À l'époque, le concepteur du jeu ajoutait de nouvelles options et fonctions presque quotidiennement, signe que le code derrière ne devait pas être bien propre. Comme le jeu imposait une limite d'actions par unité de temps, et que tout ceci n'allait pas assez vite pour nous qui passions des journées entières rivés à l'écran, il a fallu prendre les choses en main.<br />
On lui a tout fait, le pauvre. Tout, de l'empoisonnement de variables aux <a href="http://xkcd.com/327/">injections SQL</a>. Avec à chaque fois un rapport de bug, bien sûr, nous ne voulions pas avoir le mauvais rôle.<br />
Le plus dur a sans doute été de faire accepter à ce développeur d'applications compilées locales, qu'une application interprétée en ligne ne peut pas se programmer avec laxisme.<br />
Le pire dans tout ça, c'est que le genre d'erreurs grossières de programmation commises par ce développeur est encore monnaie courante. La dernière faille de wordpress en est un parfait exemple.<br />
Alors bien sûr, il existe maintenant des outils sophistiqués pour lutter contre certaines attaques. <a href="http://www.modsecurity.org/">mod_security</a> pour Apache permet par exemple de bloquer toute forme d'injection SQL, certains empoisonnements de variable et d'autres types d'attaques. Pour être efficace il réclame néanmoins un paramétrage complet calqué sur le fonctionnement de votre application.<br />
Il serait tellement plus efficace de bien coder son application dès le départ !<br />
Sans prétendre être exhaustif, voici quelques recommandations&nbsp;:</p>
<p>Configurez votre serveur web en mode "production", de sorte qu'il n'affiche pas sa version ni la version des modules chargés. Sur Apache, cela se passe dans le <code>httpd.conf</code> sous la forme <code>ServerTokens Prod</code>.<br />
Ainsi, votre serveur est identifié sous le nom <code>Apache</code> au lieu de <code>Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.7l DAV/2 PHP/5.2.8 SVN/1.4.4</code></p>
<p>Si c'est possible, configurez votre firewall pour qu'il ne laisse pas sortir l'utilisateur "apache" (en général www, ou httpd), sur d'autres ports que les ports 80 et 443. Sous PF (freebsd/openbsd) cela peut se faire comme ceci&nbsp;:</p>
<pre>pass out quick proto tcp from any port 80 to any user 80 keep state
pass out quick proto tcp from any port 443 to any user 80 keep state
block out log proto { tcp, udp } user 80</pre>
<p>Si vous ne pouvez pas faire ce blocage dans le firewall, faites au moins en sorte que votre interpréteur ne puisse pas ouvrir de sockets, ni accéder à n'importe quel fichier du serveur.</p>
<p>Configurez votre interpréteur (souvent PHP) pour ne pas retourner les erreurs. Au pire, créez un virtual host de développement pour vous-seul, qui affiche les erreurs, et assurez vous que les erreurs ne s'affichent pour personne d'autre. Utilisez <code>log_errors = On</code> dans votre <code>php.ini</code> pour enregistrer les erreurs dans un fichier désigné par <code>error_log = /var/log/php_error.log</code>.</p>
<p>Ne faites jamais confiance à l'utilisateur. Il arrivera toujours un moment où il va tripoter l'URL pour changer un paramètre, il peut aller jusqu'à modifier un formulaire pour injecter du code SQL dans une variable postée.<br />
Ne faites pas confiance à javascript pour contrôler la validité des données. Contrôlez toujours côté serveur que les nombres sont des nombres, les chaînes de caractères sont bien ce qu'elles doivent être…<br />
Si vous devez transmettre des données importantes via cookie/url/autre, n'hésitez pas à les chiffrer, ou à les accompagner d'un hash pour détecter une altération éventuelle.<br />
Le referer (l'URL de provenance) est une donnée fournie par l'utilisateur. Ne bâtissez aucun système de sécurité à partir du referer.</p>
<p>Ne vous méprenez pas, il est possible d'attaquer un serveur (par injection SQL notamment) en aveugle. Même si aucune erreur n'est retournée par PHP, la page sans injection sera différente de la page avec injection, et cela suffit en général pour savoir si le code injecté est bien interprété. Il est donc vraiment vital de contrôler les données envoyées par l'utilisateur.<br />
Par essais successif, il peut être possible de lire des informations dans la base de données. Par exemple, on peut créer une injection SQL qui va juste comparer le Nième caractère d'un champ de la table avec un caractère qu'on propose. Il suffit de faire en sorte que la requête SQL échoue si le caractère est juste et ne fasse rien si le caractère n'est pas le bon (ou inversement). Suivant la page html obtenue, même sans affichage d'erreur, on saura quel caractère est en quelle position dans le champs de la table.<br />
Imaginons que mon champ contienne un mot de passe en clair de 10 caractères (c'est MAL). Cela fait un maximum de 10x255 caractères à tester, si on s'en tient à l'ASCII. Via injection SQL, j'aurai donc au maximum 2550 tests à faire pour trouver le mot de passe de 10 caractères. Si je décide non pas de tester le caractère, mais plutôt les bits qui constituent ce caractère, je n'ai plus que 8 tests à faire. En 80 tentatives au maximum, je trouve le mot de passe. Rapide, efficace, et surtout sensiblement plus discret.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2009/09/04/1077-de-la-securite-des-applications-web/' addthis:title='De la sécurité des applications web '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2009/09/04/1077-de-la-securite-des-applications-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser la liste DROP de Spamhaus dans PF</title>
		<link>http://www.patpro.net/blog/index.php/2008/11/25/632-utiliser-la-liste-drop-de-spamhaus-dans-pf/</link>
		<comments>http://www.patpro.net/blog/index.php/2008/11/25/632-utiliser-la-liste-drop-de-spamhaus-dans-pf/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 14:21:01 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=632</guid>
		<description><![CDATA[Spamhaus, dont le travail quotidien consiste à maintenir des listes noires de spammers potentiels ou avérés, met aussi à disposition des utilisateurs une liste noire assez particulière : la liste DROP, pour Don't Route Or Peer. Cette liste relativement courte regroupe les blocs d'adresses IP dont Spamhaus est certain qu'ils sont utilisés par des pirates [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/11/25/632-utiliser-la-liste-drop-de-spamhaus-dans-pf/' addthis:title='Utiliser la liste DROP de Spamhaus dans PF '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Spamhaus, dont le travail quotidien consiste à maintenir des listes noires de spammers potentiels ou avérés, met aussi à disposition des utilisateurs une liste noire assez particulière : la liste DROP, pour <a href="http://www.spamhaus.org/drop/index.lasso">Don't Route Or Peer</a>.<br />
Cette liste relativement courte regroupe les blocs d'adresses IP dont Spamhaus est certain qu'ils sont utilisés par des pirates ou des spammers professionnels.<br />
Vous pouvez donc utiliser cette liste pour alimenter votre pare-feu, sans <em>trop</em> vous poser de question. Vous ne raterez aucun email légitime, ni aucun visiteur sur vos sites, si vous bloquez toutes ces adresses dans votre firewall.<br />
La liste change de temps en temps. D'après mon expérience, pas plus d'une fois par jour. On peut donc assumer sans risque qu'une mise à jour quotidienne du firewall est largement suffisante. Mon firewall étant PF (Packet Filter sur FreeBSD et OpenBSD), mon exemple sera directement utilisable avec ce pare-feu. Pour les autres logiciels (ipfw par exemple), il faudra faire un travail d'adaptation. </p>
<p>Pour plus de simplicité, je laisse periodic lancer le script chaque nuit vers 3h15. Je crée donc un fichier <code>/usr/local/etc/periodic/daily/310.spamhaus_dropall</code> exécutable, et en lecture uniquement (sauf pour root).</p>
<p>Je dois aussi créer une table spamhaus_dropall dans la configuration de PF en ajoutant les lignes suivantes à mon <code>/etc/pf.conf</code>&nbsp;: </p>
<p>Dans les définitions de tables : </p>
<pre>table &lt;spamhaus_dropall&gt; persist { }</pre>
<p>Dans les règles proprement dites : </p>
<pre>block in log quick proto tcp from &lt;spamhaus_dropall&gt; to any</pre>
<p>Cette table, vide par défaut, va stocker le contenu filtré de la liste DROP, et sera mise à jour toutes les nuits.<br />
Ensuite je force pf à relire la configuration par la commande <code>pfctl -vf pf.conf</code>.</p>
<p>Voici le code du script, à écrire dans <code>/usr/local/etc/periodic/daily/310.spamhaus_dropall</code>&nbsp;:</p>
<pre>#!/usr/local/bin/bash
echo  downloading/cleaning blacklist drop.lasso
TMPFILE=`mktemp /tmp/drop.XXXXXX` || exit 1

/usr/local/bin/curl -s http://www.spamhaus.org/drop/drop.lasso | \
    sed 's, ;.*,,' | \
    egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}*$' &gt; \
    ${TMPFILE}

echo  flushing the spamhaus_dropall table
egrep -v '^127|^WHITELIST' ${TMPFILE} | \
    pfctl -t spamhaus_dropall -vT replace -f -
</pre>
<p>La première étape consiste à télécharger la liste. Dans la foulée, les commandes sed et egrep me permettent de nettoyer et filtrer le contenu du fichier envoyé par Spamhaus.<br />
Le fichier original ressemble à ceci : </p>
<pre>; Spamhaus DROP List 11/24/08 - (c) 2008 The Spamhaus Project
116.199.128.0/19 ; SBL56563
116.50.8.0/21 ; SBL54501
128.199.0.0/16 ; SBL62478</pre>
<p>Le fichier filtré et nettoyé, dont le contenu est écrit dans le fichier temporaire <code>TMPFILE</code> ressemble à cela : </p>
<pre>116.199.128.0/19
116.50.8.0/21
128.199.0.0/16</pre>
<p>L'étape suivante consiste à injecter les nouveaux blocs d'IP dans la table pour les faire prendre en compte par le firewall. Par mesure de précaution, j'ai choisi de filtrer ici les IP de la classe <code>127.0.0.0/8</code> ainsi que toutes les IP dont je ne veux absolument pas qu'elles figurent dans la blacklist. On n'est jamais à l'abri d'un dysfonctionnement de Spamhaus, ou du script, ou d'une malveillance locale sur la machine. Je remplace donc <code>^WHITELIST</code> par tous les préfixes d'IP que je juge nécessaire (par exemple <code>^83.225.</code> si mon IP résidentielle commence par "83.225"), et je les sépare par un <code>|</code>.<br />
La commande <code>egrep -v</code> me permet donc d'exclure toutes les lignes que je veux sortir de la liste, et envoie le reste à <code>pfctl</code> pour remplacer le contenu de la table <code>spamhaus_dropall</code> par les nouvelles IP.</p>
<p>Voici un exemple de sortie, telle qu'elle apparaît dans le mail de daily&nbsp;:</p>
<pre>downloading/cleaning blacklist drop.lasso
flushing the spamhaus_dropall table
8 addresses added.
1 addresses deleted.
A  192.43.153.0/24
A  192.43.154.0/23
A  192.43.156.0/22
A  192.43.160.0/24
A  192.86.85.0/24
A  78.157.128.0/19
A  91.209.14.0/24
A  94.176.96.0/20
D  94.176.96.0/21</pre>
<p>Le script est bien sûr perfectible. Mais c'est une base de travail qui fonctionne.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/11/25/632-utiliser-la-liste-drop-de-spamhaus-dans-pf/' addthis:title='Utiliser la liste DROP de Spamhaus dans PF '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2008/11/25/632-utiliser-la-liste-drop-de-spamhaus-dans-pf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

