mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 19:42:37 +02:00
Include already pushed articles.
This commit is contained in:
parent
691fca1b81
commit
d0f52fe745
2 changed files with 248 additions and 0 deletions
205
content/crypto/2016.03.ssl-trust.md
Normal file
205
content/crypto/2016.03.ssl-trust.md
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
Title: Avez vous confiance en SSL?
|
||||||
|
Headline: Tour d'horizon du fonctionnement de SSL et des solutions pour le sécuriser.
|
||||||
|
Date: 2016-03-25
|
||||||
|
|
||||||
|
Dans le cadre [des ateliers d'autodéfense numérique](http://autodefense-numerique.readthedocs.org/en/latest/),
|
||||||
|
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
|
||||||
|
**absolument** pas suffisant.
|
||||||
|
|
||||||
|
Allez hop, c'est parti pour:
|
||||||
|
|
||||||
|
- un tour d'horizon du fonctionnement de SSl
|
||||||
|
- quelques moyens contourner cette "protection" en faisant une attaque en pratique
|
||||||
|
- un tour des solutions existantes actuellement et de pourquoi je ne les trouve
|
||||||
|
pas vraiment satisfaisantes.
|
||||||
|
|
||||||
|
## Comment fonctionne SSL?
|
||||||
|
|
||||||
|
Pour expliquer les problèmes de SSL, j'ai d'abord besoin d'expliquer comment
|
||||||
|
tout ça fonctionne.
|
||||||
|
|
||||||
|
SSL repose sur l'utilisation de certificats, qui sont générés par des autorités
|
||||||
|
de certification (*Certificate Authority* que je nomme *CA* dans la suite de
|
||||||
|
l'article).
|
||||||
|
|
||||||
|
Les certificats SSL permettent deux choses:
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
- De garantir que le site sur lequel vous vous connectez est bien celui que
|
||||||
|
vous imaginez.
|
||||||
|
|
||||||
|
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 *CA* en qui il a confiance.
|
||||||
|
|
||||||
|
Imaginons maintenant qu'une des *CA* 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 ?
|
||||||
|
|
||||||
|
N'importe quel *CA* 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
|
||||||
|
*CA*.
|
||||||
|
|
||||||
|
Tout cela ne poserait pas de soucis si les *CA* étaient gérés de manière fiable,
|
||||||
|
mais il s'agit d'un travail compliqué, et certains *CA* ont par le passé montré
|
||||||
|
des faiblesses.
|
||||||
|
|
||||||
|
Par exemple, [DigiNotar](https://en.wikipedia.org/wiki/DigiNotar) (un *CA* 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.
|
||||||
|
|
||||||
|
Vous pouvez retrouver une liste des risques et menaces autour des *CA* [sur le
|
||||||
|
wiki de CACert](http://wiki.cacert.org/Risk/History).
|
||||||
|
|
||||||
|
## Attaque de l'homme du milieu avec SSL
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
En l'espace de quelques minutes, il est possible de faire une *attaque de
|
||||||
|
l'homme du milieu* en utilisant par exemple un outil nommé [mitm-proxy](http://docs.mitmproxy.org/en/stable).
|
||||||
|
|
||||||
|
Pour déchiffrer l'ensemble du trafic SSL, j'ai simplement eu à lancer quelques
|
||||||
|
commandes et avoir un *CA* 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).
|
||||||
|
|
||||||
|
Je les colle ici si ça vous intéresse:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ sudo aptitude install mitmproxy
|
||||||
|
$ mitm-proxy -T --host
|
||||||
|
```
|
||||||
|
|
||||||
|
Il faut faire croire à votre victime que vous êtes la passerelle vers
|
||||||
|
l'extérieur et à la passerelle que vous êtes la victime:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
arpspoof -i wlan0 -t victime gateway
|
||||||
|
arpspoof -i wlan0 -t gateway victime
|
||||||
|
```
|
||||||
|
|
||||||
|
Puis dire à notre fausse passerelle de rediriger le trafic des ports 80 et 443
|
||||||
|
vers notre proxy:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
|
||||||
|
sudo sysctl -w net.ipv4.ip_forward=1
|
||||||
|
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 443 -j REDIRECT --to-port 4443
|
||||||
|
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-port 4443
|
||||||
|
```
|
||||||
|
|
||||||
|
Et paf, **on voit tout ce qui passe entre la machine et le serveur SSL**. On peut
|
||||||
|
d'ailleurs même imaginer faire tourner ces quelques commandes sur un
|
||||||
|
raspberry pi, pour aller encore plus vite…
|
||||||
|
|
||||||
|
### Key-pinning dans les navigateurs
|
||||||
|
|
||||||
|
Actuellement, n'importe quel *CA* 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.
|
||||||
|
|
||||||
|
Cette approche a le mérite de fonctionner très bien [pour un petit nombre de
|
||||||
|
sites critiques (Google, Facebook, etc)](https://dxr.mozilla.org/mozilla-central/source/security/manager/ssl/StaticHPKPins.h?from=StaticHPKPins.h).
|
||||||
|
|
||||||
|
|
||||||
|
### HTTP Public Key Pinning (HPKP)
|
||||||
|
|
||||||
|
[*HTTP Public Key Pinning*](https://developer.mozilla.org/en/docs/Web/Security/Public_Key_Pinning)
|
||||||
|
est également une solution de *pinning* qui permet d'établir une confiance lors
|
||||||
|
de la première connexion avec le site. C'est ce qu'on appelle du *Trust on First
|
||||||
|
Use* ou *TOFU*.
|
||||||
|
|
||||||
|
Le navigateur va alors mettre ces informations dans un cache et vérifiera que
|
||||||
|
les certificats correspondent bien lors des prochaines visites.
|
||||||
|
|
||||||
|
*HPKP* est disponible dans Firefox depuis Janvier 2015 et dans Chrome
|
||||||
|
depuis Octobre 2015.
|
||||||
|
|
||||||
|
### Certificate transparency: des journaux auditables
|
||||||
|
|
||||||
|
Une autre approche est celle proposée par *certificate transparency*:
|
||||||
|
|
||||||
|
> 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.
|
||||||
|
>
|
||||||
|
> -- [Certificate Transparency](https://www.certificate-transparency.org/what-is-ct)
|
||||||
|
|
||||||
|
Autrement dit, avec ce système les *CA* 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.
|
||||||
|
|
||||||
|
Les navigateurs vont alors vérifier que les certificats utilisés sont bien des
|
||||||
|
certificats qui ont été ajoutés au journal.
|
||||||
|
|
||||||
|
Ici, toute l'intelligence est dans la vérification de ces journaux, qui
|
||||||
|
permettent donc de valider/invalider des certificats racines ou intermédiaires.
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
*Certificate-Transparency* n'est donc pas une solution contre une écoute
|
||||||
|
globale mise en place par les gouvernements par exemple.
|
||||||
|
|
||||||
|
Si vous lisez bien l'anglais, je vous invite à aller lire
|
||||||
|
[cette description du problème et de la solution](http://security.stackexchange.com/a/52838)
|
||||||
|
que je trouve très bien écrite.
|
||||||
|
|
||||||
|
### DANE + DNSSEC
|
||||||
|
|
||||||
|
> 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.
|
||||||
|
>
|
||||||
|
> -- [Dane WG](https://datatracker.ietf.org/wg/dane/charter/)
|
||||||
|
|
||||||
|
Une autre solution est appelée "DANE" et repose par dessus le protocole
|
||||||
|
*DNSSEC*.
|
||||||
|
|
||||||
|
Je connais assez mal *DNSSEC* 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.
|
||||||
|
|
||||||
|
> 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
|
||||||
|
|
||||||
|
Et aussi:
|
||||||
|
|
||||||
|
> 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:
|
||||||
|
>
|
||||||
|
> - The need to design a backward-compatible standard that can scale to the
|
||||||
|
> size of the Internet
|
||||||
|
> - Prevention of "zone enumeration" (see below) where desired
|
||||||
|
> - Deployment of DNSSEC implementations across a wide variety of DNS servers
|
||||||
|
> and resolvers (clients)
|
||||||
|
> - Disagreement among implementers over who should own the top-level domain
|
||||||
|
> root keys Overcoming the perceived complexity of DNSSEC and DNSSEC
|
||||||
|
> deployment
|
||||||
|
|
||||||
|
## Solutions basées sur la blockchain
|
||||||
|
|
||||||
|
Une dernière piste semble être l'utilisation de la *blockchain* pour distribuer
|
||||||
|
des clés par site.
|
||||||
|
|
||||||
|
La solution *DNSChain* me paraissait tout d'abord un bon point de départ mais
|
||||||
|
la lecture de [quelques critiques](https://www.indolering.com/okturtles-dnschain-unblock-us)
|
||||||
|
et interventions du développeur du projet m'ont fait changer d'avis.
|
||||||
|
|
||||||
|
Reste encore la piste de *Namecoin Control* 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!
|
43
content/thoughts/2016.05.sudweb.md
Normal file
43
content/thoughts/2016.05.sudweb.md
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
Title: Cloisonnement des activités ?
|
||||||
|
Headline: En revenant de SudWeb
|
||||||
|
Date: 2016-05-29
|
||||||
|
|
||||||
|
Je vous écris depuis un train, en rentrant de Bordeaux où j'ai passé quelques
|
||||||
|
jours à l'occasion de [SudWeb](http://sudweb.fr/). Si vous ne connaissez pas
|
||||||
|
cette conférence, il s'agit d'un moment avec des gens chouettes qui se posent
|
||||||
|
des questions sur leur metier, comment le vivre et comment continuer à en faire
|
||||||
|
un plaisir. Oh, et des fois on parle un peu de technique aussi.
|
||||||
|
|
||||||
|
# Alors, brasserie ou code ?
|
||||||
|
|
||||||
|
Ces quelques jours ont été fort inspirants. Alors que je suis en train de
|
||||||
|
changer de métier (vers celui de brasseur) c'était un moyen de me rendre compte
|
||||||
|
que bien que je ne souhaite plus faire du Web mon métier *la, tout de suite,
|
||||||
|
maintenant*, je reste un passionné par la chose.
|
||||||
|
|
||||||
|
En partant de Rennes, je ne savais pas trop quoi penser de cette situation.
|
||||||
|
Prendre un week-end pour échanger avec les gens sur quelque chose dont je
|
||||||
|
m'éloigne ? C'est pas une perte de temps ?
|
||||||
|
|
||||||
|
Si je passe du temps à écrire des bouts de code, des logiciels, à reflechir
|
||||||
|
à comment solutionner certains problemes, ce n'est pas parce que je suis payé
|
||||||
|
pour le faire, mais bel et bien parce que je me sens bien lorsque je le fais,
|
||||||
|
parce que j'y trouve un équilibre et une utilité.
|
||||||
|
|
||||||
|
Alors que je ne trouvais plus cet équilibre dans mon travail, j'ai choisi d'en
|
||||||
|
changer, mais il n'empèche que je continue à avoir des rèves d'un
|
||||||
|
monde meilleur, dans lequel l'informatique a sa place. Juste à voir les
|
||||||
|
discussions (ux, sécurité informatique, décentralisation, architecture
|
||||||
|
logicielle) que j'ai pu avoir ce weekend, il n'y a pas l'ombre d'un doute !
|
||||||
|
|
||||||
|
Jusqu'ici je me suis dit que je devais choisir. J'ai pensé naivement
|
||||||
|
que je ne pouvais pas être *et* un brasseur *et* un developpeur, mais la
|
||||||
|
réalité c'est que c'est exactement ce que je suis: les deux.
|
||||||
|
|
||||||
|
Je ne suis pas pour autant dupe sur le temps necessaire à lancer une activité
|
||||||
|
brassicole, il va falloir fournir de l'énergie et avancer sur le projet, mais
|
||||||
|
il n'empèche que même si je décide de faire de la bière mon metier, mes
|
||||||
|
passions pour le reste sont bien vivantes.
|
||||||
|
|
||||||
|
Bref, merci sudweb pour m'avoir accompagné dans ces reflexions, à l'année
|
||||||
|
prochaine, je ramène des futs ?
|
Loading…
Reference in a new issue