Mi az Obfuscation?
On október 25, 2021 by adminMi a Code Obfuscation?
A Code Obfuscation egy futtatható program olyan módosítása, amely a hacker számára már nem hasznos, de továbbra is teljesen működőképes. Bár a folyamat módosíthatja a tényleges módszerutasításokat vagy metaadatokat, a program kimenetét nem változtatja meg. Tisztázzuk, hogy elegendő idővel és erőfeszítéssel szinte minden kód visszafejthető. Egyes platformokon azonban, mint például a Java, az Android, az iOS vagy a .NET (pl. Xamarin, C#, VB.NET, F#) ingyenes dekompilátorok segítségével gyakorlatilag idő és erőfeszítés nélkül könnyedén visszafejthető a forráskód egy futtatható fájlból vagy könyvtárból. Az automatizált kódelhomályosítás megnehezíti és gazdaságilag kivitelezhetetlenné teszi a program visszafejtését.
Miért használjon kódelhomályosítót?
Az alkalmazás visszafejtésének megnehezítésével védelmet nyújthat az üzleti titok (szellemi tulajdon) ellopása, a jogosulatlan hozzáférés, a licencelés vagy más ellenőrzések megkerülése és a sebezhetőségek felfedezése ellen.
Hogyan működik az elhomályosítás?
A kódelhomályosítás számos különböző technikából áll, amelyek egymást kiegészítve többszintű védelmet hozhatnak létre. A leghatékonyabb olyan nyelvek esetében, amelyek valamilyen középszintű utasítást hoznak létre, mint például a Java vagy a .NET nyelvek, mint a C#, VB.NET, Managed C++, F# stb. Az obfuszkálási és alkalmazásbiztonsági technikák néhány tipikus példája:
Rename Obfuscation
Az átnevezés megváltoztatja a módszerek és változók nevét. A dekompilált forrást nehezebben érthetővé teszi az ember számára, de nem változtatja meg a program végrehajtását. Az új nevek különböző sémákat használhatnak, mint például “a”, “b”, “c”, vagy számokat, nyomtathatatlan karaktereket vagy láthatatlan karaktereket. A nevek pedig túlterhelhetők, amíg különböző hatókörrel rendelkeznek. A névtorzítás egy alapvető átalakítás, amelyet a legtöbb .NET (C# stb.), iOS, Java és Android obfuszkátor használ.
String titkosítás
A kezelt futtatható programban minden karakterlánc egyértelműen felfedezhető és olvasható. Még a metódusok és változók átnevezése esetén is a karakterláncok felhasználhatók a kritikus kódrészletek felkutatására a bináris programon belüli karakterlánc-hivatkozások keresésével. Ez magában foglalja a felhasználó számára megjelenő üzeneteket (különösen a hibaüzeneteket). Az ilyen típusú támadások elleni hatékony védekezés érdekében a karakterlánc-titkosítás elrejti a karakterláncokat a futtatható állományban, és csak szükség esetén állítja vissza eredeti értéküket. A karakterláncok futásidejű visszafejtése általában csekély futásidőbeli teljesítménycsökkenéssel jár.
Control Flow Obfuscation
A vezérlésfolyam-obfuscation olyan feltételes, elágazó és iteratív konstrukciókat szintetizál, amelyek érvényes futtatható logikát eredményeznek, de dekompiláláskor nem determinisztikus szemantikai eredményeket adnak. Egyszerűbben fogalmazva, a dekompilált kódot spagetti logikának tünteti fel, amit egy hacker számára nagyon nehéz megérteni. Ezek a technikák befolyásolhatják a módszer futásidejű teljesítményét.
Instrukcióminták átalakítása
A fordító által létrehozott gyakori utasítások átalakítása más, kevésbé nyilvánvaló konstrukciókká. Ezek teljesen legális gépi nyelvi utasítások, amelyek nem feltétlenül képeznek le tisztán olyan magas szintű nyelvekre, mint a Java vagy a C#. Egy példa erre a tranziens változók gyorsítótárazása, amely kihasználja a Java és a .NET futási rendszerek veremalapú jellegét.
Dummy kód beszúrása
Kód beszúrása a futtatható állományba, amely nem befolyásolja a program logikáját, de megtöri a dekompilátorokat, vagy sokkal nehezebbé teszi a visszafejtett kód elemzését.
Fel nem használt kód és metaadatok eltávolítása
A hibakeresési információk, a nem lényeges metaadatok és a használt kód eltávolítása az alkalmazásokból kisebbé teszi azokat, és csökkenti a támadó számára elérhető információkat. Ez az eljárás némileg javíthatja a futásidejű teljesítményt.
Bináris összekapcsolás/összevonás
Ez az átalakítás több bemeneti futtatható állományt/könyvtárat egy vagy több kimeneti bináris állományban egyesít. Az összekapcsolással kisebbé tehető az alkalmazás, különösen, ha átnevezéssel és metszéssel együtt használják, Egyszerűsítheti a telepítési forgatókönyveket, és csökkentheti a hackerek számára elérhető információkat.
Opaque Predicate Insertion
Elhomályosít olyan feltételes ágak hozzáadásával, amelyek mindig ismert eredményekre értékelődnek ki – olyan eredményekre, amelyeket statikus elemzéssel nem lehet könnyen meghatározni. Ez egy módja a potenciálisan hibás kód bevezetésének, amely valójában soha nem fog végrehajtásra kerülni, de zavaró a támadók számára, akik megpróbálják megérteni a dekompilált kimenetet.
Anti-Tamper
Az obfuszkátor képes az alkalmazás önvédelmét a kódba injektálni, hogy ellenőrizze, hogy az alkalmazást semmilyen módon nem manipulálták. Ha manipulációt észlel, leállíthatja az alkalmazást, korlátozhatja a funkcionalitást, véletlenszerű összeomlásokat idézhet elő (az összeomlás okának álcázása érdekében), vagy bármilyen más egyéni műveletet végezhet. Üzenetet is küldhet egy szolgáltatásnak, hogy részleteket közöljön az észlelt manipulációról.
Anti-Debug
Amikor egy hacker megpróbálja kalózkodni vagy hamisítani az alkalmazást, ellopni az adatokat, vagy megváltoztatni az infrastruktúra egy kritikus fontosságú szoftverének viselkedését, szinte biztosan azzal kezdi, hogy visszafejti az alkalmazást, és hibakeresővel lépked végig rajta. Egy obfuscator képes az alkalmazás önvédelmét olyan kód befecskendezésével beépíteni, amely érzékeli, ha a gyártott alkalmazás egy hibakeresőn belül hajtódik végre. Ha egy hibakeresőt használnak, az megrongálhatja az érzékeny adatokat (megvédve azokat a lopástól), véletlenszerű összeomlásokat idézhet elő (annak álcázására, hogy az összeomlás egy hibakeresési ellenőrzés eredménye), vagy bármilyen más egyéni műveletet végezhet. Ezenkívül üzenetet is küldhet egy szolgáltatásnak, hogy figyelmeztető jelzést adjon.
Tömbösítsem-e az alkalmazásomat?
Keményen fontolja meg az obfuszkáció és a futásidejű alkalmazás önvédelmének alkalmazását, ha olyan szoftvert ad ki, amely nem megbízható környezetben fut, és szellemi tulajdonnal rendelkezik, hozzáférést biztosít érzékeny adatokhoz, vagy korlátozott funkciókkal rendelkezik. Az obfuszkálás sokkal nehezebbé teszi a támadók számára a kód áttekintését és az alkalmazás elemzését. A hackerek számára is megnehezíti az alkalmazás hibakeresését és meghamisítását. A végső cél egy olyan védelmi réteg hozzáadása, amely diffizívvá teszi hasznos információk, például üzleti titkok (IP), hitelesítő adatok vagy biztonsági rések kinyerését vagy felfedezését az alkalmazásból. Emellett meg kell nehezítenie az alkalmazás logikájának módosítását vagy az alkalmazás rosszindulatú kóddal való átcsomagolását.
Vélemény, hozzászólás?