РУССКИЙ
РУССКИЙ
ENGLISH
31 мая 2021

Энтропия: как хаос помогает искать вирусы

Борис Осепов
Ведущий пресейл-менеджер Group-IB
Александр Мессерле
ИБтивист
В борь­бе со злов­редами вирус­ные ана­лити­ки исполь­зуют мно­жес­тво методов и целый арсе­нал спе­циаль­ного соф­та. Но самая пер­вая из сто­ящих перед ними задач — опре­делить, дей­стви­тель­но ли им в руки попал­ся вре­донос­ный обра­зец, или это что‑то безобид­ное. Решить ее помога­ет изу­чение показа­теля под наз­вани­ем «энтро­пия». Сегод­ня мы рас­ска­жем, как работа­ет эта тех­ника вирус­ного ана­лиза. Впервые статья была опубликована в журнале «Хакер».
Сколь­зящее окно
Сна­чала рас­счи­тыва­ются час­тоты fi появ­ления для каж­дого воз­можно­го зна­чения бай­та (i = 0..255). Нап­ример, в пер­вом окне зна­чение бай­та сог­ласно таб­лице ASCII (десятич­ное зна­чение = 180) рав­но сим­волу ´. В ито­ге получа­ется вот такая гис­тограм­ма по количес­твам вхож­дений опре­делен­ных бай­тов в фай­ле (ее ты можешь уви­деть сам в любом Hex-редак­торе).
Час­тотное рас­пре­деле­ние бай­тов в объ­екте в прог­рамме Hex Workshop
За­тем най­ден­ные час­тоты (fi) сум­миру­ются по фор­муле ниже, и в резуль­тате мы получим зна­чение энтро­пии.
Суть ана­лиза энтро­пии зак­люча­ется в том, что в ском­пилиро­ван­ном фай­ле обыч­ной прог­раммы учас­тки кода рас­пре­деле­ны более‑менее рав­номер­но, как мас­ло на бутер­бро­де. При исполь­зовании кодиров­щиков или обфуска­ции, упа­ков­щиков, алго­рит­мов сжа­тия или вста­вок подоб­ного рода кода в исходный файл такая рав­номер­ность наруша­ется. В фай­ле появ­ляют­ся высоко­энтро­пий­ные области (как буд­то кон­цен­три­рован­ный белый шум) и области, менее под­вер­гну­тые обфуска­ции или шиф­рованию (кодиро­ванию), если про­дол­жить метафо­ру бутер­бро­да — комоч­ки в мас­ле или прос­лой­ки варенья.
Од­но из харак­терных свой­ств алго­рит­мов сжа­тия — перерас­пре­деле­ние час­тот встре­чаемос­ти бай­тов кода (для всех 256 зна­чений), что и ста­нет замет­но при ана­лизе! В таких фай­лах будет высокая сте­пень энтро­пии, близ­кая к мак­сималь­ному зна­чению 8 (28 = 256). То есть чем выше энтро­пия, тем мень­ше избы­точ­ности в фай­ле.

Для закоди­рован­ных (сжа­тых, зашиф­рован­ных) фай­лов на прак­тике зна­чение энтро­пии свы­ше семи мож­но счи­тать поч­ти 100%-м приз­наком при­мене­ния пре­обра­зова­ния кода, в то вре­мя как обыч­ные фай­лы име­ют энтро­пию в рай­оне 2–6. Час­то на прак­тике энтро­пию в фай­ле или выделен­ном фраг­менте фай­ла изме­ряют в про­цен­тах (тут иног­да так­же исполь­зуют понятие «избы­точ­ность»).
По­каза­тель уве­личе­ния энтро­пии в зависи­мос­ти от содер­жимого объ­екта
Пред­ста­вим, что есть какой‑то объ­ект, в который потен­циаль­ный зло­умыш­ленник может внед­рить вре­донос­ный код. Он помеща­ет полез­ную наг­рузку в ори­гиналь­ный файл, сжи­мает или зашиф­ровыва­ет опре­делен­ный фраг­мент дан­ных, тем самым уве­личи­вая энтро­пию. С точ­ки зре­ния вирус­ного ана­лити­ка, мож­но быс­тро про­верить обра­зец и его сек­ции на энтро­пию, понять, запако­ван он или обфусци­рован, и, исхо­дя из этой информа­ции, выб­рать методо­логию для ана­лиза объ­екта. Итак, какие есть инс­тру­мен­ты для под­сче­та энтро­пии?
На­ибо­лее популяр­ные инс­тру­мен­ты для про­веде­ния
ана­лиза объ­ектов по энтро­пии:
Вос­поль­зуем­ся пер­вой прог­раммой — Detect It Easy (DIE) — и раз­берем пару при­меров с популяр­ным образцом Agent Tesla.

Agent Tesla — это модуль­ное прог­рам­мное обес­печение для шпи­она­жа, которое рас­простра­няет­ся по модели malware-as-a-service под видом кей­лог­гера. Этот шпи­он спо­собен извле­кать и переда­вать на сер­вер зло­умыш­ленни­кам учет­ные дан­ные поль­зовате­ля из бра­узе­ров, поч­товых кли­ентов и кли­ентов FTP, регис­три­ровать содер­жимое буфера обме­на, делать сним­ки экра­на. На момент ана­лиза офи­циаль­ный сайт раз­работ­чиков был недос­тупен.

На скрин­шотах интерфей­са ути­литы пред­став­лена сле­дующая информа­ция:

  • тип фай­ла;
  • об­щая оцен­ка энтро­пии;
  • ста­тус (запако­ван ли файл, если нет — перед нами «чис­тый» текст);
  • под­счет энтро­пии иско­мого фай­ла посек­цион­но (Regions) и его ста­тус;
  • гра­фик энтро­пии (ось Х — сме­щение, ось Y — оцен­ка энтро­пии).
Гра­фики энтро­пии для образца Agent Tesla и еще одной его раз­новид­ности показа­ны ниже - на слайдере.
На скрин­шотах интерфей­са ути­литы пред­став­лена
сле­дующая информа­ция:
Ти­пич­ный при­мер — ког­да PE-заголо­вок чита­ется (энтро­пия низ­кая), одна­ко уро­вень энтро­пии оставшей­ся час­ти фай­ла очень высок, а сек­ция кода не может быть ста­тис­тичес­ки про­ана­лизи­рова­на, пос­коль­ку похожа на слу­чай­ные зна­чения. Это обыч­но сви­детель­ству­ет о при­мене­нии сжа­тия либо обфуска­ции — типич­ного при­ема, что­бы сбить с тол­ку анти­виру­сы. По гра­фику рас­пре­деле­ния энтро­пии мож­но на глаз опре­делять закоди­рован­ные фраг­менты фай­ла.

Для прос­мотра закоди­рован­ных областей фай­ла ты можешь исполь­зовать онлайн‑ресурс http://binvis.io/ или прог­рамму PortexAnalyzer. На сле­дующем рисун­ке показан при­мер отоб­ражения образца в PortexAnalyzer: сле­ва — исполня­емый файл до упа­ков­ки или архи­виро­вания, спра­ва — пос­ле.
При­меры работы PortexAnalyzer
Пом­нишь, недав­но мы писали о не­чет­ком хеше SSDeep? Он не всег­да отра­баты­вает кор­рек­тно, осо­бен­но для сем­плов с низ­кой энтро­пией. Опыт­ных поль­зовате­лей SSDeep час­тень­ко сму­щает сам рас­чет схо­жес­ти хешей и мно­жес­тво лож­нополо­житель­ных сра­баты­ваний, поэто­му Вас­сил Рус­сев раз­работал ал­горитм SDHash, который сколь­зящим окном рас­счи­тыва­ет энтро­пию фай­ла.

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

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

При­мер при­мене­ния иссле­дова­ния энтро­пии на прак­тике — модуль поведен­ческо­го ана­лиза Polygon в сос­таве ком­плек­са Group-IB Threat Hunting Framework. На рисун­ке ниже показа­на часть отче­та сис­темы. В нем содер­жится информа­ция об энтро­пии в раз­деле про­чих поведен­ческих мар­керов.
На скриноште: при­мене­ния иссле­дова­ния энтро­пии на прак­тике — в модуле Polygon Group-IB Threat Hunting Framework.
Та­ким обра­зом, ана­лиз энтро­пии мож­но наз­вать базовой оцен­кой тес­тиру­емо­го объ­екта, которая поз­воля­ет понять, на какую сек­цию или часть фай­ла сле­дует обра­тить более прис­таль­ное вни­мание при ана­лизе образца и понять, подоз­рителен ли обра­зец в целом.