
DNSChef (NG) – DNS-Proxy für Penetrationstester und Malware-Analysten
[!NOTE] Dies ist eine aktualisierte Version von DNSChef, ursprünglich geschrieben von @iphelix``` _ _ __
| | v0.7 | | / |
| | __ ___ | | | | ______ _ __ __ _ /| '_ \/ __|/ __| '_ \ / _ \ _|______| '_ \ / _| | (| | | | _ \ (__| | | | __/ | | | | | (| | _,|| ||/_|| ||___|| || ||_, | / | |_/ D O C U M E N T A T I O N
DNSChef ist ein hochgradig konfigurierbarer DNS-Proxy für Penetrationstester und Malware-Analysten. Ein DNS-Proxy (auch „Fake DNS“ genannt) ist ein Werkzeug, das unter anderem für die Analyse des Netzwerkverkehrs von Anwendungen verwendet wird. Beispielsweise kann ein DNS-Proxy verwendet werden, um Anfragen für „badguy.com“ so zu fälschen, dass sie auf eine lokale Maschine zur Beendigung oder Abfangung zeigen, anstatt auf einen echten Host irgendwo im Internet.
Es gibt einige DNS-Proxys auf dem Markt. Die meisten leiten einfach alle DNS-Anfragen an eine einzelne IP-Adresse um oder implementieren nur rudimentäre Filter. DNSChef wurde im Rahmen eines Penetrationstests entwickelt, bei dem ein besser konfigurierbares System benötigt wurde. Das Ergebnis ist eine plattformübergreifende Anwendung, die Antworten auf der Grundlage von inklusiven und exklusiven Domainlisten fälschen kann, mehrere DNS-Record-Typen unterstützt, Domains mit Platzhaltern abgleicht, echte Antworten für nicht passende Domains weiterleitet, externe Konfigurationsdateien definiert, IPv6 und viele weitere Funktionen bietet. Eine detaillierte Erläuterung der einzelnen Funktionen und vorgeschlagenen Anwendungen findest du weiter unten.
Der Einsatz eines DNS-Proxys wird in Situationen empfohlen, in denen eine Anwendung nicht dazu gezwungen werden kann, einen anderen Proxy-Server direkt zu verwenden. Beispielsweise ignorieren einige mobile Anwendungen die HTTP-Proxy-Einstellungen des Betriebssystems vollständig. In solchen Fällen ermöglicht dir der Einsatz eines DNS-Proxyservers wie DNSChef, die Anwendung dazu zu bringen, Verbindungen an das gewünschte Ziel weiterzuleiten.
## Neue Funktionen
- Erfordert Python 3.11+
- Unterstützt das Staging von Dateien über DNS (derzeit nur über `A`,`AAAA`,`TXT` ...)
- Konfigurationsdatei ist jetzt TOML
- Optionale HTTP-API (ermöglicht das Abfragen von Logs und das Aktualisieren der Konfiguration aus der Ferne)
- Vollständig asynchron für verbesserte Leistung (nutzt AsyncIO)
- Strukturierte Protokollierung und eine Reihe von QOL-Verbesserungen
- Ist jetzt ein Python-Paket
- Dockerisiert
- Enthält eine Reihe von PRs und Fixes aus dem ursprünglichen Repository
## Installation
Um die neueste Version zu installieren, solltest du [pipx](https://pypa.github.io/pipx/) verwenden (es sei denn, du bist ein Arschloch, das schlampige Steaks mag):
pipx install dnschef-ng
Wenn du die HTTP-API nutzen möchtest (erfordert einige zusätzliche Abhängigkeiten):
pipx install dnschef-ng[api]
Neueste Version aus Git mit pipx installieren:
pipx install git+https://github.com/byt3bl33d3r/dnschef-ng.git
Neueste Version aus Git mit pipx inklusive der Abhängigkeiten für die HTTP-API installieren:
pipx install "git+https://github.com/byt3bl33d3r/dnschef-ng.git#egg=dnschef-ng[api]"
## Einrichten eines DNS-Proxys
Bevor du DNSChef verwenden kannst, musst du deinen Rechner so konfigurieren, dass er einen DNS-Nameserver verwendet, auf dem das Tool läuft. Je nach Betriebssystem hast du mehrere Möglichkeiten:
- **Linux** – Bearbeite */etc/resolv.conf*, um ganz oben eine Zeile mit deinem Analyse-Host einzufügen (z. B. füge „nameserver 127.0.0.1“ hinzu, wenn du lokal arbeitest). Alternativ kannst du über Tools wie den Network Manager eine DNS-Serveradresse hinzufügen. Öffne im Network Manager die IPv4-Einstellungen, wähle *Nur automatische (DHCP) Adressen* oder *Manuell* aus dem Dropdown-Menü *Methode* und bearbeite das Textfeld *DNS-Server*, um eine IP-Adresse mit laufendem DNSChef einzutragen.
- **Windows** – Wähle im *Systemsteuerung* die *Netzwerkverbindungen* aus. Wähle dann eine der Verbindungen aus (z. B. „LAN-Verbindung“), klicke mit der rechten Maustaste darauf und wähle Eigenschaften. Wähle im neu erscheinenden Dialogfeld *Internetprotokoll (TCP/IP)* aus und klicke auf Eigenschaften. Wähle schließlich das Optionsfeld *Folgende DNS-Serveradressen verwenden* und gib die IP-Adresse ein, auf der DNSChef läuft. Wenn du z. B. lokal arbeitest, gib 127.0.0.1 ein.
- **OS X** – Öffne *Systemeinstellungen* und klicke auf das Symbol *Netzwerk*. Wähle die aktive Schnittstelle aus und fülle das Feld *DNS-Server* aus. Wenn du Airport verwendest, musst du auf die Schaltfläche *Erweitert…* klicken und die DNS-Server dort bearbeiten. Alternativ kannst du */etc/resolv.conf* bearbeiten und ganz oben einen gefälschten Nameserver hinzufügen (z. B. „nameserver 127.0.0.1“).
- **iOS** – Öffne *Einstellungen* und wähle *Allgemein*. Wähle dann *WLAN* und tippe auf den blauen Pfeil rechts neben einem aktiven Zugangspunkt in der Liste. Bearbeite den DNS-Eintrag, sodass er auf den Host mit laufendem DNSChef zeigt. Stelle sicher, dass du die Mobilfunk-Schnittstelle deaktiviert hast (falls verfügbar).
- **Android** – Öffne *Einstellungen* und wähle *Drahtlos und Netzwerke*. Tippe auf *WLAN-Einstellungen* und wähle *Erweitert*, nachdem du die *Optionen*-Taste am Telefon gedrückt hast. Aktiviere das Kontrollkästchen *Statische IP verwenden* und konfiguriere einen benutzerdefinierten DNS-Server.
Wenn du die DNS-Einstellungen des Geräts nicht manuell ändern kannst, gibt es dennoch mehrere Optionen mit Techniken wie [ARP-Spoofing](http://en.wikipedia.org/wiki/ARP_spoofing), [Rogue DHCP](http://www.yersinia.net/doc.htm) und anderen kreativen Methoden.
Schließlich musst du einen gefälschten Dienst konfigurieren, auf den DNSChef alle Anfragen umleiten soll. Wenn du beispielsweise Webverkehr abfangen möchtest, musst du entweder einen separaten Webserver auf Port 80 starten oder einen Web-Proxy (z. B. Burp) einrichten, um den Verkehr abzufangen. DNSChef leitet die Anfragen an deinen Proxy-/Server-Host mit entsprechend konfigurierten Diensten weiter.
## DNSChef ausführen
DNSChef ist eine plattformübergreifende, in Python entwickelte Anwendung, die auf den meisten Plattformen mit einem Python-Interpreter laufen sollte. Diese Anleitung konzentriert sich auf Unix-Umgebungen; alle unten aufgeführten Beispiele wurden jedoch auch unter Windows getestet.
Verschaffen wir uns einen ersten Eindruck von DNSChef mit seiner grundlegenden Überwachungsfunktion. Führe den folgenden Befehl als Root aus (erforderlich, um einen Server auf Port 53 zu starten):
# ./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
Ohne Parameter läuft DNSChef im vollständigen Proxy-Modus. Das bedeutet, dass alle Anfragen einfach an einen vorgelagerten DNS-Server (standardmäßig 8.8.8.8) weitergeleitet und an den anfragenden Host zurückgegeben werden. Fragen wir beispielsweise einen „A“-Datensatz für eine Domain ab und beobachten wir die Ergebnisse:
$ host -t A thesprawl.org
thesprawl.org has address 108.59.3.64
DNSChef gibt die folgende Protokollzeile aus, die Zeit, Quell-IP-Adresse, Typ des angeforderten Datensatzes und – am wichtigsten – den abgefragten Namen anzeigt: