Exploi'ng Unpatched iOS Vulnerabili'es for Fun and Profit - - PowerPoint PPT Presentation

exploi ng unpatched ios vulnerabili es for fun and profit
SMART_READER_LITE
LIVE PREVIEW

Exploi'ng Unpatched iOS Vulnerabili'es for Fun and Profit - - PowerPoint PPT Presentation

Exploi'ng Unpatched iOS Vulnerabili'es for Fun and Profit Yeongjin Jang, Tielei Wang, Byoungyoung Lee, and Billy Lau Georgia Tech Informa;on Security Center


slide-1
SLIDE 1

Exploi'ng ¡Unpatched ¡iOS ¡ Vulnerabili'es ¡for ¡Fun ¡and ¡Profit ¡

Yeongjin ¡Jang, ¡Tielei ¡Wang, ¡ Byoungyoung ¡Lee, ¡and ¡Billy ¡Lau ¡

Georgia ¡Tech ¡Informa;on ¡Security ¡Center ¡(GTISC) ¡

¡

1 ¡

slide-2
SLIDE 2

Agenda ¡

  • iOS ¡security ¡overview ¡

– Why ¡is ¡roo;ng ¡an ¡iOS ¡device ¡hard? ¡

  • How ¡were ¡previous ¡jailbreaks ¡performed? ¡

– General ¡steps ¡ – Steps ¡in ¡evasi0n7 ¡

  • How ¡was ¡evasi0n7 ¡patched? ¡

– Patch ¡logs ¡in ¡iOS ¡7.1 ¡ – Which ¡steps ¡were ¡fixed? ¡

2 ¡

slide-3
SLIDE 3

Agenda ¡

  • Analysis ¡of ¡patched/unpatched ¡vulnerabili;es ¡

– What ¡steps ¡need ¡to ¡be ¡re-­‑exploited? ¡

  • Discovery ¡of ¡new ¡vulnerabili;es ¡to ¡replace ¡

patched ¡vulnerabili;es ¡

  • Steps ¡for ¡Jailbreaking ¡iOS ¡7.1.2 ¡

3 ¡

slide-4
SLIDE 4

iOS ¡Security ¡Overview ¡

  • Why ¡is ¡roo;ng ¡an ¡iOS ¡device ¡hard? ¡

– Secure ¡Boot ¡Chain ¡ – Mandatory ¡Code ¡Signing ¡ – App ¡Sandbox ¡ – Privilege ¡Isola;on ¡ ¡

4 ¡

slide-5
SLIDE 5

iOS ¡Security ¡– ¡Secure ¡Boot ¡Chain ¡

  • Chained ¡code ¡signing ¡check ¡

– Verify ¡RSA ¡signatures ¡on ¡loading ¡of ¡each ¡code ¡

5 ¡

slide-6
SLIDE 6

iOS ¡Security ¡– ¡Secure ¡Boot ¡Chain ¡

  • Encrypted ¡firmware ¡

– Encrypted ¡with ¡GID ¡key ¡of ¡the ¡device. ¡

  • GID ¡key ¡is ¡same ¡among ¡the ¡same ¡device ¡

– GID ¡of ¡iPhone ¡5 ¡!= ¡GID ¡of ¡iPhone ¡4 ¡

– Image ¡is ¡only ¡decrypted ¡on ¡the ¡device. ¡

  • GID ¡key ¡is ¡not ¡designed ¡to ¡be ¡leaked. ¡

– Before ¡ge`ng ¡into ¡kernel ¡boot, ¡GID ¡key ¡is ¡disabled ¡by ¡iBoot. ¡ ¡

6 ¡

slide-7
SLIDE 7

iOS ¡Security ¡– ¡Mandatory ¡Code ¡Signing ¡

  • Code ¡signing ¡check ¡

– Enforced ¡by ¡kernel ¡(AMFI), ¡handled ¡by ¡a ¡user-­‑ space ¡daemon ¡(amfid) ¡

  • Kernel ¡code ¡is ¡signed ¡(cannot ¡be ¡modified). ¡
  • Signature ¡of ¡all ¡user-­‑level ¡code ¡is ¡checked ¡by ¡kernel. ¡

– Signing ¡En;ty ¡

  • Apple ¡App ¡Store ¡/ ¡Developer ¡License ¡/ ¡Enterprise ¡

License ¡

  • For ¡system ¡binaries ¡such ¡as ¡/bin/launchctl, ¡

– Their ¡hash ¡is ¡whitelisted ¡in ¡kernel. ¡

7 ¡

slide-8
SLIDE 8

iOS ¡Security ¡– ¡Mandatory ¡Code ¡Signing ¡

  • W+X ¡protec;on ¡

– What ¡will ¡be ¡happen ¡if ¡a ¡program ¡in ¡iOS ¡can ¡write ¡ a ¡code ¡and ¡jump ¡into ¡it? ¡

  • A ¡way ¡of ¡bypassing ¡code ¡signing ¡check! ¡

8 ¡

slide-9
SLIDE 9

iOS ¡Security ¡– ¡Mandatory ¡Code ¡Signing ¡

  • W+X ¡protec;on ¡

– Disallows ¡having ¡both ¡write ¡and ¡execute ¡ permissions ¡on ¡any ¡single ¡memory ¡page ¡

  • mmap() ¡with ¡PROT_WRITE ¡& ¡PROT_EXEC ¡will ¡fail ¡

– mprotect() ¡also ¡disallowed ¡to ¡change ¡permission ¡of ¡a ¡ previously ¡mapped ¡page ¡into ¡an ¡executable ¡page. ¡

  • Only ¡allowed ¡apps ¡with ¡dynamic-­‑codesign ¡En;tlement, ¡

e.g. ¡MobileSafari, ¡for ¡u;lizing ¡Just-­‑in-­‑Time ¡compila;on ¡

– Google ¡Chrome ¡in ¡iOS ¡cannot ¡use ¡JIT, ¡upto ¡iOS ¡7. ¡ » iOS ¡8 ¡has ¡new ¡JIT-­‑enabled ¡WebView, ¡as ¡separated ¡

  • process. ¡

9 ¡

slide-10
SLIDE 10

iOS ¡Security ¡– ¡App ¡Sandbox ¡

  • All ¡third ¡party ¡apps ¡residing ¡at ¡/var/mobile/Applica;ons/* ¡

will ¡be ¡contained ¡by ¡a ¡built-­‑in ¡sandbox ¡profile ¡named ¡ container ¡

– Enforced ¡by ¡kernel. ¡ ¡

  • For ¡some ¡built-­‑in ¡binaries, ¡ ¡the ¡sandbox ¡is ¡ini;ated ¡by ¡

invoking ¡APIs ¡in ¡libsandbox.dylib. ¡

– /usr/libexec/afcd, ¡etc. ¡

  • Running ¡a ¡third ¡party ¡app ¡outside ¡of ¡the ¡container ¡will ¡

trigger ¡the ¡“outside_of_container && ! i_can_has_debugger” ¡excep;on ¡

– Non-­‑whitelisted ¡binary ¡(all ¡signed ¡binaries) ¡must ¡be ¡executed ¡ under ¡the ¡container. ¡

  • Refer ¡to ¡“The ¡Apple ¡Sandbox” ¡talk ¡in ¡BH ¡DC ¡2011 ¡

10 ¡

slide-11
SLIDE 11

iOS ¡Security ¡– ¡Privilege ¡Isola;on ¡

  • UID ¡of ¡Apps ¡

– mobile ¡(501) ¡is ¡used ¡for ¡regular ¡apps ¡

  • For ¡all ¡Developer, ¡Enterprise, ¡and ¡App ¡Store ¡apps. ¡
  • A ¡few ¡daemons ¡run ¡as ¡root ¡

– syslogd, ¡lockdownd. ¡

11 ¡

slide-12
SLIDE 12

Why ¡is ¡Roo;ng ¡an ¡iOS ¡Device ¡Hard? ¡

  • Extremely ¡restricted ¡environment ¡in ¡sandbox ¡

– Mandatory ¡for ¡user-­‑wripen ¡or ¡App ¡Store ¡apps ¡

  • Unable ¡to ¡run ¡unsigned ¡code ¡

– One ¡must ¡bypass ¡code ¡signing ¡checks ¡to ¡run ¡ apack ¡code ¡

  • Privilege ¡escala;on ¡is ¡required ¡

– All ¡apps ¡are ¡running ¡as ¡mobile ¡(uid=501) ¡user ¡

  • Cannot ¡permanently ¡modify ¡kernel ¡image ¡

– Integrity ¡checking ¡is ¡enforced ¡

12 ¡

slide-13
SLIDE 13

General ¡Methods ¡for ¡Jailbreaking ¡

  • Bypass ¡code ¡signing ¡
  • Escape ¡the ¡sandbox ¡
  • Privilege ¡escala;on ¡to ¡root ¡
  • Patch ¡kernel ¡to ¡nullify ¡security ¡checks ¡

13 ¡

slide-14
SLIDE 14

General ¡Methods ¡for ¡Jailbreaking ¡

  • Bypass ¡code ¡signing ¡

– Exploit ¡vulnerabili;es ¡in ¡dyld ¡during ¡loading ¡of ¡

  • code. ¡
  • evasi0n7, ¡Pangu ¡

– Use ¡R.O.P. ¡or ¡exploit ¡the ¡process ¡with ¡dynamic ¡ code ¡signing. ¡

  • MobileSafari ¡

14 ¡

slide-15
SLIDE 15

General ¡Methods ¡for ¡Jailbreaking ¡

  • Escape ¡the ¡sandbox ¡

– Exploit ¡an ¡un-­‑sandboxed ¡process. ¡ – Exploit ¡design ¡flaw ¡in ¡sandbox ¡implementa;on. ¡ ¡ – Override ¡sandbox ¡func;ons ¡in ¡libsandbox.dylib. ¡

  • Run ¡the ¡sandboxed ¡process ¡without ¡really ¡invoking ¡the ¡

sandbox ¡func;ons. ¡

– For ¡apps ¡in ¡the ¡container, ¡kernel ¡patching ¡is ¡

  • required. ¡

15 ¡

slide-16
SLIDE 16

General ¡Methods ¡for ¡Jailbreaking ¡

  • Root ¡Privilege ¡Escala;on ¡

– Exploit ¡vulnerabili;es ¡in ¡a ¡root ¡daemon. ¡

  • CrashHouseKeeping, ¡etc. ¡

16 ¡

slide-17
SLIDE 17

General ¡Methods ¡for ¡Jailbreaking ¡

  • Patch ¡the ¡kernel ¡

– Disable ¡code ¡signing. ¡ – Disable ¡kernel-­‑enforced ¡sandbox. ¡ – Enable ¡RWX ¡mapping. ¡ – Enable ¡kernel ¡debugging ¡(task_for_pid ¡0). ¡

17 ¡

slide-18
SLIDE 18

General ¡Methods ¡for ¡Jailbreaking ¡

  • Apply ¡Permanent ¡Changes ¡

– Overwrite ¡the ¡root ¡par;;on ¡

  • Remount ¡with ¡read/write ¡permission ¡(ver ¡< ¡iOS ¡7), ¡or ¡

use ¡afcd ¡(iOS ¡7.0.x). ¡

– Do ¡not ¡modify ¡cri;cal ¡parts ¡that ¡are ¡involved ¡in ¡ the ¡boot ¡sequence ¡

  • Chained ¡integrity ¡check ¡could ¡block ¡boot ¡process. ¡

18 ¡

slide-19
SLIDE 19

evasi0n7 ¡

  • Exploited ¡mul;ple ¡vulnerabili;es ¡to ¡bypass ¡

code ¡signing ¡checks, ¡escape ¡the ¡sandbox, ¡and ¡

  • verwrite ¡the ¡root ¡par;;on. ¡
  • Exploited ¡a ¡kernel ¡vulnerability ¡to ¡patch ¡the ¡
  • kernel. ¡
  • Thanks ¡to ¡evad3rs ¡for ¡their ¡jailbreak ¡tool. ¡
  • Thanks ¡to ¡geohot ¡for ¡his ¡detailed ¡write-­‑up. ¡

19 ¡

slide-20
SLIDE 20

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-21
SLIDE 21

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-22
SLIDE 22

App ¡Installa;on ¡

  • The ¡container ¡

– All ¡third-­‑party ¡apps ¡are ¡installed ¡into ¡the ¡ container ¡

  • /var/mobile/Applica;ons/UUID-­‑of-­‑an-­‑App/WWDC.app ¡

– If ¡app ¡executable ¡resides ¡inside ¡of ¡the ¡container, ¡

  • The ¡App ¡Sandbox ¡will ¡be ¡applied ¡from ¡the ¡kernel ¡

– Just ¡compare ¡the ¡prefix ¡for ¡the ¡directory ¡

  • As ¡a ¡user-­‑level ¡process, ¡there ¡is ¡no ¡way ¡of ¡bypassing ¡it ¡

without ¡patching ¡the ¡kernel ¡

22 ¡

slide-23
SLIDE 23

evasi0n7 ¡– ¡Vulnerability ¡#1 ¡

  • Install ¡an ¡app ¡with ¡craued ¡Info.plist ¡

– Craued ¡Info.plist ¡forces ¡installd ¡to ¡install ¡the ¡app ¡

  • utside ¡of ¡the ¡container ¡
  • Using ¡../../../../../../ ¡in ¡CFBundleExecutable ¡field ¡

– Prepare ¡the ¡original ¡executable ¡in ¡that ¡folder ¡

  • In ¡/var/mobile/Media/Downloads/* ¡directory ¡
  • Accessible ¡through ¡USB ¡cable ¡

– Installa;on ¡will ¡succeed ¡

  • Code ¡signing ¡check ¡will ¡use ¡Downloads ¡directory ¡
  • Installd ¡will ¡do ¡chmod ¡+x ¡on ¡that ¡executable ¡file. ¡

23 ¡

slide-24
SLIDE 24

evasi0n7 ¡– ¡Vulnerability ¡#1 ¡

  • Install ¡an ¡app ¡with ¡craued ¡Info.plist ¡

– On ¡launching ¡the ¡applica;on, ¡

  • /var/mobile/Media/Downloads/WWDC.app/WWDC ¡

will ¡be ¡executed. ¡

  • The ¡container ¡sandbox ¡is ¡not ¡applied… ¡

– Prefix ¡is ¡not ¡matched ¡with ¡/var/mobile/Applica;ons ¡

  • However, ¡there ¡will ¡be ¡an ¡excep;on ¡

24 ¡

slide-25
SLIDE 25

iOS ¡Security ¡– ¡App ¡Sandbox ¡

  • All ¡third ¡party ¡apps ¡residing ¡at ¡/var/mobile/Applica;ons/* ¡

will ¡be ¡contained ¡by ¡a ¡built-­‑in ¡sandbox ¡profile ¡named ¡ container ¡

– Enforced ¡by ¡kernel. ¡ ¡

  • For ¡some ¡built-­‑in ¡binaries, ¡ ¡the ¡sandbox ¡is ¡ini;ated ¡by ¡

invoking ¡APIs ¡in ¡libsandbox.dylib. ¡

– /usr/libexec/afcd, ¡etc. ¡

  • Running ¡a ¡third ¡party ¡app ¡outside ¡of ¡the ¡container ¡will ¡

trigger ¡the ¡“outside_of_container && ! i_can_has_debugger” ¡excep'on ¡

– Non-­‑whitelisted ¡binary ¡(all ¡signed ¡binaries) ¡must ¡be ¡executed ¡ under ¡the ¡container. ¡

  • Refer ¡to ¡“The ¡Apple ¡Sandbox” ¡talk ¡in ¡BH ¡DC ¡2011 ¡

25 ¡

slide-26
SLIDE 26

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-27
SLIDE 27

Bypass ¡Kernel-­‑enforced ¡Sandbox ¡

  • Now ¡we ¡can ¡execute ¡a ¡file ¡outside ¡of ¡the ¡

container ¡

– But ¡we ¡cannot ¡run ¡3rd ¡party ¡apps ¡ – Then, ¡launch ¡system ¡binary ¡whose ¡hash ¡is ¡ whitelisted ¡in ¡the ¡kernel! ¡

  • /usr/libexec/afcd ¡
  • /bin/launchctl ¡
  • etc. ¡

27 ¡

slide-28
SLIDE 28

evasi0n7 ¡– ¡Vulnerability ¡#2 ¡

  • Gain ¡execu;on ¡of ¡afcd ¡(Apple ¡File ¡Conduit) ¡

– Since ¡afcd ¡has ¡access ¡to ¡the ¡/var/mobile/Media/ Downloads/ ¡directory, ¡a ¡PC ¡can ¡ask ¡afcd ¡to ¡change ¡ the ¡content ¡of ¡an ¡app ¡executable ¡to ¡a ¡hashbang ¡

  • #!/usr/libexec/afcd ¡–S ¡–d ¡/ ¡-­‑p ¡8888 ¡
  • Clicking ¡the ¡app ¡icon ¡will ¡trigger ¡the ¡execu;on ¡
  • f ¡“afcd” ¡with ¡forged ¡arguments ¡

– New ¡instance ¡of ¡afcd, ¡different ¡with ¡original ¡one. ¡

28 ¡

slide-29
SLIDE 29

The ¡App ¡Sandbox ¡

  • Sandbox ¡is ¡not ¡bypassed ¡yet ¡

– On ¡execu;on ¡of ¡afcd, ¡the ¡binary ¡itself ¡ini;ates ¡its ¡

  • wn ¡sandbox ¡
  • Sandbox ¡func;ons ¡in ¡libsystem_sandbox.dylib ¡

– sandbox_init(), ¡sandbox_init_with_parameters() ¡ – sandbox_check(), ¡etc. ¡

  • Only ¡allows ¡filesystem ¡access ¡to ¡/var/mobile/Media/* ¡

29 ¡

slide-30
SLIDE 30

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-31
SLIDE 31

evasi0n7 ¡– ¡Vulnerability ¡#3 ¡

  • Enable ¡access ¡to ¡/tmp ¡for ¡afcd ¡

– The ¡original ¡afcd ¡has ¡no ¡access ¡to ¡/tmp ¡ – A ¡symlink ¡bug ¡in ¡sandbox ¡policy. ¡

  • Creates ¡a ¡symlink ¡to ¡“../../../../../../tmp” ¡at ¡/var/

mobile/Media/Downloads/a/a/a/a/a/a ¡

– Link ¡to ¡/var/mobile/Media/Downloads/tmp ¡ – It ¡is ¡inside ¡of ¡the ¡sandbox! ¡

  • Move ¡the ¡symlink ¡to ¡the ¡upper ¡directory ¡

– Move ¡to ¡/var/mobile/Media/Downloads… ¡

– Then ¡afcd ¡gains ¡access ¡to ¡/tmp ¡

  • /var/mobile/Media/Downloads/../../../../../../tmp ¡=> ¡/tmp! ¡

31 ¡

slide-32
SLIDE 32

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-33
SLIDE 33

evasi0n7 ¡– ¡Vulnerability ¡#4 ¡

  • Inject ¡an ¡environment ¡variable ¡using ¡installd ¡

– During ¡the ¡installa;on ¡of ¡an ¡app, ¡installd ¡will ¡ create ¡a ¡temporary ¡directory ¡at ¡/tmp/ install_staging.XXXXXX/foo_extracted, ¡ ¡and ¡then ¡ unzip ¡the ¡ipa ¡file ¡into ¡that ¡directory. ¡

33 ¡

slide-34
SLIDE 34

evasi0n7 ¡– ¡Vulnerability ¡#4 ¡

  • Inject ¡an ¡environment ¡variable ¡using ¡installd ¡

– Exploit: ¡Ask ¡afcd ¡to ¡create ¡a ¡symlink ¡at ¡ foo_extracted ¡

  • The ¡symlink ¡links ¡to ¡/var/mobile/Library/Caches/ ¡
  • Installd ¡will ¡drop ¡files ¡into ¡/var/mobile/Library/Caches/ ¡
  • Does ¡not ¡maper ¡the ¡success ¡of ¡installa;on… ¡

– rm ¡–rf ¡/tmp/install_staging.XXXXXX/ ¡would ¡just ¡remove ¡the ¡ symlink ¡`foo_extracted` ¡

34 ¡

slide-35
SLIDE 35

evasi0n7 ¡– ¡Vulnerability ¡#4 ¡

  • By ¡overwri;ng ¡com.apple.mobile_installa;on.plist ¡

(in ¡/var/mobile/Library/Caches/), ¡evasi0n7 ¡can ¡ specify ¡the ¡DYLD_INSERT_LIBRARIES ¡environment ¡ variable ¡for ¡a ¡target ¡app. ¡

  • Injec;on ¡of ¡dylib ¡is ¡possible! ¡

35 ¡

slide-36
SLIDE 36

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-37
SLIDE 37

evasi0n7 ¡– ¡Vulnerability ¡#5 ¡

  • Inject ¡an ¡unsigned ¡dylib ¡and ¡bypass ¡code ¡

signing ¡(gameover.dylib) ¡

– Size ¡of ¡the ¡code ¡sec;on ¡is ¡0 ¡

  • dyld ¡will ¡ignore ¡this ¡sec;on ¡and ¡ ¡

¡ ¡ ¡will ¡not ¡valid ¡its ¡signature ¡

– But ¡some ¡executable ¡parts ¡exist ¡ – And ¡can ¡override ¡some ¡func;ons ¡ ¡

37 ¡

slide-38
SLIDE 38

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-39
SLIDE 39

evasi0n ¡7 ¡– ¡Vulnerability ¡#6 ¡

  • Combina;on ¡of ¡#1, ¡#2, ¡#3, ¡#4, ¡#5 ¡

– #1 ¡& ¡#2 ¡

  • Can ¡run ¡/usr/libexec/afcd, ¡without ¡kernel-­‑enforced ¡

sandbox ¡

– #3 ¡& ¡#4 ¡

  • Inject ¡dylib ¡into ¡execu;on ¡environment ¡of ¡afcd ¡

– #5 ¡

  • Bypass ¡code ¡signing ¡check, ¡override ¡sandbox ¡related ¡

func;ons ¡

39 ¡

slide-40
SLIDE 40

evasi0n ¡7 ¡– ¡Vulnerability ¡#6 ¡

  • Clicking ¡the ¡app ¡icon ¡will ¡trigger ¡the ¡execu;on ¡
  • f ¡“afcd” ¡and ¡load ¡gameover.dylib. ¡
  • Since ¡gameover.dylib ¡nullifies ¡the ¡sandbox ¡

func;ons, ¡afcd ¡now ¡runs ¡outside ¡of ¡the ¡

  • sandbox. ¡
  • But ¡s;ll ¡runs ¡as ¡mobile ¡UID ¡(501). ¡

40 ¡

slide-41
SLIDE 41

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-42
SLIDE 42

Get ¡Access ¡to ¡Root ¡Par;;on ¡

  • Root ¡par;;on ¡is ¡mounted ¡as ¡read-­‑only ¡

– Star;ng ¡from ¡iOS ¡7, ¡it ¡is ¡prohibited ¡to ¡re-­‑mount ¡ root ¡par;;on ¡as ¡read/write. ¡ – Even ¡for ¡processes ¡running ¡with ¡root ¡privilege, ¡ they ¡cannot ¡overwrite ¡root ¡par;;on. ¡

  • Then ¡how? ¡

– Make ¡block ¡device ¡accessible ¡to ¡mobile ¡UID! ¡

  • /dev/rdisk0s1s1 ¡is ¡block ¡device ¡for ¡root ¡par;;on ¡
  • Can ¡only ¡read/writable ¡by ¡root ¡
slide-43
SLIDE 43

evasi0n7 ¡– ¡Vulnerability ¡#7 ¡

  • afcd ¡running ¡outside ¡the ¡sandbox ¡now ¡can ¡create ¡a ¡symlink ¡
  • anywhere. ¡
  • CrashHouseKeeping, ¡running ¡as ¡root, ¡will ¡do ¡the ¡following: ¡

– chmod ¡(“/var/mobile/Library/Logs/AppleSupport”, ¡775) ¡

  • rwxrwxr-x root root

– chown ¡(“/var/mobile/Library/Logs/AppleSupport”, ¡501, ¡501) ¡

  • rwxrwxr-x mobile mobile …

43 ¡

slide-44
SLIDE 44

evasi0n7 ¡– ¡Vulnerability ¡#7 ¡

  • Use ¡afcd ¡to ¡create ¡a ¡symlink ¡that ¡points ¡to ¡

“../../../../../../../../dev/rdisk0s1s1” ¡at ¡“/var/ mobile/Library/Logs/AppleSupport” ¡

  • With ¡this ¡symlink, ¡CrashHouseKeeping ¡will ¡

change ¡/dev/rdisk0s1s1 ¡to ¡be ¡readable/ writable ¡by ¡the ¡mobile ¡user ¡

– rwxrwxr-x mobile mobile /dev/rdisk0s1s1

44 ¡

slide-45
SLIDE 45

evasi0n7 ¡Workflow ¡

#5 ¡Bypass ¡ Code ¡signing ¡ #1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-46
SLIDE 46

evasi0n7 ¡– ¡Vulnerability ¡#8 ¡

  • afcd, ¡running ¡outside ¡of ¡the ¡sandbox, ¡further ¡

gains ¡access ¡to ¡the ¡block ¡device ¡

– With ¡–S ¡op;on ¡in ¡afcd, ¡it ¡can ¡access ¡special ¡files ¡such ¡ as ¡block ¡device. ¡

  • #!/usr/libexec/afcd ¡–S ¡–d ¡/ ¡-­‑p ¡8888 ¡

– Using ¡the ¡AFC ¡protocol, ¡a ¡PC ¡can ¡overwrite ¡the ¡root ¡ par;;on ¡

  • Open ¡/dev/rdisk0s1s1 ¡
  • Traverse ¡sub-­‑directories ¡
  • Write ¡files ¡

– Drop ¡executable ¡for ¡launching ¡kernel ¡exploit ¡on ¡every ¡reboot ¡

46 ¡

slide-47
SLIDE 47

evasi0n7 ¡– ¡Vulnerability ¡#9 ¡

  • A ¡kernel ¡vulnerability ¡is ¡used ¡to ¡patch ¡the ¡

kernel ¡

– Disable ¡code ¡signing ¡check ¡ – Enable ¡RWX ¡page ¡ – Enable ¡task_for_pid ¡0 ¡(debugging ¡kernel ¡process) ¡ – Enable ¡PE_i_can_has_debugger ¡flag ¡

  • Allow ¡execve ¡of ¡unsigned ¡binary ¡outside ¡of ¡container ¡

– e.g. ¡execu;ng ¡unsigned ¡/bin/sh ¡

47 ¡

slide-48
SLIDE 48

iOS ¡7.1 ¡

  • Apple ¡fixed ¡bugs ¡used ¡in ¡evasi0n7 ¡

– It ¡does ¡not ¡work ¡on ¡7.1, ¡7.1.1, ¡and ¡7.1.2 ¡

48 ¡

slide-49
SLIDE 49

How ¡was ¡evasi0n7 ¡Patched? ¡

  • Patch ¡log ¡from ¡iOS ¡7.1 ¡

– Patch ¡for ¡bypassing ¡code ¡signing ¡(#5) ¡

49 ¡

slide-50
SLIDE 50

How ¡was ¡evasi0n7 ¡Patched? ¡

  • Patch ¡log ¡from ¡iOS ¡7.1 ¡

– Patch ¡for ¡escaping ¡the ¡file ¡system ¡sandbox ¡(#3) ¡

50 ¡

slide-51
SLIDE 51

How ¡was ¡evasi0n7 ¡Patched? ¡

  • Patch ¡log ¡from ¡iOS ¡7.1 ¡

– Patch ¡for ¡the ¡symlink ¡bug ¡in ¡CrashHouseKeeping ¡ (#7) ¡

51 ¡

slide-52
SLIDE 52

How ¡was ¡evasi0n7 ¡Patched? ¡

  • Patch ¡log ¡from ¡iOS ¡7.1 ¡

– Patch ¡for ¡the ¡kernel ¡vulnerability ¡(#9) ¡

52 ¡

slide-53
SLIDE 53

How ¡was ¡evasi0n7 ¡Patched? ¡

53 ¡

  • Via ¡binary ¡analysis, ¡the ¡“–S” ¡op;on ¡for ¡afcd ¡

was ¡removed ¡(#8) ¡

slide-54
SLIDE 54

#5 ¡Bypass ¡ Code ¡signing ¡

Missing ¡Pieces ¡

#1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡for ¡afcd ¡

slide-55
SLIDE 55

Our ¡Work ¡

  • Apempt ¡to ¡reconstruct ¡the ¡chain ¡of ¡exploits: ¡

– Find ¡new ¡exploit ¡paths ¡ – Discover ¡new ¡vulnerabili;es ¡ ¡

slide-56
SLIDE 56

#5 ¡Bypass ¡ Code ¡signing ¡

Using ¡Developer ¡Licenses ¡to ¡Enable ¡#3 ¡and ¡#5 ¡

#1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡

slide-57
SLIDE 57
  • #3: ¡Third ¡party ¡apps ¡have ¡access ¡to ¡/tmp ¡for ¡

free ¡

– Use ¡app ¡to ¡access ¡/tmp ¡to ¡create ¡symlink ¡on ¡ exploit ¡#6 ¡

  • #5: ¡Sign ¡the ¡code ¡with ¡Developer/Enterprise ¡

License ¡

– Load ¡developer-­‑signed ¡dylib ¡in ¡exploit ¡#6 ¡

57 ¡

Use ¡Developer ¡Licenses ¡to ¡Enable ¡#3 ¡and ¡#5 ¡

slide-58
SLIDE 58

Take ¡a ¡Short ¡Break ¡

  • What ¡can ¡we ¡do ¡with ¡just ¡these ¡two ¡

vulnerabili;es? ¡ ¡

– A ¡malicious ¡app ¡can ¡trick ¡the ¡user ¡to ¡install ¡ another ¡app. ¡During ¡this ¡process, ¡it ¡can ¡overwrite ¡ many ¡system ¡configura;ons. ¡ ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡

slide-59
SLIDE 59

Modifying ¡Configura;ons ¡

  • Restric;on ¡Se`ngs ¡

– In ¡iOS, ¡there ¡exists ¡ an ¡op;on ¡to ¡disable ¡ certain ¡features ¡ from ¡the ¡device. ¡ – Using ¡the ¡ vulnerability ¡in ¡ installd, ¡we ¡could ¡

  • verwrite ¡those ¡

se`ngs. ¡

Before ¡the ¡apack ¡ Auer ¡the ¡apack ¡

slide-60
SLIDE 60

Modifying ¡Configura;ons ¡

  • Restric;on ¡Se`ngs ¡

– We ¡can ¡overwrite ¡the ¡ passcode ¡for ¡this ¡ restric;on ¡se`ngs. ¡ – Since ¡the ¡passcode ¡is ¡ not ¡known ¡to ¡the ¡ user, ¡the ¡user ¡cannot ¡ disable ¡it. ¡

slide-61
SLIDE 61

#5 ¡Bypass ¡ Code ¡signing ¡

New ¡Vulnerability ¡for ¡Permission ¡Downgrading ¡ ¡ ¡

#1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡

slide-62
SLIDE 62

Syslogd ¡Chown ¡Symlink ¡Bug ¡

  • grep ¡–E ¡‘chmod|chown’ ¡ ¡-­‑r ¡./ ¡

– Find ¡all ¡programs ¡that ¡invoke ¡chmod/chown ¡in ¡/ usr/libexec ¡

  • ps ¡-­‑aux ¡ ¡

– List ¡all ¡daemons ¡running ¡as ¡root ¡in ¡iOS ¡7.0.6 ¡

62 ¡

We ¡are ¡lucky. ¡Find ¡a ¡new ¡one ¡in ¡syslogd ¡in ¡5 ¡mins ¡

slide-63
SLIDE 63

Syslogd ¡Chown ¡Symlink ¡Bug ¡

  • chown(“/var/mobile/Library/Logs/

CrashReporter”, ¡501, ¡501) ¡

– UID ¡501 ¡is ¡mobile ¡

  • chmod(“/var/mobile/Library/Logs/

CrashReporter”, ¡755) ¡

– rwxr-xr-x mobile mobile /dev/rdisk0s1s1

slide-64
SLIDE 64

#5 ¡Bypass ¡ Code ¡signing ¡

Overwri;ng ¡the ¡Root ¡Par;;on ¡with ¡ Injected ¡dylib ¡

#1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Launch ¡a ¡kernel ¡ exploit ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡

slide-65
SLIDE 65

Overwri;ng ¡the ¡Root ¡Par;;on ¡with ¡ Injected ¡dylib ¡

  • By ¡injec;ng ¡our ¡dylib ¡into ¡afcd ¡running ¡out ¡of ¡

the ¡sandbox, ¡the ¡dylib ¡gains ¡access ¡to ¡/dev/ rdisk0s1s1 ¡

– Direct ¡read/write ¡to ¡the ¡block ¡device ¡is ¡possible! ¡

slide-66
SLIDE 66

#5 ¡Bypass ¡ Code ¡signing ¡

Use ¡lockdownd ¡to ¡obtain ¡root ¡ (replaces ¡kernel ¡patching) ¡

#1 ¡Install ¡an ¡app ¡ with ¡craued ¡ Info.plist ¡ #2 ¡Get ¡execu;on ¡

  • f ¡afcd ¡

#4 ¡Inject ¡environment ¡ variable ¡with ¡installd ¡ #6 ¡Inject ¡dylib ¡into ¡ a ¡non-­‑sandboxed ¡ process ¡ #7 ¡Get ¡access ¡to ¡ the ¡root ¡par;;on ¡ #8 ¡Overwrite ¡root ¡ filesystem ¡ #9 ¡Ge`ng ¡the ¡root ¡ with ¡lockdownd ¡ ¡ #3 ¡Enable ¡access ¡to ¡ /tmp ¡

