Naučite kako da zaštitite svoje aplikacije od potencijalnih hakera i zlonamernika. Iako proces obrnutog inženjeringa i neovlašćene promene koda prete svakoj mobilnoj aplikaciji, mnoge primenjuju samo osnovne tehnike ojačavanja koda (ili ih uopšte ne koriste!) da bi se odbranile od takvih napada. Zapravo, istraživanje je pokazalo da polovina vodećih svetskih aplikacija za finansijske usluge na Android tržištu ne koristi odgovarajuće tehnike zaštite, kao što je maskiranje (engl. obfuscation ) koda i podataka. Maskiranje je metoda koju koriste Android programeri da bi zaštitili svoje aplikacije od obrnutog inženjeringa i pokušaja neovlašćene izmene koda sakrivanjem izvornog koda i podataka. Bez tog nivoa zaštite, zlonamerni akteri lako mogu da proniknu u unutrašnje funkcionisanje aplikacije. To može da dovede do krađe intelektualne svojine, distribucije klonova aplikacija, izdvajanja osetljivih podataka, gubitka prihoda i mnogobrojnih neprijatnih situacija.
Hajde da pogledamo zašto programeri mobilnih aplikacija treba da razmisle o korišćenju maskiranja koda što bi efikasno ojačalo i obezbedilo njihove aplikacija. Prikazaćemo i različite nivoe maskiranja i razmotriti zbog čega programeri moraju da koriste nekoliko naprednih tehnika kako bi adekvatno zaštitili svoje aplikacije od statičkih i dinamičkih napada.
Šta je maskiranje koda i podataka?
Maskiranje koda i podataka oblik je ojačavanja koda koje otežava dekompajliranje aplikacije tako što onemogućava ljudima i mašinama da razumeju njen izvorni kôd. Kada je neovlašćenim trećim stranama teže da steknu uvid u unutrašnje funkcionisanje aplikacije, manje je mogućnosti za zlonamerne aktere da zloupotrebe aplikaciju tako što će ukrasti informacije iz aplikacije, kao što su IP ili osetljivi podaci. Maskiranjem se menja kôd i njegovi podaci pri čemu se ne menja ponašanje aplikacije ili korisničko iskustvo. Proces maskiranja se kreće od preimenovanja klasa ili metoda do transformacije aritmetike ili modifikovanja kontrole toka aplikacije ili šifrovanja podataka aplikacije. Navešćemo neke od najčešćih tehnika maskiranja:
Identifikatori: Preimenovanje klasa, metoda, promenljivih ili biblioteka, neke su od tehnika. Programeri imaju tendenciju da biraju smislena imena kako bi njihov kôd bio čitljiviji i da bi im to omogućilo lakše otklanjanje grešaka u aplikacijama. Zamenom identifikatora besmislenim karakterima može da oteža razumevanje koda. Međutim, treba napomenuti da ta vrsta maskiranja sama po sebi nije dovoljna. Zlonamerni akteri i dalje mogu da razumeju semantiku aplikacije pomoću kontrole ili protoka podataka ili kroz vidljive interakcije sa operativnim sistemom, a ne kroz smislene identifikatore. Osim toga, identifikatori iz spoljnih izvora ne mogu se menjati.
Kontrola toka programa: Menjanje strukture koda aplikacije, maskiranje kontrole toka programa postiže se preuređivanjem redova koda, poravnavanjem funkcija, zamenom obrazaca koda, ubacivanjem mrtvog koda itd. Te transformacije povećavaju složenost same logike čineći kôd toliko nepredvidljivim da ga čak ni dekompajleri ne mogu raščlaniti.
Podaci: Šifrovanje stringova i drugih podataka unutar izvornog koda. Mobilne aplikacije sadrže osetljive informacije, kao što su API ključevi, lozinke za baze podataka ili snažno kodirani tajni ključevi. Šifriranjem tih podataka i sakrivanjem povezanih tokova podataka – to jest, kada aplikacija koristi te podatke – programeri aplikacija mogu da zaštite te podatke čak iako zlonamerni akteri uspešno preokrenu velike delove izvornog koda.
Ovo su samo tri tehnike maskiranja koda i podataka koje mogu pomoći u zaštiti vaše mobilne aplikacije od zlonamernih aktera. Da biste maksimalno ojačali zaštitu od dekompajlera ili disemblera, najbolje je da primenite više naprednih tehnika, kao što su maskiranje kontrole toka programa i šifrovanje.
Kako maskiranje sprečava bezbednosne rizike
Dekompajleri i disembleri se često koriste da bi zlonamernim akterima olakšali razumevanje funkcionisanja aplikacije. Čak iako nije moguće stvoriti tačnu repliku originalnog izvornog koda jer se tokom kompilacije u izvršnu aplikaciju gubi mnogo informacija, dekompajleri ili disembleri proizvode neku vrstu izvornog koda, odnosno pseudokoda, koji ljudi lakše čitaju i razumeju nego kôd koji izvršava mašina. Pseudokod aplikacije može da pruži obilje informacija zlonamernim akterima. Čim se upoznaju sa unutrašnjom logikom mobilne aplikacije, mogu da manipulišu njenom funkcionalnošću koja potencijalno može da dovede do krađe intelektualne svojine i gubitka prihoda. Te vrste obrnutog inženjeringa i pokušaja obavljanja neovlašćenih promena – poznati kao napadi statičke analize – zavise od otkrivanja logike aplikacije. Zato stručnjaci preporučuju maskiranje kao sigurni postupak kodiranja koji svaki programer mobilnih aplikacija treba da primeni pri kreiranju aplikacija koje rukuju osetljivim podacima i/ili funkcionalnostima.
Pomoću maskiranja Android programeri mogu da otežaju zlonamernim akterima razumevanje koda mobilne aplikacije čak iako koriste najsavremenije alate za statičku analizu. Da bi se to postiglo, nije dovoljno da se koristi samo jednostavno maskiranje naziva, već je potrebno koristiti napredne tehnike maskiranja koje menjaju logički tok aplikacije i uključuju dodatne slojeve šifrovanja. Ako se na vreme uoči potreba za maskiranjem i korišćenjem bezbednosnih mera sprovedenih u mobilnoj aplikaciji, poboljšava se bezbednosni status same aplikacije. Ako se ta potreba uoči na vreme, neprekidno testiranje bezbednosti mobilnih aplikacija tokom procesa razvoja, pronalaženje problema i njihovo brzo rešavanje najvažniji su koraci.
Što više tehnika maskiranja koristite, vaša aplikacija će biti bolje zaštićena od napada obrnutog inženjeringa jer svaki sloj dodatno otežava razumevanje koda i ljudima i automatizovanim alatima. Pošto tipičan napad često prevazilazi statičku analizu, programeri bi takođe trebalo da razmotre primenu samozaštite aplikacija za vreme izvođenja (engl. runtime application self-protection – RASP ) kako bi zaštitili svoje aplikacije i od dinamičkih napada. Implementacije RASP -a otkrivaju sumnjivo ponašanje i odgovaraju unapred programiranim radnjama za zaustavljanje pretnji tokom izvođenja.
Programeri mobilnih aplikaciju moraju da maskiraju svoj kôd
Android programeri bi trebalo da primene bezbednosne mere kako bi zaštitili svoje aplikacije od obrnutog inženjeringa, nedozvoljene promene koda ili drugih napada. Slojevit pristup mobilnoj bezbednosti, uključujući maskiranje koda, izuzetno je važan za očuvanje integriteta vaše Android aplikacije, zaštitu vaših podataka i očuvanje ugleda vašeg preduzeća. Program DexGuard kompanije Guardsquare pruža više slojeva ojačavanja koda i RASP -a. To znači da Android programeri mogu da zaštite svoje aplikacije i od statičkih i od dinamičkih napada. DexGuard -ove bezbednosne mere se takođe primenjuju polimorfno, što znači da se aplikacija različito maskira tokom svake nove verzije. Ojačavanje aplikacija koje se vremenom razvija je najbolji način da ostanete ispred zlonamernih aktera i zaštitite svoje Android aplikacije.
Osim toga, program AppSweep iste kompanije omogućava Android programerima da kontinuirano testiraju bezbednost svojih aplikacija dok ih razvijaju i pruža korisne uvide u rešavanje problema u kodu. Kombinovanjem bezbednosnog testiranja sa tehnikama ojačavanja koda i RASP merama obezbeđuje se sveobuhvatna zaštita mobilnih aplikacija.