lordgurke
Goto Top

Firewalls richtig konfigurieren: Port 53 TCP und EDNS

Moin,

weil ich gerade diesen bescheuerten Fehler aus der Ferne debuggen durfte:

Liebe Menschen, die ihr Firewalls bei Kunden konfiguriert: DNS benutzt Port 53 auf UDP und TCP.
TCP ist nicht optional sondern wird in freier Wildbahn wirklich genutzt! Und ist auch standardisiert: RFC 1035, 4.2.2

Aber da dieser Fehler alleine noch genug Raum für funktionierendes DNS ließe:
Wenn eure Firewall noch der lange überholten Meinung ist, dass DNS-Antworten per UDP niemals einen Payload > 512 Bytes haben dürfen, sollte euer Resolver oder Forwarder, der hinter dieser Firewall steht, das auch wissen, damit dieser nicht per EDNS arglos größeren Payload anbietet.
Das starre 512 Bytes-Limit ist spätestens mit verbreiteter Einführung von EDNS überholt, denn jetzt können beide Seiten diese Payload-Größe aushandeln.


Also, kurz zusammengefasst:
    • DNS-Anfragen mit UDP und TCP erlauben
    • Wenn die UDP-Payloadgröße durch die Firewall begrenzt wird, muss der DNS-Resolver oder Forwarder diesen Wert kennen, damit er nichts falsches via EDNS advertised. Allerdings tut man sich schon aus Performance-Gründen einen Gefallen, wenn man UDP-Payload bis wenigstens 786 Bytes durchlässt - das reicht im Falle von DKIM und DNSSEC in vielen Fällen schon aus und verhindert die latenzbehafteteren Nachfragen per TCP.


Wer jetzt sagt: "Ach, was betrifft mich das, so riesengroße DNS-Antworten sind hochgradig exotisch und sowas haben wir hier nicht!":
Ausgang meiner Recherche war, dass der (aus meiner Sicht auch, aber anderweitig kaputte) Spamfilter beim Empfänger versuchte, die DKIM-Signaturen eingehender Mails gegen die DKIM-Einträge im DNS zu validieren, bei manchen Mails dann dabei wegen oben beschriebener Fehler aber keine Antworten bzw. "SERVFAIL" bekam und deshalb dann die E-Mail nicht haben wollte.
Ursache dafür war, dass der DNS-Server beim Empfänger per EDNS advertisete, dass er 1680 Bytes UDP-Payload empfangen kann. Und meine DNS-Server ihm daher wie geheißen die 517 Bytes großen Antworten per UDP schickten.
Die Firewall fraß diese Pakete auf, weil sie mehr als 512 Bytes Payload trugen. Eine Nachfrage des Empfänger-DNS-Servers via TCP scheiterte, weil die Firewall keine DNS-Anfragen per TCP heraus ließ. Also: Timeout auf allen Kanälen und damit keine Antwort.

Das Debugging wurde dadurch erschwert, dass dies nur bei einer Absenderdomain passierte. Mails anderer Domains auf dem selben Server mit dem exakt selben DKIM-Schlüssel im DNS liefen problemlos durch. Die problematische Domain war einfach insgesamt relativ lang (29 Zeichen mit Subdomain), die anderen, deutlich kürzeren Domains haben den Payload in der Antwort nicht über 512 Bytes aufgebläht.


Nachtrag:
Ich wollte doch noch ein paar nicht-repräsentative Grafiken über die Anfrage- und Antwortstatistiken meiner Nameserver mitgeben!

Das hier ist die Response-Size:

dns-rsizes

Ja, das Problem mit der Response-Size betrifft für reguläre positive Antworten (Rcode 0) zwar nur 1-2% der Queries (zumindest bei den Domains auf meinen Nameservern), aber das reicht ja wie man sieht schon aus, um ernsthafte Probleme zu verursachen.

