Az IT-biztonság egy állandó küzdelem a támadók és a védelmezők között. A rosszindulatú szereplők minden eszközt bevetnek annak érdekében, hogy elrejtsék tevékenységüket a kutatók, vírusirtók és egyéb védelmi rendszerek elől. A támadók az elemzést megnehezítő technikák, például az obfuszkáció alkalmazásával próbálják akadályozni a visszafejtést, amely a védelmi oldalon dolgozó kutatók egyik fő eszköze a rosszindulatú kód működésének megértésére. Az obfuszkáció célja, hogy a programkód szándékosan értelmezhetetlenné, zavarossá váljon, miközben a működése változatlan marad. Ez különösen fontos a rosszindulatú kódok esetén, ahol a cél az, hogy a vírusirtók és a kutatók ne tudják gyorsan megérteni a program működését.
Tipikus obfuszkációs technikák:
- Szemétkód (junk code) beszúrása: felesleges utasításokkal töltik fel a kódot.
- Utasításcserék: egyszerű műveletek bonyolultabb, de matematikailag ekvivalens formában jelennek meg (pl. a + b helyett ((a ^ b) + ((a & b) << 1))).
- Irányítási szerkezetek elrejtése (control flow obfuscation): ciklusok, elágazások helyett bonyolult ugrások.
- Opaque predikátumok: logikai kifejezések, amelyek eredménye mindig ugyanaz, de ezt nehéz statikusan bizonyítani.
- Control flow flattening: az egész függvény irányítási szerkezetét átrendezik, „kilapítják”, amely során a szokványos „fa-szerű” vezérlést egyetlen, lapos szerkezetre alakítják, amivel megszüntetik a strukturált, olvasható hiearchiát. Például alapesetben a main() tartalmaz egy if ágat, az egy for ciklust, azon belül egy másik if-et. Ezt cserélik le state állapotokra, pl. elif-ekkel egy while cikluson belül, ami „elnyújtja” a kódot és sokkal nehezebben olvashatóvá teszi azt.
Az obfuszkáció hatékony módszer a kód elemzésének megnehezítésére, de a megfelelő technikák és eszközök birtokában sok esetben hatékonyan visszafejthető. A deobfuszkáció ezen technikák visszafejtését, azaz az értelmezhetőség visszaállítását jelenti. Bár kézzel is elvégezhető, nagyobb binárisok esetén automatikus módszereket alkalmaznak. A cikkben bemutatott módszer az ún. peephole deobfuszkáció, amely kis kódrészletek (1–3 utasítás) elemzésével dolgozik. Nevét a „kulcslyuk-optimalizációból” kapta, ami a fordítókban ismert technika. A peephole deobfuszkáció egyszerű, de jól alkalmazható módszer az alapszintű obfuszkációs minták automatikus felismerésére és lecserélésére. Komplexebb esetekben – például irányítási szerkezet elrejtésénél, a logikai elemzés és a kontextusértés kulcsfontosságú. A Ghidra és más eszközök megfelelő használatával azonban jelentősen gyorsítható a visszafejtési folyamat.
Ez nem csak technikai kihívás, hanem intellektuális párbaj is. A támadó célja, hogy megtévessze a szakértőt, míg az elemző célja az, hogy felfedje az igazságot a kódban elrejtve. Ez a párharc a kiberbiztonság egyik legizgalmasabb és legkreatívabb területe.
Egy aktuális példa: Lumma Stealer
A Lumma Stealer egy modern, aktívan terjesztett adatlopó malware, amely kiemelkedően erős obfuszkációs technikákat használ. Az elemzés során azt vizsgálták, hogyan burkolja be magát védekezési és anti-elemzési rétegekbe, a natív bináris szinttől a magas szintű nyelvi konstrukciókig. Különösen érdekes megoldásokat alkalmaz az API-hívások elrejtésére, az adatszivárogtatás kódjának széttöredezésére, valamint a végrehajtási lánc manipulálására.
A CERT Polska cikke lépésről lépésre bemutatja, hogyan zajlik egy ilyen obfuszkált kód visszafejtése, milyen eszközök és elemzési módszerek segíthetnek a fenyegetés működésének feltárásában és jobb detektálásában.
(cert.pl)