Обход мониторинга зловредных модулей SSP

Обход мониторинга зловредных модулей SSP

Сегодня расскажу об инте­рес­ном кейсе из опы­та учас­тия в Purple Team. Нам уда­лось обмануть кас­томное пра­вило СЗИ, нацелен­ное на монито­ринг злов­редных SSP-модулей.

Еще по теме: Обход антивируса с помощью Haskell

Обход мониторинга зловредных модулей SSP

Я счи­таю, что пря­мые манипу­ляции с памятью LSASS дав­но утра­тили свою эффектив­ность из‑за того, что есть нам­ного менее инва­зив­ные методи­ки получе­ния кре­дов на внут­ряках и ред­тимах. Опи­сан­ный далее слу­чай пре­тен­дует ско­рее на забав­ную «бай­ку из скле­па», нежели на серь­езную тех­нику зре­лых зло­умыш­ленни­ков. Одна­ко тут при­сутс­тву­ет мини‑ресерч, полез­ный для обу­чения.

Итак, приш­ли к нам пред­ста­вите­ли синей коман­ды и спро­сили, как может хац­кер спря­тать свой мал­варный SSP-про­вай­дер вро­де mimilib.dll от взгля­да монито­рин­га, оста­ваясь при этом кор­рек­тно зарегис­три­рован­ным в сис­теме. Отталки­ваясь от того, что детект осно­вывал­ся на отсле­жива­нии сос­тояния клю­ча HKLM\SYSTEM\currentcontrolset\control\lsa\Security Packages и про­вер­ки соот­ветс­тву­ющих DLL на наличие циф­ровых под­писей, мы решили поресер­чить сущес­тву­ющие либы на пред­мет уяз­вимос­ти к DLL Side-Loading.

В поисках экспорта SpLsaModeInitialize

Со­берем спи­сок легитим­ных биб­лиотек из C:\WINDOWS\System32\*:

Да­лее с помощью нехит­рого скрип­та на Python пос­мотрим на их экспор­ты с целью най­ти все DLL, которые пре­дос­тавля­ют апи SpLsaModeInitialize:

Со­дер­жимое pe_exports.py:

По­мимо дефол­тных вин­довых биб­лиотек, в гла­за сра­зу же бро­сает­ся C:\WINDOWS\System32\VMWSU.DLL, которая ока­залась частью пакета гос­тевых допол­нений VMware Tools. С циф­ровой под­писью у этой биб­лиоте­ки всё в нор­ме.

Обход мониторинга SSP

Импорты VMWSU.DLL

Те­перь гля­нем на импорты VMWSU.DLL.

Обход SSP

Как видишь, эта биб­лиоте­ка, ско­рее все­го, будет пытать­ся под­тянуть фун­кции vcruntime140.dll, которые не вхо­дят в набор обя­затель­ных ком­понен­тов ОС.

Подделка SSP и хукинг SpLsaModeInitialize

Про­ведем ата­ку DLL Side-Loading, нацелен­ную на под­мену биб­лиоте­ки vcruntime140.dll при заг­рузке VMWSU.DLL. Что­бы пере­опре­делить поведе­ние экспор­та SpLsaModeInitialize, мы вос­поль­зуем­ся клас­сичес­кой тех­никой API-хукин­га.

Для начала соберем все экспор­ты vcruntime140.dll с помощью SharpDllProxy, что­бы наша под­дель­ная биб­лиоте­ка VMWSU.DLL прок­сирова­ла вызовы vcruntime140.dll к соот­ветс­тву­ющей легитим­ной биб­лиоте­ке:

Те­перь, воору­жив­шись при­мером мал­варно­го SSP с Red Team Notes, а так­же чес­тно поза­имс­тво­вав шаб­лон для хукин­га из про­екта ShellcodeFluctuation (я уже исполь­зовал его в статье «Флук­туация шелл‑кода. Пишем инжектор для динами­чес­кого шиф­рования полез­ной наг­рузки в памяти»), наб­роса­ем быс­трый трам­плин, который будет менять поведе­ние SpLsaModeInitialize. Пол­ный код дос­тупен у меня на GitHub.

Оче­вид­но, что ско­пипа­щен­ный с ired.team код SSP палит­ся всем чем мож­но даже в ста­тике, одна­ко наша цель в дан­ном слу­чае — не избе­жать детек­тов на дис­ке, а най­ти спо­соб сок­рытия целевой биб­лиоте­ки из соот­ветс­тву­юще­го клю­ча реес­тра.

Ком­пилиру­ем как DLL с кор­рек­тны­ми экспор­тами, получен­ными с помощью SharpDllProxy (output_vcruntime140\vcruntime140_pragma.c/), и копиру­ем резуль­тат как C:\WINDOWS\System32\vcruntime140.dll. Туда же кла­дем исходную биб­лиоте­ку, пред­варитель­но пере­име­новав в output_vcruntime140\tmp50CA.dll:

От­мечу, что необя­затель­но класть ори­гиналь­ную пере­име­нован­ную биб­лиоте­ку tmp50CA.dll в SYSTEM32 — дос­таточ­но при опре­деле­нии прагм с экспор­тами ука­зать пол­ный путь до либы.

Те­перь добав­ляем VMWSU.DLL в качес­тве про­вай­дера безопас­ности LSASS:

И вуаля — в реес­тре зна­чение клю­ча Security Packages содер­жит толь­ко легитим­ные под­писан­ные DLL, одна­ко при под­груз­ке VMWSU.DLL будет заг­ружать­ся vcruntime140.dll, которая заменит вызов SpLsaModeInitialize сбор­щиком паролей в откры­том виде. При этом работос­пособ­ность сис­темы не пос­тра­дает, так как вызовы к vcruntime140.dll будут прок­сировать­ся до ори­гиналь­ной биб­лиоте­ки.

Пе­резаг­ружа­емся, логиним­ся, про­веря­ем файл C:\Temp\logged-pw.txt и, о боже, обна­ружи­ваем в нем толь­ко что вве­ден­ный пароль!

Заключение

Мне уда­лось обна­ружить неболь­шой зиродей для вир­туаль­ных машинок с навешан­ным VMware Tools. Нес­мотря на то что этот кейс вряд ли сра­бота­ет в боевых усло­виях, все же я счи­таю, что некото­рые защит­ные средс­тва чрез­мерно довер­чиво отно­сят­ся к активнос­ти, исхо­дящей от под­писан­ных обра­зов PE. А ведь ими тоже мож­но манипу­лиро­вать!

Спасиб за кейс snovvcrash!

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий