Гугл сказал мне что технология для rpc interfaces enumeration уже 9 лет как известна - rpctools
Используются при этом три вещи:
- список зарегистрированных в системе rpc ports, который можно посмотреть например в WinObj в директории \RPC Control
- совершенно официальная функция RpcMgmtInqIfIds из RPCRT4.dll
- пара не менее официальных функций RpcMgmtEpEltInqBegin & RpcMgmtEpEltInqNext
Процесс можно автоматизировать даже, я думаю - написать к тому же perlу xs модуль для выгребания имен портов из \RPC Control (через ф-ции NtOpenDirectoryObject & NtQueryDirectoryObject) и вызывать ifids.exe для всех из них. Можно также запросить в каких процессах эти порты открыты (Process Explorer так умеет делать например)
Возвращаясь к исходному вопросу - какой онтевирус умеет проверять зарегистрированные в системе RPC интерфейсы ?
Получается, что один только я как мудак писал тулзу, которая путём анализа кода ищет и сканирует неэкспортируемые/недокументированные списки в rpcrt4.dll?
ОтветитьУдалитьммм, мне ж плохо видно для каких целей она была написана :-). Кстати что она умеет делать ?
ОтветитьУдалитьНо вообще рекомендуется сначала читать документацию (например все вышеописанное было найдено за пару часов неспешного гугления), а потом можно краем глаза посмотреть чего линуксоиды намутили - в данном случае в samba тоже есть кое-что полезное (клиенты ко всяким мало-документированным rpc интерфейсам например там есть точно). Дизассемблер запускать никогда не поздно :-). Например еще в windbg есть plugin rpcexts.dll
Тулза сейчас умеет:
ОтветитьУдалить- Собственно, получать список всех интерфейсов.
- Получать список методов для каждого интерфейса.
- Декомпилировать MIDL с целью извлечения из него прототипа метода и пр. информации.
- На основе полученной инфы автоматически генерировать код DLL-библиотеки для перехвата произвольных методов (патчинг адресов в MIDL_SERVER_INFO.DispatchTable).
- В реальном времени мониторить регистрацию rpc-интерфейсов в контексте всех процессов и перехватывать нужные используя в качестве хендлеров сгенерированные DLL-ки.
Я её планировал выложить вместе с 3-м nobunkum-ом как дополнение к небольшой статье про реверсинг приложений использующих rpc, но т.к. он получился полностью про малвари - пойдёт в 4-й номер.
богато
ОтветитьУдалитьmidl умеет декомпилить ida plugin mIDA, правда он без сорцов поставляется и 32bit only
Полагаю что перехват регистрации осуществляется сплайсингом RpcServerRegisterIf[2|Ex] ?
Выкладывай, с интересом заценю. Когда 4ый номер будет готов ? Про буткиты отличная статья в 3ем была
Ага, про mIDA знаю/пользуюсь. Моя тулза, кстати, пока что тоже x32 only, но её портирование под x64 не должно стать большой проблемой: переписать код перехвата API и пересобрать.
ОтветитьУдалитьДа, перехват регистрации осуществляется через сплайсинг RpcServerRegisterIf[2|Ex] и RpcServerUseProtseq[Ex|Ep|If|IfEx] до кучи.
Номер выйдет как обычно - "when it's done". Материалы для нескольких статей уже есть, но другие авторы пока что не очень шевелятся.