Как взломать антивирусную программу

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

info

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

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

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

КАК ПРОДЛИТЬ ЛИЦЕНЗИЮ АНТИВИРУСА AVAST PREMIER ДО 2033 ГОДА БЕСПЛАТНО! | ВЗЛОМ

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, который поз­волит нам исполнить в памяти что угод­но, запус­тить весь име­ющий­ся в нашем рас­поряже­нии хакер­ский арсе­нал.

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

И это замеча­тель­ные, всем извес­тные ути­литы — nc.exe, ncat.exe, socat.exe, plink.exe. При­меры их исполь­зования были опи­саны в моих прош­лых стать­ях. Бле­ки же и Wow­се порою исполь­зуют обыч­ные средс­тва облачно­го уда­лен­ного адми­нис­три­рова­ния вро­де RMS.

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

Shellcode injecting

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

Читайте также:
Программа корел драв как работать

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

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

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

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

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

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

s0i37

Lead cybersecurity analyst at USSC t.me/s0i37_channel

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

Как обойти антивирус за 5 минут

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

Но, сперва, disclaimer:
1) Многое из написанного ниже, для экспертов, несомненно — боян. Но автор и не претендует на «срыв покровов». Статья призвана предостеречь тех пользователей, которые полагаются на антивирус как на панацею, при этом забывая о необходимости комплексного подхода к безопасности.
2) Статья написана исключительно в образовательных целях. Не нужно использовать эту информацию для совершения противоправных действий.
3) Статья не пытается бросить тень на производителей антивирусов. Уверен, что они делают все возможное, чтобы совершенствовать свои продукты.

Как-то раз нелегкая судьба безопасника (от которого часто требуют уметь все) занесла меня в пентесты. Была поставлена задача проверить уязвимость организации к вирусной атаке.

В компании использовалось антивирусное ПО от одного из топ-вендоров. Антивирусы были развернуты и на серверах (включая почтовые и прокси-серверы) и на компьютерах пользователей. Централизованное управление и обновление тоже было.
Неплохая защищенность и небольшой опыт в проведении пентестов не сулили затее особого успеха.
Однако, практическая реализация показала другое: злоумышленник может организовать атаку и обойти средства антивирусной защиты даже при помощи стандартных общеизвестных средств, доступных практически любому специалисту. Каким образом — описано ниже.

Стандартные инструменты
Как уже говорилось, злоумышленнику не нужно обладать высокой квалификацией. Достаточно навыков скрипт-кидди — найти подходящий инструмент.
Причем искать долго не придется — все необходимое есть в Metasploit Framework.

Хотя многие специалисты по ИБ наверняка о нем слышали, на всякий случай напомню: Metasploit представляет собой средство автоматизации пентестов от компании Rapid7 и содержащее большое количество готовых эксплойтов.
Помимо эксплойтов, Metasploit содержит набор готовых «полезных» нагрузок (payloads), проще говоря — вредоносного ПО.
А среди готовых «начинок» выделяется одна из самых популярных – Meterpreter. Meterpreter обладает широким функционалом: кейлоггер, запись фото и видео с веб-камеры, копирование куки и истории браузера, сбор учетных данных множества сервисов, включение RDP, заведение и удаление пользователей… Короче говоря, Meterpreter позволяет сделать с зараженной машиной практически все, что угодно. Meterpreter поддерживает различные варианты взаимодействие с сервером управления (включая TCP, HTTPS, соединение с шифрованием RC4). На роль инструмента для пентеста Meterpreter подходит прекрасно.
Таким образом, злоумышленнику не нужно ничего разрабатывать, достаточно «выгрузить» Meterpreter в подходящем формате (кстати, делается это одной командой).

Но для пользователей есть хорошая новость: Meterpreter обнаруживается практически всеми антивирусами. Если выгрузить его в exe-файл и «скормить» VirusTotal, то получим такой результат:

Как видим, антивирусы, в подавляющем большинстве, детектировали Meterpreterкак вредоносное ПО. Это и не удивительно: ему уже много лет.
Означает ли это победу антивируса над скрипт-кидди? Не совсем.

