Категория > Новости > BloodHound. Натаскиваем ищейку на поиск NTLM Relay - «Новости»

BloodHound. Натаскиваем ищейку на поиск NTLM Relay - «Новости»


2-10-2023, 08:03. Автор: Forman
Гид по NTLM Relay. Зах­ватыва­ем NTLM-аутен­тифика­цию для Relay-ата­ки» и «Гид по NTLM Relay, часть 2. Про­водим Relay-ата­ки».

 

Описание проблемы


С исполь­зовани­ем ата­ки NTLM Relay мож­но зах­ватить зачас­тую не одну машину, а иног­да даже весь домен. Такая ата­ка может быть край­не эффектив­ной, но сна­чала нуж­но качес­твен­но про­ана­лизи­ровать информа­цию об инте­ресу­ющей нас цели. Это нес­ложно, ког­да мы находим­ся в отно­ситель­но неболь­шом домене, но чем обширнее сетевая инфраструк­тура, тем труд­нее ста­новит­ся изу­чать вза­имос­вязи объ­ектов и выис­кивать пути повыше­ния при­виле­гий. Поп­робу­ем разоб­рать­ся, как про­водить качес­твен­ный ана­лиз в подоб­ных слу­чаях.


Читайте также - Владельцы дачных участков и частных домов не понаслышке знают, что бензопилы значительно облегчают труд, ускоряют выполнение различных видов работ. В зависимости от возможностей и технических характеристик - купить в минске бензопилу по доступным ценам.

Для ана­лиза вза­имос­вязей был при­думан инс­тру­мент BloodHound. Со сво­ей работой он справ­ляет­ся неп­лохо, пред­став­ляет архи­тек­туру домена в виде гра­фа, ищет пути для повыше­ния при­виле­гий и про­чее. Но «из короб­ки» у него не очень мно­го прик­ладных воз­можнос­тей. Поэто­му полез­но будет научить­ся искать с помощью BloodHound необыч­ные век­торы, нап­ример для Relay-атак.


BloodHound наибо­лее эффекти­вен для ана­лиза сетей и доменов, нас­читыва­ющих сот­ни тысяч объ­ектов, десят­ки тысяч машин. С таким доменом край­не тяжело вза­имо­дей­ство­вать, некото­рые методы ана­лиза вооб­ще перес­тают работать.


Бы­вает, что ты можешь зах­ватить мно­го машин с помощью релея, но не зна­ешь, какую выб­рать для ата­ки. В этом слу­чае мож­но вос­поль­зовать­ся гра­фами для поис­ка самой инте­рес­ной цели.


Оче­вид­но, что так или ина­че тех­нику Relay-ата­ки мож­но наложить на теорию гра­фов, где машины — это вер­шины, а реб­ра — это воз­можные релеи, но вот с деталя­ми надо разоб­рать­ся.


 

Анализ существующих решений


Для начала заг­лянем в Google и поп­робу­ем най­ти готовые решения. При поис­ке кас­томных зап­росов для BloodHound мож­но нат­кнуть­ся на некото­рые наработ­ки, нап­ример:




  • ly4k/Certipy;


  • CompassSecurity/BloodHoundQueries;


  • hausec/BloodHound-Custom-Queries.


Имен­но для Relay-атак сущес­тву­ет нес­коль­ко кру­тых зап­росов, в час­тнос­ти для ESC8. С ним все дос­таточ­но прос­то: он выводит цен­тры сер­тифика­ции с вклю­чен­ным WebEnroll. На эти цен­тры сер­тифика­ции мож­но выпол­нить Relay-ата­ку, далее дело тех­ники.


Вто­рой зап­рос от CompassSecurity, более наворо­чен­ный, пред­назна­чен для поис­ка в сети компь­юте­ров, вхо­дящих в груп­пу локаль­ных адми­нис­тра­торов дру­гих машин. Выг­лядит он так:


"name": "Computers Local Admin to Another Computer","category": "Relay","queryList": [{"final": false,"title": "Select Domain...","query": "MATCH (n:Domain) RETURN n.name ORDER BY n.name DESC"},{"final": true,"query": "MATCH = (c1:Computer {domain: $result})-[r1:AdminTo]->(c2:Computer) RETURN UNION ALL MATCH = (c3:Computer {domain: $result})-[r2:MemberOf|HasSIDHistory*1..]->(g:Group)-[r3:AdminTo]->(c4:Computer) RETURN p"}]
}

Вот какие резуль­таты мож­но получить, исполь­зуя этот зап­рос.


Ре­зуль­тат выпол­нения зап­роса на поиск машин в локаль­ных адми­нах машин

Очень мно­го машин неяв­но находит­ся друг у дру­га в груп­пе локаль­ных адми­нис­тра­торов, что соз­дает мно­жес­тво век­торов для их зах­вата. На рисун­ке выше показа­на общая кар­тина, а если ее приб­лизить и рас­смот­реть вни­матель­нее, мы уви­дим сле­дующее.


BloodHound. Натаскиваем ищейку на поиск NTLM Relay - «Новости»
Мно­жес­тво машин явля­ются адми­нами на нес­коль­ких дру­гих машинах
Од­на машина явля­ется адми­ном на мно­жес­тве машин

Вот такой кра­сивый «цве­точек» из сер­веров Exchange встре­чает­ся очень час­то.


«Цве­точек» из сер­веров Exchange

По­лучил­ся резуль­татив­ный ана­лиз вза­имос­вязей компь­юте­ров — с помощью этой информа­ции мож­но под­нять при­виле­гии в домене. Ког­да вывод BloodHound содер­жит боль­шое количес­тво машин, про­верить все вруч­ную ста­новит­ся проб­лематич­но. Если наз­вания компь­юте­ров ни о чем тебе не говорят, непонят­но, какую сле­дует зах­ватывать в пер­вую оче­редь. А что самое важ­ное — на хос­те может быть вклю­чен SMB signing, и тог­да у нас вооб­ще ничего не получит­ся.



info


Иног­да машина уже находит­ся в груп­пе адми­нис­тра­торов домена. Не забудь про­верить это, преж­де чем искать слож­ные пути, такая про­вер­ка дос­таточ­но прос­то выпол­няет­ся вруч­ную.



Бы­вает, что мы не можем получить информа­цию о локаль­ных адми­нах на кон­крет­ной машине. Но зато можем пред­положить по наз­вани­ям групп или их опи­сани­ям, зачем они были соз­даны. Нап­ример, имя ADM_Servers_backups говорит само за себя. Так­же зачас­тую машины и поль­зовате­ли вклю­чены в одну груп­пу. Если вдруг два этих усло­вия будут соб­людены, мы можем про­бовать повысить при­виле­гии с помощью релея. Для поис­ка сме­шан­ного членс­тва в груп­пах мож­но исполь­зовать зап­рос от Hausec:


{
"name": "Find groups that contain both users and computers",
"queryList": [
{
"final": true,
"query": "MATCH (c:Computer)-[r:MemberOf*1..]->(groupsWithComps:Group) WITH groupsWithComps MATCH (u:User)-[r:MemberOf*1..]->(groupsWithComps) RETURN DISTINCT(groupsWithComps) as groupsWithCompsAndUsers"
}
]
 }
Обез­личен­ный при­мер выпол­нения зап­роса 

Добавляем атрибуты


Стан­дар­тных атри­бутов, которые собира­ются с помощью SharpHound.exe или BloodHound.py, нам будет малова­то. Поэто­му надо добавить свои. Ребята из CompassSecurity написа­ли скрипт для добав­ления новых атри­бутов, а так­же пред­ложили спе­циаль­ный атри­бут nosigning. Одна­ко пред­варитель­но нам надо соб­рать информа­цию о машинах без SMB signing.



warning


Даль­нейшие дей­ствия пред­полага­ют обра­бот­ку зна­чений DNSHostName, а не IP-адре­сов.



Для сбо­ра информа­ции о наличии SMB signing исполь­зуем CrackMapExec. О том, как это сде­лать, под­робно написа­но в стать­ях «Гид по NTLM Relay. Зах­ватыва­ем NTLM-аутен­тифика­цию для Relay-ата­ки» и «Гид по NTLM Relay, часть 2. Про­водим Relay-ата­ки».


Ког­да у нас есть спи­сок машин без SMB signing, добав­ляем новый атри­бут с помощью сле­дующе­го скрип­та:


python3 BloodHoundLoader.py t.txt -m s

Пос­ле это­го мы можем задей­ство­вать зап­росы, исполь­зующие новый атри­бут. Все у того же CompassSecurity име­ется пара зап­росов, которые ука­жут нам путь от машин без SMB signing до домена и до при­виле­гиро­ван­ных объ­ектов. Выг­лядит это при­мер­но так:


"name": "Shortest Paths from no Signing to High Value Targets","category": "Shortest Paths","queryList": [{"final": true,"query": "MATCH allShortestPaths((c:Computer)-[r:{}*1..]->(h)) WHERE NOT AND c.hassigning false AND h.highvalue true RETURN p"}]
}{"name": "Shortest Paths from no Signing to Domain","category": "Shortest Paths","queryList": [{"final": false,"title": "Select Domain...","query": "MATCH (d:Domain) RETURN d.name ORDER BY d.name ASC"},{"final": true,"query": "MATCH allShortestPaths((c:Computer)-[r:{}*1..]->(d:Domain)) WHERE c.hassigning false AND d.name $result RETURN p","endNode": "{}"}]
}
Пу­ти повыше­ния до при­виле­гиро­ван­ных целей
Пу­ти повыше­ния до домена от машин без SMB signing

Кру­то, но есть нюанс. Эти зап­росы помога­ют лишь понять, какую машину было бы полез­но зах­ватить, но не каж­дая машина без SMB signing уяз­вима для атак. Ког­да мы не зна­ем, чей хеш нам при­летит, луч­ше выпол­нять релей на машину, от которой име­ется путь до зах­вата домена. При­мера­ми таких слу­чаев слу­жат спу­финг‑ата­ки или исполь­зование ярлы­ков.



Перейти обратно к новости