
Windows-RPC-Firewall, die bösartige entfernte Prozeduraufrufe prüft, erkennt und blockiert, um seitliche Bewegung, Aufklärung und Ausnutzung von RPC-basierten Angriffen wie DCSync und ZeroLogon zu verhindern.
Schauen Sie sich unseren RPC Firewall Blogbeitrag oder unseren BlackHat-Vortrag an, um ein besseres Verständnis von RPC, RPC-Angriffen und der Lösung – der RPC Firewall – zu erhalten.
Treten Sie unserem |Zero| Labs Slack Community Workspace bei, um Fragen zu stellen, Probleme zu melden oder einfach etwas loszuwerden.
Wir freuen uns auch über eine E-Mail (falls Sie zu den Menschen gehören, die dies bevorzugen). Kontaktieren Sie uns unter [email protected]
Das folgende Tutorial zeigt die grundlegende Installation und Einrichtung der RPC Firewall sowie eine Demonstration, wie sie vor verschiedenen RPC-basierten Angriffen schützt.
RPC ist der zugrundeliegende Mechanismus, der für zahlreiche laterale Bewegungen, Aufklärungs- und Relay-Angriffe genutzt wird oder einfach dazu dient, verwundbare RPC-Dienste auszunutzen.
DCSync-Angriff? über RPC. Remote DCOM? über RPC. WMIC? über RPC. SharpHound? über RPC. PetitPotam? über RPC. PsExec? über RPC. ZeroLogon? über RPC... Nun, Sie verstehen, worauf ich hinaus will :)
In diesem Dokument werden die folgenden Begriffe verwendet:
Kann verwendet werden, um alle entfernten RPC-Aufrufe zu auditieren. Sobald Sie ein entferntes Angriffswerkzeug ausführen, sehen Sie, welche RPC-UUIDs und Opnums remote aufgerufen wurden.
Eine Beispielkonfiguration finden Sie hier.
Wenn die RPCFW Configuration für das Auditieren konfiguriert ist, werden Ereignisse in das Windows-Ereignisprotokoll geschrieben. RPC Filter-Ereignisse werden mit der Ereignis-ID 5712 in das Sicherheitsprotokoll geschrieben. RPC Firewall-Protokolle werden unter Anwendung/RPCFW geschrieben.
Benutzer können diese Protokolle an ihr SIEM weiterleiten und damit Basislinien des entfernten RPC-Verkehrs für verschiedene Server erstellen. Sobald ein anormaler RPC-Aufruf auditiert wird, nutzen Sie dies, um eine Warnung für Ihr SOC-Team auszulösen.
Wir haben mehrere Sigma-Regeln integriert, mit denen ungewöhnliche RPC-Aktivitäten und Angriffe erkannt werden können.
Die RPCFW Configuration kann so konfiguriert werden, dass nur potenziell bösartige RPC-Aufrufe blockiert und auditiert werden. Alle anderen RPC-Aufrufe werden nicht auditiert, um die Rauschunterdrückung zu verbessern und die Leistung zu steigern.
Sobald ein potenziell bösartiger RPC-Aufruf erkannt wird, wird er blockiert und auditiert. Dies kann verwendet werden, um Ihr SOC-Team zu alarmieren, während Ihre Server geschützt bleiben.
Als ergänzenden Schutz können Sie die RPC-Filterfunktionen nutzen, die ebenfalls über die RpcFwManager.exe unterstützt werden.
Ein Beispiel für eine solche Konfiguration finden Sie hier.
Sie besteht aus 3 Komponenten:
Obwohl die Verwendung beider Methoden Vor- und Nachteile hat, gibt es einige wesentliche Vorteile der RPC Firewall, die besondere Beachtung verdienen. Diese sind:
Andererseits eignen sich RPC Filters hervorragend für das pauschale Zulassen oder Verweigern ganzer UUIDs, da dies problemlos funktioniert.
Vor der Ausführung eines Befehls wird empfohlen, den Status der Bereitstellung zu überprüfen. Dies geschieht mit dem Befehl '/status':
RpcFwManager.exe /status
Dies zeigt den Status sowohl der RPC Firewall als auch der RPC Filters an. Es werden detaillierte Informationen zum Installationsstatus sowie zum Betriebsstatus der Bereitstellung ausgegeben.
Fast jeder Befehl kann mit fw oder flt am Ende versehen werden. Dies teilt dem RPCFW Manager mit, ob der Befehl auf RPC Firewall ('fw'), RPC Filters ('flt') oder beide (wenn kein Suffix verwendet wird) angewendet wird.
Führen Sie die Installation der entsprechenden Funktion durch (RPC Filters / RPC Firewall / beide).
Stellen Sie sicher, dass die Ereignisanzeige während der Installation/Deinstallation geschlossen ist. Es ist außerdem empfehlenswert, vor der Installation zu stoppen und zu deinstallieren, um sicherzustellen, dass keine älteren Versionen installiert sind.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RpcFwManager.exe /install
Die Deinstallation führt das Gegenteil durch. Auch hier ist es empfehlenswert, den Dienst vor der Deinstallation zu stoppen.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RPC Filters werden systemweit auf jeden RPC-Server angewendet. Das Anwenden solcher Filter bleibt auch über Neustarts hinweg bestehen. Jeder neue oder alte Prozess wird gemäß der RPCFW Configuration durch RPC Filters geschützt.
RPC Firewall wird injiziert und schützt jeden RPC-Serverprozess, der auf entfernte RPC-Aufrufe lauscht. Dies geschieht durch die Injektion von RPC Firewall in Prozesse, die RPCRT4.DLL (die RPC-Laufzeit) laden. Sobald geladen, erkennt RPC Firewall, ob der RPC-Server auf entfernte RPC-Aufrufe lauscht. Falls nicht, entlädt es sich selbst. Wenn der Prozess ein gültiger RPC-Server ist, beginnt die RPC Firewall mit der Überwachung und Auditierung eingehender RPC-Aufrufe gemäß der RPCFW Configuration.
Die empfohlene Methode zum Schutz von RPC-Diensten ist die Verwendung des Befehls '/start'. Dieser startet den RPC Firewall-Dienst (für 'fw' oder kein Suffix) und erstellt RPC Filters (für 'flt' oder kein Suffix).
RpcFwManager.exe /start
Es ist auch möglich, RPC Firewall Ad-hoc zu verwenden, um bestimmte Prozesse zu schützen. Dadurch wird der RPC Firewall-Dienst nicht gestartet und die Schutzeinstellungen bleiben nicht über Neustarts hinweg bestehen.
Zum Schutz eines einzelnen Prozesses anhand der Prozess-ID (PID):
RpcFwManager.exe /start pid <pid>
Zum Schutz eines einzelnen Prozesses anhand des Namens:
RpcFwManager.exe /start process <Prozessname>
Um den Schutz zu stoppen, geben Sie einfach den Befehl '/stop' mit dem entsprechenden Suffix ein (es ist nicht möglich, den Schutz für einen bestimmten Prozess zu stoppen).
RpcFwManager.exe /stop
Je nach verwendetem Suffix ('fw' oder 'flt' oder keines) wird der RPC Firewall-Dienst gestoppt und die RPC Firewall-DLL aus allen Prozessen entladen. Für RPC Filters werden alle vom RPCFW Manager erstellten Filter gelöscht.
Einmal gestartet, bleibt die RPC Firewall über Neustarts hinweg bestehen. RPC Filters sind ebenfalls persistent.
Der RPCFW Manager sucht nach einer Datei RpcFw.conf im selben Verzeichnis wie die ausführbare Datei. Diese Datei verwendet die folgenden Konfigurationsoptionen:
Wichtig: Jede Konfigurationszeile sollte mit entweder 'fw:' oder 'flt:' beginnen, um anzugeben, ob die Zeile für RPC Firewall oder RPC Filter gilt.
Um weitere RPC-bezogene „Dinge“ anzuzeigen, gibt es den Befehl show. Derzeit zeigt er nur geschützte Prozesse an, die nicht mit dem RPC Firewall-Modul geschützt werden können.
RpcFwManager.exe /show
Die Konfigurationsreihenfolge ist wichtig, da die erste Übereinstimmung das Ergebnis des RPC-Aufrufs bestimmt.
Das folgende Konfigurationsbeispiel schützt einen Domain Controller mit RPC Firewall vor einem DCSync-Angriff. Es erlaubt die „gefährliche“ Opnum 3 DRSGetNCChanges der MS-DRSR-UUID nur von anderen Domain Controllern.
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr1> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr2> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 opnum:3 action:block
Wenn sich die Konfiguration ändert, müssen Sie die rpcFirewall.dll über den update-Befehl benachrichtigen:
RpcFwManager.exe /update
Für RPC Firewall öffnen Sie die Ereignisanzeige -> Anwendungs- und Dienstprotokolle -> RPCFW. Die Ereignis-IDs 1 und 2 beziehen sich auf 'protect'- und 'unprotect'-Ereignisse. Ereignis 3 auditiert die eigentlichen RPC-Aufrufe. Fügen Sie außerdem die Spalte Schlüsselwörter hinzu. Diese Spalte enthält Audit Success/Failure und zeigt an, ob der RPC-Aufruf blockiert wurde oder nicht.
Für RPC Filters öffnen Sie die Ereignisanzeige -> Sicherheit -> RPCFW. Filtern Sie nach Ereignis-ID 5712.
Ja! Scheuen Sie sich nicht, einen Pull-Request zu stellen.
Das wollen wir auch! Bitte kontaktieren Sie uns mit Ihren Gedanken, Ideen oder Problemen: [email protected]
Weitere Details finden Sie unter LICENSE.
| Parametername | Erklärung | Unterstützt von ... |
|---|
| opnum: | Übereinstimmung mit einer RPC-Opnum | RPC Firewall |
| verbose: | Kann entweder true oder false sein. Bei true werden Debug-Informationen für bestimmte RPC-Aufrufe ausgegeben (Standard: false) | RPC Firewall |
| prot: | Übereinstimmung mit dem verwendeten Protokoll gemäß den Protokollsequenzkonstanten | sowohl RPC Firewall als auch Filters |
| addr: | Übereinstimmung mit einer entfernten IP-Adresse (IPv4 oder IPv6, einschließlich CIDR) | RPC Firewall und teilweise von RPC Filters, mehr dazu hier |
| uuid: | Übereinstimmung mit einer bestimmten UUID | sowohl RPC Firewall als auch Filters |
| action: | Kann entweder allow oder block sein (Standard: allow) | sowohl RPC Firewall als auch Filters |
| audit: | Kann entweder true oder false sein. Steuert, ob Ereignisse in das RPCFW-Protokoll geschrieben werden (Standard: false) | sowohl RPC Firewall als auch Filters |
| sid: | Übereinstimmung eines authentifizierten Benutzers mit einer Security Identifier. Kann ein bestimmter Benutzer oder eine Gruppe sein. | sowohl RPC Firewall als auch Filters |