F#ck da Antivirus. Как обходить антивирус при пентесте

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

  • Legal
  • Shellcode injecting
  • Code caves
  • Crypt
  • Vuln inject (spawn)
  • Vuln inject (attach)
  • Выводы

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

info

Эта статья — про­дол­жение цик­ла пуб­ликаций, пос­вящен­ных пос­тэкс­плу­ата­ции. В пре­дыду­щих сери­ях:

  • Шпар­галка по persistence. Как надеж­но про­писать­ся на хос­те или выявить факт ком­про­мета­ции;
  • Кунг‑фу pivoting. Выжима­ем мак­симум из пос­тэкс­плу­ата­ции;
  • Гид по Lateral. Изу­чаем уда­лен­ное исполне­ние кода в Windows со всех сто­рон;

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

warning

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

Во­обще, задача обхо­да анти­виру­са может воз­никнуть в двух слу­чаях:

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

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

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

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

По боль­шому сче­ту мы име­ем дело с дву­мя механиз­мами защиты:

  • сиг­натур­ным;
  • эв­ристи­чес­ким (поведен­ческим).

При сиг­натур­ном ана­лизе анти­вирус учи­тыва­ет мно­жес­тво фак­торов, в час­тнос­ти боль­шое вли­яние на резуль­тат ока­зыва­ет ком­пилятор. Вот дос­таточ­но забав­ные резуль­таты VirusTotal для безобид­ного helloworld-при­ложе­ния, написан­ного на С:

  • i686-w64-mingw32-gcc — 11/68 детек­тов;
  • msvc — 2/64 детек­та;
  • win-gcc — 0 детек­тов.

Что же каса­ется ана­лиза поведе­ния прог­раммы, тут нуж­но понимать, что, даже если тебе уда­лось обой­ти сиг­натуры, ты все еще можешь спа­лить­ся, пос­коль­ку вся­кий migrate PID или sekurlsa::logonPasswords может быть перех­вачен по при­чине исполь­зования харак­терных сочета­ний WinAPI-фун­кций, которые анти­виру­сы очень вни­матель­но монито­рят.

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

 

Legal

Луч­ший бой — это тот, которо­го уда­лось избе­жать. Поэто­му в борь­бе с анти­виру­сами час­то исполь­зуют­ся легаль­ные средс­тва. Да, они не могут пре­дос­тавить мно­гие «прод­винутые шту­ки», но необ­ходимый минимум в виде reverse shell при persistence и lateral movement, а так­же встро­енный прок­си‑сер­вер и гиб­кую сис­тему редирек­та тра­фика при pivoting они реали­зовать могут. И это замеча­тель­ные, всем извес­тные ути­литы — nc.exe, ncat.exe, socat.exe, plink.exe. При­меры их исполь­зования были опи­саны в моих прош­лых стать­ях. Бле­ки же и вов­се порою исполь­зуют обыч­ные средс­тва облачно­го уда­лен­ного адми­нис­три­рова­ния вро­де RMS.

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

 

Shellcode injecting

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

shellcode_inject.exe не содер­жит угроз

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

Cоз­дание авто­ном­ного (не staged) шелл‑кода. Выг­лядит безобид­но

Гля­дя на содер­жимое meter.txt, я бы ско­рее решил, что это стро­ка в Base64, чем шелл‑код.

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

Ответить

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