Die Antworten mit Rcode 3 sind Antworten auf Fragen nach nichtexistenten Namen (NXDOMAIN), wo man mit DNSSEC relativ große Antworten mitliefert, weil man durch NSEC3-Hashes ja beweisen muss, dass da nichts ist. Die würden auf jeden Fall kleben bleiben, da merkt man es aber kaum, weil der Name ja eh nicht auflösbar wäre.


Ein Blick auf die gewählten Transporte: Etwa 10% aller Anfragen kommen mit TCP, also nicht ganz unsignifikant.
dns-transp


Das korreliert von der Menge her interessanterweise mit dem Anteil EDNS-Fähiger Resolver, die eine Buffersize von <= 1023 Bytes advertisen und deshalb für manche Antworten zwingend auf TCP umschalten müssen. Nicht-EDNS-Fähige Resolver scheinen kaum noch unterwegs zu sein.

dns-ednsbuffersizes

Content-ID: 638928

Url: https://administrator.de/contentid/638928

Printed on: October 4, 2024 at 04:10 o'clock

lcer00
lcer00 Jan 08, 2021 at 19:06:26 (UTC)
Goto Top
Hallo,

der Fehler kommt schnell mal von hinten durch die Brust daher und zwar wie folgt:

Zonentransfers erfolgen über TCP. Deshalb definiert man eine tcp-Regel für Zonentransfers, bei der nur die Zielserver freigegeben sind. Oder man sperrt Zonentransfers komplett mittels einer TCP-deny Regel. Danach gibt man dann halt UDP für alle anderen frei. Und schwupps hat man TCP-Nachfragen für lange Antworten vergessen.

So schnell geht das und man glaubt noch alles wunderbar korrekt gemacht zu haben.

Grüße

lcer
Mystery-at-min
Mystery-at-min Jan 09, 2021 at 11:12:02 (UTC)
Goto Top
Hallo,

gut, was aber, wenn die Firewall DNS-Proxy ist?

Deine Empfehlung ist ein Hurra an jeden Malwareschreiber, denn DNS ist leider viel zu oft komplett liberalisiert - vermutlich aufgrund der "Einfachheit", der "Grundsätzlichkeit", sowie vermutlich der Unkenntnis des Admins.

https://www.computerwoche.de/a/datenklau-durch-unbemerkte-dns-tunnel,333 ...

(Kurzes 5sek Google Ergebnis, gibt sicherlich elitärere Quellen).

Das hier propagierte Konzept lädt quasi ein wirklich jedweden anomalen/maliziösen Verkehr über DNS zu schieben.

Ich sage, Klasse statt Masse.
LordGurke
LordGurke Jan 09, 2021 updated at 16:12:21 (UTC)
Goto Top
Die Firewallregeln gelten natürlich auch, wenn die Firewall selbst der Forwarder ist.
Mit händisch angelegten fehlerhaften Regeln kannst du auch den DNS-Dienst auf diesen Geräten verstümmeln und unbrauchbar machen.

Und es soll ja Szenarien geben, wo du vertrauenswürdigen Geräten (z.B. nachgelagerte Firewalls) erlauben willst, selbst per DNS im Internet nachzufragen.
Oder weil du einen bei dir stehenden autoritativen Server aus dem Internet erreichbar machen willst — in diese Richtung machen fehlerhafte Regeln die gleichen Probleme.


Und: Ich behaupte, als Malware-Schreiber kann ich auch deinen DNS-Proxy auf der Firewall missbrauchen um Daten zu exfiltrieren oder Malware nachzuladen face-wink
Mystery-at-min
Mystery-at-min Jan 22, 2021 at 12:57:37 (UTC)
Goto Top
Mit händisch angelegten fehlerhaften Regeln kannst du auch den DNS-Dienst auf diesen Geräten verstümmeln und unbrauchbar machen.

Ein geübter DAU-Admin macht das nebenher.

Und es soll ja Szenarien geben, wo du vertrauenswürdigen Geräten (z.B. nachgelagerte Firewalls) erlauben willst, selbst per DNS im Internet nachzufragen.

Nenne Sie mir, aber damit machst du das Konzept etwas...

Oder weil du einen bei dir stehenden autoritativen Server aus dem Internet erreichbar machen willst — in diese Richtung machen fehlerhafte Regeln die gleichen Probleme.

Denke vom fehlerhaften gehen wir nicht aus, sonst - "man nehme Fritzbox oder DAU und sei wesentlich günstiger am Ziel."

Und: Ich behaupte, als Malware-Schreiber kann ich auch deinen DNS-Proxy auf der Firewall missbrauchen um Daten zu exfiltrieren oder Malware nachzuladen face-wink face-wink

Darfst du behaupten, aber kannst du auch beweisen? Welche Firewall wollen wir uns als erstes für den Gegenbeweis vornehmen?
LordGurke
LordGurke Jan 22, 2021 updated at 13:22:19 (UTC)
Goto Top
Zitat von @Mystery-at-min:
Und es soll ja Szenarien geben, wo du vertrauenswürdigen Geräten (z.B. nachgelagerte Firewalls) erlauben willst, selbst per DNS im Internet nachzufragen.

Nenne Sie mir, aber damit machst du das Konzept etwas...

Wir betreiben absichtlich zwei Resolver mit verschiedener Software (PowerDNS und Bind). Das macht die DNS-Auflösung zuverlässiger, da ein Bug in er deinen Software, welcher die DNS-Auflösung stört, in der anderen nicht vorhanden ist.
Diese Art Bug ist inzwischen sehr selten geworden, aber das ist z.B. einer der legitimen Gründe, weshalb man zusätzliche Resolver haben möchte, die selbst rekursiv arbeiten und deshalb ungefiltert im Internet per DNS herumfragen können müssen.
Die Provider-DNS fallen spätestens dann weg, wenn du sehr viele Anfragen an DNSBLs durchführst und die DNSBLs Abfragelimits pro IP haben.


Oder weil du einen bei dir stehenden autoritativen Server aus dem Internet erreichbar machen willst — in diese Richtung machen fehlerhafte Regeln die gleichen Probleme.

Denke vom fehlerhaften gehen wir nicht aus, sonst - "man nehme Fritzbox oder DAU und sei wesentlich günstiger am Ziel."

Und dennoch ist die so entstandene Regel dann aufgrund Unvermögen fehlerhaft face-wink


Und: Ich behaupte, als Malware-Schreiber kann ich auch deinen DNS-Proxy auf der Firewall missbrauchen um Daten zu exfiltrieren oder Malware nachzuladen face-wink face-wink

Darfst du behaupten, aber kannst du auch beweisen? Welche Firewall wollen wir uns als erstes für den Gegenbeweis vornehmen?

Rein konzeptionell:
Wenn ich eine möglichst kurze Domain registriere, kann ich durch entsprechend lange Subdomains pro Anfrage - sagen wir mal - 50-60 Bytes exfiltrieren ohne dass die Anfragen doof aussehen. Wenn ich komprimiere sogar mehr.

Ich frage also nach "V2VyIGRhcyBsaWVzdCBpc3QgZG9vZgeqeq.prod.apps.meinegenerischedomain.tld" und habe damit schonmal den Text "Wer das liest ist doof" aus deinem Netz rausgetragen.
Auf meinem DNS-Server kann ich die Anfragen schön mitloggen und damit auch größere Datenfragmente über den Tag verteilt übertragen.

Per DNS kann ich dann auch relativ leicht Payload für Malware nachladen - muss ich ja nur als TXT-Record abfragen und halbwegs gut tarnen.
z.B. als "_443._tcp.prod.apps.meinegenerischedomain.tld", Typ TLSA. Oder ich frage syntaktisch nach DKIM-Schlüsseln.

Solange meine Domain nicht auf irgendwelchen Blacklists steht, wird die Firewall meine Anfragen mit hoher Wahrscheinlichkeit nicht filtern face-wink
Und ich kann ja, Domains sind billig, viele registrieren.