Server 2016 - DNS-Socketpool und RRL konfigurieren
Erstellt von Jörn Walter 10.09.2017
Der DNS Socketpool ermöglicht es einem DNS Server beim Ausgeben von DNS Abfragen
einen Random Quell-Port einzusetzen. Wenn der DNS Dienst gestartet wird, wählt der
Server einen Quell-Port aus einem Pool von Sockets aus. Somit wird kein statischer bzw.
vorherzusehender Port genutzt, sondern ein zufälliger Port. Diese Technik macht es
einem Angreifer noch schwieriger den DNS Cache zu manipulieren. Für eine erfolgreiche
Manipulation müsste der Angreifern nun den Port, die DNS Abfrage sowie die zufällige
Transaction-ID erraten.
Den Socket-Pool fragen wir mit dnscmd /info /socketpoolsize ab.
Der Pool lässt sich mit dem Befehl dnscmd /config /socketpoolsize 5000 vergrößern.
Server 2016 - DNS-Socketpool und RRL konfigurieren
Erstellt von Jörn Walter 10.09.2017
Über die Powershell:
Server 2016 - DNS-Socketpool und RRL konfigurieren
Erstellt von Jörn Walter 10.09.2017
DNS Cache-Sperre:
Mit der DNS Cache Sperre bestimmen wir wann Informationen im DNS Cache
überschrieben werden dürfen.
Wenn ein DNS Server auf eine rekursive Anfrage antwortet, speichert er die Information
so ab, dass diese für die nächste Anfrage schneller zur Verfügung stehen.
Ein DNS Server speichert Informationen nicht ewig zwischen, denn die Die TTL bestimmt
wie lange die Daten vorgehalten werden.
Dieses Beispiel zeigt einen Wert von 100. Das bedeutet, dass die zwischengespeicherte
Information (DNS-Eintrag) bis zum Ablauf ihrer Zeit gültig ist und nicht aktualisiert bzw.
überschrieben werden kann.
Server 2016 - DNS-Socketpool und RRL konfigurieren
Erstellt von Jörn Walter 10.09.2017
An diesem Eintrag sehen wir eine verbleibende Gültigkeit von 58:35 Minuten.
Informationen im Cache können vor Ablauf ihrer TTL grundsätzlich überschrieben, und
zwar dann wenn eine Aktualisierung an der Ressource vorliegt.
Wenn es jetzt ein Angreifer schafft diesen DNS Eintrag zu manipulieren dann gelangen
wir nicht mehr auf die Seite des Windows Papst, sondern auf eine manipulierte Seite des
Angreifers. Zum Beispiel durch einen IP-Change für den Eintrag www.der-windows-
papst.de.
Mit der Cache Sperre verhindern wir ein Überschreiben der zwischengespeicherten
Informationen für die Dauer ihrer Gültigkeit. Das trägt dazu dabei, dass ein Angreifer den
Datenverkehr nicht umleiten kann, denn die zwischengespeicherten Informationen haben
eine feste Gültigkeit (Schreibschutz), siehe Bild oben.
Natürlich lässt sich der Wert anpassen. Was aber dafür sorgt, das dem Angreifer ein
Zeitfenster für eine Manipulation eingeräumt wird.
Set-DnsServerCache –LockingPercent 90
Server 2016 - DNS-Socketpool und RRL konfigurieren
Erstellt von Jörn Walter 10.09.2017
Response Rate Limiting RRL:
Mit dieser Funktion haben wir die Möglichkeit DOS (Denial of Services) zu verringern
bestenfalls zu verhindern. DoS Angriffe haben das Ziel, bereitgestellte Services außer
Betrieb zu setzen. Dazu wird auf dem Server eine Überlastung herbeigeführt. Bei einem
Exchange Server z.B. durch eine Überflutung von E-Mails bei einem Netzwerk durch
Datenpakete. Bei diesen Angriffen geht es nicht um Datenspionage oder dem Ausspähen
von Daten, sondern um den herbeigeführten Zusammenbruch eines Service.
Dabei kommen verschiedene Vorgehensweisen zum Einsatz, wie z.B. Mailbombing,
Broadcaststurm, Smurf-Attacke, Distributed Denial of Service, Advances Persistent Denial
of Service.
Damit ein Clientsystem im Netzwerk nicht zum Gehilfen eines Angreifers wird, können wir
dieses durch die Aktivierung von RRL vermeiden oder deutlich verringern. Der Modus ist
im Default deaktiviert.
Mit GetDnsServerRRL lesen wir die aktuelle Konfiguration aus. Aktuell wäre der Client in
der Lage maximal 5 Antworten zu empfangen.
Mit Set-DNSServerRRL -Mode LogOnly aktivieren wir nur das Logging.
Mit Set-DNSServerRRL -Mode Enable aktivieren wir die Funktion.
DNS RRL lässt für einen bestimmten IP-Adressbereich nur eine bestimmte Anzahl
identischer DNS Antworten. Wird der eingestellte Schwellwert überschritten, verwirft RRL
die Antwort fordert den Resolver über das Truncated Bit (TC) aber trotzdem auf, die
Anfrage noch einmal per TCP zu stellen. Da bei reflektierende DNS Angriffen die
Quelladresse verfälscht ist, kommt eine Verbindung per TCP nie zu Stande.
Empfehlung:
Set-DNSServerRRL -LeakRate 5
Set-DNSServerRRL -MaximumResponsesPerWindow 512
Server 2016 - DNS-Socketpool und RRL konfigurieren
Erstellt von Jörn Walter 10.09.2017
Get-DNSServer
dnscmd /info /socketpoolsize
dnscmd /config /socketpoolsize 5000
Dnscmd /Info /SocketPoolExcludedPortRanges
net stop dns
net start dns
Set-DnsServerCache –LockingPercent 100
# Response Rate Limiting (DOS Angriffe verringern)
Get-DNSServerRRL
Set-DNSServerRRL -Mode LogOnly
Set-DNSServerRRL -Mode Enable
Set-DNSServerRRL -LeakRate 5
Set-DNSServerRRL -MaximumResponsesPerWindow 512
Set-DNSServerResponseRateLimiting -MaximumResponsesPerWindow
Add-DnsServerResponseRateLimitingExceptionList
Add-DnsServerResponseRateLimitingExceptionlist -Name "Ethernet0" -ServerInterfaceIP
"EQ,171.18.32.31"
Get-DnsServerResponseRateLimitingExceptionList
Set-DNSServerRecursionScope
Add-DNSServerRecursionScope
Add-DNSServerQueryResolutionPolicy
Set-DnsServerRecursionScope -Name -EnableRecursion $false
Add-DNSServerRecursionScope -Name "Internes Netzwerk" -EnableRecursion $True
Add-DnsServerQueryResolutionPolicy -Name "RecursionControl" -Action Allow -
ApplyOnRecursion -RecursionScope "interneclients" -ServerInterfaceIP "eq,172.18.32.31"