slide-67
SLIDE 67

Unprotected ¡lockdownd ¡Plist ¡

  • Se`ng ¡files ¡of ¡daemons ¡use ¡to ¡be ¡stored ¡in ¡

LaunchDaemons ¡directory ¡

– In ¡iOS ¡6, ¡plist ¡files ¡in ¡LaunchDaemons ¡are ¡embedded ¡ in ¡signed ¡dyld_cache ¡file. ¡ – We ¡cannot ¡modify ¡se`ngs ¡for ¡exis;ng ¡daemons ¡

  • Services.plist ¡of ¡lockdownd ¡is ¡unprotected ¡

– lockdownd ¡can ¡also ¡launch ¡new ¡services/apps ¡with ¡ root ¡privileges. ¡

  • Modify ¡Services.plist ¡to ¡run ¡target ¡executable ¡

under ¡our ¡control ¡as ¡root. ¡

slide-68
SLIDE 68

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #3 ¡Accessing ¡/tmp ¡

– Install ¡a ¡developer ¡signed ¡app ¡ – Create ¡symlink ¡as ¡same ¡as ¡evasi0n7 ¡did ¡with ¡afcd ¡

slide-69
SLIDE 69

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #5: ¡Forge ¡a ¡dylib ¡to ¡have ¡a ¡constructor, ¡then ¡

