Виртуальная магия 2. Используем эмуляцию и виртуализацию при атаках

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

  • Образ Attack.img (post_3)
  • Испытываем Attack.img на QEMU в Windows (нет привилегий, нет эксфильтрации)
  • Испытываем Attack.img на qemu-system в Linux (нет привилегий, нет эксфильтрации)
  • Образ Attack.img (post_4)
  • Испытываем Attack.img на VirtualBox в Windows (есть привилегии, нет эксфильтрации)
  • Испытываем Attack.img на qemu-system в Linux (есть привилегии, нет эксфильтрации)
  • Выводы

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

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

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

Со слож­ностя­ми, опи­сан­ными в этой статье, ты, ско­рее все­го, стол­кнешь­ся при ана­лизе защищен­ности уда­лен­ных рабочих мест: нап­ример, нат­кнув­шись на какой‑нибудь хит­рый тер­миналь­ный RDP-дос­туп или секь­юрно нас­тро­енный SSH-шлюз. Как бы то ни было, даже если запиво­тить­ся невоз­можно, отча­ивать­ся рано. Нам нуж­но идти даль­ше и раз­вивать ата­ки непос­редс­твен­но со ском­про­мети­рован­ной машины. Здесь нам на помощь вновь при­дет магия эму­ляции и вир­туали­зации.

info

Эта статья — про­дол­жение пуб­ликации «Вир­туаль­ная магия. Исполь­зуем эму­ляцию и вир­туали­зацию для пивотин­га».

warning

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

 

Образ Attack.img (post_3)

Это тре­тий кейс пос­тэкс­плу­ата­ции. У нас нет прав и нет канала эксфиль­тра­ции, при­год­ного для пивотин­га. Ата­ки пред­сто­ит раз­ворачи­вать непос­редс­твен­но с ата­куемой сис­темы.

Пос­коль­ку раз­витие атак с адми­нис­тра­тив­ными при­виле­гиями — это сво­его рода час­тный слу­чай раз­вития атак вооб­ще, который всег­да вклю­чает в себя ата­ки, выпол­няемые с уров­ня L3, мы спер­ва рас­смот­рим их. Такие ата­ки не будут тре­бовать адми­нис­тра­тив­ных или root-при­виле­гий.

Тех­ника сетево­го дос­тупа с гос­тевой ОС в хос­товую сеть на ском­про­мети­рован­ной машине та же самая, что в post_1, раз­ница лишь в отсутс­твии тун­нелей и необ­ходимос­ти раз­вивать ата­ку непос­редс­твен­но изнутри обра­за гос­тевой ОС.

Раз­витие атак с уров­ня L3 — через неп­ривиле­гиро­ван­ные TCP/UDP-сокеты NAT-режима

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

По­это­му будем ста­рать­ся разум­но исполь­зовать дис­ковое прос­транс­тво и добивать­ся минималь­ного раз­мера финаль­ного обра­за. Ведь сбор­ка минима­лис­тично­го обра­за, лишен­ного все­го ненуж­ного, раз­мером в пару‑трой­ку сотен мегабайт может ока­зать­ся очень кста­ти.

На­чина­ем собирать образ фай­ловой сис­темы. Исполь­зуем Alpine:

sudo docker pull i386/alpine:3.18 sudo docker run --name attack -it i386/alpine:3.18 /bin/sh

Как ра­нее с обра­зом GW, мы отталки­ваем­ся от началь­ной фай­ловой сис­темы объ­емом в 5 Мбайт. На минуточ­ку, 10 Мбайт — это эму­лятор, 5 Мбайт — образ Linux, а в 15 Мбайт у нас помеща­ется готовая рабочая Linux-сис­тема, которую мы можем запус­кать где угод­но, без уста­нов­ки и без прав! Неп­лохое начало…

Для луч­шей обратной сов­мести­мос­ти мы исполь­зуем 32-бит­ный образ, более перено­симый (он работа­ет в сис­темах x64, но не наобо­рот). Этот образ менее популя­рен, и отто­го уста­нов­ка некото­рых пакетов с пред­компи­лиро­ван­ными фай­лами под x64 пот­ребу­ет уже переком­пилиро­вать их в x32. Поэто­му нам при­дет­ся уста­новить некото­рые лиш­ние пакеты. Если же ты решишь соз­дать x64-образ, то уста­нов­ка мно­гих пакетов будет про­ще и не пот­ребу­ет час­ти зависи­мос­тей.

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

