
Strumento di scoperta e analisi delle interfacce RPC di Windows con enumerazione visiva degli endpoint, parsing PE, risoluzione dei simboli, sniffing ETW in tempo reale e generazione al volo del codice client per audit di sicurezza.
Leggi il nostro annuncio sul blog.
RPC Investigator (RPCI) è un'applicazione .NET/C# Windows Forms UI che fornisce un'interfaccia avanzata di scoperta e analisi per gli endpoint RPC di Windows. Lo strumento offre un'interfaccia visiva attorno alle capacità RPC di base esistenti della piattaforma NtApiDotNet, tra cui:
Oltre a queste funzionalità principali, RPCI offre capacità aggiuntive:
RPC Investigator supporta diversi flussi di lavoro:
In questo esempio, esamineremo il servizio RPC di Windows Task Scheduler, utilizzato per gestire ed eseguire attività pianificate. Troveremo il servizio, genereremo il codice client e poi personalizzeremo il client per interagire con una delle procedure esposte.
Per prima cosa, carica l'elenco dei servizi Windows cliccando su File -> Load From Service. Si apre una nuova finestra con l'elenco dei servizi:

Trova il servizio Schedule, che è il Windows Task Scheduler, seleziona il servizio e clicca su Go.

Ti verrà chiesto prima che RPCI carichi tutte le DLL RPC associate. Clicca Yes per continuare. Una volta caricato, vedrai un elenco di tutti i server RPC scoperti tra tutti i moduli caricati nel processo del servizio. Il server RPC di Windows Task Scheduler ha un ID interfaccia di 86D35949-83C9-4044-B424-DB363231FD0C. Trova la riga nell'elenco con questo ID interfaccia, che dovrebbe avere un servizio in esecuzione chiamato Task Scheduler, fai clic con il tasto destro sulla riga e seleziona New Client.

La parte sinistra della finestra del client mostra i metadati del server RPC e l'output dalla riga di comando del codice client. La parte destra mostra due schede:
In questo esempio chiameremo la procedura SchRpcHighestVersion. Questo metodo accetta un singolo argomento, out int version, che, dopo aver chiamato la procedura, conterrà la versione più alta del protocollo Task Scheduler supportata dall'interfaccia RPC. I 16 bit alti sono la versione principale e i 16 bit bassi sono la versione secondaria.
Per chiamare questa procedura:
Nella finestra Client Code, trova il metodo Run, che è il punto di ingresso principale per il client RPC.
Modifica il corpo del metodo Run per chiamare la procedura:
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;
}
Dopo aver aggiunto questo codice, esegui il client cliccando sul pulsante Run. Questo compilerà il codice C# e poi eseguirà il metodo Run.
Se la compilazione ha successo, vedrai qualcosa di simile al seguente nella finestra Output:
> Run() output:
highest supported RPC version: 1.6

RPC Investigator ha diverse impostazioni di configurazione.
Le impostazioni di configurazione possono essere modificate all'interno dell'applicazione tramite il menu Edit -> Settings.
Dopo il suo rilascio iniziale, RPC Investigator è stato convertito da un'applicazione .NET Framework a un'applicazione .NET 7. Se incontri problemi di compilazione, assicurati che Visual Studio sia aggiornato. È una buona idea cancellare tutte le cartelle di output di compilazione prima di compilare dalla versione .NET Framework.
Inoltre, a causa del passaggio dalla classe BinaryFormatter non sicura a protobuf-net, le librerie RPC generate con la versione .NET Framework sono incompatibili con la versione .NET.
Se riscontri crash casuali in RPC Investigator, potresti trovare una soluzione chiedendo al tuo amministratore di modificare le impostazioni del tuo EDR. Abbiamo scoperto che alcuni EDR non si comportano in modo corretto con i linguaggi JIT.
In alcuni casi, RPC Investigator viene rilevato come dannoso dagli EDR, inclusi alcuni falsi positivi su Virus Total. Questo è un problema noto. Ciò è dovuto al fatto che RPC Investigator contiene NtObjectManager - un pacchetto creato da James Forshaw noto per essere rilevato (falso positivo) da molti EDR, incluso Windows Defender.
Poiché Windows RPC è stato un argomento di ricerca popolare per oltre un decennio, ci sono troppe risorse e sforzi di ricerca correlati da elencare qui. Di seguito ne abbiamo elencati alcuni che abbiamo incontrato durante la creazione di questo strumento:
Se non hai familiarità con gli interni di RPC o hai bisogno di un ripasso tecnico, ti consigliamo una delle fonti autorevoli sull'argomento: il talk di Alex Ionescu al SyScan 2014 a Singapore, All about the RPC, LRPC, ALPC, and LPC in your PC.
| Impostazione | Descrizione | Predefinito |
|---|
| dbghelp.dll | Posizione del file del modulo dbghelp.dll | Trova l'ultima versione tra i Windows Kits installati. |
| Symbol Path | Percorso dei simboli di Windows, che può essere un server di simboli o una directory locale | Server pubblico di Windows predefinito: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Trace Level | Il livello di tracciamento del logging | info |