SlideShare a Scribd company logo
REVERZNI
INŽENJERING
ANDROID
APLIKACIJA
Dinko Korunić @ InfoMAR
Previše informacija!
Dinko Korunić: Reverzni inženjering Android aplikacija
Što čini Android platformu
 Application framework:
◦ modularnost, komponentni dizajn, laka
izmjena i/ili nadogradnja komponenti
◦ Views (gradivne jedinice tipa text-boxevi I
sl.), Content Providers (pristup
informacijama i dijeljenje istih), Resource
Manager (pristup datotekama koje nisu
dio koda projekta tipa layouti i sl.),
Notification Manager (notifikacije na
status baru), Activity Manager
(navigacija aplikacije i životni ciklus
aplikacije) Dinko Korunić: Reverzni inženjering Android aplikacija
Što čini Android platformu (2)
 Dalvik VM
 Linux kernel 2.6!
 Web preglednik – WebKit
 grafički custom 2D i 3D (OpenGL ES)
podsustav
 SQLite za spremište
 multimedija (MPEG4, H.264, MP3,
AAC, AMR, JPG, PNG, GIF)
 GSM, Bluetooth, EDGE, 3G, WiFi
Dinko Korunić: Reverzni inženjering Android aplikacija
Što čini Android platformu (3)
 kamera, GPS, kompas,
akcelerometar
 IDE, alati za debugiranje, profiliranje,
emulator (Qemu)
 dodaci za Eclipse, Netbeans
 CLI alati: adb, fastboot, zipalign, itd.
 niz gotovih Google aplikacija (Gapps)
u svakoj standardnoj instalaciji
Dinko Korunić: Reverzni inženjering Android aplikacija
Android arhitektura
Dinko Korunić: Reverzni inženjering Android aplikacija
Biblioteke
 Java classlib:
◦ Apache Harmony
◦ clean-room implementacija
 System C lib / libc:
◦ Bionic
◦ BSD derivat (dlmalloc, itd.)
◦ Glibc prevelik, uClibc ima LGPL “problem”
◦ nije POSIX compliant!
◦ vrlo lagan i optimiziran za ARM i x86
◦ djelomična / nepotpuna multicore podrška
Dinko Korunić: Reverzni inženjering Android aplikacija
Biblioteke (2)
 System C lib / libc:
◦ nešto Linux kernel headera zbog ioctl-ova
◦ nema C++ exceptiona, nema STL
◦ poseban libpthread (kernel futexi!)
◦ nema passwd i groups datoteke
◦ UID/GID >10000 za svaku pojedinu
aplikaciju, <10000 su sistemski servisi
◦ properties kao globalni key/value store
umjesto environment varijabli
◦ poseban DNS resolver (nema NSS, npr.)
Dinko Korunić: Reverzni inženjering Android aplikacija
Biblioteke (3)
 Media libs:
◦ PacketVideo OpenCORE
◦ različiti audio/video formati, statičke
datoteke, itd.
 LibWebCore:
◦ WebKit baziran WebView i preglednik
 ostalo:
◦ SGL, OpenGL ES
◦ FreeType, SQLite
Dinko Korunić: Reverzni inženjering Android aplikacija
Dalvik VM
 process VM
◦ instancira i gasi se sa aplikacijom
 register-based VM
 aplikacije
◦ u Dalvik EXecutable .dex obliku
◦ optimizirano za mali prostor i spori CPU
 dx alat:
◦ prevodi iz Java u .dex format (kompresija,
4-bajtno poravnanje + Dalvik bytecode)
◦ više klasa u jednoj .dex datoteci
Dinko Korunić: Reverzni inženjering Android aplikacija
Dalvik VM (2)
 16-bitni instrukcijski set i radi
isključivo na lokalnim varijablama
 varijable – 4-bitni virtualni registar
 JIT – od 2.2 Androida naviše
 VM ne odlučuje o sigurnosti već samo
OS, jedino provjerava bytecode radi
optimizacija
 Gabor Paller: Understanding the
Dalvik bytecode with the Dedexer
tool: http://goo.gl/ck16Dinko Korunić: Reverzni inženjering Android aplikacija
Dalvik VM (3)
Dinko Korunić: Reverzni inženjering Android aplikacija
Android aplikacije
 SDK – Java kao frontend
 NDK – C/C++ & Bionic
 sastoje se od kompiliranog koda i
