Категория > Новости > Гид по Lateral. Изучаем удаленное исполнение кода в Windows со всех сторон - «Новости»

Гид по Lateral. Изучаем удаленное исполнение кода в Windows со всех сторон - «Новости»


17-11-2020, 00:00. Автор: Рената
Кунг-фу pivoting. Выжима­ем мак­симум из пос­тэкс­плу­ата­ции».

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


Во внут­ренних сетях обыч­но пре­обла­дают сер­веры и рабочие стан­ции под управле­нием Windows. В то же вре­мя эта ОС наибо­лее инте­рес­на с точ­ки зре­ния спо­собов ком­про­мета­ции, так как по умол­чанию име­ет мно­жес­тво интерфей­сов для уда­лен­ного выпол­нения кода. Кро­ме того, ата­кующе­му дос­тупно боль­шое количес­тво спо­собов извле­чения учет­ных дан­ных. Я не буду касать­ся боково­го переме­щения по сер­верам Linux: они ред­ко вклю­чены в домен и не име­ют такого раз­нооб­разия дефол­тных интерфей­сов для уда­лен­ного адми­нис­три­рова­ния. При боковом переме­щении Linux инте­ресен глав­ным обра­зом как удоб­ная точ­ка опо­ры.


Бо­ковое переме­щение под­разуме­вает легитим­ное уда­лен­ное исполне­ние кода. То есть все пред­став­ленные в статье спо­собы под­разуме­вают наличие дей­ству­ющей учет­ной записи для того или ино­го ПК. При этом поч­ти всег­да будет тре­бовать­ся адми­нис­тра­тив­ная учет­ная запись.


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


Мы не будем обсуждать основные уяз­вимос­ти Windows, ата­ки в локаль­ных сетях и спо­собы под­нять при­виле­гии в сре­де Active Directory. Вмес­то это­го погово­рим исклю­читель­но о легаль­ных вещах: в каких пота­енных угол­ках Windows мож­но най­ти учет­ные записи и что с ними потом делать. Все пред­став­ленные даль­ше спо­собы не счи­тают­ся уяз­вимос­тями, а пред­став­ляют из себя трю­ки by design, сле­дова­тель­но, при гра­мот­ном исполне­нии это пол­ностью легаль­ные про­цеду­ры.


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


Стратегия бокового перемещения


Итак, боковое переме­щение — это одновре­мен­ное сочета­ние двух тех­ник:


  • аутен­тифици­рован­ного уда­лен­ного выпол­нения кода;

  • из­вле­чения сек­ретной информа­ции пос­ле получе­ния дос­тупа.

Цик­личное, пос­ледова­тель­ное пов­торение этих шагов порою поз­воля­ет от одно­го-единс­твен­ного взло­ман­ного ПК дой­ти до пол­ной ком­про­мета­ции всей сетевой инфраструк­туры. Обыч­но боковое переме­щение, как вся­кое иное переме­щение, прес­леду­ет одну из сле­дующих целей:


  • пе­рех­ват управле­ния кон­трол­лерами домена;

  • дос­тижение изо­лиро­ван­ных кри­тичес­ких сетевых сег­ментов (нап­ример, АСУ ТП, SWIFT);

  • по­иск кри­тичес­кой информа­ции на ПК (сек­ретные докумен­ты, пла­теж­ные рек­визиты и так далее).

