
Herramienta de descubrimiento y análisis de interfaces RPC de Windows con enumeración visual de puntos finales, análisis de PE, resolución de símbolos, sniffing ETW en tiempo real y generación de código cliente sobre la marcha para auditoría de seguridad.
Lea nuestro anuncio del blog.
RPC Investigator (RPCI) es una aplicación de interfaz de usuario de Windows Forms en .NET/C# que ofrece una interfaz avanzada de descubrimiento y análisis para puntos finales RPC de Windows. La herramienta proporciona una interfaz visual alrededor de las capacidades centrales RPC existentes de la plataforma NtApiDotNet, incluyendo:
Además de estas funciones principales, RPCI proporciona capacidades adicionales:
Hay varios flujos de trabajo compatibles con RPC Investigator:
En este ejemplo, inspeccionaremos el servicio RPC del Programador de tareas de Windows, que se utiliza para administrar y ejecutar tareas programadas. Encontraremos el servicio, generaremos código cliente y luego personalizaremos el cliente para interactuar con uno de los procedimientos expuestos.
Primero, cargue la lista de servicios de Windows haciendo clic en Archivo -> Cargar desde servicio. Esto abre una nueva ventana de lista de servicios:

Busque el servicio Schedule, que es el Programador de tareas de Windows, seleccione el servicio y haga clic en Ir.

Se le pedirá antes de que RPCI cargue todos los DLL RPC asociados. Haga clic en Sí para continuar. Una vez cargados, verá una lista de todos los servidores RPC descubiertos en todos los módulos cargados en el proceso del servicio. El servidor RPC del Programador de tareas de Windows tiene un ID de interfaz de 86D35949-83C9-4044-B424-DB363231FD0C. Busque la fila en la lista que tenga este ID de interfaz, que debería tener un servicio en ejecución llamado Task Scheduler, haga clic derecho en la fila y seleccione Nuevo cliente.

La parte izquierda de la ventana del cliente muestra metadatos del servidor RPC y la salida de la línea de comandos del código cliente. El lado derecho muestra dos pestañas:
En este ejemplo llamaremos al procedimiento SchRpcHighestVersion. Este método acepta un solo argumento, out int version, que, después de llamar al procedimiento, contendrá la versión más alta del protocolo del Programador de tareas compatible con la interfaz RPC. Los 16 bits altos son la versión principal y los 16 bits bajos son la versión secundaria.
Para llamar a este procedimiento:
En la ventana Código cliente, busque el método Run, que es el punto de entrada principal para el cliente RPC.
Edite el cuerpo del método Run para llamar al procedimiento:
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;
}
Después de agregar este código, ejecute el cliente haciendo clic en el botón Ejecutar. Esto compilará el código C# y luego ejecutará el método Run.
Si la compilación es exitosa, verá algo similar a lo siguiente en el cuadro Salida:
> Run() output:
highest supported RPC version: 1.6

RPC Investigator tiene varias opciones de configuración.
| Configuración | Descripción | Predeterminado |
|---|---|---|
| dbghelp.dll | Ubicación del archivo del módulo dbghelp.dll | Buscar la versión más reciente en los Windows Kits instalados. |
| Ruta de símbolos | Ruta a los símbolos de Windows, que puede ser un servidor de símbolos o un directorio local | Servidor público de Windows predeterminado: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Nivel de seguimiento | El nivel de seguimiento de registro | info |
Los parámetros de configuración se pueden modificar dentro de la aplicación a través del menú Editar -> Configuración.
Después de su lanzamiento inicial, RPC Investigator se convirtió de una aplicación de .NET Framework a una aplicación de .NET 7. Si encuentra problemas de compilación, asegúrese de que Visual Studio esté actualizado. Es buena idea limpiar todas las carpetas de salida de compilación antes de compilar desde la versión de .NET Framework.
Además, debido al cambio de la clase insegura BinaryFormatter a protobuf-net, las bibliotecas RPC generadas con la versión de .NET Framework son incompatibles con la versión de .NET.
Si experimenta fallos aleatorios en RPC Investigator, es posible que encuentre una solución pidiendo a su administrador que ajuste su EDR. Hemos descubierto que algunos EDR no se comportan correctamente con lenguajes JIT.
En algunos casos, RPC Investigator es detectado como malicioso por los EDR, incluidos algunos falsos positivos en Virus Total. Este es un problema conocido. Esto se debe a que RPC Investigator contiene NtObjectManager, un paquete creado por James Forshaw que es conocido por ser detectado (falso positivo) por muchos EDR, incluido Windows Defender.
Debido a que RPC de Windows ha sido un tema de investigación popular durante más de una década, hay demasiados recursos y esfuerzos de investigación relacionados para nombrar aquí. A continuación, enumeramos algunos que encontramos mientras desarrollábamos esta herramienta:
Si no está familiarizado con los internos de RPC o necesita un repaso técnico, le recomendamos una de las fuentes autorizadas sobre el tema: la charla de Alex Ionescu en SyScan 2014 en Singapur, Todo sobre RPC, LRPC, ALPC y LPC en su PC.