Нач­нем с жиз­ненно необ­ходимых ути­лит:

apk update apk add tmux busybox-extras openrc dhclient iptables git curl socat proxychains-ng openssl tcpdump

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

touch /etc/local.d/init.start chmod +x /etc/local.d/init.start vi /etc/local.d/init.start #!/bin/sh dmesg -n 1 mount -o remount,rw / ifconfig lo 127.0.0.1 netmask 255.0.0.0 #dhclient eth0 ifconfig eth0 10.0.2.15 netmask 255.255.255.0 route add -net default gw 10.0.2.2 busybox-extras telnetd rc-update add localpasswd root adduser user chmod u+s /bin/busybox

Зна­читель­ная часть арсе­нала экс­пло­итов инфраструк­туры Active Directory написа­на на Python, так что ста­вим его и его пакет­ный менед­жер:

apk add python3 python3-dev py3-pip

Нам, как ни кру­ти, пот­ребу­ется ком­пиляция, поэто­му уста­нав­лива­ем GCC:

apk add gcc make libc-dev

Раз­мер обра­за замет­но вырос — сра­зу на 200 Мбайт. И по мере уста­нов­ки всех необ­ходимых нам пакетов он раз­дует­ся аж до 2 Гбайт. Одна­ко в кон­це, пос­ле сбор­ки все­го необ­ходимо­го, мы уда­лим все ненуж­ное.

Те­перь добавим глав­ный хакер­ский пакет про­тив Windows-сис­тем, содер­жащий необ­ходимые мно­гим скрип­там биб­лиоте­ки:

apk add rust cargo openssl-dev libffi-dev pip3 install impacket rm -r /root/.cargo

Це­лых 55 Мбайт, но в при­дачу к impacket мы получа­ем пач­ку кру­тых исполня­емых фай­лов для уда­лен­ного адми­нис­три­рова­ния и не толь­ко.

Да­лее по поряд­ку перей­дем к уста­нов­ке ути­лит раз­ведки, экс­пло­итов, без которых не обой­тись, и средств для пос­тэкс­плу­ата­ции — куда без них?

Что за тес­тирова­ние на про­ник­новение без ска­ниро­вания пор­тов? Ста­вим Nmap и его скрип­товый дви­жок:

apk add nmap nmap-scripts

С помощью Nmap мы можем не толь­ко ска­ниро­вать пор­ты, но и решать мно­жес­тво дру­гих задач — собирать допол­нитель­ные све­дения от служб, искать некото­рые уяз­вимос­ти и про­водить ата­ки с под­бором пароля. И это обош­лось нам все­го в 25 Мбайт!

Пос­коль­ку основная цель ата­ки — домен, тре­бует­ся инс­тру­мент для вза­имо­дей­ствия с LDAP. Пакет openldap-clients пре­дос­тавля­ет ряд натив­ных ути­лит поис­ка (ldapsearch), добав­ления (ldapadd), изме­нения (ldapmodify) и уда­ления (ldapdelete) объ­ектов и атри­бутов в AD, при­чем этот инс­тру­мен­тарий весит все­го лишь мегабайт:

apk add openldap-clients

При­выч­ный и удоб­ный резолв при помощи host или dig будет сто­ить нам 6 Мбайт:

apk add bind-tools

А вот основной инс­тру­мент раз­ведки, поис­ка уяз­вимос­тей и мис­конфи­гов в Active Directory:

git clone https://github.com/fox-it/BloodHound.py

Скрипт для сбо­ра все­объ­емлю­щей информа­ции о AD обой­дет­ся все­го в 1 Мбайт. Его дамп мож­но будет впос­ледс­твии выг­рузить и про­ана­лизи­ровать уже на сво­ем компь­юте­ре. Одна­ко прод­вижение по сетям с Active Directory — это не толь­ко ана­лиз мис­конфи­гов, но еще и экс­плу­ата­ция уяз­вимос­тей, так что перей­дем к наибо­лее акту­аль­ным экс­пло­итам.

Вот, пожалуй, самый низ­ко висящий фрукт в инфраструк­туре AD, не тре­бующий ни учет­ки, ни наличия IP-адре­са и про­бива­ющий сра­зу DC:

git clone https://github.com/dirkjanm/CVE-2020-1472 zerologon