resursa
 komponente:
◦ komuniciraju kroz Intentove
◦ Activity, Broadcast Receiver, Service,
Content Provider
 Reference Monitor – MAC enforce
◦ komponente imaju različite dozvoleDinko Korunić: Reverzni inženjering Android aplikacija
Android aplikacije (2)
 komunikacija
◦ aplikacija provjerava listu dozvola za
odredište
◦ među komponentama ili broadcast
(globalno slanje poruke) koju framework
prenosi prema pojedinoj komponenti
◦ ovisno o akciji sistem poziva pojedine
komponente za izvršenje
 AndroidManifest.xml
◦ razvijatelj: Permission, Intent-Filters
◦ za PackageManager i ActivityManagerDinko Korunić: Reverzni inženjering Android aplikacija
Sigurnosni model
 jedinstveni UID i GID za svaku
aplikaciju prilikom instalacije
 dozvole kroz korisnikovu ručnu
potvrdu ili negaciju (ili sve ili ništa)
 Linux Process Sandbox – po
aplikaciji
 multi-process system
 dijeljenje informacija / komunikacija –
jedino kroz interakciju komponenti
odnosno Intentove (asinkroni IPC)Dinko Korunić: Reverzni inženjering Android aplikacija
Sigurnosni model (2)
 nema pristupa datotekama između
aplikacija (osim za specifične ovlasti)
 potpisane developerovim ključem,
nažalost može biti self-signed 
 dozvole se provjeravaju tijekom:
◦ sistemskih poziva
◦ početka aktivnosti (Activity)
◦ upravljanjem javne objave (Broadcast)
◦ povezivanjem ili startanjem servisa
◦ pristupanja/korištenja Content Providera
Dinko Korunić: Reverzni inženjering Android aplikacija
Zaštitni nivoi dozvola
 Normal
◦ VIBRATE
◦ SET_ALARM
 Dangerous
◦ SEND_SMS
◦ CALL_PHONE
 Signature
◦ FORCE_STOP_PACKAGES
◦ INJECT_EVENTS
 SignatureOrSystem
◦ ACCESS_USB
◦ SET_TIME
Dinko Korunić: Reverzni inženjering
Android aplikacija
Potencijalni problemi
 Activity
◦ problem sa “zlim” podacima iz Intentova
◦ sa predavanjem osjetljivih podataka
 Intent Filter
◦ nije sigurnosna granica - problem izvora
◦ nužna je ručna validacija ulaza
◦ kategorije sužuju skup za dostavu,
međutim ne garantiraju sigurnost
 Pending Intents
◦ kasnije izvršavanje pod originalnim ID-jem
Dinko Korunić: Reverzni inženjering Android aplikacija
Potencijalni problemi (2)
 aplikacije
◦ self-signed, ne koristi se PKI/CA
◦ ne postoji samoprovjera potpisa 
◦ aplikacije “rade” i prepakirane,
modificirane, potpisane testnim ključevima
◦ problem crnih izvorišta: Applanet,
Mobilism, BlackMart, SnappzMarket,
ApkTor
◦ Google nema automatizirani malware
scan svih uploadanih aplikacija 
 kao i uvijek... PEBKAC!Dinko Korunić: Reverzni inženjering Android aplikacija
Potencijalni problemi (3)
 nužnost ručnih provjera IPC-a
 razno:
◦ curenje osjetljivih informacija u log ring
◦ curenje informacija kroz IPC i
broadcastove
 VFAT
◦ vanjsko spremište
◦ nema pristupne kontrole
◦ osjetljivi podaci iz aplikacija bi se morali
kriptirati
Dinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Dex2Jar
 koristi se sa Java decompilerom
poput JD-Core/JD-GUI/JD-Eclipse
 translacija iz dex u jar
