mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-30 20:42:37 +02:00
277 lines
No EOL
21 KiB
XML
277 lines
No EOL
21 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<feed xmlns="http://www.w3.org/2005/Atom"><title>Carnets en ligne - crypto</title><link href="https://blog.notmyidea.org/" rel="alternate"></link><link href="https://blog.notmyidea.org/feeds/crypto.atom.xml" rel="self"></link><id>https://blog.notmyidea.org/</id><updated>2016-03-25T00:00:00+01:00</updated><entry><title>Avez vous confiance en SSL?</title><link href="https://blog.notmyidea.org/avez-vous-confiance-en-ssl.html" rel="alternate"></link><published>2016-03-25T00:00:00+01:00</published><updated>2016-03-25T00:00:00+01:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2016-03-25:/avez-vous-confiance-en-ssl.html</id><summary type="html"><p>Dans le cadre <a href="http://autodefense-numerique.readthedocs.org/en/latest/">des ateliers d'autodéfense numérique</a>,
|
|
j'ai passé un peu de temps à creuser sur l'utilisation de SSL puisque
|
|
contrairement à ce que la plupart des personnes ont encore tendance à croire,
|
|
le petit cadenas (qui prouve qu'une connexion SSL est en cours) n'est
|
|
<strong>absolument</strong> pas suffisant.</p>
|
|
<p>Allez hop …</p></summary><content type="html"><p>Dans le cadre <a href="http://autodefense-numerique.readthedocs.org/en/latest/">des ateliers d'autodéfense numérique</a>,
|
|
j'ai passé un peu de temps à creuser sur l'utilisation de SSL puisque
|
|
contrairement à ce que la plupart des personnes ont encore tendance à croire,
|
|
le petit cadenas (qui prouve qu'une connexion SSL est en cours) n'est
|
|
<strong>absolument</strong> pas suffisant.</p>
|
|
<p>Allez hop, c'est parti pour:</p>
|
|
<ul>
|
|
<li>un tour d'horizon du fonctionnement de SSl</li>
|
|
<li>quelques moyens contourner cette "protection" en faisant une attaque en pratique</li>
|
|
<li>un tour des solutions existantes actuellement et de pourquoi je ne les trouve
|
|
pas vraiment satisfaisantes.</li>
|
|
</ul>
|
|
<h2>Comment fonctionne SSL?</h2>
|
|
<p>Pour expliquer les problèmes de SSL, j'ai d'abord besoin d'expliquer comment
|
|
tout ça fonctionne.</p>
|
|
<p>SSL repose sur l'utilisation de certificats, qui sont générés par des autorités
|
|
de certification (<em>Certificate Authority</em> que je nomme <em>CA</em> dans la suite de
|
|
l'article).</p>
|
|
<p>Les certificats SSL permettent deux choses:</p>
|
|
<ul>
|
|
<li>De garantir que les communications entre les navigateurs (vous) et les sites
|
|
Web ne sont connues que du détenteur du certificat du site et de vous même.</li>
|
|
<li>De garantir que le site sur lequel vous vous connectez est bien celui que
|
|
vous imaginez.</li>
|
|
</ul>
|
|
<p>Le navigateur, lors d'une visite d'un site, va télécharger le certificat
|
|
associé puis vérifier que le certificat en question a bien été généré par un
|
|
des <em>CA</em> en qui il a confiance.</p>
|
|
<p>Imaginons maintenant qu'une des <em>CA</em> essaye de savoir ce qui s'échange entre
|
|
mon navigateur et le site de ma banque (protégé par SSL). Comment cela se
|
|
passerait il ?</p>
|
|
<p>N'importe quel <em>CA</em> peut donc générer des certificats pour n'importe quel site,
|
|
et le navigateur vérifierait, lui, que le certificat a bien été généré par une
|
|
<em>CA</em>.</p>
|
|
<p>Tout cela ne poserait pas de soucis si les <em>CA</em> étaient gérés de manière fiable,
|
|
mais il s'agit d'un travail compliqué, et certains <em>CA</em> ont par le passé montré
|
|
des faiblesses.</p>
|
|
<p>Par exemple, <a href="https://en.wikipedia.org/wiki/DigiNotar">DigiNotar</a> (un <em>CA</em> des Pays-Bas)
|
|
a été compromise et les attaquant.e.s ont pu générer des certificats SSL
|
|
frauduleux, ce qui leur a permis d'attaquer des sites tels que Facebook ou GMail.</p>
|
|
<p>Vous pouvez retrouver une liste des risques et menaces autour des <em>CA</em> <a href="http://wiki.cacert.org/Risk/History">sur le
|
|
wiki de CACert</a>.</p>
|
|
<h2>Attaque de l'homme du milieu avec SSL</h2>
|
|
<p>A force de dire que c'était très facile à faire, j'ai eu envie d'essayer
|
|
d'espionner des connections protégées par SSL, et effectivement c'est
|
|
carrément flippant tellement c'est simple.</p>
|
|
<p>En l'espace de quelques minutes, il est possible de faire une <em>attaque de
|
|
l'homme du milieu</em> en utilisant par exemple un outil nommé <a href="http://docs.mitmproxy.org/en/stable">mitm-proxy</a>.</p>
|
|
<p>Pour déchiffrer l'ensemble du trafic SSL, j'ai simplement eu à lancer quelques
|
|
commandes et avoir un <em>CA</em> dans lequel le navigateur de la victime a confiance.
|
|
Je l'ai ajouté dans le navigateur cible pour simuler que je l'avais déjà
|
|
(c'est le cas si un des 1200 CA se fait pirater, ce qui me semble une surface
|
|
d'attaque assez large).</p>
|
|
<p>Je les colle ici si ça vous intéresse:</p>
|
|
<div class="highlight"><pre><span></span>$ sudo aptitude install mitmproxy
|
|
$ mitm-proxy -T --host
|
|
</pre></div>
|
|
|
|
|
|
<p>Il faut faire croire à votre victime que vous êtes la passerelle vers
|
|
l'extérieur et à la passerelle que vous êtes la victime:</p>
|
|
<div class="highlight"><pre><span></span>arpspoof -i wlan0 -t victime gateway
|
|
arpspoof -i wlan0 -t gateway victime
|
|
</pre></div>
|
|
|
|
|
|
<p>Puis dire à notre fausse passerelle de rediriger le trafic des ports 80 et 443
|
|
vers notre proxy:</p>
|
|
<div class="highlight"><pre><span></span>sudo sysctl -w net.ipv4.ip_forward<span class="o">=</span><span class="m">1</span>
|
|
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport <span class="m">443</span> -j REDIRECT --to-port <span class="m">4443</span>
|
|
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport <span class="m">80</span> -j REDIRECT --to-port <span class="m">4443</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>Et paf, <strong>on voit tout ce qui passe entre la machine et le serveur SSL</strong>. On peut
|
|
d'ailleurs même imaginer faire tourner ces quelques commandes sur un
|
|
raspberry pi, pour aller encore plus vite…</p>
|
|
<h3>Key-pinning dans les navigateurs</h3>
|
|
<p>Actuellement, n'importe quel <em>CA</em> peut générer des certificats pour
|
|
n'importe quel site, et c'est en grande partie ce qui pose souci. Une des
|
|
manières de faire évoluer la situation est d'épingler les certificats de
|
|
certains sites directement dans les navigateurs.</p>
|
|
<p>Cette approche a le mérite de fonctionner très bien <a href="https://dxr.mozilla.org/mozilla-central/source/security/manager/ssl/StaticHPKPins.h?from=StaticHPKPins.h">pour un petit nombre de
|
|
sites critiques (Google, Facebook, etc)</a>.</p>
|
|
<h3>HTTP Public Key Pinning (HPKP)</h3>
|
|
<p><a href="https://developer.mozilla.org/en/docs/Web/Security/Public_Key_Pinning"><em>HTTP Public Key Pinning</em></a>
|
|
est également une solution de <em>pinning</em> qui permet d'établir une confiance lors
|
|
de la première connexion avec le site. C'est ce qu'on appelle du <em>Trust on First
|
|
Use</em> ou <em>TOFU</em>.</p>
|
|
<p>Le navigateur va alors mettre ces informations dans un cache et vérifiera que
|
|
les certificats correspondent bien lors des prochaines visites.</p>
|
|
<p><em>HPKP</em> est disponible dans Firefox depuis Janvier 2015 et dans Chrome
|
|
depuis Octobre 2015.</p>
|
|
<h3>Certificate transparency: des journaux auditables</h3>
|
|
<p>Une autre approche est celle proposée par <em>certificate transparency</em>:</p>
|
|
<blockquote>
|
|
<p>Certificate Transparency aims to remedy these certificate-based threats by
|
|
making the issuance and existence of SSL certificates open to scrutiny by
|
|
domain owners, CAs, and domain users.</p>
|
|
<p>-- <a href="https://www.certificate-transparency.org/what-is-ct">Certificate Transparency</a></p>
|
|
</blockquote>
|
|
<p>Autrement dit, avec ce système les <em>CA</em> doivent rendre public le fait qu'ils
|
|
aient signé de nouveaux certificats intermédiaires. La signature est ajoutée à
|
|
un journal sur lequel il n'est possible que d'écrire.</p>
|
|
<p>Les navigateurs vont alors vérifier que les certificats utilisés sont bien des
|
|
certificats qui ont été ajoutés au journal.</p>
|
|
<p>Ici, toute l'intelligence est dans la vérification de ces journaux, qui
|
|
permettent donc de valider/invalider des certificats racines ou intermédiaires.</p>
|
|
<p>Il me semble donc qu'il serait possible d'ajouter un certificat frauduleux le
|
|
temps d'une attaque (et celui ci serait détecté et supprimé ensuite).</p>
|
|
<p><em>Certificate-Transparency</em> n'est donc pas une solution contre une écoute
|
|
globale mise en place par les gouvernements par exemple.</p>
|
|
<p>Si vous lisez bien l'anglais, je vous invite à aller lire
|
|
<a href="http://security.stackexchange.com/a/52838">cette description du problème et de la solution</a>
|
|
que je trouve très bien écrite.</p>
|
|
<h3>DANE + DNSSEC</h3>
|
|
<blockquote>
|
|
<p>The DANE working group has developed a framework for securely
|
|
retrieving keying information from the DNS [RFC6698]. This
|
|
framework allows secure storing and looking up server public key
|
|
information in the DNS. This provides a binding between a domain
|
|
name providing a particular service and the key that can be used
|
|
to establish encrypted connection to that service.</p>
|
|
<p>-- <a href="https://datatracker.ietf.org/wg/dane/charter/">Dane WG</a></p>
|
|
</blockquote>
|
|
<p>Une autre solution est appelée "DANE" et repose par dessus le protocole
|
|
<em>DNSSEC</em>.</p>
|
|
<p>Je connais assez mal <em>DNSSEC</em> donc j'ai passé un peu de temps à lire des
|
|
documents. L'impression finale que ça me laisse est que le problème est
|
|
exactement le même que pour SSL: un certain nombre de personnes détiennent les
|
|
clés et toute la sécurité repose sur cette confiance. Or il est possible que
|
|
ces clés soient détenues par des personnes non dignes de confiance.</p>
|
|
<blockquote>
|
|
<p>Secure DNS (DNSSEC) uses cryptographic digital signatures signed with a
|
|
trusted public key certificate to determine the authenticity of data.
|
|
-- https://en.wikipedia.org/wiki/DNS_spoofing</p>
|
|
</blockquote>
|
|
<p>Et aussi:</p>
|
|
<blockquote>
|
|
<p>It is widely believed[1] that securing the DNS is critically important for
|
|
securing the Internet as a whole, but deployment of DNSSEC specifically has
|
|
been hampered (As of 22 January 2010) by several difficulties:</p>
|
|
<ul>
|
|
<li>The need to design a backward-compatible standard that can scale to the
|
|
size of the Internet</li>
|
|
<li>Prevention of "zone enumeration" (see below) where desired</li>
|
|
<li>Deployment of DNSSEC implementations across a wide variety of DNS servers
|
|
and resolvers (clients)</li>
|
|
<li>Disagreement among implementers over who should own the top-level domain
|
|
root keys Overcoming the perceived complexity of DNSSEC and DNSSEC
|
|
deployment</li>
|
|
</ul>
|
|
</blockquote>
|
|
<h2>Solutions basées sur la blockchain</h2>
|
|
<p>Une dernière piste semble être l'utilisation de la <em>blockchain</em> pour distribuer
|
|
des clés par site.</p>
|
|
<p>La solution <em>DNSChain</em> me paraissait tout d'abord un bon point de départ mais
|
|
la lecture de <a href="https://www.indolering.com/okturtles-dnschain-unblock-us">quelques critiques</a>
|
|
et interventions du développeur du projet m'ont fait changer d'avis.</p>
|
|
<p>Reste encore la piste de <em>Namecoin Control</em> que je n'ai pas encore creusée.
|
|
Peut-être pour un prochain billet. Toute piste de réflexion est bien sur la
|
|
bienvenue sur ces sujets!</p></content><category term="crypto"></category></entry><entry><title>Retours sur un atelier ZeroNet</title><link href="https://blog.notmyidea.org/retours-sur-un-atelier-zeronet.html" rel="alternate"></link><published>2016-03-17T00:00:00+01:00</published><updated>2016-03-17T00:00:00+01:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2016-03-17:/retours-sur-un-atelier-zeronet.html</id><summary type="html"><p>Mardi dernier se tenait <a href="http://biblio.insa-rennes.fr/crypto">une <em>cryptoparty</em></a> dans les locaux de l'INSA de Rennes.</p>
|
|
<p>L'évènement s'étant rempli au delà de toutes les espérances, on m'a proposé de
|
|
venir y tenir un atelier, que j'ai proposé sur <a href="https://zeronet.io">ZeroNet</a>, un
|
|
petit projet fort sympathique qui pourrait devenir une nouvelle manière de
|
|
distribuer le …</p></summary><content type="html"><p>Mardi dernier se tenait <a href="http://biblio.insa-rennes.fr/crypto">une <em>cryptoparty</em></a> dans les locaux de l'INSA de Rennes.</p>
|
|
<p>L'évènement s'étant rempli au delà de toutes les espérances, on m'a proposé de
|
|
venir y tenir un atelier, que j'ai proposé sur <a href="https://zeronet.io">ZeroNet</a>, un
|
|
petit projet fort sympathique qui pourrait devenir une nouvelle manière de
|
|
distribuer le Web, permettant notamment d'éviter la censure.</p>
|
|
<p>Avant toute autre chose, merci énormément à l'équipe de la bibliothèque de
|
|
l'INSA pour l'organisation de cet évènement qui à une réelle portée politique.</p>
|
|
<h2>Un peu d'histoire</h2>
|
|
<p>Il me semble que Tim Bernes Lee (l'inventeur du Web) avait prévu le Web comme un
|
|
protocole décentralisé. Chacun hébergerait ses données et les servirait aux
|
|
autres, qui pourraient alors y accéder.</p>
|
|
<p>Avec ce fonctionnement, impossible alors d'accéder à des sites si leur auteur
|
|
n'est pas en ligne. Qu'à cela ne tienne, on s'est mis à avoir des machines qui
|
|
restent connectées au réseau 24 heures par jour. Et puis une machine ne
|
|
suffisant plus, on a eu des fermes de machines dans des <em>data centers</em> etc afin
|
|
de supporter les milliers d'utilisateurs des sites.</p>
|
|
<h2>Un Web décentralisé</h2>
|
|
<p>ZeroNet permet (entre autres) de répondre à ce problème en proposant une manière alternative de <strong>distribuer le Web</strong>, en pair à pair. Lors d'une visite d'un site:</p>
|
|
<ol>
|
|
<li>Vous contactez un <em>tracker</em> BitTorrent pour connaitre la liste des autres
|
|
visiteurs du site (les <em>pairs</em>).</li>
|
|
<li>Vous demandez aux <em>pairs</em> de vous donner les fichiers du site.</li>
|
|
<li>Vous validez que les fichiers servis sont bien les bons (en vérifiant la
|
|
signature attachée).</li>
|
|
</ol>
|
|
<p>N'importe quel visiteur devient alors un <em>pair</em>, qui sert le site aux autres
|
|
visiteurs.</p>
|
|
<p>Parmi les nombreux avantages de cette approche, je note particulièrement que:</p>
|
|
<ul>
|
|
<li>Il est très difficile de censurer un site — Il est sur l'ensemble des machines
|
|
des visiteurs.</li>
|
|
<li>Les attaques par <em>fingerprinting</em> sont impossibles: le navigateur Web se
|
|
connecte à un serveur <em>proxy</em> local.</li>
|
|
<li>Vous détenez directement vos données et (par design) ne les donnez pas à des
|
|
silos (Facebook, Google, etc.)</li>
|
|
</ul>
|
|
<p>Si vous êtes interessés par une démonstration rapide, j'ai enregistré une vidéo
|
|
de 10 minutes où je parle en anglais avec une voix très grave.</p>
|
|
<video controls="" src="http://alexis.notmyidea.org/zeronet.webm" width=800></video>
|
|
|
|
<h2>Atelier</h2>
|
|
<p>Pour l'atelier, j'ai choisi de faire une présentation rapide du projet (<a href="{filename}/static/zeronet-presentation-fr.pdf">j'ai
|
|
traduit les slides</a> anglais
|
|
pour l'occasion — <a href="https://docs.google.com/presentation/d/158C_-V1ueNaaKHMBMBgGOVhunb9xrXzB3hC_g1N53c0/edit?usp=sharing">accès aux sources</a>)
|
|
avant d'installer ZeroNet sur les machines et de l'utiliser pour publier un
|
|
site.</p>
|
|
<h3>Partager sur le réseau local</h3>
|
|
<p>Nous avons eu des soucis à cause du réseau (un peu congestionné) sur lequel
|
|
les ports utilisés pour la discussion entre <em>pairs</em> étaient fermés. Il est bien
|
|
sur possible de faire tourner le tout de manière indépendante du reste du réseau,
|
|
mais je n'avais pas prévu le coup.</p>
|
|
<p>Voici donc comment faire pour contourner le souci:</p>
|
|
<ol>
|
|
<li>Installer et lancer un <em>tracker</em> BitTorrent (De manière surprenante,
|
|
<a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=685575">rien n'est packagé pour debian pour l'instant</a>)
|
|
J'ai choisi d'installer <a href="http://erdgeist.org/arts/software/opentracker/#build-instructions">OpenTracker</a></li>
|
|
<li>Ensuite lancer ZeroNet avec des options spécifiques.</li>
|
|
</ol>
|
|
<div class="highlight"><pre><span></span>$ python zeronet.py --trackers udp://localhost:6969 --ip_external <span class="m">192</span>.168.43.207
|
|
$ python zeronet.py --trackers udp://192.168.43.207:6969 --ip_external <span class="m">192</span>.168.43.172
|
|
</pre></div>
|
|
|
|
|
|
<p>Il est nécessaire de spécifier l'adresse IP externe que chaque nœud expose pour
|
|
éviter qu'elle n'essaye d'aller la trouver par elle même: nous voulons l'adresse
|
|
du réseau local, et non pas l'adresse internet.</p>
|
|
<p>La prochaine fois je tenterais de venir avec un HotSpot Wifi et un tracker
|
|
BitTorrent dans la poche!</p>
|
|
<h2>Questions / Réponses</h2>
|
|
<p>Il y avait quelques questions intéressantes auxquelles je n'ai pas toujours su
|
|
répondre sur le moment. Après quelques recherches, je rajoute des détails ici.</p>
|
|
<h3>Torrent + Tor = brèche de sécu ?</h3>
|
|
<p>Il me semblait avoir entendu parler de problèmes de <em>dé-anonymisation</em>
|
|
<a href="https://hal.inria.fr/file/index/docid/471556/filename/TorBT.pdf">lors de l'utilisation de BitTorrent par dessus Tor</a>.</p>
|
|
<blockquote>
|
|
<p>Dans certains cas, certains clients torrents (uTorrent, BitSpirit, etc)
|
|
écrivent directement votre adresse IP dans l'information qui est envoyée
|
|
au tracker et/ou aux autres pairs.
|
|
— https://blog.torproject.org/blog/bittorrent-over-tor-isnt-good-idea</p>
|
|
</blockquote>
|
|
<p><a href="https://github.com/HelloZeroNet/ZeroNet/issues/274">Ce n'est pas le cas de ZeroNet</a>, ce qui évacue le souci.</p>
|
|
<h3>ZeroMail, c'est lent non ?</h3>
|
|
<p>Une des applications de démo, <em>ZeroMail</em>, propose un mécanisme qui permet de
|
|
s'envoyer des messages chiffrés sur un réseau pair à pair. L'approche choisie
|
|
est de chiffrer les messages avec la clé du destinataire et de le mettre dans
|
|
un <em>pot commun</em>. Tout le monde essaye de déchiffrer tous les messages, mais ne
|
|
peut déchiffrer que les siens.</p>
|
|
<p>Cela permet de ne <strong>pas</strong> fuiter de méta-données, <a href="{filename}../crypto/2015.05.pgp-problemes.rst">à l'inverse de PGP</a>.</p>
|
|
<p>Je n'ai en fait pas de réponse claire à donner à cette question: l'auteur de
|
|
ZeroNet me disait que 10MB (la limite de taille d'un site, par défaut)
|
|
correspondait à beaucoup de place pour stocker des messages, et qu'il était
|
|
possible de supprimer les anciens messages une fois qu'ils sont lus par exemple.</p>
|
|
<p>Une autre solution à laquelle je pensait était de créer un <em>ZeroSite</em> pour
|
|
chaque récipient, mais on connait à ce moment là le nombre de messages qu'un
|
|
utilisateur peut recevoir.</p>
|
|
<p>Je vois plusieurs problèmes avec le design actuel de ZeroMail (il me semble
|
|
assez facile d'y faire un déni de service par exemple). A creuser.</p>
|
|
<h3>Comment héberger des très gros sites ?</h3>
|
|
<p>Par exemple, comment faire pour héberger Wikipedia ?</p>
|
|
<p>Il semble que la meilleure manière de faire serait de séparer Wikipedia en
|
|
un tas de petites ressources (par catégorie par ex.). Les gros médias pourraient
|
|
être considérés optionnels (et donc téléchargés uniquement à la demande)</p>
|
|
<h3>Est-ce qu'on à vraiment besoin d'un tracker ?</h3>
|
|
<p>Le support d'une DHT <a href="https://github.com/HelloZeroNet/ZeroNet/issues/57">est souhaité</a>,
|
|
mais pour l'instant pas encore implémenté. L'utilisation de la DHT BitTorrent
|
|
n'est pas une option puisque <a href="https://github.com/HelloZeroNet/ZeroNet/issues/57">Tor ne supporte pas UDP</a>.</p></content><category term="crypto"></category></entry></feed> |