Вос­поль­зуем­ся край­не популяр­ной сей­час темой с так называ­емы­ми при­нуж­дени­ями к аутен­тифика­ции (coerce):

git clone https://github.com/p0dalirius/Coercer rm -r .git/ documentation/

Тех­ника coerce исполь­зует­ся в боль­шом количес­тве атак на инфраструк­туру AD для зах­вата Kerberos-билетов или обхо­да NTLM-аутен­тифика­ции.

Прав­да, в нашем слу­чае име­ет мес­то сущес­твен­ное огра­ниче­ние — у запущен­ной без прав вир­туал­ки не будет сво­его IP-адре­са из локаль­ной сети и воз­можнос­ти занять 445-й порт. Одна­ко если мы при­нудим хост выпол­нить под­клю­чение на порт выше 1024, то его реаль­но будет завер­нуть на вир­туал­ку без админ­ских прав и реали­зовать в даль­нейшем ту или иную ата­ку.

Ес­ли мы исполь­зуем coerce в сочета­нии с Kerberos, то обя­затель­но берем с собой сле­дующий инс­тру­мент:

git clone https://github.com/dirkjanm/krbrelayx

Не­лиш­ним будет исполь­зовать нашумев­шие тех­ники повыше­ния при­виле­гий через ADCS:

pip3 install certipy-ad git clone https://github.com/dirkjanm/PKINITtools

Еще одна уяз­вимость пос­тарше, поз­воля­ющая ском­про­мети­ровать DC:

git clone https://github.com/dirkjanm/PrivExchange

Не забыва­ем про экс­плу­ата­цию ACL-мис­конфи­гов:

git clone https://github.com/ShutdownRepo/pywhisker && pip3 install rich git clone https://github.com/Hackndo/pyGPOAbuse

Так­же всег­да полез­но пос­мотреть информа­цию на сетевых дис­ках с помощью того же grep или find, нап­ример с целью поис­ка cpassword. Для мон­тирова­ния уда­лен­ной SMB-шары и прев­ращения ее в локаль­ную пап­ку пот­ребу­ется лишь один пакет:

apk add cifs-utils

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

git clone https://github.com/cube0x0/CVE-2021-1675 PrintNightmare

Уяз­вимость MS17-010 — это самый низ­ко висящий фрукт на рабочих стан­циях и Windows-сер­верах. Да, уяз­вимость уже не так молода, но иног­да встре­чает­ся в ред­ко обновля­емых сис­темах:

git clone https://github.com/3ndG4me/AutoBlue-MS17-010

Па­ру слов про Linux. Самый прос­той и наибо­лее веро­ятный спо­соб быс­тро ком­про­мет­нуть Linux-хост — это подоб­рать к нему пароль по SSH, а затем исполь­зовать OpenSSH:

apk add openssh-client

Так­же на Linux иног­да встре­чает­ся RCE-мис­конфиг неог­раничен­ного дос­тупа к X-сер­веру, экс­плу­ати­руемый с помощью xdotool:

apk add xdotool

И про активное сетевое обо­рудо­вание тоже не забыва­ем. Это уяз­вимость из раз­ряда by-design, поз­воля­ющая выг­рузить или залить кон­фиг на Cisco:

git clone https://github.com/frostbits-security/SIETpy3

Ну и напос­ледок мож­но нем­ного пошуметь в сети с Nuclei:

wget https://github.com/projectdiscovery/nuclei/releases/download/v3.2.2/nuclei_3.2.2_linux_386.zip unzip nuclei_3.2.2_linux_386.zip nuclei -d /usr/local/bin/ git clone https://github.com/projectdiscovery/nuclei-templates ~/nuclei-templates rm -r ~/nuclei-templates/.git/

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

apk add g++ libxml2-dev libxslt-dev jpeg-dev git clone https://github.com/byt3bl33d3r/CrackMapExec pip3 install .rm -r CrackMapExec rm -r /root/.cargo/ apk del rust cargo libxml2-dev libxslt-dev jpeg-dev

Прав­да, объ­ем пакетов сос­тавля­ет 120 Мбайт. Зато вмес­те с CrackMapExec будет уста­нов­лен pypykatz, пред­назна­чен­ный для выдер­гивания учет­ных записей из дам­пов про­цес­са lsass.exe пря­мо на нашей вир­туал­ке. И lsassy, поз­воля­ющий уда­лен­но рас­парсить его пря­мо на машине жер­твы.

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

Ответить

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