A CoBRA segítségével megkönnyítjük az MBA-tanulás nehézségeit
CYBERSECURITY KIEMELT ELEMZÉS

A CoBRA segítségével megkönnyítjük az MBA-tanulás nehézségeit

FORRÁS

The Trail of Bits Blog

DATE

READ

5 perc olvasás

A CoBRA egy nyílt forráskódú eszköz, amely célja a kevert booles-számítási (MBA) kifejezések egyszerűsítése, amelyek gyakran használatosak a kártékony szoftverek és a szoftvervédelemben. A korábbi módszerekkel …

Mixed Boolean-Arithmetic (MBA) elfedés egyszerű műveletek, mint x + y, mögé rejtve számítási és bitjező operatorok. A rosszindulatú szoftverek és a védelmi eszközök ezt használnak, mivel nincs standard egyszerűsítési technika, amely egyszerre kezelhetné a két területet; az algebrai egyszerűsítők nem értik a bitjező logikát, és a boolean minimalizátorok nem tudnak számításokat kezelni. Nyitott forráskódú CoBRA eszköztocsátunk, amely a vadon megtalálható teljes körű MBA kifejezések egyszerűsítését teszi lehetővé. Fordítsa rá egy elfedett kifejezésre, és visszafér egy egyszerűsített egyenértékű: $ cobra-cli –mba (x&y)+(x|y) x + y $ cobra-cli –mba ((a^b)|(a^c)) + 65469 * ~((a&(b&c))) + 65470 * (a&(b&c)) –bitwidth 16 67 + (a | b | c) A CoBRA 99,86%-ban egyszerűsíti a 73 000+ kifejezést, amelyeket hét független adatbázisból származtatnak. CLI eszközként, C++ könyvtárként és LLVM pass pluginként elérhető. Ha MBA elfedést talál meg a rosszindulatú szoftverek elemzésében, a szoftvervédelmi rendszerek fordításában vagy a VM-alapú elfedő eszközök lebontásában, a CoBRA visszaadja olvasható kifejezéseket. Miért nem működnek a meglévő megközelítések A fő nehézség, hogy az MBA azonosítások ellenőrzése a bit-ek és a számítások kölcsönhatásának megvizsgálását igényli moduláris bevonás mellett, ahol az értékek csendesen áthajlanak és a fix bit-szélességben. Egy olyan azonosítás, mint (x ^ y) + 2 * (x & y) == x + y, pontosan a kölcsönhatás miatt igaz, de az algebrai egyszerűsítők csak a számításokat látják, és a boolean minimalizátorok csak a logikát látják, egyik sem tud egyedül ellenőrizni. Az elfedők rétezzik ezeket a helyettesítéseket, hogy egyszerűbb műveletekkel összetett kifejezéseket hozzanak létre. A korábbi MBA egyszerűsítők bizonyos területeket kezeltek. A SiMBA jól kezeli a lineáris kifejezéseket. A GAMBA kiterjeszti a támogatást a polinom esetekre. Amíg a CoBRA nem érte el a teljes körű MBA kifejezések típusok széles körében magas úspěsności, a biztonsági mérnökök vadon használják. Hogyan működik a CoBRA A CoBRA egy munka lista alapú orchestrátor, amely osztályozza az egyes bemeneti kifejezéseket és kiválasztja a megfelelő egyszerűsítési technikák kombinációját. Az orchestrator 36 diszkrét passzot kezeli, amelyeket négy családba szervez: lineáris, féllineáris, polinom és kevert, és a munkaelemeket a kifejezés szerkezete alapján irányítja. A vadon megtalálható a legtöbb MBA kifejezés lineáris: bitjező kifejezések, mint (x & y), (x | y), és ~x, amelyeket állandóval is szoroznak. Ezen, az orchestrator értékel egy bool-es bemenetet, hogy egy “signature”-t hozzon létre, majd több visszafejtési technikát egymás ellen, és a legolcsóbb, ellenőrzött eredményt választja. Íme, hogy néz ki az (x ^ y) + 2 * (x & y) esetében: CoBRA lineáris egyszerűsítési folyama: (x ^ y) + 2 * (x & y) 1. lépés: Kategóriazás A bemeneti kifejezés azonosított lineáris MBA-ként ↓ 2. lépés: Igazság táblázat Generáljon egy igazság táblázatot a bool-es bemenetekre → [0, 1, 1, 2] igazság táblázat ↓ 3a. lépés: Mintázati megfelelőség 3b. lépés: ANF konverzió Bitjező normális alak 3c. lépés: Interpoláció Oldja meg a alapkoefficienseit ↓ 4. lépés: Versenyt hasonlítjon a kandidát eredmények → Győz: x + y (Legkisebb költség) ↓ 5. lépés: Ellenőrzés Spot-ellenőrizzen 64-bit-es bemenetekkel vagy bizonyítsa Z3 segítségével → Sikeres Amikor megjelennek állandó maskok (pl. x & 0xFF), a kifejezés belép a CoBRA féllineáris pipeline-ba, ahol a legkisebb bitjező blokkokra bontja, rekonstruálja a szerkezeti mintákat, és egy egyszerűsített eredményt a bit-részesített szerelés segítségével rekonstruál. Kifejezések, amelyek bitjező al-kifejezések termekét (pl. (x & y) * (x | y)), egy bontási motor, amely polinom központokat extraktál, és megoldja a maradványokat. A kevert kifejezések, amelyek termeket és bitjező műveleteket kombinálják, gyakran tartalmaznak ismétlődő al-kifejezéseket. Egy “lift” passszal, a termeket, és a belső darabokat oldja meg, majd a kifejezést, amely összekapcsolja őket. Íme, hogy néz ki egy term azaz (x & y) * (x | y) + (x & ~y) * (~x & y) esetében: CoBRA kevert egyszerűsítési folyama: (x & y) * (x | y) + (x & ~y) * (~x & y) 1. lépés: Kategóriazás Az bemenet azonosított kevert MBA-ként ↓ 2. lépés: Bontás Bontsa fel al-kifejezésekre ↓ (x & y) * (x | y) (x & ~y) * (~x & y) ↓ ↓ 3. lépés: Lift & Solve Oldja meg a termeket, megoldja a belső darabokat ↓ 4. lépés: Collapse Identitás Collapse term, megoldja a term → x * y ↓ 5. lépés: Ellenőrzés Spot-ellenőrizzen 64-bit-es bemenetekkel vagy bizonyítsa Z3 segítségével → Sikeres A kifejezés, amelyen átmegy, az végül ugyanaz: CoBRA ellenőrzi minden eredményt, véletlenszerű bemenetekkel, vagy Z3 segítségével bizonyítja. Csak akkor ad vissza egy egyszerűsítést, ha azt igazolták. Mit tudsz vele CoBRA három módban elérhető: CLI eszköz: Bemenet egy kifejezést közvetlenül, és kapja vissza a egyszerűsített formát. Használja a –bitwidth-et a moduláris aritmetikai szélesség beállításához (1-64 bit) és a –verify-t a Z3 egyenértékű bizonyításokhoz. C++ könyvtár: Kössön a CoBRA központi könyvtárához, hogy integrálja a egyszerűsítést a saját eszközökbe. Ha automatizált elemzési pipeline-t épít, akkor a Simplify API bemeneti kifejezést fogad, és egyszerűsített eredményt ad vissza, vagy jelzi, hogy nem támogatott. LLVM pass plugin: Töltse be a libCobraPass.so-t a opt-ba, hogy közvetlenül elfedett MBA mintákat kezeljen LLVM IR-ben. Ha Deobfuscation pipeline-okat épít remill-en, akkor közvetlenül integrálható. Kezel olyan mintákat, amelyek több basic block-on áttermelődnek, és alkalmaz egy költség-kaput, csak akkor, ha a egyszerűsített formát kisebb, és támogatja a LLVM 19-22-et. A CoBRA 73 066 kifejezést tesztelte 7 független adatbázisból. Ezek a teljes körű MBA komplexitást, a két változó lineáris kifejezésektől a mélyen beépített kevert termek egyszerűsítéséig. A 106 nem támogatott kifejezések a kevesebb, ha bitjező és számítási műveletek kölcsönhatást hoznak létre, amelyeket a jelenlegi technikák nem tudnak bontani. A CoBRA ezeket nem támogatottként jelzi, és nem gyanakozik. A teljes benchmark részleteit megtalálja a DATASETS.md fájlban. Mi a következő A CoBRA következő hibái két kategóriába tartoznak: a nagy számú duplázott al-kifejezések, amelyek a munka list-ot is kiürítik, még a lift-vel, valamint a viselő-érzékeny maradványok, ahol a bitjező maskok a termek feletti számításokkal, a bit szintű függőségeket hoznak létre, amelyeket a jelenlegi bontási technikák nem tudják. A szélesebb integrációs lehetőségek mellett, mint a LLVM pass-on, egyben natív pluginokat az IDA Pro-hoz és Binary Ninja-hoz is. A forrás elérhető a GitHub-on az Apache 2.0 licensz alatt. Ha olyan kifejezéseket találsz, amelyeket a CoBRA nem tud egyszerűsíteni, nyiss egy issue-t a repository-n. Szeretnénk a nehezekat.