sign ¡with ¡a ¡developer ¡license ¡

– Similar ¡to ¡.ctors ¡in ¡ELF ¡ – Constructor ¡is ¡called ¡when ¡the ¡dylib ¡is ¡loaded ¡

  • This ¡is ¡before ¡afcd ¡ini;ates ¡its ¡own ¡sandbox. ¡
  • Injected ¡dylib ¡will ¡be ¡executed ¡outside ¡of ¡sandbox. ¡

69 ¡

slide-70
SLIDE 70

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #7: ¡Dump ¡root ¡par;;on ¡using ¡syslogd ¡exploit, ¡

then ¡modify ¡it ¡

– Download ¡it ¡to ¡PC ¡through ¡AFC ¡

70 ¡

slide-71
SLIDE 71

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #8: ¡Nullifying ¡code ¡signing ¡check: ¡overriding ¡

libmis.dylib ¡

– Build ¡dylibs ¡to ¡return ¡0 ¡for ¡all ¡sandbox ¡func;ons ¡ – If ¡injected, ¡code ¡signing ¡check ¡will ¡be ¡disabled. ¡

71 ¡

slide-72
SLIDE 72

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #8: ¡Nullifying ¡code ¡signing ¡check: ¡overriding ¡

libmis.dylib ¡

– Inject ¡into ¡/usr/lib ¡ – Touch ¡/System/Library/Caches/com.apple.dyld/ enable-­‑dylibs-­‑to-­‑override-­‑cache ¡