Од­нако для дос­тижения любой из перечис­ленных целей тре­буют­ся все новые учет­ные дан­ные, что­бы у ата­кующе­го была воз­можность переме­щать­ся по сети и получать дос­туп ко все боль­шему количес­тву ПК. Прод­вижение по внут­ренней сети ред­ко обхо­дит­ся без взя­тия кон­трол­лера домена, пос­коль­ку взя­тие домена озна­чает авто­мати­чес­кое получе­ние дос­тупа прак­тичес­ки к каж­дому узлу сети. Что каса­ется admins hunting, при дос­тижении кон­трол­лера домена может показать­ся, что поиск при­виле­гиро­ван­ных учет­ных записей — это сле­пое уга­дыва­ние. Но на самом деле инфраструк­тура Active Directory и сама Windows рас­кры­вают дос­таточ­но информа­ции прос­тому домен­ному поль­зовате­лю, зачас­тую поз­воляя рас­счи­тать нуж­ное нап­равле­ние прод­вижения и спла­ниро­вать точ­ную мно­гос­тупен­чатую цепоч­ку взло­мов еще в самом начале боково­го переме­щения.


Пос­ле взя­тия кон­трол­леров домена иног­да быва­ет необ­ходимо дви­гать­ся даль­ше — в некий осо­бо охра­няемый сег­мент, пред­став­ляющий собой объ­екты «биз­нес-рис­ка». Это может быть сег­мент АСУ ТП, вме­шатель­ство в тех­нологи­чес­кий про­цесс, дос­туп в сег­мент SWIFT, если мы име­ем дело с бан­ками, либо же прос­то дос­туп на ПК генераль­ного дирек­тора. В каж­дом слу­чае мы можем стол­кнуть­ся с раз­ными слож­ностя­ми боково­го переме­щения, о которых пой­дет речь даль­ше.


Удаленное выполнение кода в Windows


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


Часть инс­тру­мен­тов заг­ружа­ет на target исполня­емый файл служ­бы, пыта­ясь обес­печить нам удоб­ный инте­рак­тивный режим. Но тут кро­ется опас­ность: такие сер­висы зачас­тую будут заб­локиро­ваны анти­виру­сом. Плюс к это­му IP ата­кующе­го может быть заб­локиро­ван, что затор­мозит переме­щение. И SOC узна­ет о том, что в сеть кто-то про­ник.


Боль­шую часть боково­го переме­щения мы будем выпол­нять с помощью замеча­тель­ного Python-пакета impacket. Для его уста­нов­ки тре­бует­ся выпол­нить коман­ду pip install impacket. Пос­ле уста­нов­ки необ­ходимые исполня­емые фай­лы будут находить­ся в пап­ке impacket/examples, рас­положе­ние которой под­ска­жет коман­да pip show -f impacket.


MSRPC


Это реали­зация DCERPC от Microsoft. По сути, рас­ширя­ет откры­тый DCERPC при помощи дос­тупа через име­нован­ные пай­пы с исполь­зовани­ем про­токо­ла SMB. Глав­ным обра­зом исполь­зует 445-й TCP-порт. Перечис­лить дос­тупные пай­пы по сло­варю на SMB поможет модуль auxiliary/scanner/smb/pipe_auditor.


psexec.exe

  • Про­исхожде­ние: sysinternals


  • AV-риск: отсутс­тву­ет


  • Ис­поль­зуемые пор­ты: 135, 445, 4915x/TCP

На­чиная говорить об уда­лен­ном исполне­нии кода в Windows, нель­зя не упо­мянуть небезыз­вес­тный psexec от Мар­ка Рус­синови­ча. Дан­ная прог­рамма поль­зует­ся оди­нако­вой популяр­ностью и у адми­нис­тра­торов, и у пен­тесте­ров. Прин­цип ее работы зак­люча­ется в копиро­вании исполня­емо­го фай­ла через сетевой ресурс «ADMIN$» (445/TCP) с пос­леду­ющим уда­лен­ным соз­дани­ем и запус­ком служ­бы для это­го исполня­емо­го фай­ла через DCERPC (135,4915x/TCP). Пос­ле запус­ка служ­бы про­исхо­дит обыч­ное сетевое вза­имо­дей­ствие с уда­лен­ной коман­дной стро­кой:


Глав­ный плюс для нас в том, что сер­верный ком­понент psexecsvc.exe под­писан сер­тифика­том Sysinternals (который при­над­лежит Microsoft) и, сле­дова­тель­но, стоп­роцен­тно легитим­ная прог­рамма. Так­же к явным дос­тоинс­твам клас­сичес­кого psexec.exe отно­сит­ся спо­соб­ность выпол­нять код в ука­зан­ных поль­зователь­ских сеан­сах:



psexec.py

  • Про­исхожде­ние: Python-пакет impacket


  • AV-риск: есть


  • Ис­поль­зуемые пор­ты: 445/TCP

От­личная аль­тер­натива для поль­зовате­лей Linux. Одна­ко этот инс­тру­мент поч­ти навер­няка под­нимет анти­вирус­ную тре­вогу. Как было ска­зано, все дело в служ­бе, которая копиру­ется на уда­лен­ный хост. Это мож­но испра­вить, ука­зав в реали­зации метода createService() в /usr/local/lib/python3.7/dist-packages/impacket/examples/serviceinstall.py про­изволь­ную коман­ду, которая будет выпол­нена вмес­то запус­каемой служ­бы уда­лен­ного адми­нис­три­рова­ния.


Гид по Lateral. Изучаем удаленное исполнение кода в Windows со всех сторон - «Новости»
С помощью про­изволь­ной коман­ды мож­но скрыть запуск служ­бы уда­лен­ного адми­нис­три­рова­ния

Что­бы psexec.py не ско­пиро­вал палев­ный ком­понент, ука­зыва­ем при­нуди­тель­но, какой файл исполь­зовать в качес­тве служ­бы. И, пос­коль­ку мы уже вруч­ную про­писа­ли коман­ду, этим фай­лом может быть что угод­но:


psexec.py-filesomefile.txtadmin@target

Та­ким обра­зом, мы нап­рямую выпол­нили коман­ду mkdir c:pwn, что, конеч­но же, не вызовет реак­ции со сто­роны анти­виру­сов. Одна­ко подоб­ная модифи­кация psexec лиша­ет нас того удобс­тва исполь­зования, которое было изна­чаль­но.


winexe

  • Про­исхожде­ние: пакет winexe


  • AV-риск: есть


  • Ис­поль­зуемые пор­ты: 445/TCP

Бо­лее ста­рый натив­ный ана­лог psexec под Linux. Как и psexec, откры­вает уда­лен­ную инте­рак­тивную коман­дную стро­ку:


winexe-Uadmin//targetcmd

В целом он пол­ностью иден­тичен дру­гим подоб­ным инс­тру­мен­там, одна­ко реже обна­ружи­вает­ся анти­виру­сами. Но все же нель­зя ска­зать, что winexe на сто про­цен­тов безопа­сен. Тем не менее его мож­но исполь­зовать для подс­тра­хов­ки на слу­чай, если psexec.py вдруг не сра­бота­ет.


smbexec.py

  • Про­исхожде­ние: Python-пакет impacket / встро­енный ком­понент Windows


  • AV-риск: есть


  • Ис­поль­зуемые пор­ты: 445/TCP

Уп­рощен­ный вари­ант psexec, так­же соз­дающий служ­бу, толь­ко исполь­зует­ся при этом исклю­читель­но MSRPC, а дос­туп к управле­нию служ­бами устро­ен через SMB-пайп svcctl:


smbexec.py-modeSHAREadmin@target

В резуль­тате будет открыт дос­туп к инте­рак­тивной коман­дной стро­ке.


services.py

  • Про­исхожде­ние: Python-пакет impacket


  • AV-риск: отсутс­тву­ет


  • Ис­поль­зуемые пор­ты: 445/TCP

Еще более упро­щен­ный вари­ант psexec. Тут пред­полага­ется, что мы сами руч­ками дела­ем то, что дела­ет за нас psexec. С помощью services.py мы можем пос­мотреть спи­сок служб:


services.pyadmin@targetlist

Соз­дать новую служ­бу, ука­зав про­изволь­ную коман­ду:


services.pyadmin@targetcreate-name1-display1-path'cmd arg1 arg2'

За­пус­тить толь­ко что соз­данную служ­бу:


services.pyadmin@targetstart-name1

За­мес­ти сле­ды и уда­лить ее:


services.pyadmin@targetdelete-name1

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


atexec.py/at.exe

  • Про­исхожде­ние: Python-пакет impacket / встро­енный ком­понент Windows


  • AV-риск: отсутс­тву­ет


  • Ис­поль­зуемые пор­ты: 445/TCP

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


В обо­их слу­чаях это не инте­рак­тивное средс­тво уда­лен­ного исполне­ния кода. При исполь­зовании at.exe про­исхо­дит сле­пое исполне­ние команд:


А вот для atexec.py коман­да выпол­нится с резуль­татом:


atexec.pyadmin@targetipconfig

Вся раз­ница в том, что резуль­тат выпол­нения коман­ды будет нап­равлен в файл и про­читан через сетевой ресурс ADMIN$. Для сво­ей работы инс­тру­мент тре­бует, что­бы часы у attacker и target были нас­тро­ены на одно вре­мя с точ­ностью до минуты.


reg.exe

  • Про­исхожде­ние: ком­понент Windows


  • AV-риск: отсутс­тву­ет


  • Ис­поль­зуемые пор­ты: 445/TCP

Уда­лен­ный дос­туп к реес­тру с пра­вами на запись на самом деле нам дает RCE. Для сво­ей работы инс­тру­мент тре­бует SMB-пайп winreg. По умол­чанию служ­ба уда­лен­ного реес­тра запуще­на толь­ко на сер­верных ОС Windows 2003–2019. А вот извес­тный трюк с авто­заг­рузкой (отло­жен­ное RCE):


Здесь исполь­зует­ся обра­бот­чик запус­ка прог­раммы. Если прог­рамма запус­кает­ся на ПК час­то, то получим поч­ти мгно­вен­ное RCE:


Мой любимый трюк с бэк­дором в RDP:


DCERPC


Ис­поль­зует пор­ты 135/TCP и 4915x/TCP, где 4915x — динами­чес­ки наз­нача­емые пор­ты. Иног­да могут исполь­зовать­ся пор­ты из дру­гого диапа­зона.


Очень час­то сетевые адми­нис­тра­торы и безопас­ники, которые в кур­се наибо­лее рас­простра­нен­ных век­торов атак, в качес­тве mitigation прос­то бло­киру­ют порт 445/TCP. Тем самым они дела­ют неп­ригод­ным исполь­зование psexec и мно­гих дру­гих спо­собов, опи­сан­ных выше. Одна­ко, как было ска­зано ранее, Windows име­ет мно­жес­тво спо­собов уда­лен­ного исполне­ния кода, и DCERPC пре­дос­тавля­ет нам такую аль­тер­натив­ную воз­можность, в некото­рых слу­чаях откры­вая дос­туп к тем же RPC-интерфей­сам. По сути, мы будем исполь­зовать не сам DCERPC, а то, что работа­ет по его тех­нологии, нап­ример WMI.


wmiexec.py

  • Про­исхожде­ние: Python-пакет impacket


  • AV-риск: есть


  • Ис­поль­зуемые пор­ты: 135, (445), 4915x/TCP

Скрипт wmiexec.py дает воз­можность выпол­нить код в инте­рак­тивном режиме:


wmiexec.pyadmin@target

Од­нако было замече­но, что хоть wmiexec.py и не запус­кает на уда­лен­ной сто­роне никаких сто­рон­них исполня­емых фай­лов, анти­виру­сы его иног­да ловят. Кро­ме того, wmiexec.py полезет за резуль­татом на шару ADMIN$, чем задей­ству­ет порт 445/TCP. Более безопас­ным вари­антом будет сле­пое RCE:




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