CVE-2020-1350 - kritische DNS Lücke

Am 14.7.2020 hat Microsoft eine Sicherheitswarnung veröffentlicht, die eine schnelle Reaktion seitens der Administratoren erfordert. Die Lücke hat den Codename "SIGRed" bekommen.

Risiko

Die Lücke liegt im Windows DNS-Server, welcher mit entsprechend präparierten Anfragen dazu gebracht werden kann, beliebigen Code als "Local System" auszuführen. Es ist also eine weitere klassische "Buffer Overflow"-Situation, bei der ein Server-Prozess sehr große Pakete im Speicher anlegt und dabei übersieht, wohin er schreibt.

Das Problem betrifft alle Windows DNS-Server seit Windows 2008 bis 2019 und ist für alle Administratoren interessant. Es gibt zwei Szenarien:

  • Externe DNS-Server mit anonymen Angreifern
    Es gibt sicher DNS-Server auf Basis von Windows, die im Internet direkt erreichbar sind. Diese könnten von anonymen Angreifern dann gekapert werden. Das Risiko ist real.
  • Interne DNS-Server
    Viel kritischer sehe ich aber all die internen DNS-Server, die bei den meisten Firmen für den Betrieb des Active Directory erforderlich sind und in den meisten Fällen auf dem Domain Controller laufen. Ein Schadcode, z.B. die Payload einer neuen Malware, könnte eine DNS-Anfrage an einen internen DNS-Server senden. Über den Weg könnte man einen Domaincontroller als "LocalSystem" Schaden anrichten.

Da Risiko ist also durchaus die Einstufung "10" wert und Microsoft schreibt selbst dazu:

This vulnerability has a CVSS Base score of 10. How bad is this?
We consider this to be a wormable vulnerability, meaning that it has the potential to spread via malware between vulnerable computers without user interaction. DNS is a foundational networking component and commonly installed on Domain Controllers, so a compromise could lead to significant service interruptions and the compromise of high level domain accounts.
Quelle: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1350

Also gilt es nicht lange abzuwarten.

SIGRed: Windows DNS Server Remote Code Execution | Check Point Research
https://www.youtube.com/watch?v=PUlMmhD5it8

Gegenmaßnahme

Es gibt mittlerweile aktualisierte Versionen, die im Microsoft Bulletin (https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1350) verlinkt sind. Bis Windows 2012R2 sind sie im "Monthly Security Update 2020-07 enthalten als auch einzeln verfügbar. Für Windows 2016/2019/2004 gibt es nur die Security Updates:

Laden Sie das aktuelle Updates für ihren Server entsprechend herunter.

Temporärer Schutz

Wenn Sie die Updates nicht sofort einspielen können, dann hat Microsoft passend dazu auch einen temporären Schutz veröffentlicht. Über einen Konfigurationseintrag in der Registrierung kann der Windows DNS-Service angewiesen werden, zu große Pakete zu verarbeiten. Microsoft hat also im Code durchaus eine "Schutzfunktion" für nachfolgende Codeteile implementiert und in diesem Fall erlaubt dies eine schnelle Abhilfe.

Hier einmal als REG-Datei zum Import auf dem DNS-Server:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters]
"TcpReceivePacketSize"=dword:0000ff00

Sie können das auch per PowerShell (Als Admin starten) samt Neustart des DNS-Service umsetzen:

New-ItemProperty `
   -Path "HKLM:\SYSTEM\CurrentControlSet\Services\DNS\Parameters" `
   -Name "TcpReceivePacketSize" `
   -Value 0x0000ff00 `
   -PropertyType "dword";
restart-service dns;

Das Skript addiert einfach den Key. Wer das Skript auf einem Server ohne DNS-Service ausführt, hat keinen Schaden aber auch keinen Nutzen und der Neustart des DNS-Service sollte jede Umgebung problemlos überstehen.

Wer eine größere Umgebung hat, kann das Skript natürlich als Task per Softwareverteilung auf die DNS-Server ausführen lassen oder per Gruppenrichtlinie diesen Registrierungsschlüssel setzen.
Sie könnten auch die PowerShell-Zeilen per "Invoke-Command" auf alle DNS-Server remote ausführen.

Hier eine schnelle Lösung ohne Logging, Fehler-Behandlung o.ä. Verwendung auf eigene Gefahr.

foreach ($dc in get-ADDomainController) {
   invoke-command `
      -computername $dc.hostname `
      -command {New-ItemProperty `
         -Path "HKLM:\SYSTEM\CurrentControlSet\Services\DNS\Parameters" `
         -Name "TcpReceivePacketSize" `
         -Value 0x0000ff00 `
         -PropertyType "dword";
         restart-service dns;}
}

Auch wenn Microsoft sehr zügig ein Update liefern wird, sollten Sie diesen Schutz aktivieren. Sobald Microsoft ein Update veröffentlicht, werden sich die "bösen Jungs und Mädels" natürlich an das Reverse Engineering machen. Die werden sicher schneller fertig sein, als alle DNS-Server der Welt aktualisiert wurden.

Nebeneffekte

Keine Aktion ohne Reaktion und der schneller Fix verhindert, dass DNS-Pakete mit mehr als 64kbyte vom DNS-Server verarbeitet werden. Es ist quasi eine "Application Firewall" auf Basis der Größe. Es kann, zumindest in seltenen Fällen, aber auch regulären Traffic geben, der so blockiert wird. Microsoft schreibt dazu.

TCP-based DNS response packets that exceed the recommended value will be dropped without error, so it is possible that some queries may not be answered. This could result in an unanticipated failure. A DNS server will only be negatively impacted by this workaround if it receives valid TCP responses that are greater than allowed in the previous mitigation (over 65,280 bytes).
Quelle: https://support.microsoft.com/en-us/help/4569509/windows-dns-server-remote-code-execution-vulnerability

Es könnte also in Ausnahmesituationen passieren, aber der überwiegende Anteil an Abfragen wird problemlos beantwortet.

Weitere Links