Антивирусы выходят из игры
После 5 минут поиска в Google находится сразу несколько готовых решений для обхода антивирусов. Познакомимся поближе с инструментом под названием Shellter ( сайт ).

Shellter используется для сокрытия вредоносного кода в исполняемых файлах Windows. Проще говоря, Shellter «вставляет» в нативное 32-разряднное приложение код вредоносной программы, который автоматически начинает выполняться при его запуске. Среди особенностей Shellter можно отметить минимальные изменения, вносимые в структуру исполняемого файла, использование «мусорного» кода и возможность кодирования «нагрузки». Все это затрудняет детектирование итогового файла антивирусами.
В автоматическом режиме работы Shellter требует минимального участия пользователя: Next, Next, Next и готово. Сначала выбирается PE-файл приложения, затем – нужный payload (причем Meterpreter в Shellter уже предусмотрительно встроен).
На выходе получается исполняемый файл, в котором скрыта «полезная» нагрузка в виде Meterpreter (или любого другого кода).

Если создать зараженный файл при помощи Shellter и попытаться проверить его через VirusTotal, то увидим следующее:

Показатель детектирования просто катастрофически упал. Это означает, что большинство антивирусов, установленных на рабочих местах и серверах не определят данный файл как опасный! На все про все, включая установку Shellter, ушло от силы 5 минут.
Таким образом, хотя сигнатура трояна известна уже много лет (Metasploit и Meterpreter входят в стандартную сборку Kali Linux), благодаря Shellter популярные антивирусы ничего не могут с ним поделать.

А как на практике?
Но тест на VirusTotal без испытаний «в поле» не показатель. Может быть при работе троян будет обнаружен по поведенческим признакам? Чтобы проверить это, протестируем файл на двух популярных антивирусах: Eset (5.0.21.26) и Kaspersky Internet Securiy (17.0.0.611).

Беглое тестирование показывает следующее:

1) Копирование и запуск файла не детектируется.
2) При запуске инфециорованного файла сессия до сервера управления (Metasploit) успешно открывается.
3) При выполнении некоторых действий (например, при попытке «миграции» Meterpreter в другие процессы), процесс Meterpreter’а детектируется как угроза.
4) При попытке использования веб-камеры, KIS запрашивает разрешение пользователя.
5) Большое количество функций Meterpreter’а все равно работает без обнаружения. В частности, прекрасно работает кейлоггер, скрипты сбора учетных данных, выгрузка информации из браузеров, скриншоты рабочего стола, копирование файлов. В принципе, этого достаточно для решения злоумышленником своих задач.

Читайте также:
Программа облако для бюджетных учреждений как работать

Таким образом, антивирусы конечно ограничивают функционал Meterpreter, но все равно оставляют широкий простор для злоумышленника.

Выводы и рекомендации
Тест еще раз показывает, что антивирус не является сам по себе панацеей. Средства обхода антивирусного ПО весьма популярны и находятся в свободном доступе. Разумеется, после загрузки части зараженных файлов на Virustotal, антивирусные базы будут пополняться, и возможности таких средств будут сокращаться. Но для защиты от таргетированных атак это не поможет.
Это не означает, что антивирусное ПО бесполезно. Просто без должной работы с персоналом его эффективность может быть сведена на нет.

История закончилась для пользователей легким «троллингом»: на рабочем столе появилось приглашение на корпоративный тренинг по ИБ. На тренинге им было рекомендовано:

  • не открывать подозрительные и рекламные почтовые вложения;
  • не включать без особой надобности макросы в документах;
  • подключать к компьютеру только проверенные носители информации;
  • устанавливать программы только с официальных сайтов;
  • не посещать подозрительные сайты;
  • проверять, куда ведет та или иная ссылка;
  • регулярно обновлять ПО (включая офисные программы и браузеры).

На этом, пожалуй, все.

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

Источник: www.securitylab.ru

Обход антивируса в Meterpreter

Здорова народ! В сегодняшней статье я покажу, как обойти антивирус при пентесте используя фреймворк Metasploit.

