Saison | Épisode |
---|---|
1 | 1 |
- Spotify
- Deezer
- Youtube
- Youtube Music
- Amazon Music
- Google Podcast
- Apple Podcast
- Podcast Index
- podCloud
- Podchaser
- podtail
- Podcasts Français
- Vodio
- Spreaker
Introduction#
Balado (podcast)
- Revue d'actualité
- Creuser plus en profondeur un sujet
- Entrevues (Interview)
- etc.
Le nom#
Service Hacktion, pourquoi un tel nom ?
- Je voulais hack dans le nom
- En référence à la DGSE
- "Le service Action (SA) est une unité militaire secrète française placée sous le commandement opérationnel de la direction des opérations (DO) de la direction générale de la Sécurité extérieure (DGSE)."
- Les classiques hacktualité ou hackademie ont déjà été faits 40 fois
- Je ne voulais pas reprendre tous les jeux de mots qui ont déjà été faits pour les conférences de sécurité ou les noms d'équipe de CTF
Le sujet - Rattachage DNS#
⚠️ Niveau avancé, sujet complexe ⚠️
-
BlackHat Europe 2023 - New Techniques for Split-Second DNS Rebinding
-
🇬🇧 New Techniques for Split-Second DNS Rebinding
- 🇫🇷 Nouvelles techniques pour le rattachage DNS en une fraction de seconde
Daniel Thatcher (@_danielthatcher) qui travaille pour l'entreprise Intruder.
C'est un chercheur en sécurité et un ancien ingénieur en test d'intrusion. Il partage son temps entre la recherche de nouvelles techniques de piratage d'applications web et le développement de produits (scanneur de vulnérabilité).
Article 1#
-
🇬🇧 We Hacked Ourselves With DNS Rebinding
- 🇫🇷 Nous nous sommes piratés nous-mêmes avec le rattachage DNS
Contexte#
- Ils ont des serveurs de prise de captures d'écran des sites web de leurs clients (gowitness)
- Ils ont fait des TI sur les plateformes
- gowitness suit les redirections HTTP pour prendre les captures d'écran
- gowitness hébergé sur AWS, machine virtuelle EC2
- gowitness avait accès au service de métadonnées interne à l'instance EC2 et donc avait la possibilité de récupéré les authentifiants AWS des différents rôles disponibles sur l'instance
- Pour exploiter cela, il suffit de créer un site web qui redirige vers
http://169.254.169.254/latest/meta-data/iam/security-credentials/
- Remédiations :
- Restriction réseau pour l'accès au service de métadonnées
- Utilisation d'IMDSv2 (Instance Metadata Service Version 2)
- Protection contre les SSRF (voir AWS Security Blog - Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service)
- Méthode
PUT
pour récupérer un jeton de session, puis l'utiliser dans l'en-têteX-aws-ec2-metadata-token
- Accès au service de métadonnées impossible, car la SSRF peut faire un
GET
mais pas unPUT
ou définir un en-tête
Rappels : rattachage DNS#
- Manipulation de nom de domaine (NDD)
- À ne pas confondre avec l'usurpation de nom DNS (DNS spoofing) souvent utiliser pour contourner les restrictions de domaine (ex : hôte local)
- Exemple : dans la limite, affichage flux RSS, SSRF
- Depuis JavaScript impossible d'attaquer des machines sur le réseau autre que la machine qui héberge le script grâce à la SOP (Same Origin Policy)
- TTL DNS très court pour empêcher la mise en cache
- 1ière résolution : adresse IP du serveur hébergeant le script
- Quand le script exécuté, une nouvelle requête DNS vers le NDD est faite
- 2ième résolution : adresse IP interne ou ailleurs sur le réseau
- Valide la SOP donc peut lire la réponse
- Prérequis :
- avec navigateur piloté
- le serveur le valide pas l'en-tête
Host
- HTTP (pas HTTPS)
- Exemple : hors bande, API, SSRF
Le rattachage DNS permet de contourner l'IMDSv2 d'AWS#
- Exemple d'implémentation de l'exploitation et de l'exfiltration sur ZAP Proxy (Firefox piloté) (au lieu de gowitness (Chrome piloté))
- Pour l'exfiltration, on doit attendre que la réponse DNS expire afin de pouvoir requêter vers l'IP publique
- ZAP Proxy au lieu de gowitness à cause des faibles délais d'expiration et de la restriction contre les requêtes vers les réseaux privés (voir article 2)
Article 2#
-
Intruder - Tricks for Reliable Split-Second DNS Rebinding in Chrome and Safari
-
🇬🇧 Tricks for Reliable Split-Second DNS Rebinding in Chrome and Safari
- 🇫🇷 Astuces pour un rattachage DNS fiable en une fraction de seconde dans Chrome et Safari
Intro#
- Quand IPv6 est disponible
- Technique pour contourner la restriction sur les réseaux locaux appliquée à
fetch()
dans Chromium
Caches lents#
- Technique classique d'inondation DNS : vider le cache du navigateur - en générant un grand nombre de recherches DNS pour remplir l'espace disponible dans le cache et en faisant en sorte que les entrées plus anciennes soient écartées avant d'avoir expiré - afin que le navigateur effectue une deuxième recherche du même nom d'hôte plus tôt.
- Inconvénients de l'inondation DNS :
- ~ 10 sec
- Caches intermédiaires plus difficiles à vider que le cache du navigateur, ex : ~ 5 minutes pour
systemd-resolved
, ~ 30 minutes pour certains VPN - Difficile de forcer l'utilisateur à garder la page ouverte longtemps
- Autre technique : multiples enregistrements
A
dans la même réponse pour le même domaine- Présentée à la BlackHat USA 2010 par Craig Heffner
- Exploitée par Gerald Doussot and Roger Meyer dans Github - nccgroup/singularity en 2019
- Les 2 enregistrements sont : une adresse IP publique contrôlée par l'attaquant et une adresse IP du serveur cible
- Aléatoire, car ne fonctionne que si le navigateur communique avec le serveur public en premier
- Le serveur web de l'attaquant doit bloquer le trafic provenant du navigateur de la victime, ce qui a pour effet de ramener le navigateur à envoyer toutes les futures demandes au serveur cible. Dans ce cas, JavaScript dans la page de l'attaquant pourra envoyer des requêtes à l'adresse IP cible sous la même origine
- Contourne le problème de cache car 1 seule requête DNS mais fonctionne rarement en pratique car la majorité des navigateurs essayent de contacter l'adresse privée en premier
Dans Wireshark, l'auteur a remarqué que lors du chargement de sites web dans les navigateurs modernes, une requête A et une requête AAAA sont toutes deux envoyées, voyons voir ça ⬇️
Attaquer Safari : Retarder les réponses DNS#
- Si accès à internet via IPv6 et utilisation de Safari
- Safari envoi req. DNS A (IPv4) et AAAA (IPv6)
- Safari priorise les adresses IP privées sur les publiques quand il y en a plusieurs
- Si la réponse A ou AAAA est retardée
- Safari n'attend pas de recevoir toutes les réponses
- Safari envoi des req. HTTP dès la 1ière réponse DNS
- Quand la réponse DNS différée est reçue, les adresses IP de cette réponse sont ajoutées au lot d'adresses IP que Safari peut utiliser pour les futures requêtes vers ce domaine
- Donc si la première réponse reçue est publique que celle délayée est privée, Safari enverra la 1ière req. HTTP vers l'adresse IP publique jusqu'à ce que la réponse DNS délayé soit reçue, à ce moment-là, il enverra les req. vers l'IP privée
- Pour l'exfiltration, on doit attendre que la réponse DNS expire afin de pouvoir requêter vers l'IP publique
Cf. scénario schéma
Attaquer Chrome : Utiliser la priorisation AAAA#
- Comme Safari, Chrome priorise les adresses IP privées sur celles publiques
- Mais Chrome priorise aussi les adresses IPv6 sur les IPv4 (plus de poids)
- Priorité (+ haute vers + faible) :
- IPv6 privée
- IPv6 publique 💡
- IPv4 privée 💡
- IPv4 publique
- IPv6 publique avant IPv4 privée
- S'il y a une réinitialisation, de connexion, Chrome essaye une autre IP
Cf. scénario schéma
- Mais Chrome bloque !
- Contexte non sécurisé (HTTP) et accès une adresse IP privée
- Implémentation partielle de PNA (Private Network Access) (brouillon pour un standard W3C)
- 🇫🇷 ARP (Accès aux Réseaux Privés)
Contournement de l'Accès aux Réseaux Privés#
- Les protections PNA empêchent les pages chargées par HTTP à partir de l'internet public d'adresser des requêtes aux réseaux privés
- Dans Chrome, ces protections sont mises en œuvre pour les requêtes
fetch()
, mais pas encore pour lesiFrames
- On garde tout pareil sauf qu'on essaye d'accéder au secret via une iFrame au lieu d'un req.
fetch()
- La page dans l'iFrame a la même origine que la page racine, donc la page racine peut contrôler la DOM de la page dans l'iFrame
- La page racine peut donc injecter un script qui fait une req.
fetch()
dans l'iFrame pour accéder à la cible et exfiltrer la donnée
Cf. scénario schéma
- Astuce : si la cible est un navigateur piloté, introduire du délai de chargement pour l'iFrame pour que le navigateur considère que la page n'est pas complètement chargée jusqu'à ce que l'iFrame ait fini de charger afin de s'assurer que l'attaque ait le temps de s'exécuter