
DNSChef (NG) - Proxy DNS pour testeurs d'intrusion et analystes de malwares
[!NOTE] Ceci est une version mise à jour de DNSChef initialement écrit par @iphelix``` _ _ __
| | v0.7 | | / |
| | __ ___ | | | | ______ _ __ __ _ /| '_ \/ __|/ __| '_ \ / _ \ _|______| '_ \ / _| | (| | | | _ \ (__| | | | __/ | | | | | (| | _,|| ||/_|| ||___|| || ||_, | / | |_/ D O C U M E N T A T I O N
DNSChef est un proxy DNS hautement configurable pour les testeurs d'intrusion et les analystes de malwares. Un proxy DNS (aussi appelé "Fake DNS") est un outil utilisé pour l'analyse du trafic réseau d'applications, entre autres usages. Par exemple, un proxy DNS peut être utilisé pour falsifier les requêtes vers "badguy.com" afin qu'elles pointent vers une machine locale pour y être terminées ou interceptées au lieu d'un hôte réel sur Internet.
Il existe plusieurs proxys DNS. La plupart se contentent de pointer toutes les requêtes DNS vers une seule adresse IP ou n'implémentent qu'un filtrage rudimentaire. DNSChef a été développé dans le cadre d'un test d'intrusion où un système plus configurable était nécessaire. En conséquence, DNSChef est une application multiplateforme capable de forger des réponses basées sur des listes de domaines inclusives et exclusives, de prendre en charge plusieurs types d'enregistrements DNS, de faire correspondre des domaines avec des jokers, de relayer les vraies réponses pour les domaines non correspondants, de définir des fichiers de configuration externes, l'IPv6 et bien d'autres fonctionnalités. Vous trouverez ci-dessous une explication détaillée de chacune des fonctionnalités et des utilisations suggérées.
L'utilisation d'un proxy DNS est recommandée dans les situations où il n'est pas possible de forcer une application à utiliser directement un autre serveur proxy. Par exemple, certaines applications mobiles ignorent complètement les paramètres de proxy HTTP du système d'exploitation. Dans ces cas, l'utilisation d'un serveur proxy DNS tel que DNSChef vous permettra d'amener cette application à rediriger les connexions vers la destination souhaitée.
## Nouvelles fonctionnalités
- Nécessite Python 3.11+
- Prend en charge le transfert de fichiers via DNS (uniquement via `A`,`AAAA`,`TXT` pour l'instant...)
- Le fichier de configuration est désormais en TOML
- API HTTP optionnelle (permet de consulter les journaux et de mettre à jour la configuration à distance)
- Entièrement asynchrone pour des performances accrues (utilise AsyncIO)
- Journalisation structurée et un certain nombre d'améliorations de la qualité de vie
- Est désormais un package Python
- Dockerisé
- Inclut un certain nombre de PR et de correctifs du dépôt d'origine
## Installation
Pour installer la dernière version, vous devriez utiliser [pipx](https://pypa.github.io/pipx/) (sauf si vous êtes une espèce de merde qui aime les steaks bâclés) :
pipx install dnschef-ng
Si vous voulez l'API HTTP (nécessite des dépendances supplémentaires) :
pipx install dnschef-ng[api]
Installez la dernière version depuis Git avec pipx :
pipx install git+https://github.com/byt3bl33d3r/dnschef-ng.git
Installez la dernière version depuis Git avec pipx et les dépendances pour l'API HTTP :
pipx install "git+https://github.com/byt3bl33d3r/dnschef-ng.git#egg=dnschef-ng[api]"
## Configuration d'un proxy DNS
Avant de pouvoir commencer à utiliser DNSChef, vous devez configurer votre machine pour utiliser un serveur de noms DNS avec l'outil en cours d'exécution. Vous avez plusieurs options selon le système d'exploitation que vous allez utiliser :
- **Linux** - Modifiez */etc/resolv.conf* pour inclure une ligne tout en haut avec votre hôte d'analyse du trafic (par exemple, ajoutez "nameserver 127.0.0.1" si vous exécutez localement). Vous pouvez également ajouter une adresse de serveur DNS à l'aide d'outils tels que Network Manager. Dans Network Manager, ouvrez les paramètres IPv4, sélectionnez *Adresses automatiques (DHCP) uniquement* ou *Manuel* dans la liste déroulante *Méthode* et modifiez le champ *Serveurs DNS* pour inclure une adresse IP avec DNSChef en cours d'exécution.
- **Windows** - Sélectionnez *Connexions réseau* dans le *Panneau de configuration*. Sélectionnez ensuite l'une des connexions (par exemple, "Connexion au réseau local"), faites un clic droit dessus et choisissez Propriétés. Dans la boîte de dialogue qui apparaît, sélectionnez *Protocole Internet (TCP/IP)* et cliquez sur Propriétés. Enfin, sélectionnez l'option *Utiliser les adresses de serveur DNS suivantes* et saisissez l'adresse IP avec DNSChef en cours d'exécution. Par exemple, si vous exécutez localement, saisissez 127.0.0.1.
- **OS X** - Ouvrez *Préférences Système* et cliquez sur l'icône *Réseau*. Sélectionnez l'interface active et renseignez le champ *Serveur DNS*. Si vous utilisez Airport, vous devrez cliquer sur le bouton *Avancé...* et modifier les serveurs DNS à partir de là. Vous pouvez également modifier */etc/resolv.conf* et y ajouter un faux serveur de noms tout en haut (par exemple "nameserver 127.0.0.1").
- **iOS** - Ouvrez *Réglages* et sélectionnez *Général*. Sélectionnez ensuite *Wi-Fi* et cliquez sur la flèche bleue à droite d'un point d'accès actif dans la liste. Modifiez l'entrée DNS pour pointer vers l'hôte où DNSChef est en cours d'exécution. Assurez-vous d'avoir désactivé l'interface cellulaire (si disponible).
- **Android** - Ouvrez *Paramètres* et sélectionnez *Sans fil et réseaux*. Touchez *Paramètres Wi-Fi* et sélectionnez *Avancé* après avoir appuyé sur le bouton *Options* du téléphone. Activez la case *Utiliser une adresse IP statique* et configurez un serveur DNS personnalisé.
Si vous n'avez pas la possibilité de modifier manuellement les paramètres DNS de l'appareil, vous disposez encore de plusieurs options faisant appel à des techniques telles que l'[usurpation ARP](http://en.wikipedia.org/wiki/ARP_spoofing), le [DHCP pirate](http://www.yersinia.net/doc.htm) et d'autres méthodes créatives.
Enfin, vous devez configurer un faux service vers lequel DNSChef pointera toutes les requêtes. Par exemple, si vous essayez d'intercepter le trafic web, vous devez démarrer soit un serveur web séparé sur le port 80, soit configurer un proxy web (par exemple Burp) pour intercepter le trafic. DNSChef pointera les requêtes vers votre hôte proxy/serveur avec des services correctement configurés.
## Exécution de DNSChef
DNSChef est une application multiplateforme développée en Python qui devrait fonctionner sur la plupart des plateformes disposant d'un interpréteur Python. Ce guide se concentrera sur les environnements Unix ; cependant, tous les exemples ci-dessous ont été testés et fonctionnent également sous Windows.
Essayons DNSChef avec sa fonctionnalité de surveillance la plus basique. Exécutez la commande suivante en tant que root (requis pour démarrer un serveur sur le port 53) :
# ./dnschef.py
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
Sans aucun paramètre, DNSChef fonctionne en mode proxy complet. Cela signifie que toutes les requêtes seront simplement transmises à un serveur DNS en amont (8.8.8.8 par défaut) et renvoyées à l'hôte demandeur. Par exemple, interrogeons un enregistrement "A" pour un domaine et observons les résultats :