Dark Side of iOS [mDevCamp 2013]
-
Upload
kuba-brecka -
Category
Documents
-
view
447 -
download
2
Transcript of Dark Side of iOS [mDevCamp 2013]
![Page 1: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/1.jpg)
![Page 2: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/2.jpg)
@kubabrecka www.kubabrecka.com
![Page 3: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/3.jpg)
Jak moc je důležité, aby programátor uměl… � Objektově-orientované programování � Funkcionální programování � Překladače, teorie automatů � Složitost � Databáze � Sítě � UI/UX � Reverzní inženýrství
![Page 4: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/4.jpg)
Ale vlastně…
� …pojďme se podívat, jak hluboko vede králičí nora
� Pokusím se zodpovědět některé trochu tabuizované otázky � privátní API � validace, review � binární podoba, šifrování aplikace � některé bezpečnostní důsledky
![Page 5: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/5.jpg)
Co je cílem � Ukázat
� co s vaší aplikací zmůže Apple � co je vidět v binárce � co lze dělat s jailbreaknutým zařízením � kde se berou “cracknuté” aplikace � co dovede dostatečně odhodlaný “black hat”
� Ne: porušovat zákon � Disclaimer: pouze pro výukové účely � Disclaimer 2: rozhodně nejsem security
expert, jen se rád hrabu v kódu
![Page 6: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/6.jpg)
Sandbox
� Každá aplikace má svůj sandbox � vidí svůj adresář + některé systémové � pro zápis má jen předem určené adresáře
� Nemá smysl mít file managery � Přenos souborů mezi aplikacemi ad-hoc
![Page 7: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/7.jpg)
Jailbreak � Vypnutá kontrola podpisů u aplikací � Zrušený sandbox
� čtení i zápis kamkoliv do filesystemu (!) � Vypne ASLR � Zruší blokování syscallů
� fork, exec, … � Debugging, attach to process � Cydia � tethered (snadno), untethered (horko
těžko) � jailbreakaři si šetří vulnerability do foroty
![Page 8: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/8.jpg)
Jailbreak iOS 6.1 – evasi0n
� http://theiphonewiki.com/wiki/Evasi0n
![Page 9: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/9.jpg)
Privátní API � Hlavičkové soubory v Xcode jsou
“osekané” � řada skrytých tříd i metod � důvod ○ zveřejněné API je pro Apple závazné a musí ho
podporovat ○ Apple si chce nechat možnost měnit vnitřnosti
� Class-dump � http://stevenygard.com/projects/class-dump/ � https://github.com/nst/iOS-Runtime-Headers � vyextrahuje z binárky všechny třídy a metody
![Page 10: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/10.jpg)
Method swizzling � Všechny selektory se volají přes dynamický
dispatch � lze nahradit metodu změnou záznamu v
tabulkách metod � http://darkdust.net/writings/objective-c/method-
swizzling - (BOOL)swizzled_synchronize { ... [self swizzled_synchronize]; ...}+ (void)load { Method original = class_getInstanceMethod(self, @selector(synchronize)); Method swizzled = class_getInstanceMethod(self, @selector(swizzled_synchronize)); method_exchangeImplementations(original, swizzled);}
![Page 11: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/11.jpg)
Validace aplikace
� Co se přesně posílá do Applu? � Zkompilovaná binárka pro ARMv6 (?),
ARMv7, ARMv7s � Ne: zdrojový kód, binárka pro simulátor
� Co se s aplikací děje při validaci? � kontrola některých náležitostí aplikace ○ ikona, profil, plist, …
� kontrola privátního API
![Page 12: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/12.jpg)
Review aplikace � Co se s aplikací děje při review?
� Oficiální informace: pouze nicneříkající App Store Review Guidelines
� <spekulace> ○ zdaleka ne tolik testování, kolik si myslíte ○ nemají zdrojový kód ○ validace + automatizované testy
� zátěz CPU, baterie ○ manuální testy
� jestli aplikace jde spustit, jestli alespoň něco dělá � nezkoušejí všechny funkce aplikace
○ jednotlivé týmy se chovají dost jinak ○ těžko zjistitelné porušení podmínek se řeší “ex post”
� až když je aplikace dostatečně populární, aby to někoho zajímalo � </spekulace>
![Page 13: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/13.jpg)
FairPlay a šifrování aplikací � Aplikace z App Store jsou šifrované
� jen binárka, navíc po jednotlivých sekcích # otool -arch all -Vl ...cmd LC_ENCRYPTION_INFOcmdsize 20cryptoff 4096cryptsize 724992cryptid 1
� Zachované importy � Kernel při zavedení binárky ověří podpis a
dešifruje v paměti
![Page 14: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/14.jpg)
Šifrovaná binárka
![Page 15: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/15.jpg)
Kde vzít dešifrovanou binárku
� Různě po Internetu v souborech .ipa � AppTrackr a spol. � iReSign
� A když není k mání? � V podstatě jediná metoda je extrakce z
jailbreaknutého zařízení ○ spustíte aplikaci v gdb, zastavíte a dumpnete
dešifrovanou paměť
![Page 16: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/16.jpg)
Pro srovnání – Android � Java, Dalvik, Dalvik VM, .apk soubory
� bajtkód (.dex) � nástroj dex2jar z něj udělá běžné .class soubory � poté stačí použít libovolný nástroj pro
dekompilaci Javy (je jich spousta) � Kde získat .apk?
� na Internetu � přímo ze zařízení ○ obvykle v tom nic nebrání, případně rootnout
� Ochrana: obfuskace � ale její účinnost je přinejmenším sporná
![Page 17: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/17.jpg)
Realita � Získat .ipa nebo .apk je snadné � Získat informace z binárky je
� Android – při obfuskaci středně obtížné ○ ale je to Java, snadno se dekompiluje
� iOS – obvykle středně snadné, protože jsou téměř vždy k dispozici kompletní názvy metod a tříd ○ ale je to ARM assembly
� Upravit binárku je � Android – snadné � iOS – obtížné
![Page 18: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/18.jpg)
Hackerův toolbox � IDA 6.3
� Podpora pro Obj-C � Demo verze pro Mac ○ x86 + ARM
� iFunBox � Free � používá iTunesí knihovny (ale na černo)
� Charles – Web Debugging Proxy Application � http://www.charlesproxy.com/, $50
![Page 19: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/19.jpg)
IDA
� vynikající disassembler � ale hlavně mnohem víc � kompletní analýza binárky � dekompiler Hex-Rays ($$$)
� podpora Objective-C, ARM
![Page 20: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/20.jpg)
![Page 21: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/21.jpg)
Network intercepting � Charles Proxy
� http://charlesproxy.com/ � přehledné sledování všech spojení ○ parsuje JSON, XML, …
� Settings – Wi-Fi – (network) – HTTP Proxy – Manual � veškerý provoz je pak veden přes Charlese
� SSL � Charles má vygenerovaný kořenový certifikát ○ charles.crt, nainstalovat do zařízení
� http://charlesproxy.com/charles.crt ○ pak funguje jako man-in-the-middle
![Page 22: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/22.jpg)
Co proti tomu dělat?
� Krátká odpověď: nic � Dlouhá odpověď:
� drtivá většina ochran je “security by obscurity”, prolomení je jen otázkou dostatečného odhodlání útočníka
� vyplatí se realistický přístup místo paranoidního ○ co nejhoršího se může stát?
![Page 23: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/23.jpg)
Tipy a triky
� Chcete vědět, jak něco funguje? � Tak se podívejte! � /Applications/Xcode.app/Contents/Developer/Platforms/
iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/
○ UIKit, QuartzCore, Foundation, CoreGraphics, CoreFoundation, …
� Nemějte falešné představy o bezpečnosti � Viz iFunBox
![Page 24: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/24.jpg)
Otázky?
Děkuji za pozornost. Kuba Břečka
@kubabrecka www.kubabrecka.com
![Page 25: Dark Side of iOS [mDevCamp 2013]](https://reader035.fdocuments.net/reader035/viewer/2022081403/55519a68b4c9053c488b46d4/html5/thumbnails/25.jpg)