(http://goo.gl/Qd4MZ), optimizacija,
prikaz
 trivijalni dolazak do praktički izvornog
koda aplikacije, malwarea, itd.
 što sa modifikacijama, editiranjem,
repakiranjem?
Dinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Dex2Jar (2)
Dinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Apktool
 praktički standard.. za krekanje 
 nadogradnja na smali/baksmali
 deodex
◦ micanje BOOTCLASSPATH ovisnosti o
specifičnom uređaju
 dekodiranje i deodex, ponovna
izgradnja / pakiranje, debuggiranje
koda, očuvanje strukture, izmjena
koda i resursa, korištenje frameworka
 debug + povezivanje sa DDMSDinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Apktool (2)
Dinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Androguard
 švicarski nož za rev engineering:
◦ interaktivna analiza class, dex, apk, jar i
axml datoteka – dakle koda i resursa
◦ direktno manipuliranje iz interaktivnog
shella
◦ usporedba sličnosti/diff, izračun potpisa,
mjerenje rizika, vizualizacija, ...
 jednostavan i brz, radi iz prompta,
nema GUI
 daleko najpotpuniji alat za analizu
Dinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Androguard (2)
Dinko Korunić: Reverzni inženjering Android aplikacija
Statička analiza: Androguard (3)
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: Atrace
 potencijalno koristan ali nedovršen
projekt
 omogućava syscall trace kroz
posebno patchirani Android
emulator/Qemu
 općenito praćenje ponašanja
aplikacije, nema filtera,
poluupotrebljivo
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: Atrace (2)
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: TaintDroid
 projekt: http://goo.gl/TDLe9
 praćenje ponašanja aplikacija
(curenje informacija i sl.) u realnom
vremenu
 komunikacija dobiva oznake (taint
marking) i prati se kroz aplikaciju te
između aplikacija na razini varijabli,
metoda, poruka i datoteka
 praćenje na razini instrukcija
 platforme: emulator i NexusOneDinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: TaintDroid(2)
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: DroidBox
 port TaintDroid platforme na emulator
 sandbox za testiranje i analizu
individualnih aplikacija
 promatranje ponašanja malwarea
 dodaci:
◦ sandboxing, automatizacija, vizualizacija,
logging i log collector
 bitno za normalan rad!
◦ setprop dalvik.vm.execution-mode
int:portable Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: DroidBox (2)
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: DroidBox (3)
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: DroidBox (4)
Dinko Korunić: Reverzni inženjering Android aplikacija
Dinamička analiza: DroidBox (5)
Dinko Korunić: Reverzni inženjering Android aplikacija
Kraj
 zahvale, pozdravi, pitanja, diskusija
 kontakt: dinko.korunic@infomar.hr
 hvala na pažnji!
Dinko Korunić: Reverzni inženjering Android aplikacija

More Related Content

Similar to FSEC2011: Reverzni inzenjering Android aplikacija

Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...
Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...
Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...
Five
 
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan VučakJavantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Sigurnost-na-Internetu-III
Sigurnost-na-Internetu-IIISigurnost-na-Internetu-III
Sigurnost-na-Internetu-IIIDinko Korunic
 
Upravljanje pristupom uz Azure AD B2C_IvanMarkovic
Upravljanje pristupom uz Azure AD B2C_IvanMarkovicUpravljanje pristupom uz Azure AD B2C_IvanMarkovic
Upravljanje pristupom uz Azure AD B2C_IvanMarkovicIvan Marković
 
Dizajn Softvera.pptx
Dizajn Softvera.pptxDizajn Softvera.pptx
Dizajn Softvera.pptx
BojanGrujic4
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
Stipe Predanic
 
Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013 Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013 Damir Delija
 
Azoo Zagreb: Otvoreni i besplatni alati 07-2010
Azoo Zagreb: Otvoreni i besplatni alati 07-2010Azoo Zagreb: Otvoreni i besplatni alati 07-2010
Azoo Zagreb: Otvoreni i besplatni alati 07-2010Jasmin Klindžić
 
Razvoj Aplikacija Za Mobilne Telefone
Razvoj Aplikacija Za Mobilne TelefoneRazvoj Aplikacija Za Mobilne Telefone
Razvoj Aplikacija Za Mobilne Telefone
carr
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloud
Dubravko Marak
 
Razvoj Softvera Za Android Os
Razvoj Softvera Za Android OsRazvoj Softvera Za Android Os
Razvoj Softvera Za Android Os
Viktor Brešan
 
Mobilni odjel - workflow
Mobilni odjel - workflowMobilni odjel - workflow
Mobilni odjel - workflow
paki_zg
 
Windows7 - Računalo u školi XIII
Windows7 - Računalo u školi XIIIWindows7 - Računalo u školi XIII
Windows7 - Računalo u školi XIII
Lidija Kralj
 
Sve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištu
Sve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištuSve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištu
Sve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištu
carr
 
Mobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podatakaMobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podataka
Slaven Brumec
 

Similar to FSEC2011: Reverzni inzenjering Android aplikacija (20)

Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...
Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...
Razvoj aplikacija za Google Chromecast - Branimir Conjar, Matija Kovačić, Kre...
 
androidsecmodel
androidsecmodelandroidsecmodel
androidsecmodel
 
JavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad PečanacJavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad Pečanac
 
androidsecmodel
androidsecmodelandroidsecmodel
androidsecmodel
 
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan VučakJavantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
 
Sigurnost-na-Internetu-III
Sigurnost-na-Internetu-IIISigurnost-na-Internetu-III
Sigurnost-na-Internetu-III
 
Upravljanje pristupom uz Azure AD B2C_IvanMarkovic
Upravljanje pristupom uz Azure AD B2C_IvanMarkovicUpravljanje pristupom uz Azure AD B2C_IvanMarkovic
Upravljanje pristupom uz Azure AD B2C_IvanMarkovic
 
Dizajn Softvera.pptx
Dizajn Softvera.pptxDizajn Softvera.pptx
Dizajn Softvera.pptx
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
 
Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013 Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013
 
Azoo Zagreb: Otvoreni i besplatni alati 07-2010
Azoo Zagreb: Otvoreni i besplatni alati 07-2010Azoo Zagreb: Otvoreni i besplatni alati 07-2010
Azoo Zagreb: Otvoreni i besplatni alati 07-2010
 
Razvoj Aplikacija Za Mobilne Telefone
Razvoj Aplikacija Za Mobilne TelefoneRazvoj Aplikacija Za Mobilne Telefone
Razvoj Aplikacija Za Mobilne Telefone
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloud
 
Razvoj Softvera Za Android Os
Razvoj Softvera Za Android OsRazvoj Softvera Za Android Os
Razvoj Softvera Za Android Os
 
Mobilni odjel - workflow
Mobilni odjel - workflowMobilni odjel - workflow
Mobilni odjel - workflow
 
JavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
JavaCro'15 - WebRTC in PBZ video chat - Zoran PerakJavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
JavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
 
Windows7 - Računalo u školi XIII
Windows7 - Računalo u školi XIIIWindows7 - Računalo u školi XIII
Windows7 - Računalo u školi XIII
 
Sve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištu
Sve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištuSve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištu
Sve potrebne tehnologije za uspješno pokretanje servisa na mobilnom tržištu
 
Windows 7
Windows 7Windows 7
Windows 7
 
Mobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podatakaMobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podataka
 

More from Dinko Korunic

CARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaCARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaDinko Korunic
 
VSS2014-kriminalitet
VSS2014-kriminalitetVSS2014-kriminalitet
VSS2014-kriminalitetDinko Korunic
 
VSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminalitetaVSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminaliteta
Dinko Korunic
 
ITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenjaITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenja
Dinko Korunic
 
DORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash RecoveryDORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash Recovery
Dinko Korunic
 
DORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux clusterDORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux cluster
Dinko Korunic
 
CUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustaviCUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustavi
Dinko Korunic
 

More from Dinko Korunic (19)

Tru64-Mreza
Tru64-MrezaTru64-Mreza
Tru64-Mreza
 
Tru64-Performanse
Tru64-PerformanseTru64-Performanse
Tru64-Performanse
 
Tru64-Alati
Tru64-AlatiTru64-Alati
Tru64-Alati
 
T-Mobile-DNS
T-Mobile-DNST-Mobile-DNS
T-Mobile-DNS
 
ITshowoff-Dinko
ITshowoff-DinkoITshowoff-Dinko
ITshowoff-Dinko
 
CARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-RadionicaCARNet-SNMP-ZenOSS-Radionica
CARNet-SNMP-ZenOSS-Radionica
 
DORS2010-Dinko
DORS2010-DinkoDORS2010-Dinko
DORS2010-Dinko
 
CUC2011-Dinko
CUC2011-DinkoCUC2011-Dinko
CUC2011-Dinko
 
CUC2010-Dinko
CUC2010-DinkoCUC2010-Dinko
CUC2010-Dinko
 
FSEC2011-Dinko
FSEC2011-DinkoFSEC2011-Dinko
FSEC2011-Dinko
 
DORS2011-Dinko
DORS2011-DinkoDORS2011-Dinko
DORS2011-Dinko
 
VSS2014-kriminalitet
VSS2014-kriminalitetVSS2014-kriminalitet
VSS2014-kriminalitet
 
MTA-testiranje
MTA-testiranjeMTA-testiranje
MTA-testiranje
 
DNS-prirucnik
DNS-prirucnikDNS-prirucnik
DNS-prirucnik
 
VSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminalitetaVSS predavanje: Oblici racunalnog kriminaliteta
VSS predavanje: Oblici racunalnog kriminaliteta
 
ITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenjaITshowoff Zagreb: Skalabilna web rjesenja
ITshowoff Zagreb: Skalabilna web rjesenja
 
DORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash RecoveryDORS2011: MySQL Crash Recovery
DORS2011: MySQL Crash Recovery
 
DORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux clusterDORS2010: Vijetnamski Linux cluster
DORS2010: Vijetnamski Linux cluster
 
CUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustaviCUC2010: Linux datotecni sustavi
CUC2010: Linux datotecni sustavi
 

FSEC2011: Reverzni inzenjering Android aplikacija

  • 2. Previše informacija! Dinko Korunić: Reverzni inženjering Android aplikacija
  • 3. Što čini Android platformu  Application framework: ◦ modularnost, komponentni dizajn, laka izmjena i/ili nadogradnja komponenti ◦ Views (gradivne jedinice tipa text-boxevi I sl.), Content Providers (pristup informacijama i dijeljenje istih), Resource Manager (pristup datotekama koje nisu dio koda projekta tipa layouti i sl.), Notification Manager (notifikacije na status baru), Activity Manager (navigacija aplikacije i životni ciklus aplikacije) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 4. Što čini Android platformu (2)  Dalvik VM  Linux kernel 2.6!  Web preglednik – WebKit  grafički custom 2D i 3D (OpenGL ES) podsustav  SQLite za spremište  multimedija (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)  GSM, Bluetooth, EDGE, 3G, WiFi Dinko Korunić: Reverzni inženjering Android aplikacija
  • 5. Što čini Android platformu (3)  kamera, GPS, kompas, akcelerometar  IDE, alati za debugiranje, profiliranje, emulator (Qemu)  dodaci za Eclipse, Netbeans  CLI alati: adb, fastboot, zipalign, itd.  niz gotovih Google aplikacija (Gapps) u svakoj standardnoj instalaciji Dinko Korunić: Reverzni inženjering Android aplikacija
  • 6. Android arhitektura Dinko Korunić: Reverzni inženjering Android aplikacija
  • 7. Biblioteke  Java classlib: ◦ Apache Harmony ◦ clean-room implementacija  System C lib / libc: ◦ Bionic ◦ BSD derivat (dlmalloc, itd.) ◦ Glibc prevelik, uClibc ima LGPL “problem” ◦ nije POSIX compliant! ◦ vrlo lagan i optimiziran za ARM i x86 ◦ djelomična / nepotpuna multicore podrška Dinko Korunić: Reverzni inženjering Android aplikacija
  • 8. Biblioteke (2)  System C lib / libc: ◦ nešto Linux kernel headera zbog ioctl-ova ◦ nema C++ exceptiona, nema STL ◦ poseban libpthread (kernel futexi!) ◦ nema passwd i groups datoteke ◦ UID/GID >10000 za svaku pojedinu aplikaciju, <10000 su sistemski servisi ◦ properties kao globalni key/value store umjesto environment varijabli ◦ poseban DNS resolver (nema NSS, npr.) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 9. Biblioteke (3)  Media libs: ◦ PacketVideo OpenCORE ◦ različiti audio/video formati, statičke datoteke, itd.  LibWebCore: ◦ WebKit baziran WebView i preglednik  ostalo: ◦ SGL, OpenGL ES ◦ FreeType, SQLite Dinko Korunić: Reverzni inženjering Android aplikacija
  • 10. Dalvik VM  process VM ◦ instancira i gasi se sa aplikacijom  register-based VM  aplikacije ◦ u Dalvik EXecutable .dex obliku ◦ optimizirano za mali prostor i spori CPU  dx alat: ◦ prevodi iz Java u .dex format (kompresija, 4-bajtno poravnanje + Dalvik bytecode) ◦ više klasa u jednoj .dex datoteci Dinko Korunić: Reverzni inženjering Android aplikacija
  • 11. Dalvik VM (2)  16-bitni instrukcijski set i radi isključivo na lokalnim varijablama  varijable – 4-bitni virtualni registar  JIT – od 2.2 Androida naviše  VM ne odlučuje o sigurnosti već samo OS, jedino provjerava bytecode radi optimizacija  Gabor Paller: Understanding the Dalvik bytecode with the Dedexer tool: http://goo.gl/ck16Dinko Korunić: Reverzni inženjering Android aplikacija
  • 12. Dalvik VM (3) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 13. Android aplikacije  SDK – Java kao frontend  NDK – C/C++ & Bionic  sastoje se od kompiliranog koda i resursa  komponente: ◦ komuniciraju kroz Intentove ◦ Activity, Broadcast Receiver, Service, Content Provider  Reference Monitor – MAC enforce ◦ komponente imaju različite dozvoleDinko Korunić: Reverzni inženjering Android aplikacija
  • 14. Android aplikacije (2)  komunikacija ◦ aplikacija provjerava listu dozvola za odredište ◦ među komponentama ili broadcast (globalno slanje poruke) koju framework prenosi prema pojedinoj komponenti ◦ ovisno o akciji sistem poziva pojedine komponente za izvršenje  AndroidManifest.xml ◦ razvijatelj: Permission, Intent-Filters ◦ za PackageManager i ActivityManagerDinko Korunić: Reverzni inženjering Android aplikacija
  • 15. Sigurnosni model  jedinstveni UID i GID za svaku aplikaciju prilikom instalacije  dozvole kroz korisnikovu ručnu potvrdu ili negaciju (ili sve ili ništa)  Linux Process Sandbox – po aplikaciji  multi-process system  dijeljenje informacija / komunikacija – jedino kroz interakciju komponenti odnosno Intentove (asinkroni IPC)Dinko Korunić: Reverzni inženjering Android aplikacija
  • 16. Sigurnosni model (2)  nema pristupa datotekama između aplikacija (osim za specifične ovlasti)  potpisane developerovim ključem, nažalost može biti self-signed   dozvole se provjeravaju tijekom: ◦ sistemskih poziva ◦ početka aktivnosti (Activity) ◦ upravljanjem javne objave (Broadcast) ◦ povezivanjem ili startanjem servisa ◦ pristupanja/korištenja Content Providera Dinko Korunić: Reverzni inženjering Android aplikacija
  • 17. Zaštitni nivoi dozvola  Normal ◦ VIBRATE ◦ SET_ALARM  Dangerous ◦ SEND_SMS ◦ CALL_PHONE  Signature ◦ FORCE_STOP_PACKAGES ◦ INJECT_EVENTS  SignatureOrSystem ◦ ACCESS_USB ◦ SET_TIME Dinko Korunić: Reverzni inženjering Android aplikacija
  • 18. Potencijalni problemi  Activity ◦ problem sa “zlim” podacima iz Intentova ◦ sa predavanjem osjetljivih podataka  Intent Filter ◦ nije sigurnosna granica - problem izvora ◦ nužna je ručna validacija ulaza ◦ kategorije sužuju skup za dostavu, međutim ne garantiraju sigurnost  Pending Intents ◦ kasnije izvršavanje pod originalnim ID-jem Dinko Korunić: Reverzni inženjering Android aplikacija
  • 19. Potencijalni problemi (2)  aplikacije ◦ self-signed, ne koristi se PKI/CA ◦ ne postoji samoprovjera potpisa  ◦ aplikacije “rade” i prepakirane, modificirane, potpisane testnim ključevima ◦ problem crnih izvorišta: Applanet, Mobilism, BlackMart, SnappzMarket, ApkTor ◦ Google nema automatizirani malware scan svih uploadanih aplikacija   kao i uvijek... PEBKAC!Dinko Korunić: Reverzni inženjering Android aplikacija
  • 20. Potencijalni problemi (3)  nužnost ručnih provjera IPC-a  razno: ◦ curenje osjetljivih informacija u log ring ◦ curenje informacija kroz IPC i broadcastove  VFAT ◦ vanjsko spremište ◦ nema pristupne kontrole ◦ osjetljivi podaci iz aplikacija bi se morali kriptirati Dinko Korunić: Reverzni inženjering Android aplikacija
  • 21. Statička analiza: Dex2Jar  koristi se sa Java decompilerom poput JD-Core/JD-GUI/JD-Eclipse  translacija iz dex u jar (http://goo.gl/Qd4MZ), optimizacija, prikaz  trivijalni dolazak do praktički izvornog koda aplikacije, malwarea, itd.  što sa modifikacijama, editiranjem, repakiranjem? Dinko Korunić: Reverzni inženjering Android aplikacija
  • 22. Statička analiza: Dex2Jar (2) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 23. Statička analiza: Apktool  praktički standard.. za krekanje   nadogradnja na smali/baksmali  deodex ◦ micanje BOOTCLASSPATH ovisnosti o specifičnom uređaju  dekodiranje i deodex, ponovna izgradnja / pakiranje, debuggiranje koda, očuvanje strukture, izmjena koda i resursa, korištenje frameworka  debug + povezivanje sa DDMSDinko Korunić: Reverzni inženjering Android aplikacija
  • 24. Statička analiza: Apktool (2) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 25. Statička analiza: Androguard  švicarski nož za rev engineering: ◦ interaktivna analiza class, dex, apk, jar i axml datoteka – dakle koda i resursa ◦ direktno manipuliranje iz interaktivnog shella ◦ usporedba sličnosti/diff, izračun potpisa, mjerenje rizika, vizualizacija, ...  jednostavan i brz, radi iz prompta, nema GUI  daleko najpotpuniji alat za analizu Dinko Korunić: Reverzni inženjering Android aplikacija
  • 26. Statička analiza: Androguard (2) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 27. Statička analiza: Androguard (3) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 28. Dinamička analiza: Atrace  potencijalno koristan ali nedovršen projekt  omogućava syscall trace kroz posebno patchirani Android emulator/Qemu  općenito praćenje ponašanja aplikacije, nema filtera, poluupotrebljivo Dinko Korunić: Reverzni inženjering Android aplikacija
  • 29. Dinamička analiza: Atrace (2) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 30. Dinamička analiza: TaintDroid  projekt: http://goo.gl/TDLe9  praćenje ponašanja aplikacija (curenje informacija i sl.) u realnom vremenu  komunikacija dobiva oznake (taint marking) i prati se kroz aplikaciju te između aplikacija na razini varijabli, metoda, poruka i datoteka  praćenje na razini instrukcija  platforme: emulator i NexusOneDinko Korunić: Reverzni inženjering Android aplikacija
  • 31. Dinamička analiza: TaintDroid(2) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 32. Dinamička analiza: DroidBox  port TaintDroid platforme na emulator  sandbox za testiranje i analizu individualnih aplikacija  promatranje ponašanja malwarea  dodaci: ◦ sandboxing, automatizacija, vizualizacija, logging i log collector  bitno za normalan rad! ◦ setprop dalvik.vm.execution-mode int:portable Dinko Korunić: Reverzni inženjering Android aplikacija
  • 33. Dinamička analiza: DroidBox (2) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 34. Dinamička analiza: DroidBox (3) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 35. Dinamička analiza: DroidBox (4) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 36. Dinamička analiza: DroidBox (5) Dinko Korunić: Reverzni inženjering Android aplikacija
  • 37. Kraj  zahvale, pozdravi, pitanja, diskusija  kontakt: dinko.korunic@infomar.hr  hvala na pažnji! Dinko Korunić: Reverzni inženjering Android aplikacija