Обход антивируса в Meterpreter

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

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

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

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

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

Сто­ит отме­тить, что мы исполь­зовали шелл‑код meterpreter_reverse_tcp, а не meterpreter/reverse_tcp. Это авто­ном­ный код, который содер­жит в себе все фун­кции Meterpreter, он ничего не будет ска­чивать по сети, сле­дова­тель­но, шан­сов спа­лить­ся у нас будет мень­ше. Но вот связ­ка shellcode_inject.exe и meter.txt уже пред­став­ляет опас­ность. Давай пос­мотрим, смо­жет ли анти­вирус рас­познать угро­зу?

Ин­жект Meterpreter

Об­рати вни­мание: мы исполь­зовали для инжекта кода сис­темный про­цесс, он сра­зу работа­ет в кон­тек­сте System. И похоже, что наш подопыт­ный анти­вирус хоть в кон­це и руг­нулся на shellcode_inject.exe, но все же про­пус­тил дан­ный трюк.

Вы­пол­нение вре­донос­ного кода в обход анти­виру­са

За­пус­тив что‑то вро­де Meterpreter, ата­кующий получит воз­можность выпол­нить полез­ную наг­рузку пря­мо в памяти, минуя тем самым HDD.

За­пуск вре­донос­ного ПО через Meterpreter в памяти

Мно­го лет этот прос­той трюк выручал меня. Сра­ботал он и на этот раз.

Code caves

Каж­дый exe-файл (PE-фор­мат) содер­жит код. При этом весь код офор­млен в виде набора фун­кций. В свою оче­редь, фун­кции при ком­пиляции раз­меща­ются не одна за дру­гой вплот­ную, а с некото­рым вырав­нивани­ем (16 байт). Еще боль­шие пус­тоты воз­ника­ют из‑за вырав­нивания меж­ду сек­циями (4096 байт).

И бла­года­ря всем этим вырав­нивани­ям соз­дает­ся мно­жес­тво неболь­ших «кодовых пус­тот» (code caves), которые дос­тупны для записи в них кода. Тут все очень силь­но зависит от ком­пилято­ра. Но для боль­шинс­тва PE-фай­лов, а нас глав­ным обра­зом инте­ресу­ет ОС Windows, кар­тина может выг­лядеть при­мер­но так, как показа­но на сле­дующем скрин­шоте.

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

Что пред­став­ляет собой каж­дая такая «пус­тота»?

Code cave

Так, если мы более точ­но (сиг­натур­но) опре­делим рас­положе­ние всех пус­тот, то получим при­мер­но сле­дующую кар­тину в исполня­емом фай­ле.

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

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

Да­вай пос­мотрим, смо­жем ли мы раз­ложить неболь­шой мно­гос­тупен­чатый Windows/Meterpreter/reverse_tcp шелл‑код по этим пус­тотам. Раз­мер code cave ред­ко пре­выша­ет 16 байт, так что нам пот­ребу­ется раз­бивать шелл‑код силь­нее, чем по базовым бло­кам. Сле­дова­тель­но, при­дет­ся встав­лять еще и допол­нитель­ные jmp-инс­трук­ции для их свя­зи и кор­ректи­ровать адре­са условных перехо­дов. На деле это дос­таточ­но рутин­ная опе­рация.

Фраг­мента­ция и встав­ка шелл‑кода в code caves

Обход антивируса

В резуль­тате наш шелл‑код раз­мером в 354 бай­та был раз­бит на 62 кусоч­ка и помещен в ран­домные пус­тоты меж­ду фун­кци­ями.

Ис­ходный исполня­емый файл — пус­тота меж­ду фун­кци­ями из‑за вырав­нивания Мо­дифи­циро­ван­ный исполня­емый файл — заражен­ная пус­тота меж­ду фун­кци­ями

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

Ори­гиналь­ная трас­са исполне­ния шелл‑кода Об­фусци­рован­ная трас­са исполне­ния шелл‑кода

C помощью это­го спо­соба мы можем обой­ти таким обра­зом мно­го «прос­тых» анти­виру­сов.