72 ¡

Sourcecode ¡of ¡dyld, ¡from ¡opensource.apple.com ¡

slide-73
SLIDE 73

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #8: ¡Nullifying ¡code ¡signing ¡check: ¡overriding ¡

libmis.dylib ¡

– If ¡we ¡make ¡iOS ¡to ¡load ¡/usr/lib/libmis.dylib, ¡it ¡ will ¡fail ¡to ¡boot ¡

  • Injected ¡libmis.dylib ¡is ¡signed ¡by ¡developer ¡license ¡
  • amfid ¡must ¡be ¡started ¡to ¡allow ¡developer ¡license ¡

– Otherwise, ¡provisioning ¡profiles ¡will ¡not ¡be ¡loaded. ¡ – But ¡amfid ¡depends ¡on ¡libmis.dylib ¡

  • A ¡chicken-­‑and-­‑egg ¡problem ¡

73 ¡

slide-74
SLIDE 74

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #8: ¡Nullifying ¡code ¡signing ¡check: ¡overriding ¡

libmis.dylib ¡

  • Create ¡symlink ¡enable-­‑dylibs-­‑to-­‑override-­‑cache ¡

poin;ng ¡to ¡/tmp/bypass_codesign ¡

  • At ¡boot ¡;me, ¡since ¡tmpfs ¡is ¡a ¡kind ¡of ¡ramdisk, ¡it ¡is ¡

empty! ¡

  • dyld ¡will ¡not ¡load ¡/usr/lib/libmis.dylib ¡

– dyld ¡checks ¡existence ¡with ¡stat(), ¡not ¡lstat() ¡ – The ¡original ¡library ¡will ¡be ¡loaded ¡into ¡amfid ¡at ¡boot ¡;me ¡

74 ¡

slide-75
SLIDE 75

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #9: ¡Kill ¡amfid ¡& ¡installd ¡

– We ¡create ¡/tmp/bypass_codesign ¡auer ¡the ¡boot ¡ process ¡

  • amfid ¡& ¡installd ¡are ¡already ¡loaded ¡with ¡stock ¡

libmis.dylib ¡

– Then ¡we ¡kill ¡and ¡reload ¡the ¡daemons ¡

  • Killing ¡amfid ¡requires ¡root ¡permissions. ¡

75 ¡

slide-76
SLIDE 76

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #9: ¡Edit ¡/System/Library/Lockdown/

Services.plist ¡

76 ¡

Script ¡for ¡killing ¡amfid ¡ Script ¡for ¡killing ¡installd ¡

slide-77
SLIDE 77

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • Writeback ¡root ¡par;;on, ¡then ¡reboot ¡

– Upload ¡diskimage ¡with ¡AFC ¡ – open(/dev/rdisk0s1s1); ¡ – Write ¡modified ¡data… ¡

