
DNSChef - DNS-Proxy für Penetrationstester und Malware-Analysten
| | version 0.4 | | / _|
| | __ ___ | | __| |
/ ` | ' / |/ | ' \ / _ \ |
| (| | | | _ \ (| | | | __/ |
_,|| ||/_|| ||___||
D O K U M E N T A T I O N
DNSChef ist ein hochkonfigurierbarer DNS-Proxy für Penetrationstester und Malware-Analysten. Ein DNS-Proxy (auch "Fake DNS") wird unter anderem für die Analyse des Netzwerkverkehrs von Anwendungen eingesetzt. Beispielsweise kann ein DNS-Proxy verwendet werden, um Anfragen für "badguy.com" zu fälschen und auf eine lokale Maschine zu leiten, anstatt auf einen echten Host im Internet.
Es gibt mehrere DNS-Proxies auf dem Markt. Die meisten leiten einfach alle DNS-Abfragen an eine einzelne IP-Adresse weiter oder implementieren nur rudimentäre Filterung. DNSChef wurde im Rahmen eines Penetrationstests entwickelt, bei dem ein konfigurierbareres System benötigt wurde. DNSChef ist daher eine plattformübergreifende Anwendung, die Antworten auf Basis von einschließenden und ausschließenden Domain-Listen fälschen kann, mehrere DNS-Eintragstypen 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 Erklärung der einzelnen Funktionen und Anwendungsempfehlungen finden Sie weiter unten.
Der Einsatz eines DNS-Proxys wird in Situationen empfohlen, in denen eine Anwendung nicht gezwungen werden kann, einen anderen Proxy-Server direkt zu verwenden. Beispielsweise ignorieren einige mobile Anwendungen die HTTP-Proxy-Einstellungen des Betriebssystems vollständig. In diesen Fällen ermöglicht der Einsatz eines DNS-Proxy-Servers wie DNSChef, die Anwendung auszutricksen und Verbindungen an das gewünschte Ziel weiterzuleiten.
Bevor Sie DNSChef verwenden können, müssen Sie Ihren Rechner so konfigurieren, dass er einen DNS-Nameserver mit dem laufenden Tool verwendet. Je nach verwendetem Betriebssystem haben Sie mehrere Optionen:
Linux – Bearbeiten Sie /etc/resolv.conf und fügen Sie eine Zeile ganz oben mit Ihrem Verkehrsanalyse-Host ein (z. B. "nameserver 127.0.0.1" bei lokalem Betrieb). Alternativ können Sie eine DNS-Serveradresse mit Tools wie dem Network Manager hinzufügen. Öffnen Sie im Network Manager die IPv4-Einstellungen, wählen Sie Automatisch (DHCP) Adressen nur oder Manuell aus dem Dropdown-Menü Methode und bearbeiten Sie das Textfeld DNS-Server, um eine IP-Adresse mit laufendem DNSChef einzugeben.
Windows – Wählen Sie Netzwerkverbindungen aus der Systemsteuerung aus. Wählen Sie anschließend eine der Verbindungen (z. B. "LAN-Verbindung"), klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften. Wählen Sie im neu erscheinenden Dialogfeld Internetprotokoll (TCP/IP) aus und klicken Sie auf Eigenschaften. Wählen Sie schließlich das Optionsfeld Folgende DNS-Serveradressen verwenden und geben Sie die IP-Adresse des Rechners mit laufendem DNSChef ein. Bei lokalem Betrieb geben Sie beispielsweise 127.0.0.1 ein.
OS X – Öffnen Sie Systemeinstellungen und klicken Sie auf das Netzwerk-Symbol. Wählen Sie die aktive Schnittstelle aus und tragen Sie das Feld DNS-Server ein. Wenn Sie Airport verwenden, müssen Sie auf den Erweitert...-Button klicken und die DNS-Server dort bearbeiten. Alternativ können Sie /etc/resolv.conf bearbeiten und einen gefälschten Nameserver ganz oben einfügen (z. B. "nameserver 127.0.0.1").
iOS – Öffnen Sie Einstellungen und wählen Sie Allgemein aus. Wählen Sie dann WLAN und klicken Sie auf den blauen Pfeil rechts neben einem aktiven Zugangspunkt aus der Liste. Bearbeiten Sie den DNS-Eintrag, um auf den Host mit laufendem DNSChef zu verweisen. Stellen Sie sicher, dass Sie die Mobilfunkschnittstelle (falls vorhanden) deaktiviert haben.
Android – Öffnen Sie Einstellungen und wählen Sie Drahtlos & Netzwerke aus. Tippen Sie auf WLAN-Einstellungen und wählen Sie Erweitert, nachdem Sie die Optionen-Taste auf dem Telefon gedrückt haben. Aktivieren Sie das Kontrollkästchen Statische IP verwenden und konfigurieren Sie einen benutzerdefinierten DNS-Server.
Wenn Sie die DNS-Einstellungen des Geräts nicht manuell ändern können, haben Sie dennoch mehrere Optionen, die Techniken wie ARP-Spoofing, Rogue DHCP und andere kreative Methoden umfassen.
Schließlich müssen Sie einen gefälschten Dienst konfigurieren, auf den DNSChef alle Anfragen umleiten soll. Wenn Sie beispielsweise Web-Traffic abfangen möchten, müssen Sie entweder einen separaten Webserver auf Port 80 starten oder einen Web-Proxy (z. B. Burp) einrichten, um den Traffic abzufangen. DNSChef leitet die Anfragen an Ihren Proxy/Server-Host mit ordnungsgemäß konfigurierten Diensten weiter.
DNSChef ist eine plattformübergreifende Anwendung, die in Python entwickelt wurde und auf den meisten Plattformen mit einem Python-Interpreter läuft. Sie können die mitgelieferte ausführbare Datei dnschef.exe verwenden, um es auf Windows-Hosts ohne Installation eines Python-Interpreters auszuführen. Diese Anleitung konzentriert sich auf Unix-Umgebungen; alle unten aufgeführten Beispiele wurden jedoch auch unter Windows getestet.
Lassen Sie uns einen ersten Eindruck von DNSChef mit seiner grundlegenden Überwachungsfunktion gewinnen. Führen Sie 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. Beispielsweise fragen wir einen "A"-Eintrag für eine Domain ab und beobachten die Ergebnisse:
$ host -t A thesprawl.org
thesprawl.org has address 108.59.3.64
DNSChef gibt die folgende Log-Zeile aus, die Zeit, Quell-IP-Adresse, Typ des angeforderten Eintrags und vor allem den abgefragten Namen zeigt:
[23:54:03] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
Dieser Modus ist nützlich für einfache Anwendungsüberwachung, wenn Sie herausfinden müssen, welche Domains eine Anwendung für ihre Kommunikation verwendet.
DNSChef unterstützt vollständig IPv6, das mit den Flags -6 oder --ipv6 aktiviert werden kann. Es funktioniert genau wie der IPv4-Modus, mit der Ausnahme, dass das Standard-Hör-Interface auf ::1 und der Standard-DNS-Server auf 2001:4860:4860::8888 geändert wird. Hier ist eine Beispielausgabe:
# ./dnschef.py -6
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] Using IPv6 mode.
[*] DNSChef started on interface: ::1
[*] Using the following nameservers: 2001:4860:4860::8888
[*] No parameters were specified. Running in full proxy mode
[00:35:44] ::1: proxying the response of type 'A' for thesprawl.org
[00:35:44] ::1: proxying the response of type 'AAAA' for thesprawl.org
[00:35:44] ::1: proxying the response of type 'MX' for thesprawl.org
HINWEIS: Standardmäßig erstellt DNSChef einen UDP-Listener. Sie können stattdessen TCP mit dem weiter unten besprochenen Argument --tcp verwenden.
Nachdem Sie nun wissen, wie Sie DNSChef starten, konfigurieren wir es so, dass alle Antworten auf 127.0.0.1 gefälscht werden, indem wir den Parameter --fakeip verwenden:
# ./dnschef.py --fakeip 127.0.0.1 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[23:55:57] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[23:55:57] 127.0.0.1: proxying the response of type 'AAAA' for google.com
[23:55:57] 127.0.0.1: proxying the response of type 'MX' for google.com
In der obigen Ausgabe sehen Sie, dass DNSChef so konfiguriert wurde, dass alle Anfragen an 127.0.0.1 weitergeleitet werden. Die erste Log-Zeile um 08:11:23 zeigt, dass wir die "A"-Eintragsantwort auf 127.0.0.1 "gekocht" haben. Weitere Anfragen für 'AAAA'- und 'MX'-Einträge werden jedoch einfach von einem echten DNS-Server weitergeleitet. Sehen wir uns die Ausgabe des anfragenden Programms an:
$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address 2001:4860:4001:803::1001
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
Wie Sie sehen, wurde das Programm dazu verleitet, die IPv4-Adresse 127.0.0.1 zu verwenden. Die Informationen aus dem IPv6-Eintrag (AAAA) und Mail-Einträgen (MX) erscheinen jedoch völlig legitim. Das Ziel von DNSChef ist es, den korrekten Betrieb des Programms so wenig wie möglich zu beeinträchtigen. Wenn eine Anwendung also auf einen bestimmten Mailserver angewiesen ist, erhält sie diesen korrekt über diese weitergeleitete Anfrage.
Lassen Sie uns eine weitere Anfrage fälschen, um zu veranschaulichen, wie mehrere Einträge gleichzeitig adressiert werden:
# ./dnschef.py --fakeip 127.0.0.1 --fakeipv6 ::1 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[*] Cooking all AAAA replies to point to ::1
[00:02:14] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[00:02:14] 127.0.0.1: cooking the response of type 'AAAA' for google.com to ::1
[00:02:14] 127.0.0.1: proxying the response of type 'MX' for google.com
Zusätzlich zum Flag --fakeip habe ich jetzt --fakeipv6 angegeben, das dazu dient, 'AAAA'-Eintragsanfragen zu fälschen. Hier ist die aktualisierte Programmausgabe:
$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address ::1
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
Auch hier wurden alle nicht explizit von der Anwendung überschriebenen Einträge weitergeleitet und vom echten DNS-Server zurückgegeben. Allerdings wurden sowohl IPv4 (A) als auch IPv6 (AAAA) gefälscht, um auf den lokalen Rechner zu zeigen.
DNSChef unterstützt mehrere Eintragstypen:
+--------+--------------+-----------+--------------------------+
| Eintrag| Beschreibung | Argument | Beispiel |
+--------+--------------+-----------+--------------------------+
| A | IPv4-Adresse |--fakeip | --fakeip 192.0.2.1 |
| AAAA | IPv6-Adresse |--fakeipv6 | --fakeipv6 2001:db8::1 |
| MX | Mail-Server |--fakemail | --fakemail mail.fake.com |
| CNAME | CNAME-Eintrag|--fakealias| --fakealias www.fake.com |
| NS | Namensserver |--fakens | --fakens ns.fake.com |
+--------+--------------+-----------+--------------------------+
HINWEIS: Aus Gründen der Benutzerfreundlichkeit werden nicht alle DNS-Eintragstypen über die Befehlszeile bereitgestellt. Zusätzliche Einträge wie PTR, TXT, SOA usw. können mit dem Flag --file und einem entsprechenden Eintrag-Header angegeben werden. Siehe Abschnitt Externe Definitionsdatei weiter unten für Details.
Schließlich beobachten wir, wie die Anwendung mit Anfragen vom Typ ANY umgeht:
# ./dnschef.py --fakeip 127.0.0.1 --fakeipv6 ::1 --fakemail mail.fake.com --fakealias www.fake.com --fakens ns.fake.com -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[*] Cooking all AAAA replies to point to ::1
[*] Cooking all MX replies to point to mail.fake.com
[*] Cooking all CNAME replies to point to www.fake.com
[*] Cooking all NS replies to point to ns.fake.com
[00:17:29] 127.0.0.1: cooking the response of type 'ANY' for google.com with all known fake records.
DNS-ANY-Eintragsanfragen führen dazu, dass DNSChef alle bekannten gefälschten Einträge für eine zutreffende Domain zurückgibt. Hier ist die Ausgabe, die das Programm sehen wird:
$ host -t ANY google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address ::1
google.com mail is handled by 10 mail.fake.com.
google.com is an alias for www.fake.com.
google.com name server ns.fake.com.
Betrachten Sie das obige Beispiel: Sie möchten nur Anfragen für thesprawl.org abfangen und Anfragen an alle anderen Domains wie webfaction.com unverändert lassen. Sie können den Parameter --fakedomains wie unten gezeigt verwenden:
# ./dnschef.py --fakeip 127.0.0.1 --fakedomains thesprawl.org -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking replies to point to 127.0.0.1 matching: thesprawl.org
[00:23:37] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 127.0.0.1
[00:23:52] 127.0.0.1: proxying the response of type 'A' for mx9.webfaction.com
Aus dem obigen Beispiel wurde die Anfrage für thesprawl.org gefälscht; die Anfrage für mx9.webfaction.com wurde jedoch unverändert gelassen. Das Filtern von Domains ist sehr nützlich, wenn Sie versuchen, eine einzelne Anwendung zu isolieren, ohne den Rest zu stören.
HINWEIS: DNSChef überprüft nicht, ob die Domain existiert, bevor die Antwort gefälscht wird. Wenn Sie eine Domain angegeben haben, wird sie immer auf einen gefälschten Wert aufgelöst, unabhängig davon, ob sie wirklich existiert oder nicht.
In einer anderen Situation müssen Sie möglicherweise Antworten für alle Anfragen außer einer definierten Liste von Domains fälschen. Sie können diese Aufgabe mit dem Parameter --truedomains wie folgt erledigen:
# ./dnschef.py --fakeip 127.0.0.1 --truedomains thesprawl.org,*.webfaction.com -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking replies to point to 127.0.0.1 not matching: *.webfaction.com, thesprawl.org
[00:27:57] 127.0.0.1: proxying the response of type 'A' for mx9.webfaction.com
[00:28:05] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
Im obigen Beispiel gibt es mehrere Dinge zu beachten. Beachten Sie zunächst die Verwendung einer Wildcard (*). Alle Domains, die auf *.webfaction.com passen, werden umgekehrt gematcht und auf ihre wahren Werte aufgelöst. Die Anfrage für 'google.com' gab 127.0.0.1 zurück, da sie nicht in der Liste der ausgeschlossenen Domains enthalten war.
HINWEIS: Platzhalter sind positionsabhängig. Eine Maske vom Typ *.thesprawl.org matcht www.thesprawl.org, aber nicht www.test.thesprawl.org. Eine Maske vom Typ ..thesprawl.org matcht jedoch thesprawl.org, www.thesprawl.org und www.test.thesprawl.org.
Es kann Situationen geben, in denen die Definition eines einzelnen gefälschten DNS-Eintrags für alle passenden Domains nicht ausreicht. Sie können eine externe Datei mit einer Sammlung von DOMAIN=RECORD-Paaren verwenden, die genau definieren, wohin die Anfrage gehen soll.
Beispielsweise erstellen wir die folgende Definitionsdatei und nennen sie dnschef.ini:
[A]
*.google.com=192.0.2.1
thesprawl.org=192.0.2.2
*.wordpress.*=192.0.2.3
Beachten Sie den Abschnitt-Header [A], er definiert den Eintragstyp für DNSChef. Lassen Sie uns nun die Ausgabe mehrerer Anfragen genau beobachten:
# ./dnschef.py --file dnschef.ini -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[+] Cooking A replies for domain *.google.com with '192.0.2.1'
[+] Cooking A replies for domain thesprawl.org with '192.0.2.2'
[+] Cooking A replies for domain *.wordpress.* with '192.0.2.3'
[00:43:54] 127.0.0.1: cooking the response of type 'A' for google.com to 192.0.2.1
[00:44:05] 127.0.0.1: cooking the response of type 'A' for www.google.com to 192.0.2.1
[00:44:19] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 192.0.2.2
[00:44:29] 127.0.0.1: proxying the response of type 'A' for www.thesprawl.org
[00:44:40] 127.0.0.1: cooking the response of type 'A' for www.wordpress.org to 192.0.2.3
[00:44:51] 127.0.0.1: cooking the response of type 'A' for wordpress.com to 192.0.2.3
[00:45:02] 127.0.0.1: proxying the response of type 'A' for slashdot.org
Sowohl google.com als auch www.google.com haben den Eintrag *.google.com gematcht und wurden korrekt auf 192.0.2.1 aufgelöst. Die Anfrage www.thesprawl.org wurde hingegen einfach weitergeleitet, anstatt modifiziert zu werden. Schließlich haben alle Varianten von wordpress.com, www.wordpress.org usw. die Maske *.wordpress.* gematcht und wurden korrekt auf 192.0.2.3 aufgelöst. Eine nicht definierte Anfrage slashdot.org wurde einfach mit einer echten Antwort weitergeleitet.
Sie können Abschnitt-Header für alle anderen unterstützten DNS-Eintragstypen angeben, einschließlich derer, die nicht explizit über die Befehlszeile verfügbar sind: [A], [AAAA], [MX], [NS], [CNAME], [PTR], [NAPTR] und [SOA]. Beispielsweise definieren wir einen neuen Abschnitt [PTR] in der Datei 'dnschef.ini':
[PTR]
*.2.0.192.in-addr.arpa=fake.com
Beobachten wir das Verhalten von DNSChef mit diesem neuen Eintragstyp:
./dnschef.py --file dnschef.ini -q
[sudo] password for iphelix:
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[+] Cooking PTR replies for domain *.2.0.192.in-addr.arpa with 'fake.com'
[00:11:34] 127.0.0.1: cooking the response of type 'PTR' for 1.2.0.192.in-addr.arpa to fake.com
Und hier ist, was ein Client sehen könnte, wenn er Reverse-DNS-Abfragen durchführt:
$ host 192.0.2.1 localhost
1.2.0.192.in-addr.arpa domain name pointer fake.com.
Einige Einträge erfordern eine exakte Formatierung. Gute Beispiele sind SOA und NAPTR:
[SOA]
*.thesprawl.org=ns.fake.com. hostmaster.fake.com. 1 10800 3600 604800 3600
[NAPTR]
*.thesprawl.org=100 10 U E2U+sip !^.*$!sip:[email protected]! .
Weitere Beispiele finden Sie in der beigelegten dnschef.ini-Datei.
Sie können Eingaben aus einer Datei und der Befehlszeile kombinieren. Der folgende Befehl verwendet beispielsweise sowohl die Parameter --file als auch --fakedomains:
# ./dnschef.py --file dnschef.ini --fakeip 6.6.6.6 --fakedomains=thesprawl.org,slashdot.org -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[+] Cooking A replies for domain *.google.com with '192.0.2.1'
[+] Cooking A replies for domain thesprawl.org with '192.0.2.2'
[+] Cooking A replies for domain *.wordpress.* with '192.0.2.3'
[*] Cooking A replies to point to 6.6.6.6 matching: *.wordpress.*, *.google.com, thesprawl.org
[*] Cooking A replies to point to 6.6.6.6 matching: slashdot.org, *.wordpress.*, *.google.com, thesprawl.org
[00:49:05] 127.0.0.1: cooking the response of type 'A' for google.com to 192.0.2.1
[00:49:15] 127.0.0.1: cooking the response of type 'A' for slashdot.org to 6.6.6.6
[00:49:31] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 6.6.6.6
[00:50:08] 127.0.0.1: proxying the response of type 'A' for tor.com
Beachten Sie, dass die Definition für thesprawl.org im Befehlszeilenparameter Vorrang vor dnschef.ini hatte. Dies ist nützlich, wenn Sie Werte in der Konfigurationsdatei überschreiben möchten. slashdot.org wird weiterhin auf die gefälschte IP-Adresse aufgelöst, da es im Parameter --fakedomains angegeben wurde. Die tor.com-Anfrage wird einfach weitergeleitet, da sie weder in der Befehlszeile noch in der Konfigurationsdatei angegeben wurde.
Weitere Konfigurationen =======================Aus Sicherheitsgründen hört DNSChef standardmäßig auf dem lokalen Interface 127.0.0.1 (bzw. ::1 für IPv6). Sie können DNSChef mit dem Parameter --interface auf einem anderen Interface lauschen lassen:
# ./dnschef.py --interface 0.0.0.0 -q
[*] DNSChef started on interface: 0.0.0.0
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
[00:50:53] 192.0.2.105: proxying the response of type 'A' for thesprawl.org
oder für IPv6:
# ./dnschef.py -6 --interface :: -q
[*] Using IPv6 mode.
[*] DNSChef started on interface: ::
[*] Using the following nameservers: 2001:4860:4860::8888
[*] No parameters were specified. Running in full proxy mode
[00:57:46] 2001:db8::105: proxying the response of type 'A' for thesprawl.org
Standardmäßig verwendet DNSChef den öffentlichen DNS-Server von Google für Proxy-Anfragen. Sie können jedoch mit dem Parameter --nameservers eine benutzerdefinierte Liste von Nameservern festlegen:
# ./dnschef.py --nameservers 4.2.2.1,4.2.2.2 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 4.2.2.1, 4.2.2.2
[*] No parameters were specified. Running in full proxy mode
[00:55:08] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
Es ist möglich, einen nicht standardmäßigen Nameserver-Port mit der Notation IP#PORT anzugeben:
# ./dnschef.py --nameservers 192.0.2.2#5353 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 192.0.2.2#5353
[*] No parameters were specified. Running in full proxy mode
[02:03:12] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
Gleichzeitig ist es möglich, DNSChef selbst auf einem alternativen Port mit dem Parameter -p port# zu starten:
# ./dnschef.py -p 5353 -q
[*] Listening on an alternative port 5353
[*] 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
Das DNS-Protokoll kann über UDP (Standard) oder TCP verwendet werden. DNSChef implementiert einen TCP-Modus, der mit der Flagge --tcp aktiviert werden kann.
Hier finden Sie einige Informationen zu den Interna, falls Sie das Tool an Ihre Bedürfnisse anpassen müssen. DNSChef basiert auf dem SocketServer-Modul und verwendet Threading, um mehrere Anfragen gleichzeitig zu verarbeiten. Das Tool ist darauf ausgelegt, auf TCP- oder UDP-Ports (Standard ist Port 53) auf eingehende Anfragen zu lauschen und diese bei Bedarf an einen echten DNS-Server über UDP weiterzuleiten.
Die exzellente dnslib-Bibliothek wird verwendet, um DNS-Pakete zu zerlegen und wieder zusammenzusetzen. Sie ist besonders nützlich beim Erstellen von Antwortpaketen basierend auf Anfragen.
DNSChef ist in der Lage, Anfragen für Records vom Typ "A", "AAAA", "MX", "CNAME", "NS", "TXT", "PTR", "NAPTR", "SOA", "ANY" zu modifizieren. Es ist sehr einfach, das Verhalten für jeden Record zu erweitern oder zu ändern. Fügen Sie einfach einen weiteren Eintrag if qtype == "RECORD TYPE") hinzu und geben Sie an, womit geantwortet werden soll.
Viel Spaß mit dem Tool und leiten Sie alle Anfragen und Kommentare an iphelix [at] thesprawl.org weiter.
Happy Hacking! -Peter