Вы­пол­нение вре­донос­ного шелл‑кода в обход анти­виру­са

Обход антивируса Meterpreter

Од­нако серь­езные анти­вирус­ные про­дук­ты таким трю­ком все же не про­ведешь.

Crypt

Как ни стран­но, клас­сичес­кий xor исполня­емо­го фай­ла с динами­чес­ким клю­чом все еще успешно работа­ет про­тив даже самых гроз­ных анти­виру­сов. Для при­мера возь­мем какой‑нибудь очень палев­ный исполня­емый файл и зак­рипту­ем прос­тым xor все, что толь­ко мож­но. Крипт сек­ций .text и .data выг­лядит при­мер­но так.

Xor с клю­чом 0x77 ука­зан­ных адре­сов и раз­меров

Те­перь спря­чем информа­цию о вер­сии.

Шиф­рование ресур­сов исполня­емо­го фай­ла

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

По­иск области, содер­жащей стро­ки, и ее шиф­рование

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

Читайте также:
Программы как вебкам той

PE — > NT headers — > Optional header — > DllCharacteristics | = 0x40

Те­перь самое вре­мя про­верить, что мы все спря­тали, и наш mimikatz боль­ше не вызыва­ет подоз­рений.

Все вре­донос­ное содер­жимое успешно скры­то

От­лично. Толь­ко пока наш файл нерабо­тос­пособен, так как в нем все зашиф­ровано. Перед даль­нейши­ми дей­стви­ями рекомен­дую поп­робовать запус­тить файл в отладчи­ке, что­бы убе­дить­ся, что струк­туры PE-фор­мата не пов­режде­ны и файл валиден.

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

Наш xor_stub.asm будет сох­ранять началь­ное сос­тояние и добав­лять пра­ва на запись в зашиф­рован­ные сек­ции.

Из­менение permissions зашиф­рован­ных сек­ций

Здесь и далее не забудь изме­нить адре­са WinAPI-фун­кций на свои зна­чения. Теперь мы скор­ректи­руем точ­ку вхо­да, так как в нее чуть поз­же будет встав­лен jump на дан­ный код.

Вос­ста­нов­ление инс­трук­ций точ­ки вхо­да

Зап­росим у поль­зовате­ля ключ для рас­шифров­ки и выпол­ним де-xor всех зашиф­рован­ных областей.

Зап­рос клю­ча и рас­шифров­ка им зак­сорен­ных областей

На­конец мы вос­ста­нав­лива­ем началь­ное сос­тояние, кор­ректи­руем стек и переме­щаем­ся в entry point.

Воз­врат на точ­ку вхо­да

Са­мое вре­мя добавить пус­тую сек­цию r-x в mimikatz, куда мы раз­местим наш xor_stub.

До­бав­ление сек­ции, куда будет встав­лен код рас­шифров­ки

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

Ком­пиляция и встав­ка кода для рас­шифров­ки

В кон­це не забудем из entry point сде­лать jump на наш код.

Пе­реда­ча управле­ния на код рас­шифров­ки

Го­тово. Запус­каем и вво­дим ключ, которым мы шиф­ровали, — в моем слу­чае это сим­вол w (0x77).

Вы­пол­нение вре­донос­ного кода в обход анти­виру­са

Вот и все. Нем­ного авто­мати­зиро­вав дан­ный про­цесс, поп­робу­ем запус­тить Meterpreter.

Ав­томати­чес­кое шиф­рование опи­сан­ным спо­собом

За­пус­каем и вво­дим ключ w.

За­пуск вре­донос­ного кода

И получа­ем тот же эффект.

За­пуск вре­донос­ного кода в обход анти­виру­са

Vuln inject (spawn)

Мне хорошо запом­нился один дав­ний слу­чай. Я никак не мог открыть сес­сию Meterpreter на victim из‑за анти­виру­са, и вмес­то это­го мне каж­дый раз при­ходи­лось заново экс­плу­ати­ровать ста­рую доб­рую MS08-067, запус­кая Meterpreter сра­зу в памяти. Анти­вирус почему‑то не мог помешать это­му.

