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

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

  • Схема
  • Образ GW.img (post_1)
  • Испытываем GW.img на QEMU в Windows (нет привилегий, есть эксфильтрация)
  • Испытываем GW.img на qemu-system в Linux (нет привилегий, есть эксфильтрация)
  • Образ GW.img (post_2)
  • Испытываем GW.img на VirtualBox в Windows (есть привилегии, есть эксфильтрация)
  • Испытываем GW.img на qemu-system в Linux (есть привилегии, есть эксфильтрация)
  • Заключение

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

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

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

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

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

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

Сра­зу пос­ле получе­ния дос­тупа к внут­ренним ресур­сам руки сами тянут­ся про­верить мас­су потен­циаль­ных уяз­вимос­тей из раз­ряда low-hanged fruits — чего‑то дос­таточ­но прос­того, час­то встре­чающе­гося и дающе­го мак­сималь­ный импакт. А уж если в при­дачу к ском­про­мети­рован­ному хос­ту мы получи­ли еще и домен­ную учет­ку — то дер­жись, домен, и с ним вся внут­ренняя инфраструк­тура!

Од­нако если адми­ны и сетеви­ки молод­цы, то сра­зу же пос­ле про­бития перимет­ра у нас нач­нутся проб­лемы. При­мер­но в полови­не слу­чаев прос­того халяв­ного реверс‑шел­ла мы не получим. Чуть реже нас могут ждать обло­мы с ICMP и даже проб­лемы с DNS-тун­нелями. Так или ина­че, в боль­шинс­тве слу­чаев мы все же можем орга­низо­вать какой‑то мало‑маль­ски при­год­ный канал эксфиль­тра­ции хотя бы для переда­чи фай­лов. Но порою про ком­фор­тный внут­ренний пен­тест при­ходит­ся забыть.

С чего вооб­ще начина­ется любой пен­тест, хоть внут­ренний, хоть внеш­ний? Конеч­но же, с раз­ведки, поис­ка внут­ренних узлов, то есть ска­ниро­вания пор­тов. Думаю, боль­шинс­тво пен­тесте­ров пос­тара­ется про­тащить на ском­про­мети­рован­ный хост Nmap. Хорошо, допус­тим, уда­лось его передать и раз­ведать какие‑то потен­циаль­ные уяз­вимос­ти. А что потом? Копиру­ем подоб­ным же обра­зом экс­пло­иты? А к ним еще в при­дачу — ран­тайм, нап­ример? 50-мегабай­товый Python, на котором написа­на полови­на экс­пло­итов?

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

Но это в иде­аль­ном слу­чае. Если нам «пос­час­тли­вилось» про­бить­ся через Windows-машину, то впол­не веро­ятно, что с нами по соседс­тву будет анти­вирус, ска­жем тот же Defender. Эти при­ложе­ния будут уда­лять доб­рую полови­ну хакер­ско­го соф­та, при­чем не толь­ко экзешни­ки, но и даже скрип­ты на PowerShell из того же PowerSploit, столь популяр­ного для раз­ведки и ата­ки, без которо­го мно­гие пен­тесте­ры оста­нут­ся как без рук.

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

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

 

Схема

При пос­тэкс­плу­ата­ции хакер может стол­кнуть­ся со сле­дующи­ми проб­лемами:

  • ог­раничен­ные пра­ва;
  • не­воз­можность запиво­тить­ся (отсутс­твие при­год­ного канала эксфиль­тра­ции);
  • на­личие анти­виру­са;
  • спе­цифи­ка ОС.

По­луча­ется, нам могут встре­тить­ся восемь раз­личных усло­вий сре­ды:

  • Windows-сис­тема + поль­зователь­ский дос­туп + канал эксфиль­тра­ции (post_1);
  • Linux-сис­тема + поль­зователь­ский дос­туп + канал эксфиль­тра­ции (post_1);
  • Windows-сис­тема + адми­нис­тра­тив­ный дос­туп + канал эксфиль­тра­ции (post_2);
  • Linux-сис­тема + root-дос­туп + канал эксфиль­тра­ции (post_2);
  • Windows-сис­тема + поль­зователь­ский дос­туп + отсутс­твие канала эксфиль­тра­ции (post_3);
  • Linux-сис­тема + поль­зователь­ский дос­туп + отсутс­твие канала эксфиль­тра­ции (post_3);
  • Windows-сис­тема + адми­нис­тра­тив­ный дос­туп + отсутс­твие канала эксфиль­тра­ции (post_4);
  • Linux-сис­тема + root-дос­туп + отсутс­твие канала эксфиль­тра­ции (post_4).

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

Во‑вто­рых, наличие в ата­куемой сис­теме адми­нис­тра­тив­ных или root-прав не будет для нас необ­ходимым усло­вием. Реаль­но же пра­ва адми­нис­тра­тора могут пот­ребовать­ся в двух слу­чаях.

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

Вто­рой слу­чай, ког­да нам могут пот­ребовать­ся пра­ва, — это вир­туаль­ный сетевой интерфейс гос­тевой ОС. Он может быть объ­еди­нен с любым дру­гим интерфей­сом хос­товой ОС с помощью сетево­го мос­та. И то и дру­гое для нас не кри­тич­но. За пер­вое мы зап­латим лишь про­изво­дитель­ностью гос­тевой ОС, ведь теперь весь ее код будет выпол­нять­ся вир­туаль­ным про­цес­сором (то есть тран­сли­ровать­ся). Вто­рой слу­чай не поз­волит нам получить пол­ноцен­ный сетевой дос­туп к окру­жению ском­про­мети­рован­ной машины. Одна­ко сетевой дос­туп в режиме NAT у нас будет в любом слу­чае, и его хва­тит как для боль­шинс­тва пивотинг‑механиз­мов, так и для подав­ляюще­го чис­ла атак.

На­конец, сущес­тву­ет еще один важ­ный момент — вся наша активность будет про­исхо­дить под завесой эму­ляции и вир­туали­зации, с исполь­зовани­ем исклю­читель­но API вир­туаль­ной ОС, а не хос­товой. И локаль­ные средс­тва защиты (анти­виру­сы/EDR) ока­жут­ся за бор­том.

Раз­вивать ата­ки в каж­дом из воз­можных слу­чаев мы смо­жем с исполь­зовани­ем все­го двух вир­туаль­ных ОС:

  • gw.img — раз­витие атак с пра­вами или без прав и с каналом эксфиль­тра­ции;
  • attack.img — раз­витие атак с пра­вами или без прав и без канала эксфиль­тра­ции.

Са­ми же обра­зы для мак­сималь­ной обратной сов­мести­мос­ти будут 32-бит­ными, а интерфейс управле­ния вир­туал­ками — мак­сималь­но прос­тым и при­год­ным для любой, даже самой тяжелой обста­нов­ки, ког­да нет GUI-дос­тупа или нор­маль­ного реверс‑шел­ла.

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

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

По­рядок дей­ствий при каж­дом из воз­можных усло­вий сре­ды пос­тэкс­плу­ата­ции

И каж­дый раз мы будем исполь­зовать одни и те же при­выч­ные нам инс­тру­мен­ты любимо­го Linux.

 

Образ GW.img (post_1)

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

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

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

Ответить

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