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