Как найти вирус на компьютере самому при помощи Yara

  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 — функции, необходимые при работе с переносимыми исполняемыми объектами, например контрольная сумма imphash, отметка времени создания, расположение раздела;
    hash — вычисление криптографических контрольных сумм и хешей;
   Math — математические вычисления, такие как среднее арифметическое и энтропия.

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

                Пишем правила

   В опци­ональ­ной сек­ции опре­деле­ний мож­но юзать мас­ки (wildcard, подобия регуляр­ных выраже­ний). Нап­ример, для шес­тнад­цатерич­ных строк воз­можны такие мас­ки:

  • сим­вол ? — наличие любого бай­та на мес­те это­го сим­вола;
  • ди­апа­зоны ([4-6] — от 4 до 6 раз­личных бай­тов);
  • аль­тер­нативы (логичес­кое ИЛИ — |).

   Рас­смот­рим еще один при­мер с нес­коль­кими пра­вила­ми и про­демонс­три­руем тебе раз­нооб­разие воз­можнос­тей детек­тирова­ния YARA:

import "hash"
 
rule MyExe_RUFUS {
strings:
$my_HEX_string = { E0 38 D2 21 32 4D 1B C1 79 EC 00 70 76 F5 62 B6 }
 
condition:
$my_HEX_string and hash.md5(0, filesize) == "d35936d329ac21ac3b59c525e2054078"
}
 
rule MyExe_Hercules4 {
strings:
$my_HEX_string = { 59 (E9 D8|FF) 1A 00 00 5? E8 [4-6] 94 8F }
condition:
$my_HEX_string
}
 
rule MyURL_Yandex {
strings:
$my_URL_string = "https://yandex.ru"
condition:
$my_URL_string
}
 
rule MyRar_SFX {
strings:
$winrar1 = "WINRAR.SFX" nocase wide ascii
$winrar2 = ";The comment below contains SFX script commands" wide ascii
$winrar3 = "Silent=1" wide ascii
$winrar4 = { E8 65 64 00 00 E9 78 FE FF FF}
//$winrar4 = "sfx" nocase
condition:
1 of them

 

Раз­берем каж­дое из пра­вил:

  • MyExe_RUFUS — пра­вило сра­баты­вает, если будет обна­ружен ука­зан­ный машин­ный код и сов­падет хеш MD5;
  • MyExe_Hercules4 — при­мер пра­вила с исполь­зовани­ем мас­ки по шес­тнад­цатерич­ным зна­чени­ям. 59 (E9 D8|FF) — зна­чит, что дол­жно встре­тить­ся пос­ле бай­та 59 либо два бай­та E9 D8, либо один байт FF. 5? зна­чит, что здесь может быть вари­ация от 50 до 5F. E8 [4-6] 94 зна­чит, что меж­ду бай­тами E8 и 94 могут быть любые от 4 до 6 байт.
  • MyURL_Yandex — пра­вило сра­баты­вает при нахож­дении в объ­екте стро­ки, содер­жащей ссыл­ку.
  • MyRar_SFX — при­мер пра­вила для поис­ка архи­вов SFX. "sfx" nocase озна­чает, что стро­ка может быть с любой вари­ацией регис­тров сим­волов, нап­ример Sfx или SFX. Параметр wide ascii озна­чает, что в стро­ке дол­жно быть соот­ветс­твие по ASCII-сим­волам, которые могут кодиро­вать­ся дву­мя бай­тами (wide), что типич­но для исполня­емых бинар­ников.

   Пос­мотрим, как выг­лядят исходные фай­лы для тес­тирова­ния пра­вил.

   За­пус­тим про­вер­ку с нашим пра­вилом MyExe.yar и оце­ним резуль­тат.

C:\>yara64.exe -r MyExe.yar C:\SAMPLES
MyExe_Hercules4 C:SAMPLESHercules4.exe
MyExe_RUFUS C:SAMPLESrufus-2.17p.exe
MyRar_SFX C:SAMPLESHV_DETECT_FIN.exe
MyURL_Yandex C:SAMPLESDear_Recipient.pdf

  Документы PDF и DOCX одинаковы, но YARA не смогла найти строку ссылки, поскольку формат DOCX является файлом ZIP. Чтобы работать с этим, вам нужно добавить собственный модуль для работы с файлами, но мы не будем вдаваться в подробности.

Са­мое глав­ное — гра­мот­но сос­тавить усло­вие, по которо­му будет про­верять­ся файл. Обыч­но оно ком­биниру­ет перемен­ные из сек­ции опре­деле­ния, под­держи­вают­ся логичес­кие опе­рато­ры вро­де or и and, скоб­ки и кон­стан­ты. Нап­ример:

  • filesize — раз­мер фай­ла;
  • at — задание сме­щения;
  • 1 of them — хотя бы одно усло­вие из перечис­ленных в пра­виле дол­жно выпол­нить­ся;
  • any of them — то же самое, что «1 of them».

И так далее, пол­ный спи­сок смот­ри в докумен­тации.

                  Автоматизация

     Вы можете получить правила тремя способами: загрузить их все в готовом виде (ссылки — ниже), создать их самостоятельно (вариант для энтузиастов) или позволить машине сделать это за вас. В последнем случае подходят разные генераторы, например yabin,YaYaGen,yarGen,BASS.В большинстве случаев вы можете найти уникальные строки во фрагментах вредоносных программ для создания правил. Однако вы сами понимаете, что это не самый надежный способ.

               Полезные ссылки

  Остается только один вопрос: откуда берутся все эти предопределенные индикаторы взлома (IoC) и правила?Отве­чаем: есть офи­циаль­ный репози­торий (и его зер­кало) и мас­са агре­гато­ров пра­вил в под­борке на GitHub.

  Кстати, вы можете объединить все правила в один файл .yar. Единственное требование — правила должны иметь уникальные имена, которые появятся в результате работы программы.

 

 

  

 

Click to rate this post!
[Total: 0 Average: 0]

Leave a reply:

Your email address will not be published.