
Инструмент для обнаружения и анализа интерфейсов RPC в Windows с визуальным перечислением конечных точек, парсингом PE-файлов, разрешением символов, анализом ETW в реальном времени и генерацией клиентского кода на лету для аудита безопасности.
Пожалуйста, прочитайте наше объявление в блоге.
RPC Investigator (RPCI) — это приложение с пользовательским интерфейсом Windows Forms на .NET/C#, предоставляющее расширенный интерфейс для обнаружения и анализа конечных точек Windows RPC. Инструмент предоставляет визуальный интерфейс поверх существующих основных возможностей RPC платформы NtApiDotNet, включая:
Помимо этих основных функций, RPCI предоставляет дополнительные возможности:
RPC Investigator поддерживает несколько рабочих процессов:
В этом примере мы рассмотрим службу RPC планировщика задач Windows, которая используется для управления и выполнения запланированных задач. Мы найдем службу, сгенерируем код клиента, а затем настроим клиент для взаимодействия с одной из предоставленных процедур.
Сначала загрузите список служб Windows, нажав File -> Load From Service. Откроется новое окно со списком служб:

Найдите службу Schedule (планировщик задач Windows), выберите ее и нажмите Go.

Перед загрузкой всех связанных DLL-библиотек RPC будет отображен запрос подтверждения. Нажмите Yes, чтобы продолжить. После загрузки вы увидите список всех серверов RPC, обнаруженных во всех модулях, загруженных в процесс службы. Сервер RPC планировщика задач Windows имеет идентификатор интерфейса 86D35949-83C9-4044-B424-DB363231FD0C. Найдите в списке строку с этим идентификатором интерфейса, у которой должно быть указано имя запущенной службы Task Scheduler, щелкните правой кнопкой мыши на этой строке и выберите New Client.

Левая часть окна клиента отображает метаданные сервера RPC и вывод командной строки из кода клиента. Правая часть содержит две вкладки:
В этом примере мы будем вызывать процедуру SchRpcHighestVersion. Этот метод принимает один аргумент, out int version, который после вызова процедуры будет содержать наивысшую версию протокола планировщика задач, поддерживаемую интерфейсом RPC. Старшие 16 бит — это основная версия, младшие 16 бит — дополнительная.
Чтобы вызвать эту процедуру:
В окне Client Code найдите метод Run, который является точкой входа для клиента RPC.
Отредактируйте тело метода Run для вызова процедуры:
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;
}
После добавления этого кода запустите клиент, нажав кнопку Run. Это скомпилирует код C# и затем выполнит метод Run.
Если компиляция прошла успешно, вы увидите нечто подобное в окне Output:
> Run() output:
highest supported RPC version: 1.6

Rpc Investigator имеет несколько параметров конфигурации.
| Setting | Description | Default |
|---|---|---|
| dbghelp.dll | Расположение файла модуля dbghelp.dll | Найти последнюю версию в установленных Windows Kits. |
| Symbol Path | Путь к символам Windows, который может указывать на сервер символов или локальную директорию | По умолчанию общедоступный сервер Windows: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Trace Level | Уровень трассировки журнала | info |
Параметры конфигурации можно изменить в приложении через меню Edit -> Settings.
После первоначального выпуска RPC Investigator был преобразован из приложения .NET Framework в приложение .NET 7. Если у вас возникли проблемы со сборкой, убедитесь, что Visual Studio обновлен. Рекомендуется очистить все папки выходных данных сборки перед сборкой из версии .NET Framework.
Кроме того, из-за перехода с небезопасного класса BinaryFormatter на protobuf-net библиотеки RPC, сгенерированные с версией .NET Framework, несовместимы с версией .NET.
Если вы сталкиваетесь с неожиданными сбоями в RPC Investigator, возможно, решением будет попросить администратора настроить вашу систему EDR. Мы обнаружили, что некоторые EDR некорректно работают с JIT-компилируемыми языками.
В некоторых случаях RPC Investigator определяется как вредоносное ПО системами EDR, включая ложные срабатывания на Virus Total. Это известная проблема. Это связано с тем, что RPC Investigator содержит NtObjectManager — пакет, созданный Джеймсом Форшоу, который, как известно, определяется (ложно-положительно) многими EDR, включая Защитник Windows.
Поскольку Windows RPC уже более десяти лет является популярной темой для исследований, здесь невозможно перечислить все связанные ресурсы и исследовательские работы. Ниже приведены некоторые из них, с которыми мы столкнулись при создании этого инструмента:
Если вы не знакомы с внутренними механизмами RPC или вам нужно обновить знания, мы рекомендуем один из авторитетных источников по этой теме — доклад Алекса Ионеску на SyScan 2014 в Сингапуре: All about the RPC, LRPC, ALPC, and LPC in your PC.