Regisztráció és bejelentkezés

Android applikációk dinamikus elemzése új megközelítésben

Az Android applikációk feketedoboz-jellegű biztonsági felmérése az applikációk olyan szegmenseinek behatárolását igényli, amelyek biztonsági szempontból relevánsak. Ez általában sok erőfeszítést és hiba-generálásos próbálkozást igényel, ezáltal történhet a titkosítási rutinok, jelszó-ellenőrzési modulok, rooting-detection modulok stb. lokalizációja. Dolgozatomban szeretnék egy új, széles körben alkalmazható megoldást bemutatni, amely segít megoldást találni erre a problémára, valamint az ezen a módszeren alapuló deLogger nevű eszközt prezentálni, mely a telefonon található System-log-ban jelzi az applikáció minden egyes függvényhívását, ezáltal lehetővé téve a szakember számára azt, hogy gyorsan azonosítsa ezek releváns részét.

Az általam alkalmazott módszer az applikáció smali kód (Dalvik bytekód) szintjén való módosításán alapszik, melynek segítségével a tesztet végző személy nyomon követheti az applikáció belső működését, miközben olyan műveleteket végeztet a telefonnal, mint például enkriptálás, jelszókezelés, tanúsítvány ellenőrzés. Az eszközhöz tartozik egy feldolgozó egység is, amely megkönnyíti a log-ok feldolgozását és a kapcsolódó dekompilált Java vagy smali kód vizsgálatát.

A téma relevanciáját növeli, hogy manapság biztonsági szakemberek és malware elemzők rengeteg időt töltenek obfuszkált kódok analizálásával, miközben azt próbálják lokalizálni, mely kódrészek végeznek el olyan feladatokat, mint az autentikáció, kriptográfia. Az elkészült eszköz a gyakorlatban is tesztelésre került, segített felgyorsítani egy MDM rendszer, egy magát biztonságosnak hirdető VoIP megoldás, valamint számos kisebb applikáció tesztjét.

Továbbá szeretném bemutatni azon megoldásokat, amelyek jelenleg elérhetőek ilyen tesztek végzésére, és ezek kontrasztjában vizsgálni az általam bemutatott megoldást. Ezek a következők: 1) A Java Debugger: a legnagyobb probléma a JDB használatával, hogy ha az ember nem tudja, hogy pontosan hol kell keresnie azt, amit keres, akkor komoly nehézségekbe ütközik, míg sikerül lokalizálni a keresett részt. Ezen felül sajnos meglehetősen sűrűn lefagy, valamint nem rendelkezik sem bash complete sem history szolgáltatásokkal, amelyek megkönnyíthetnék a munkát. 2) Java-ba történő dekompilálás: a grandiózusabb applikációk és a gyakran obfuszkált kód megnehezíti ezen módszer alkalmazását. Emellett a dekompilálás gyakran hiányos Java kódot eredményez. 3) Dalvik bytekódba történő dekompilálás: habár a hiányos kód problémáját megoldja ez a módszer, az ezért fizetet ár azonban egy nehezen olvasható bytekód. Továbbá Ilyen formában csak statikus elemzés végezhető. 4) A számos API hook módszert alkalmazó eszköz használata: ezen módszer legnagyobb hátulütője, hogy bár az API hívás tényéről tájékozódunk, annak helyéről gyakran nem, illetve számos érdekes esemény az applikáció belsejében történik, amiről így semmit nem tudunk meg.

Az itt leírt új módszer egy kevésbé nehézkes utat kínál ezen a területen. Alapja az applikáció bytekód szintű átalakítása. Bár ez az alapgondolat nem új, de szemben az eddigi megvalósításokkal, itt az alkalmazás minden osztályának minden függvénye úgy lesz átalakítva, hogy indulásának és befejezésének tényéről log készüljön. Ez így szerzet log segítségével a belső működés könnyen követhető válik. Ehhez az Android Log API könyvtárát használtam.

Az eszköz használatának a következő előnyei vannak a jelenlegi megoldásokhoz képest: 1) lehetőséget biztosít egy teljes dinamikus analízisre, ezzel megkönnyítve a belső működés megértését; 2) mivel nem csupán listázott API hívások kerülnek monitorozásra, ezért semmilyen potenciálisan fontos elem nem marad ki; 3) az alkalmazás módosítása és újra kompilálása teljesen automata. Ezen felül az eszközhöz készült script segítségével egy könnyen olvasható HTML lap készül a függvény hívások struktúrájáról. Ezen két eszköz kombinációja az egyébként időigényes és fárasztó kutatást két terminál parancsra redukálja.

szerző

  • Köpenczei Gergő
    mérnökinformatikus
    nappali

konzulens

  • Dr. Buttyán Levente
    egyetemi tanár, Hálózati Rendszerek és Szolgáltatások Tanszék

helyezés

I. helyezett