Обход антивируса с помощью Haskell

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

В рам­ках одно­го из рабочих про­ектов по внут­ренне­му пен­тесту я обна­ружил на одном из сер­веров воз­можность заг­ружать фай­лы и запус­кать их. Там работа­ла ОС Windows Server. Но, помимо это­го, был уста­нов­лен один из наибо­лее извес­тных анти­виру­сов в акту­аль­ной вер­сии, со све­жими обновле­ниями и с пра­виль­но задан­ными нас­трой­ками (нечас­то такое встре­тишь, вер­но?).

Еще по теме: Обход антивируса в Meterpreter

Ког­да я обна­ружил воз­можность заг­рузки и исполне­ния заг­ружен­ных фай­лов, пер­вым делом я попытал­ся сге­нери­ровать наг­рузку для вызова реверс‑шел­ла с помощью нес­коль­ких сов­ремен­ных генера­торов (Msfvenom, Empire). Одна­ко все сге­нери­рован­ные ими наг­рузки, даже соз­данные с при­мене­нием раз­личных энко­деров и крип­торов, бло­киро­вались анти­виру­сом на эта­пе заг­рузки или запус­ка. Это соз­дало для меня проб­лему: получить шелл нуж­но, но меша­ет анти­вирус.

Обход антивируса с помощью Haskell

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

Имен­но поэто­му я решил перепи­сать модуль реверс‑шел­ла на Haskell. Я пос­читал эту задачу дос­таточ­но три­виаль­ной и не тре­бующей осо­бых вре­мен­ных зат­рат. Это было боль­шой моей ошиб­кой.

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

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

Обход антивируса используя Haskell

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

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

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

Обойти антивирус используя Haskell

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

Заключение

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

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий