TL;DR

Общ преглед: Вече съществува библиотека за писане на правила на YARA в Python.
Вземете кода: https://github.com/matonis/yara_tools
Разгледайте примерите: https://github.com/matonis/yara_tools/examples
Хаштаг: #yara_tools

Преглед

Днес представям yara_tools, библиотека, която създадох, за да помогна на изследователите по сигурността да създават прости или сложни правила на YARA в Python. Тъй като е написан на Python, той се интегрира навсякъде, където Python вече го прави. Ако не знаете за YARA, моля, прочетете документите.

YARA е хлябът и маслото за изследване и защита на зловреден софтуер... и yara_tools е неговият нож за масло.

yara_tools е много лесен за използване, но въвежда някои нови и уникални концепции. Мисля, че ще ги оцените, когато става въпрос за автоматизиране на вашите работни процеси. Препоръчвам ви да разгледате примерите на страницата на GitHub.

Гмуркане: Какво прави yara_tools уникален?

yara_tools ви позволява да правите prrreeetttyyy почти всичко, което бихте искали да правите, когато създавате правило на YARA, но с няколко предимства.

  • Скучните неща, които влизат в създаването на правило, са почти автоматизирани (имена на променливи и целочислени увеличения).
  • Досадните нещакато работа с двоични данни, for цикли и добавяне на метаданни и коментари вече са лесни.
  • Наистина разочароващите неща като създаването и поддържането на сложни условия и взаимоотношения вече са малко по-интуитивни.

Създаване на правило

Вижте: Пример 1 — „Здравей свят“
Създаването на правило е лесно. Всяко правило се конструира с един конструктор и се връща като обект. Всеки аспект на правило може да се контролира чрез комбинация от функции и параметри.

Докато вашето правило има някои низове или условие, yara_tools.build_rule() ще ви даде правило в замяна.

Помощ за автоматизацията

Вижте:
Пример 2 — Грубо форсиране на XOR'd низ
Пример 3— Работа с PE модул за завъртане на Shamoon
Пример 7 — Flame IDAPython скрипт

Един от ключовите двигатели зад разширяването на yara_tools беше подпомагането на перспективни изследвания.

Често може да откриете алгоритъм за декодиране/кодиране, DGA или недостатък в логиката на автора на зловреден софтуер и да успеете грубо да принудите редица неща, за да разширите покритието или да направите малко лов. Създадох колкото се може повече автоматични съоръжения в рамките на yara_tools, така че можете да му хвърляте толкова данни, колкото са ви необходими, и да можете да си тръгнете с правило.

Отделете повече време за кодиране на решения и по-малко време за ритане на екрана, докато форматирате правило.

Разширяване на контекста и доставката

Една от по-скучните функции на yara_tools, която е измамно полезна, са нейните възможности за добавяне на коментари. Това е особено полезно, когато трябва да се върнете към неясно правило и да разберете какво, по дяволите, става.

  • Добавете толкова мета полета, колкото искате.
  • Насладете се на възможността да добавяте вградени коментари към низове.

Работа с двоични данни

Вижте: Пример 4 — Създаване на експериментален подпис за EXE в макродокумент

Предайте yara_tools.add_binary_strings() необработена част от двоични данни и получете автоматично добавен шестнадесетичен низ в замяна.

Комплексни условия: Въведение в „Групи условия“

Разгледайте: Пример 5 — (Kaspersky & STONEDRILL)

Крайният ми критерий за измерване на възможностите на yara_tools беше способността да създавам сложни условия.

Прекарах много време в изучаване на много неясни правила, които аз и други в общността сме написали и преминах през няколко сценария, за да се уверя, че поне мога да създам същото правило както програмно, така и синтактично.

Във въведението си споменавам, че комбинация от фактори влиза в съставянето на прилично правило на YARA: Ето как обикновено изглежда едно фиктивно, но ужасяващо състояние в реалния свят от анализатор, който е проучил набор от свързан злонамерен софтуер и е установил, че уникалната комбинация от низове го правят уникален:

› (всички от ($s*) и 3 от ($x)) или (всяко от ($y*) и 1 от ($s*)) или ($s1 и #o ›= 42 и което и да е от ($ a,$b,$c,$d))

айк

За да улесня сложни условия като тези, имах за цел да копирам как предполагам, че хората мислят, когато съставят правило на YARA.

Въведете „Групи условия.“

Вижте: Пример 6 — Илюстрирани сложни групи условия

В началното изображение за този раздел илюстрирам сложен набор от условия и връзки, за да демонстрирам как условията могат да бъдат използвани, повторно използвани, свързани и верижни. Всеки възел представлява група условия, а всеки ред представлява вложена връзка.

По време на вашето пътуване за създаване на подпис YARA може да имате набор от условия, които представляват единичен набор от атрибути („нещо“), което прави нещо уникално. Може да искате да използвате това единствено „нещо“ в друга група „неща“ и тези „неща“ като част от друг набор от „неща“ и т.н. Вместо да създавате повторно едно и също условие няколко пъти, можете да създадете една група условия, която по-късно може да бъде препратена към друга отделна(и) група(и) условия.

Тази концепция се споменава в yara_tools като Група условия.

Групите условия са контейнери за условия.

  • Една група условия има едно конфигурируемо булево значение, присвоено на всички изрази в нея.
  • Една група условия може да има един или много изрази и условия в тях.
  • Група условия може да бъде отречена/инвертирана (не модификатор)
  • Един израз може да се използва в много групи условия.
  • Групите условия могат да бъдат свързани една с друга и вложени.

В идеалния случай трябва да използвате групи условия, за да създадете изрази с подобна цел и дух.

  • Например, общ набор от условия и изрази за закрепване често се върти около валидиране на файлови формати (т.е. PECOFF, MZ заглавка, DOS низ, секции и т.н.)

yara_tools ви позволява да създавате връзки между групи условия, като дефинирате “parent_group” в съответното извикване и както е показано, групите условия могат да имат 1 :N връзка.

Винаги помнете, дефинирайте групите си постепенно, както в идеалния случай биха били представени на хартия и моля... моля... Поддържайте простите си групи за състояние (KYCGS).

Hidden Gotcha's & Last Words

Първо и най-важно, yara_tools не валидира въведените от вас данни или правилата, които правите. Той познава формата, дава ви функции за свободно добавяне на неща към него. Като се има предвид разширяването на развитието, което YARA видя през последните години, това беше проектирано.

Второ, групите условия са нови и могат да причинят някои главоболия. И така, давам ви един съвет, който не бива да забравяте: условията са базирани на поръчка.

  • Редът, в който добавяте условия, има значение.
  • Редът, в който добавяте групи условия, също има значение.
  • Съществува концепция за „глобално условие“, тоест условие, което не е група условия. Те винаги се добавят първи. Групите условия се добавят след.

yara_tools първоначално беше разработен преди около четири години, когато създадох бета версията на ripPEv2 (вземете OG версията на ripPE тук!); въпреки това се наблюдават някои ограничени тестове. Разработих го и го използвам, но все още трябва да извърви още много неща, за да бъде напълно здрав. Ще има грешки.

Разклонете и, моля, изпратете заявка за изтегляне!

Очаквам с нетърпение да видя как ще го използвате! #yara_tools