19.11.2016 Views

Technical Analysis of the Pegasus Exploits on iOS

eNQc3Ry

eNQc3Ry

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Cleanup<br />

Stage 2 is activated as <str<strong>on</strong>g>the</str<strong>on</strong>g> result <str<strong>on</strong>g>of</str<strong>on</strong>g> a bug in Safari that allows for arbitrary code executi<strong>on</strong>. As<br />

<strong>on</strong>e <str<strong>on</strong>g>of</str<strong>on</strong>g> <str<strong>on</strong>g>the</str<strong>on</strong>g> last activities Stage 2 performs prior to dropping and activating <str<strong>on</strong>g>the</str<strong>on</strong>g> jailbreak binary,<br />

Stage 2 attempts to cover its infecti<strong>on</strong> vector by cleaning up <str<strong>on</strong>g>the</str<strong>on</strong>g> history and cache files from<br />

Safari. The process <str<strong>on</strong>g>of</str<strong>on</strong>g> clearing <str<strong>on</strong>g>the</str<strong>on</strong>g> Safari browser history and cache files is straightforward and<br />

<strong>iOS</strong> versi<strong>on</strong>-specific.<br />

For <strong>iOS</strong> 8 and <strong>iOS</strong> 9 (Stage 2 will terminate at <str<strong>on</strong>g>the</str<strong>on</strong>g> beginning if it is not running <strong>on</strong> <strong>iOS</strong> 9), <str<strong>on</strong>g>the</str<strong>on</strong>g><br />

following files are summarily deleted from <str<strong>on</strong>g>the</str<strong>on</strong>g> victim’s iPh<strong>on</strong>e to remove browser and cache<br />

informati<strong>on</strong>:<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

/Library/Safari/SuspendState.plist<br />

/Library/Safari/History.db<br />

/Library/Safari/History.db-shm<br />

/Library/Safari/History.db-wal<br />

/Library/Safari/History.db-journal<br />

/Library/Caches/com.apple.mobilesafari/Cache.db<br />

/Library/Caches/com.apple.mobilesafari/Cache.db-shm<br />

/Library/Caches/com.apple.mobilesafari/Cache.db-wal<br />

/Library/Caches/com.apple.mobilesafari/Cache.db-journal<br />

(files in <str<strong>on</strong>g>the</str<strong>on</strong>g> directory) /Library/Caches/com.apple.mobilesafari/fsCachedData/<br />

For <strong>iOS</strong> 7, <str<strong>on</strong>g>the</str<strong>on</strong>g> following files are removed:<br />

●<br />

●<br />

●<br />

●<br />

●<br />

/Library/Safari/SuspendState.plist<br />

/Library/Caches/com.apple.mobilesafari/Cache.db<br />

/Library/Caches/com.apple.mobilesafari/Cache.db-shm<br />

/Library/Caches/com.apple.mobilesafari/Cache.db-wal<br />

/Library/Caches/com.apple.mobilesafari/Cache.db-journal<br />

The functi<strong>on</strong> c<strong>on</strong>cludes by calling sync to ensure <str<strong>on</strong>g>the</str<strong>on</strong>g> deleti<strong>on</strong>s are written to disk.<br />

Next Stage Installati<strong>on</strong><br />

Again, showing evidence <str<strong>on</strong>g>of</str<strong>on</strong>g> <str<strong>on</strong>g>the</str<strong>on</strong>g> use <str<strong>on</strong>g>of</str<strong>on</strong>g> code originally targeting an older <strong>iOS</strong> versi<strong>on</strong>, <str<strong>on</strong>g>the</str<strong>on</strong>g> next<br />

functi<strong>on</strong> <str<strong>on</strong>g>the</str<strong>on</strong>g> main thread calls decompresses and drops two files <strong>on</strong>to <str<strong>on</strong>g>the</str<strong>on</strong>g> victim’s filesystem.<br />

The following code snippet illustrates how Stage 2 determines <str<strong>on</strong>g>the</str<strong>on</strong>g> locati<strong>on</strong> <str<strong>on</strong>g>of</str<strong>on</strong>g> <str<strong>on</strong>g>the</str<strong>on</strong>g> jailbreaker<br />

binary <strong>on</strong> <str<strong>on</strong>g>the</str<strong>on</strong>g> victim’s device:<br />

if ( (unsigned int)(majorVersi<strong>on</strong> - 8) >= 2 )<br />

{<br />

if ( majorVersi<strong>on</strong> == 7 )<br />

{<br />

pszJBFilenamePath = "/bin/sh";<br />

if ( flag)<br />

Page 35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!