Обход антивируса используя технику API Hashing

API Hashing

В предыдущей статье я рассказывал про фреймворки для обхода антивируса и EDR. Сегодня рассмотрим метод обхода антивируса, который называется API Hashing — тех­ника, которую раз­работ­чики вре­донос­ного ПО при­меня­ют, что­бы скрыть подоз­ритель­ные вызовы Windows API от таб­лицы импорта адре­сов пор­татив­ного исполня­емо­го фай­ла (PE). Это зат­рудня­ет ана­лиз, пос­коль­ку ста­новит­ся слож­нее опре­делить, какие фун­кции вызыва­ются.

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

Как работает API Hashing

Проб­лема для раз­работ­чиков вре­донос­ного ПО: если есть PE с непов­режден­ной IAT (Import Address Table), лег­ко понять, каковы воз­можнос­ти PE. Нап­ример, если вид­но, что дво­ичный файл заг­ружа­ет Ws2_32.dll, мож­но пред­положить, что он име­ет сетевые воз­можнос­ти.

Что­бы усложнить пер­воначаль­ный ана­лиз PE, вирусо­писа­тели скры­вают подоз­ритель­ные вызовы API от IAT с помощью API-хеширо­вания. Таким обра­зом, ког­да ана­литик запус­тит вре­донос­ный дво­ичный файл через ути­литу strings или откро­ет его в PE-пар­сере, подоз­ритель­ные Windows API будут скры­ты.

Кстати, мы уже рассказывали о технике обхода антивирусов с помощью API Hashing.

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

Пред­положим, у нас есть вре­донос­ное ПО, которое исполь­зует фун­кцию CreateThread. Если мы ском­пилиру­ем код и про­ана­лизи­руем его с помощью PE-пар­сера, уви­дим, что CreateThread — одна из импорти­рован­ных фун­кций. Одна­ко если мы при­меним тех­нику API Hashing, то CreateThread исчезнет из IAT.

Для это­го раз­работ­чики вре­донос­ного ПО могут исполь­зовать сле­дующий под­ход:

  • Соз­дает­ся хеш‑фун­кция, которая при­нима­ет имя фун­кции (нап­ример, CreateThread) и воз­вра­щает уни­каль­ное хеш‑зна­чение.
  • Вре­донос­ное ПО во вре­мя выпол­нения переби­рает все экспор­тирован­ные фун­кции из биб­лиоте­ки (нап­ример, kernel32.dll), вычис­ляет их хеши и срав­нива­ет с хешем CreateThread.
  • Как толь­ко хеш сов­пада­ет, вре­донос­ное ПО получа­ет адрес фун­кции и может выз­вать ее нап­рямую, минуя IAT.

Рас­смот­рим под­робнее. Как мы дол­жны получить хеш от вызова API?

У нас есть при­мер алго­рит­ма хеширо­вания, который может пре­обра­зовать любую фун­кцию в хеш:

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

Преобразование функции в хеш:

Преобразование функции в хеш

Проб­лема толь­ко в том, что шелл Meterpreter дела­ет вызов ко мно­жес­тву API, вклю­чая ExitProcess, LoadLibraryA, VirtualAlloc и VirtualFree. И это далеко не пол­ный спи­сок. Что же нам делать? Здесь помога­ет Randomise-api-hashes-cobalt-strike. Этот скрипт вычис­ляет хеши для огромно­го мно­жес­тва API и заменя­ет их наз­вания в шелл‑коде. Давай уста­новим его на Kali Linux и пос­мотрим, как он работа­ет.

Кло­ниру­ем репози­торий.

Установка Randomise-api-hashes-cobalt-strike

Ге­нери­руем шелл‑код в сыром виде и записы­ваем в файл с рас­ширени­ем .bin.

Инс­тру­мент при­нима­ет на вход толь­ко .bin.

Ге­нера­ция шелл‑кода

И наконец, напус­тим инс­тру­мент на file.bin.

За­пуск Randomise-api-hashes-cobalt-strike

За­метил циф­ру 64 пос­ле наз­вания скрип­та? Это мы про­писы­ваем архи­тек­туру. Раз­ная раз­рядность — раз­ные вызовы API. Пос­ле отра­бот­ки мы получа­ем файл file.bin_0xf9.bin. Если понадо­бит­ся получить шелл‑код в сыром виде (С-code), то вновь исполь­зуем xxd.

По­луче­ние шелл‑кода в С-code

А что по обна­руже­ниям?

VirusTotal дал 11 из 69.

Ре­зуль­таты про­вер­ки на VirusTotal

И решения из спис­ка иссле­дуемых не дали отри­цатель­ный резуль­тат.

Ре­зуль­таты обна­руже­ния

Этот шелл‑код уже мож­но ском­пилиро­вать в .exe.

Шелл‑код для ком­пиляции

Заключение

Мы рас­смот­рели интересный метод обхода антивирусов — API Hashing. Его важ­но учи­тывать сот­рудни­кам ком­паний, отве­чающих за защиту ресур­сов и пре­дот­вра­щение реали­зации киберуг­роз.

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

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

Дима (Kozhuh)

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

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