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

В нашей прош­лой статье («Хеш чет­кий и хеш нечет­кий») мы рас­ска­зали, как заг­ружали заранее клас­сифици­рован­ные объ­екты и при этом пол­ностью упо­вали на зна­ния ран­домных ана­лити­ков и верили (конеч­но, не до кон­ца!), что там дей­стви­тель­но находит­ся мал­варь кон­крет­ного семей­ства. Такое час­то про­исхо­дит в реаль­ном мире, вре­донос­ное ПО нас­толь­ко быс­тро появ­ляет­ся, что информа­цию о том, как иден­тифици­ровать угро­зу и быс­тро реали­зовать пра­вило детек­тирова­ния, порой быва­ет поч­ти что воп­росом жиз­ни или смер­ти.

YARA — это опен­сор­сный инс­тру­мент, который помога­ет иссле­дова­телям искать и клас­сифици­ровать вре­донос­ные сем­плы и даже про­водить Threat Hunting. Ути­лита выпол­няет сиг­натур­ный ана­лиз на осно­ве фор­маль­ных YARA-опи­саний (пра­вил). В них содер­жатся инди­като­ры ком­про­мета­ции для раз­ных типов вре­донос­ного ПО.

Фиш­ка в том, что делать пра­вила лег­ко и не занима­ет мно­го вре­мени. Имен­но поэто­му YARA исполь­зуют в AlienVault, Avast, ESET, FireEye, Group-IB, Kaspersky, Trend Micro, Virus Total, x64dbg... В общем, поч­ти все, кто име­ет дело с ана­лизом вре­донос­ного ПО.

YARA-пра­вила могут обра­баты­вать не толь­ко исполня­емые фай­лы, но и докумен­ты, биб­лиоте­ки, драй­веры — все что угод­но. Ими же мож­но ска­ниро­вать сетевой тра­фик, хра­нили­ща дан­ных, дам­пы памяти. Эти пра­вила мож­но вклю­чать в дру­гие инс­тру­мен­ты, такие как SIEM, анти­фишинг, IDS, песоч­ницы.

Да­вай раз­берем­ся, как же выг­лядят эти пра­вила и как их сос­тавлять.

 

Структура правил

Обыч­но пра­вила хра­нят­ся в тек­сто­вом фор­мате в фай­ле .yar и сос­тоят из двух сек­ций:

  • сек­ции опре­деле­ний (strings) — содер­жит харак­терные для мал­вари кон­стан­ты, хеши, HEX-фраг­менты, ссыл­ки, стро­ки;
  • сек­ции усло­вия (condition) — содер­жит усло­вия, по которым при­нима­ются решения отно­ситель­но ана­лизи­руемо­го фай­ла.

Выг­лядит это так:

rule SomeMalwareName {
meta:
author = "AuthorName"
strings:
condition:
}
 

Применяем YARA

Ми­нималь­но необ­ходимые сек­ции — это наз­вание пра­вила и его усло­вия. Нап­ример, пра­вилом ниже мы будем детек­тировать объ­екты толь­ко по их imphash (на тес­товых объ­ектах из пре­дыду­щей статьи):

import "pe"
rule MyLittleAgentTeslaRuleDetect {
condition:
pe.imphash() == "b21a7468eedc66a1ef417421057d3157" or
pe.imphash() == "f34d5f2d4577ed6d9ceec516c1f5a744"
}

Сох­раним файл как AT.yar и запус­тим на дирек­тории с сем­пла­ми Agent Tesla. Пос­мотрим на резуль­тат и убе­дим­ся, что пра­вило отра­бота­ло на всех пред­ста­вите­лях Agent Tesla.

C:\>yara64.exe -r AT.yar AgentTesla
MyLittleAgentTeslaRuleDetect AgentTeslaAT11.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT12.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT13.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT14.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT16.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT2.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT18.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT15.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT10.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT3.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT6.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT7.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT1.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT9.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT4.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT17.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT5.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT8.exe

Ре­зуль­тат — все из всех.

Как ты мог заметить, пра­вила YARA под­держи­вают импорт полез­ных модулей. Соот­ветс­твен­но, мож­но написать свои модули. Вот нес­коль­ко наибо­лее час­то исполь­зуемых:

  • pe — фун­кции, нуж­ные при работе с объ­екта­ми Portable Executable, нап­ример кон­троль­ная сум­ма imphash, мет­ка вре­мени соз­дания, рас­положе­ние сек­ций;
  • hash — рас­чет кон­троль­ных сумм и крип­тогра­фичес­ких хешей;
  • math — матема­тичес­кие под­сче­ты, нап­ример сред­нее ариф­метичес­кое или энтро­пия.

Пол­ный спи­сок ты всег­да можешь гля­нуть в офи­циаль­ной докумен­тации по YARA.

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

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

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

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

1 комментарий

  1. Аватар

    Борис Осепов

    24.11.2020 в 06:47

    Объяснение any of them следующее — хотя бы одно (или несколько) соответствие из секции определений.

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