Ду­маю, анти­вирус глав­ным обра­зом заточен на отлов прог­рамм (на HDD) и шелл‑кодов (по сети) с извес­тны­ми сиг­натура­ми или на экс­плу­ата­цию популяр­ных уяз­вимос­тей. Но что, если уяз­вимость еще неиз­вес­тна для анти­виру­са?

В этом слу­чае исполь­зует­ся дос­таточ­но необыч­ная тех­ника, которая стро­ится на прин­ципе внед­рения уяз­вимос­ти (buffer overflow) и, тем самым, неоче­вид­ном исполне­нии про­изволь­ного кода. По сути, это еще один вари­ант реф­лектив­ного исполне­ния кода, то есть ког­да код при­сутс­тву­ет исклю­читель­но в RAM, минуя HDD. Но в нашем слу­чае мы еще и скры­ваем точ­ку вхо­да во вре­донос­ный код.

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

Что­бы про­верить это, нам нуж­но написать и запус­тить прос­тень­кий сетевой сер­вис, содер­жащий при­думан­ную нами 0-day-уяз­вимость (buffer overflow на сте­ке) и про­экс­плу­ати­ровать ее. Что­бы все работа­ло еще и в новых вер­сиях Windows, при­дет­ся обой­ти DEP. Но это не проб­лема, если мы можем добавить нуж­ные нам ROP-gadgets в прог­рамму.

Не будем глу­боко вда­вать­ся в детали buffer overflow и ROP-chains, так как это выходит за рам­ки дан­ной статьи. Вмес­то это­го возь­мем го­товое решение. Ком­пилиру­ем сер­вис обя­затель­но без под­дер­жки ASLR (и мож­но без DEP):

cl . exe / c vuln_rop . c
link . exe / out : vuln_rop . exe vuln_rop . obj / nxcompat : no / fixed

Наш сетевой сер­вис будет работать в режимах listen и reverse connect. А все дан­ные будут переда­вать­ся в зашиф­рован­ном виде, что­бы не спа­лить­ся на сиг­натур­ном ана­лиза­торе. И это очень важ­но, пос­коль­ку некото­рые анти­виру­сы нас­толь­ко «не любят» Meterpreter, что даже прос­тая его отправ­ка в любой откры­тый порт спро­воци­рует немину­емый алерт и пос­леду­ющий бан IP-адре­са ата­кующе­го.

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

За­пуск сер­виса с заложен­ной нами buffer overflow

Наш уяз­вимый сер­вис успешно запущен и ждет вхо­дящих дан­ных. Соз­даем payload и запус­каем экс­пло­ит с ним.

Экс­плу­ата­ция нашего buffer overflow

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

Пе­репол­нение буфера в дей­ствии

Эта полез­ная наг­рузка откры­вает нам сес­сию Meterpreter.

Вы­пол­нение вре­донос­ного кода в обход анти­виру­са

И все это безоб­разие про­исхо­дит при работа­ющем анти­виру­се. Одна­ко было замече­но, что при исполь­зовании некото­рых анти­виру­сов все еще сра­баты­вает защита. Давай порас­сужда­ем, почему. Мы вро­де бы смог­ли внед­рить код край­не неожи­дан­ным спо­собом — через buffer overflow.

И в то же самое вре­мя по сети мы не переда­вали код в откры­том виде, так что сиг­натур­ные движ­ки не сра­бота­ли бы. Но перед непос­редс­твен­ным исполне­нием мы получа­ем в памяти тот самый машин­ный код. И тут, по‑видимо­му, анти­вирус и ловит нас, узна­вая до боли зна­комый Meterpreter.

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

Vuln inject (attach)

Са­мый прос­той и удоб­ный спо­соб выпол­нить код в чужом адресном прос­транс­тве (про­цес­се) — инжект биб­лиоте­ки. Бла­го DLL мало чем отли­чает­ся от EXE и мы можем переком­пилиро­вать наш уяз­вимый сер­вис в форм‑фак­тор биб­лиоте­ки, прос­то изме­нив main() на DllMain():

Источник: spy-soft.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru