Сегодня познакомимся с инструментом для выполнения кода с использованием уже имеющихся сервисов в системе - SCShell (https://github.com/Mr-Un1k0d3r/SCShell/). В репе есть пример реализации на C# и Python.
Принцип работы прост, но отличается от PSExec и SMBExec. При запуска указывается имя сервиса (по умолчанию XblAuthManager), далее через svcctl (интерфейс служб) заменяет его бинарь (binary path) на
'C:\windows\system32\cmd.exe /c <команда>, запускает сервис. После выполнения возвращает исходное состояние сервиса. При таком обмене атакующий не получает вывода команды, но это позволяет не трогать жесткий диск. Ключевая особенность этого инструмента в том, что всё взаимодействие с целью происходит по DCERPC, а значит событий 5145 (доступ к шаре \PIPE\svcctl) не будет.
Как в итоге ловить?
Для анализа трафика RPC нам необходимо, например, настроить логгирование через ETW, либо настроить RPC фильтры.
Для настройки RPC фильтров необходимо включить Аудит событий RPC (в категории подробное отслеживание) и настроить сам фильтр:
Предположим нас интересует фильтр на доступ к svcctl через RPC, у него uuid будет 367abb81-9844-35f1-ad32-98f038001003 (из доки MS):
rpc filter
add rule layer=um actiontype=permit audit=enable
add condition field=if_uuid matchtype=equal data=367abb81-9844-35f1-ad32-98f038001003
add filter
Сохраняем это в файл, устанавливаем фильтр через netsh:
netsh -f rpcauditrule.txt
Далее в журнале ищем события с EventId 5712, это и будут наши обращения к svcctl через RPC. При таком методе мы не можем понять к каким именно функциям было обращение, это можно обогатить через трафик, а именно через поле OpNum.
Аналогично при помощи RPC Filter можно ловить и другие интерфейсы, которые используют атакующие, детали в ссылках ниже.
Ссылки:
- Детальная статья по теории RPC и мониторингу: https://habr.com/ru/companies/rvision/articles/716656/
- Репа с другими сервисами RPC и их ловле: https://github.com/jsecurity101/MSRPC-to-ATTACK/