dark side of ios [mdevcamp 2013]

25

Upload: kuba-brecka

Post on 12-May-2015

446 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Dark Side of iOS [mDevCamp 2013]
Page 2: Dark Side of iOS [mDevCamp 2013]

@kubabrecka www.kubabrecka.com

Page 3: Dark Side of iOS [mDevCamp 2013]

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]

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]

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]

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]

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]

Jailbreak iOS 6.1 – evasi0n

�  http://theiphonewiki.com/wiki/Evasi0n

Page 9: Dark Side of iOS [mDevCamp 2013]

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]

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]

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]

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]

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]

Šifrovaná binárka

Page 15: Dark Side of iOS [mDevCamp 2013]

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]

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]

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]

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]

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]
Page 21: Dark Side of iOS [mDevCamp 2013]

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]

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]

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]

Otázky?

Děkuji za pozornost. Kuba Břečka

@kubabrecka www.kubabrecka.com

Page 25: Dark Side of iOS [mDevCamp 2013]