
Windows-RPC-Schnittstellenerkennungs- und Analysetool mit visueller Endpunktaufzählung, PE-Analyse, Symbolauflösung, Echtzeit-ETW-Sniffing und dynamischer Client-Code-Generierung für Sicherheitsaudits.
Bitte lesen Sie unsere Ankündigung des Blogbeitrags.
RPC Investigator (RPCI) ist eine .NET/C# Windows Forms UI-Anwendung, die eine erweiterte Erkennungs- und Analyseschnittstelle für Windows RPC-Endpunkte bereitstellt. Das Tool bietet eine visuelle Schnittstelle um die vorhandenen Kern-RPC-Fähigkeiten der NtApiDotNet-Plattform, einschließlich:
Über diese Kernfunktionen hinaus bietet RPCI zusätzliche Funktionen:
Es gibt mehrere Arbeitsabläufe, die der RPC Investigator unterstützt:
In diesem Beispiel werden wir den Windows-Taskplaner-RPC-Dienst untersuchen, der zum Verwalten und Ausführen geplanter Aufgaben verwendet wird. Wir werden den Dienst finden, Clientcode generieren und dann den Client anpassen, um mit einer der bereitgestellten Prozeduren zu interagieren.
Laden Sie zunächst die Windows-Dienstliste, indem Sie auf Datei -> Aus Dienst laden klicken. Dadurch wird ein neues Dienstlistenfenster geöffnet:

Suchen Sie den Dienst Schedule (Windows-Taskplaner), wählen Sie den Dienst aus und klicken Sie auf Weiter.

Sie werden aufgefordert, bevor RPCI alle zugehörigen RPC-DLLs lädt. Klicken Sie auf Ja, um fortzufahren. Sobald geladen, sehen Sie eine Liste aller RPC-Server, die über alle im Dienstprozess geladenen Module gefunden wurden. Der Windows-Taskplaner-RPC-Server hat eine Schnittstellen-ID 86D35949-83C9-4044-B424-DB363231FD0C. Suchen Sie die Zeile in der Liste mit dieser Schnittstellen-ID, die einen ausgeführten Dienst namens Task Scheduler haben sollte, klicken Sie mit der rechten Maustaste auf die Zeile und wählen Sie Neuer Client.

Der linke Teil des Clientfensters zeigt RPC-Servermetadaten und Befehlszeilenausgabe des Clientcodes. Die rechte Seite zeigt zwei Registerkarten:
In diesem Beispiel rufen wir die Prozedur SchRpcHighestVersion auf. Diese Methode akzeptiert ein einzelnes Argument, out int version, das nach dem Aufruf der Prozedur die höchste vom RPC-Interface unterstützte Taskplaner-Protokollversion enthält. Die hohen 16 Bits sind die Hauptversion und die niedrigen 16 Bits die Nebenversion.
Um diese Prozedur aufzurufen:
Suchen Sie im Fenster Clientcode die Methode Run, die der Haupteinstiegspunkt für den RPC-Client ist.
Bearbeiten Sie den Rumpf der Methode Run, um die Prozedur aufzurufen:
public async Task<bool> Run()
{
int version;
int status = SchRpcHighestVersion(out version);
if (status == 0) {
long major = (version & 0xffff0000) >> 16;
long minor = version & 0x0000ffff;
Console.WriteLine("highest supported RPC version: {0}.{1}", major, minor);
} else {
Console.WriteLine("call to SchRpcHighestVersion failed with error: {0:X}", status);
}
return true;
}
Nach dem Hinzufügen dieses Codes führen Sie den Client aus, indem Sie auf die Schaltfläche Run klicken. Dadurch wird der C#-Code kompiliert und dann die Methode Run ausgeführt.
Bei erfolgreicher Kompilierung sehen Sie im Ausgabe-Fenster etwas Ähnliches wie das Folgende:
> Run() output:
highest supported RPC version: 1.6

Der RPC Investigator verfügt über mehrere Konfigurationseinstellungen.
Die Konfigurationseinstellungen können innerhalb der Anwendung über das Menü Bearbeiten -> Einstellungen geändert werden.
Nach seiner ersten Veröffentlichung wurde RPC Investigator von einer .NET Framework-Anwendung in eine .NET 7-Anwendung umgewandelt. Wenn Sie auf Build-Probleme stoßen, stellen Sie sicher, dass Visual Studio auf dem neuesten Stand ist. Es ist eine gute Idee, alle Build-Ausgabeordner vor dem Build aus der .NET Framework-Version zu löschen.
Aufgrund des Wechsels von der unsicheren BinaryFormatter-Klasse zu protobuf-net sind mit der .NET Framework-Version generierte RPC-Bibliotheken nicht mit der .NET-Version kompatibel.
Wenn Sie in RPC Investigator zufällige Abstürze erleben, finden Sie möglicherweise eine Lösung, indem Sie Ihren Administrator bitten, Ihr EDR anzupassen. Wir haben festgestellt, dass einige EDRs nicht vernünftig mit JIT-kompilierten Sprachen umgehen.
In einigen Fällen wird RPC Investigator von EDRs als bösartig erkannt, einschließlich einiger Fehlalarme auf Virus Total. Dies ist ein bekanntes Problem. Das liegt daran, dass RPC Investigator NtObjectManager enthält – ein von James Forshaw erstelltes Paket, das von vielen EDRs, einschließlich Windows Defender, fälschlicherweise erkannt wird.
Da Windows RPC seit weit über einem Jahrzehnt ein beliebtes Forschungsthema ist, gibt es zu viele verwandte Ressourcen und Forschungsarbeiten, um sie hier zu nennen. Wir haben im Folgenden einige aufgeführt, die uns beim Bau dieses Tools begegnet sind:
Wenn Sie mit RPC-Interna nicht vertraut sind oder eine technische Auffrischung benötigen, empfehlen wir eine der maßgeblichen Quellen zu diesem Thema – Alex Ionescus SyScan-Vortrag 2014 in Singapur, Alles über RPC, LRPC, ALPC und LPC in Ihrem PC.
| Einstellung | Beschreibung | Standard |
|---|
| dbghelp.dll | Dateispeicherort des Moduls dbghelp.dll | Neueste Version in installierten Windows Kits finden. |
| Symbol-Pfad | Pfad zu Windows-Symbolen, der ein Symbolserver oder ein lokales Verzeichnis sein kann | Standardmäßiger öffentlicher Windows-Server: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Ablaufverfolgungsstufe | Die Protokollierungs-Ablaufverfolgungsstufe | info |