77 ¡

slide-78
SLIDE 78

Modified ¡Steps ¡for ¡Jailbreaking ¡7.1.2 ¡

  • #9: ¡Kill ¡daemons ¡with ¡lockdownd ¡

– lockdownd ¡is ¡a ¡service ¡that ¡processes ¡commands ¡ from ¡USB ¡connec;ons. ¡

  • Can ¡be ¡called ¡by ¡a ¡USB ¡connec;on ¡
  • Can ¡be ¡called ¡by ¡connec;ng ¡to ¡127.0.0.1:62078 ¡

78 ¡

slide-79
SLIDE 79

Demo ¡Video ¡

slide-80
SLIDE 80

Jailbreak ¡Complete ¡

  • Apacker ¡can ¡execute ¡code ¡outside ¡of ¡ ¡the ¡

sandbox ¡

– A ¡dylib ¡injected ¡into ¡afcd ¡already ¡does ¡this ¡

  • Apacker ¡can ¡execute ¡unsigned ¡code ¡

– Newly ¡started ¡amfid ¡& ¡installd ¡will ¡load ¡modified ¡ libmis.dylib ¡

  • Apacker ¡can ¡install ¡& ¡run ¡unsigned ¡binaries ¡
  • Apacker ¡has ¡a ¡privileged ¡root ¡process ¡

– Via ¡hooking ¡daemons ¡running ¡as ¡root ¡

80 ¡

slide-81
SLIDE 81

Limita;ons ¡

  • Our ¡exploit ¡does ¡not ¡use ¡a ¡kernel ¡vulnerability ¡

– We ¡cannot ¡patch ¡the ¡kernel ¡

  • We ¡cannot: ¡

– Execve ¡a ¡non-­‑container ¡binary ¡

  • Can ¡be ¡replaced ¡with ¡fork() ¡& ¡dlopen() ¡

– Disable ¡sandbox ¡of ¡container ¡binary ¡

  • Can ¡be ¡delegated ¡to ¡a ¡sandbox-­‑free ¡process ¡

– Debug ¡the ¡kernel ¡

81 ¡

slide-82
SLIDE 82

Lessons ¡

  • Jailbreak ¡usually ¡requires ¡mul;ple ¡

vulnerabili;es ¡to ¡achieve. ¡

  • Fixing ¡some ¡of ¡vulnerabili;es ¡on ¡the ¡chain ¡

may ¡block ¡the ¡current ¡jailbreak ¡apack. ¡

  • Incompletely ¡patching ¡the ¡disclosed ¡

vulnerabili;es ¡s;ll ¡leaves ¡the ¡door ¡for ¡other ¡

  • apacks. ¡

82 ¡

slide-83
SLIDE 83

References ¡

1. hpps://github.com/comex/datau;ls0/blob/master/make_kernel_patchfile.c ¡ 2. hpp://geohot.com/e7writeup.html ¡ 3. hpp://theiphonewiki.com/wiki/Evasi0n7 ¡(will ¡be ¡updated ¡per ¡each ¡write-­‑ups) ¡ 4. hpps://conference.hitb.org/hitbsecconf2013ams/materials/D2T1%20-­‑ %20Pod2g,%20Planetbeing,%20Musclenerd%20and%20Pimskeks%20aka %20Evad3rs%20-­‑%20Swiping%20Through%20Modern%20Security %20Features.pdf ¡ 5. hpp://theiphonewiki.com/wiki//System/Library/Lockdown/Services.plist ¡ 6. hpp://support.apple.com/kb/HT6162 ¡ 7. hpp://support.apple.com/kb/HT6208 ¡ 8. hpp://securitylearn.net/wp-­‑content/uploads/iOS%20Resources/Apple%20iOS %204%20Security%20Evalua;on%20WP.pdf ¡ 9. hpp://www.seman;scope.com/research/BHDC2011/BHDC2011-­‑Slides.pdf ¡

83 ¡

slide-84
SLIDE 84

Ques;ons? ¡

  • Thank ¡you ¡for ¡your ¡apen;on! ¡
  • Thanks ¡to ¡evad3rs ¡for ¡their ¡jailbreak ¡tool. ¡
  • Thanks ¡to ¡geohot ¡for ¡his ¡detailed ¡write-­‑up. ¡

84 ¡