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

Что такое энтро­пия? У это­го понятия есть опре­деле­ния в раз­ных областях науки, зна­чащие в общих чер­тах одно и то же. В тер­минах информа­тики — это показа­тель хаотич­ности или слу­чай­нос­ти рас­пре­деле­ния зна­чений бай­тов в фай­ле. Усло­вим­ся, что под этим тер­мином мы име­ем в виду эн­тро­пию Шен­нона. Того самого челове­ка, который в 1948 году пред­ложил исполь­зовать сло­во «бит» для обоз­начения наимень­шей еди­ницы информа­ции.

Оку­нем­ся нем­ного в матема­тику. Энтро­пия любого фай­ла в общем слу­чае счи­тает­ся методом «сколь­зящего окна» по всем бай­там фай­ла. Зву­чит страш­но, но на самом деле про­ще, чем кажет­ся. Что­бы понять прин­цип сколь­зящего окна, дос­таточ­но взгля­нуть на рисунок.

Скользящее окно
Сколь­зящее окно

Сна­чала рас­счи­тыва­ются час­тоты fi появ­ления для каж­дого воз­можно­го зна­чения бай­та (i = 0..255). Нап­ример, в пер­вом окне зна­чение бай­та сог­ласно таб­лице ASCII (десятич­ное зна­чение = 180) рав­но сим­волу ´. В ито­ге получа­ется вот такая гис­тограм­ма по количес­твам вхож­дений опре­делен­ных бай­тов в фай­ле (ее ты можешь уви­деть сам в любом Hex-редак­торе).

Частотное распределение байтов в объекте в программе Hex Workshop
Час­тотное рас­пре­деле­ние бай­тов в объ­екте в прог­рамме Hex Workshop

За­тем най­ден­ные час­тоты (fi) сум­миру­ются по фор­муле ниже, и в резуль­тате мы получим зна­чение энтро­пии.

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

Од­но из харак­терных свой­ств алго­рит­мов сжа­тия — перерас­пре­деле­ние час­тот встре­чаемос­ти бай­тов кода (для всех 256 зна­чений), что и ста­нет замет­но при ана­лизе! В таких фай­лах будет высокая сте­пень энтро­пии, близ­кая к мак­сималь­ному зна­чению 8 (28 = 256). То есть чем выше энтро­пия, тем мень­ше избы­точ­ности в фай­ле.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

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

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

Оставить мнение