
Outil de découverte et d'analyse des interfaces RPC Windows avec énumération visuelle des points de terminaison, analyse PE, résolution de symboles, reniflage ETW en temps réel et génération de code client à la volée pour l'audit de sécurité.
Veuillez lire notre annonce de billet de blog.
RPC Investigator (RPCI) est une application d'interface utilisateur Windows Forms en .NET/C# qui fournit une interface avancée de découverte et d'analyse des points de terminaison RPC Windows. L'outil offre une interface visuelle autour des capacités RPC de base de la plateforme NtApiDotNet, y compris :
Au-delà de ces fonctionnalités de base, RPCI offre des capacités supplémentaires :
Plusieurs flux de travail sont pris en charge par RPC Investigator :
Dans cet exemple, nous allons inspecter le service RPC du Planificateur de tâches Windows, qui est utilisé pour gérer et exécuter des tâches planifiées. Nous allons trouver le service, générer le code client, puis personnaliser le client pour interagir avec l'une des procédures exposées.
Tout d'abord, chargez la liste des services Windows en cliquant sur Fichier -> Charger depuis un service. Cela ouvre une nouvelle fenêtre de liste de services :

Trouvez le service Schedule, qui est le Planificateur de tâches Windows, sélectionnez le service et cliquez sur Go.

Il vous sera demandé avant que RPCI charge toutes les DLL RPC associées. Cliquez sur Oui pour continuer. Une fois chargé, vous verrez une liste de tous les serveurs RPC découverts dans tous les modules chargés dans le processus du service. Le serveur RPC du Planificateur de tâches Windows a un ID d'interface de 86D35949-83C9-4044-B424-DB363231FD0C. Trouvez la ligne dans la liste qui a cet ID d'interface, qui devrait avoir un service en cours nommé Planificateur de tâches, faites un clic droit sur la ligne et sélectionnez Nouveau client.

La partie gauche de la fenêtre du client montre les métadonnées du serveur RPC et la sortie de la ligne de commande du code client. Le côté droit montre deux onglets :
Dans cet exemple, nous allons appeler la procédure SchRpcHighestVersion. Cette méthode accepte un seul argument, out int version, qui, après avoir appelé la procédure, contiendra la version de protocole la plus élevée du Planificateur de tâches prise en charge par l'interface RPC. Les 16 bits de poids fort sont la version majeure et les 16 bits de poids faible sont la version mineure.
Pour appeler cette procédure :
Dans la fenêtre Code client, trouvez la méthode Run, qui est le point d'entrée principal du client RPC.
Modifiez le corps de la méthode Run pour appeler la procédure :
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;
}
Après avoir ajouté ce code, exécutez le client en cliquant sur le bouton Run. Cela compilera le code C# puis exécutera la méthode Run.
Si la compilation réussit, vous verrez quelque chose de similaire dans la boîte Sortie :
> Run() output:
highest supported RPC version: 1.6

RPC Investigator dispose de plusieurs paramètres de configuration.
Les paramètres de configuration peuvent être modifiés dans l'application via le menu Édition -> Paramètres.
Après sa sortie initiale, RPC Investigator a été converti d'une application .NET Framework à une application .NET 7. Si vous rencontrez des problèmes de build, assurez-vous que Visual Studio est à jour. Il est recommandé de vider tous les dossiers de sortie de build avant de compiler à partir de la version .NET Framework.
De plus, en raison du passage de la classe BinaryFormatter (non sécurisée) à protobuf-net, les bibliothèques RPC générées avec la version .NET Framework sont incompatibles avec la version .NET.
Si vous rencontrez des plantages aléatoires dans RPC Investigator, vous pourriez trouver une solution en demandant à votre administrateur d'ajuster votre EDR. Nous avons constaté que certains EDR ne se comportent pas raisonnablement avec les langages JIT.
Dans certains cas, RPC Investigator est détecté comme malveillant par les EDR, y compris certains faux positifs sur Virus Total. C'est un problème connu. Cela est dû au fait que RPC Investigator contient NtObjectManager - un package créé par James Forshaw qui est connu pour être détecté (faux positif) par de nombreux EDR, y compris Windows Defender.
Parce que le RPC Windows est un sujet de recherche populaire depuis bien plus d'une décennie, il y a trop de ressources et d'efforts de recherche connexes pour les nommer ici. Nous en avons listé quelques-uns ci-dessous que nous avons rencontrés lors de la construction de cet outil :
Si vous n'êtes pas familier avec les internes de RPC ou avez besoin d'une remise à niveau technique, nous recommandons l'une des sources faisant autorité sur le sujet - la conférence SyScan 2014 d'Alex Ionescu à Singapour, Tout sur le RPC, LRPC, ALPC et LPC dans votre PC.
| Paramètre | Description | Par défaut |
|---|
| dbghelp.dll | Emplacement du fichier du module dbghelp.dll | Trouver la dernière version dans les Kits Windows installés. |
| Chemin des symboles | Chemin vers les symboles Windows, qui peut être un serveur de symboles ou un répertoire local | Serveur Windows public par défaut : srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Niveau de trace | Le niveau de trace de journalisation | info |