Vojtěch Hron / n00bDebugger
Home/Security Toolkit/PERE - PE Risk Engine
Security Toolkit

PERE - PE Risk Engine

Útočník nemusí nutně přinést vlastní spustitelný soubor. Stačí, když skryje škodlivou knihovnu DLL do instalační složky legitimního softwaru - například Microsoft Teams nebo jakékoli jiné důvěryhodné aplikace - a spoléhá se na to, že Windows načte jeho knihovnu namísto té původní. Tato technika, známá jako DLL hijacking, funguje právě proto, že podezřelý soubor leží přesně tam, kde by ho nikdo nehledal.

Jak ale takový soubor najít? Složka legitimního softwaru může obsahovat desítky nebo stovky binárních souborů PE. Ruční procházení je pomalé. Systémy EDR jsou vynikající, ale ne každé prostředí je má nasazeno. Proto jsem napsal PERE - jednoduchý nástroj CLI pro Windows, který provádí rychlou statickou analýzu a každému binárnímu souboru přiřadí skóre rizika.


Jak to funguje

Nástroj PERE rekurzivně prochází cílový adresář, vyhledá všechny soubory .exe a .dll a každý z nich podrobuje statické analýze. Výsledkem je barevně označený výstup v terminálu a případně také zpráva ve formátu JSON.

Analýza pokrývá čtyři oblasti:

Tabulka importů je první věc, kterou PERE zkoumá. Importované funkce API jsou nejpřímějším signálem toho, co binární soubor dělá – nebo je schopen dělat. Nástroj porovnává importy s kategorizovanými slovníky:

  • API paměti - VirtualAlloc, WriteProcessMemory, NtWriteVirtualMemory a podobné
  • Injekční API - CreateRemoteThread, NtCreateThreadEx, QueueUserAPC
  • API pro spuštění - CreateProcessA/W, WinExec, ShellExecuteW
  • API pro DLL - LoadLibrary, GetProcAddress, LdrLoadDll
  • API pro perzistenci - RegSetValueEx, RegCreateKeyEx

Každé API má určitou bodovou hodnotu. Určité kombinace také spouštějí komplexní detekci - například přítomnost VirtualAlloc + WriteProcessMemory + CreateRemoteThread ve stejném souboru je klasický injection chain a přidává 80 bodů k bodům jednotlivých API. Podobně OpenProcess + NtCreateThreadEx signalizují stealth injection prostřednictvím nativních API NT.

Digitální podpis - PERE extrahuje a analyzuje metadata Authenticode přímo ze struktury PE, aniž by se spoléhal na rozhraní Windows API. Rozlišuje tři stavy: unsigned, selfsigned a valid. Binární soubory podepsané důvěryhodnými vydavateli (v současnosti Microsoft, Google a Adobe) se hodnocení zcela vynechávají. Ostatní podepsané binární soubory přidávají k hodnocení 20 bodů; soubory s vlastním podpisem nebo nepodepsané soubory přidávají 40 bodů.

Struktura sekcí - PERE kontroluje jednotlivé sekce PE a hledá několik věcí: nestandardní nebo neplatné názvy sekcí, překryvná data připojená za poslední sekcí (typický indikátor balíčkovacích programů nebo připojeného užitečného obsahu) a známé bajtové podpisy balíčkovacích programů, jako jsou UPX, ASPack nebo Themida.

Entropie - vysoká entropie v souboru nebo jeho sekcích naznačuje komprimovaný nebo šifrovaný obsah. Sekce s entropií ≥ 7,0 jsou označeny jako podezřelé. Volitelný příznak --timestamps povoluje analýzu "časových razítek" - soubory datované více než 3 roky od mediánu skenovaného adresáře jsou považovány za statistické výstřelky a přidávají dalších 20 bodů.


Hodnocení

Konečné skóre je součtem všech detekovaných signálů. Tři úrovně:

ScoreLevel
< 50LOW
50–119MEDIUM
≥ 120HIGH

Žádný jednotlivý signál sám o sobě nestačí k dosažení úrovně VYSOKÁ. Pokud soubor dosáhne skóre VYSOKÁ, je to výsledek více překrývajících se indikátorů – chybějící podpis, importy související s injekcí, sekce s vysokou entropií. Právě taková kombinace odpovídá typickému vzhledu skutečného malwaru.

Proč to není náhrada za EDR

PERE je záměrně jednoduchý. Dělá jedinou věc: rychle prochází adresář a identifikuje soubory, které stojí za bližší prozkoumání. Neprovádí dynamickou analýzu, nesleduje chování za běhu a nedokáže nahlédnout do zamaskovaného kódu, který se rozbalí až v paměti. Pokud binární soubor importuje GetProcAddress a LoadLibraryA a dynamicky řeší své injekční API za běhu, PERE mu nepřidělí vyšší skóre než legitimnímu zavaděči.

To není chyba – je to záměr. Pokud máte podezření, že útočník zanechal někde uvnitř legitimní softwarové instalace škodlivý binární soubor, PERE vám během několika sekund sdělí, které soubory v daném adresáři jsou anomálie. Další postup je standardní: dynamická analýza, telemetrie EDR, sandbox.


Použití

python main.py --path "C:\Program Files\Microsoft\Teams" --extensions exe,dll --timestamps --json --output findings.json

Příkazy jsou jednoduché: --path nastavuje cílový adresář, --extensions filtruje typy souborů (výchozí: exe,dll), --timestamps povoluje hodnocení anomálií časových razítek a --json ukládá výsledky do souboru.

Zdrojový kód je k dispozici na GitHub.