SlideShare a Scribd company logo
1 of 43
アップルコアをファズしてエクプロイト
する方法
(P)FACE アップルのコアへ、そしてルート権限へのエクスプロイト
アジェンダ
• 私たちは何者?
– CVE リスト
• パッシブファジングフレームワーク
– アプローチと検討
– 実装
– コンテキストエンライトメント
– ベストプラクティス
• ルート権限へのエクスプロイト
– セキュリティの緩和
– ルート
Moony Li
- @Flyic
- 7 years security
- Sandcastle
- Deep Discovery
- Exploit Detection
- Mac/Windows
Kernel
- Android
Vulnerability
Jack Tang
- @jacktang310
- 10+ years security
- Browser
- Document
- Mac/Windows
Kernel
- Virtualization
Vulnerability
で?
• 下記は2015年から今までに提出したCVE と ZDI リスト (提出しているがペンディングのも
のは含んでいない):
CVE-2015-3787, CVE-2015-5867, CVE-2015-7021,CVE-2015-7020,
CVE-2016-1716,ZDI-CAN-3536,ZDI-CAN-3558, ZDI-CAN-3598,ZDI-
CAN-3596,ZDI-CAN-3603,CVE-2015-7067, CVE-2015-7076,CVE-2015-
7106,CVE-2015-7109,CVE-2016-1718,CVE-2016-1747,CVE-2016-
1749,CVE-2016-1753, ZDI-CAN-3693, ZDI-CAN-3694, CVE-2016-1795,
CVE-2016-1808, CVE-2016-1810, CVE-2016-1817, CVE-2016-1820,
CVE-2016-1798, CVE-2016-1799, CVE-2016-1812, CVE-2016-1814,
CVE-2016-1818, CVE-2016-1816, CVE-2016-4648,CVE-2016-4699,
CVE-2016-4700,CVE-2016-4750
• Root権限 10.11.3(時点) バグとともに2回
アジェンダ
• 私たちは何者?
– CVE リスト
• パッシブファジングフレームワーク
– アプローチと検討
– 実装
– コンテキストエンライトメント
– ベストプラクティス
• ルート権限へのエクスプロイト
– セキュリティの緩和
– ルート
一般的にどうやってバグをファズするのか?
• IOKit インターフェースによる伝統的なファジング
通常は、彼らがテストしたいIOKitサービスネームを開き、IOKitユーザーモードAPI(e.g. IOConnectCallMethod) で
ファジングデータを注入する
– コールシーケンス依存
• AppleCamIn (OpenDevice, PowerOnCamera…)
– 入力データ依存
• AppleHDAEngineInput(input as user mode buffer pointer)
– タイミング依存
• IOHDIXHDDriveOutKernel( mount dmg)
コードレビューではどうか?
• 目標のカーネルエクステンションのコードレビュー
このコードレビューは、バイナリコードのリバースエンジニアリングに多くの労力を要
し、非常に多くのIOKit サービスとユーザークライアントにも直面する。
-スケーラブルでない
-コストの努力 RE (アップグレード)
私たちのアプローチ:遊んでバグとり
• 伝統的なファズやコードレビューは退屈でしかない
• オンラインゲームをプレイするようにカーネルバグを
狩ってみないか?
• ゲームをやればやっただけ、バグバウンティを得られ
る
• こんなふうに
なぜなら
Poison Here?
Dam poison Passive fuzzing
River Stream Data flow of code execution
(Open driver, IOCtl
driver……)
Up stream User mode data
Down stream Kernel mode data
Poison at Dam Fuzz at hook of system call
Fish die in
downstream
Kernel crash
Trace the poison
origin
Reproduction
…
アジェンダ
• 私たちは何者?
– CVE リスト
• パッシブファジングフレームワーク
– アプローチと検討
– 実装
– コンテキストエンライトメント
– ベストプラクティス
• ルート権限へのエクスプロイト
– セキュリティの緩和
– ルート
そしてどうやるのか?
アーキテクチャ概要
Origianl function
Hooker
IOAcceleratorFamily2.kext
Targeted application from apple store
Suspicious
module/function
manifest
IOThunderboltFamily.kext IOUSBFamily.kext
AppleGraphicsPowerManagement.kext AppleHDA.kext … …
I. is_io_connect_method
II. is_io_connect_async_method
III. iokit_user_client_trap
IV. IOMemoryDescriptor::createMappingInTask
V. ipc_kmsg_get
VI. ipc_kmsg_send
VII. Copyio
…...
Conditon Checker
Ring3
Ring0
Target
drivers
XNU/
IOKit
Tamper
StackFrame,
Process,
UserClient,
MsgID,
…...
Context Matcher
擬似コード
TargetAPI(params):
//Call Original_TargetAPI(params)
if (matchWhitelistParameter(params)) goto _exit();
if !(matchStackFrame() && matchBlacklistParameter(params))
goto _exit;
if (random()) {record(params); fuzz(params);}
Call Original_TargetAPI(params);
if (matchContext(params)) alert;
もっと知りたい? Hooker & Tamper
• Hooker
– ユーザーから直接汚染可能
– 多くのプロセスのための一つのフック
• カーネルモード中のインラインフック
• Tamper
– ユーザーによって触れることができるバッファコンテンツのみのファジング
• Inband_input, scalar_input, ool_input
• サイズではない!(getTargetAndMethodForIndex のバイパスのチェック)
…
0xffffff80c0c7b720 0xffffff7fa96ec9f2 AppleIntelHD3000Graphics`Gen6GLContext::bind_texture(VendorGLStreamInfo&, unsigned int, unsigned int, bool,
Gen575TextureBuffer**) + 0x12e
0xffffff80c0c7b7c0 0xffffff7fa96f2bd5 AppleIntelHD3000Graphics`Gen6GLContext::process_token_BindTextures(VendorGLStreamInfo&) + 0x103
0xffffff80c0c7b7f0 0xffffff7fa96b6242 AppleIntelHD3000Graphics`IOIntelGLContext::processCommandBuffer(VendorCommandDescriptor*) + 0x12c
0xffffff80c0c7b820 0xffffff7fa96ec1eb AppleIntelHD3000Graphics`Gen6GLContext::processCommandBuffer(VendorCommandDescriptor*) + 0x7b
0xffffff80c0c7b900 0xffffff7fa96b540a AppleIntelHD3000Graphics`IOIntelGLContext::clientMemoryForType(unsigned int, unsigned int*, IOMemoryDescriptor**) + 0x5bc
0xffffff80c0c7b950 0xffffff7fa96b39c3 AppleIntelHD3000Graphics`IOIntelGLContext::submit_command_buffer(unsigned int, sIOGLGetCommandBuffer*) + 0x63
0xffffff80c0c7b980 0xffffff80276b9626 ::shim_io_connect_method_scalarI_structureO(IOExternalMethod *, IOService *, const io_user_scalar_t *, mach_msg_type_number_t, char
*, IOByteCount *)((IOExternalMethod *) method = <>, , (IOService *) object = <>, , (const io_user_scalar_t *) input = <>, , (mach_msg_type_number_t) inputCount = <>, , (char *)
output = <register r10 is not available>, , (IOByteCount *) outputCount = <register r11 is not available>, )
0xffffff80c0c7b9e0 0xffffff80276baef0 IOUserClient::externalMethod(unsigned int, IOExternalMethodArguments*, IOExternalMethodDispatch*, OSObject*,
void*)((IOUserClient *) this = <>, , (uint32_t) selector = <>, , (IOExternalMethodArguments *) args = 0xffffff80c0c7ba00, (IOExternalMethodDispatch *) dispatch = <>, ,
(OSObject *) target = <>, , (void *) reference = <>, )
0xffffff80c0c7bb20 0xffffff80276b7f77 ::is_io_connect_method(io_connect_t, uint32_t, io_user_scalar_t *, mach_msg_type_number_t, char *, mach_msg_type_number_t,
mach_vm_address_t, mach_vm_size_t, char *, mach_msg_type_number_t *, io_user_scalar_t *, mach_msg_type_number_t *, mach_vm_address_t, mach_vm_size_t *)((io_connect_t)
connection = 0xffffff80c0c7ba60, (uint32_t) selector = 16, (io_user_scalar_t *) scalar_input = <>, , (mach_msg_type_number_t) scalar_inputCnt = <>, , (char *) inband_input = <>, ,
(mach_msg_type_number_t) inband_inputCnt = 0, (mach_vm_address_t) ool_input = <>, , (mach_vm_size_t) ool_input_size = <no location, value may have been optimized out>, ,
(char *) inband_output = <no location, value may have been optimized out>, , (mach_msg_type_number_t *) inband_outputCnt = <no location, value may have been optimized
out>, , (io_user_scalar_t *) scalar_output = <>, , (mach_msg_type_number_t *) scalar_outputCnt = <no location, value may have been optimized out>, , (mach_vm_address_t)
ool_output = <>, , (mach_vm_size_t *) ool_output_size = <>, )
0xffffff80c0c7bcd0 0xffffff7fa9cd34ab trampline_is_io_connect_method((io_connect_t) connection = 0xffffff8035637000, (uint32_t) selector = 16, (io_user_scalar_t *) scalar_input
= 0xffffff80331a4dcc, (mach_msg_type_number_t) scalar_inputCnt = 1, (char *) inband_input = 0xffffff80331a4dd8 "", (mach_msg_type_number_t) inband_inputCnt = 0,
(mach_vm_address_t) ool_input = 0, (mach_vm_size_t) ool_input_size = 0, (char *) inband_output = 0xffffff8035805600 "", (mach_msg_type_number_t *) inband_outputCnt =
0xffffff80358055fc, (io_user_scalar_t *) scalar_output = 0xffffff80c0c7bd30, (mach_msg_type_number_t *) scalar_outputCnt = 0xffffff80c0c7bd2c, (mach_vm_address_t)
ool_output = 0, (mach_vm_size_t *) ool_output_size = 0xffffff80331a4df8)
0xffffff80c0c7bde0 0xffffff8027158750 _Xio_connect_method((mach_msg_header_t *) InHeadP = <>, , (mach_msg_header_t *) OutHeadP = 0xffffff80358055d0)
0xffffff80c0c7be10 0xffffff8027083443 ipc_kobject_server((ipc_kmsg_t) request = 0xffffff80331a4d40)
0xffffff80c0c7be50 0xffffff802705ef03 ipc_kmsg_send((ipc_kmsg_t) kmsg = <>, , (mach_msg_option_t) option = <>, , (mach_msg_timeout_t)
Hooker の実例?未報告なクラッシュの抜粋
フッカーの要約
• (Driver interface)is_io_connect_method
• (Driver interface)is_io_connect_async_method
• (Kernel)iokit_user_client_trap
• (Kernel)IOMemoryDescriptor::createMappingInTask
• (Mach Msg)ipc_kmsg_get
• (Mach Msg)ipc_kmsg_send
• (General IO)Copyio
• …
フッカーの要約の抜粋
なぜ状態チェッカーか
• 安定したファジングを続ける
– ノイズを取り除く
• ビジー呼び出し、ブラックスクリーン呼び出し、ハング呼び出し
• 再現されたクラッシュ
• 脆弱性のコンテキストによる追跡
– カーネルヒープリーク
– カーネル中のユーザーデータのマップとバッファサイズとして
の読み込み
– …
チェッカーの動作 状態の範囲 1/3
• &&, ||, *(wild match), white(black)
• プロセス
– ユーザーID (ルート/ルート以外)
– プロセス名 (e.g. Safari, RCE, sandbox-evasion)
• モジュール
– モジュール名
• 機能
– シンボル名/アドレス
– オフセットの範囲
ホワイトリストのサンプル
//Config for mac prodetail_control_entry_t g_white_listing_detail_control[] ={ //
procName,uid,driverBundleName, driverClassName, selFunctionNO
//"*",0,"*","*",ANY_MATCH_INTEGER,#if 0 //Reported or collected yet:
//{"*",PROCESS_UID_ANY_INTEGER,"*","AGPMClient",7312}, //{"*",PROCESS_UID_ANY_INTEGER,"*",
"nvDeviceTesla", 5}, //{"*",PROCESS_UID_ANY_INTEGER,"*", "NV2DContextTesla", 17},
//{"*",PROCESS_UID_ANY_INTEGER,"*","IONVSurfaceTesla",10},
//{"*",PROCESS_UID_ANY_INTEGER,"*","IOHDIXHDDriveOutKernelUserClient",2},
{"*",PROCESS_UID_ANY_INTEGER,"*","IGAccelSharedUserClient",1},//crash-24
{"*",PROCESS_UID_ANY_INTEGER,"*","AccelSurface",16},//crash-23
{"*",PROCESS_UID_ANY_INTEGER,"*",OBJECT_CLASS_NAME_NO_FOUND,16},
{"*",PROCESS_UID_ANY_INTEGER,"*","HD",2},//crash-21
//"*",PROCESS_UID_ANY_INTEGER,"*","Accel",2,//crash-28
//"*",PROCESS_UID_ANY_INTEGER,"*","IG",2,//crash-28
//"*",PROCESS_UID_ANY_INTEGER,"*","Con",2,//crash-28
"*",PROCESS_UID_ANY_INTEGER,"*","IGAccelSharedUserClient",0,//crash-29
"*",PROCESS_UID_ANY_INTEGER,"*","IOThunderboltFamilyUserClient",22,//crash-30
//"*",PROCESS_UID_ANY_INTEGER,"*","IG",ANY_MATCH_INTEGER,
//"*",PROCESS_UID_ANY_INTEGER,"*","Accel",ANY_MATCH_INTEGER,
//"vm",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER,
//"*",PROCESS_UID_ANY_INTEGER,"*","vm",ANY_MATCH_INTEGER,
"sandbox",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER,
"dog",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER,
//{"WindowServer",PROCESS_UID_ANY_INTEGER,"*","AccelSurface",16},//crash-23
//"*",PROCESS_UID_ANY_INTEGER,"*","SMC",ANY_MATCH_INTEGER,
//"windowserver",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER,};
チェックの方法 状態の範囲 2/3
• データ
– is_address_RWX
– コピーの方向(in/out)
– カーネルかユーザー領域か (SMAP ノイズ)
• コールスタック
– ret機能
– スタックレベル (下から上)
– レベルの範囲[,]
スタックフレームのサンプル
stack_match_item_t stack_matcher_for_copyio[]={
//If any item in list match, then match
//{routineName, cache}, routineAddress, offSetFrom, offsetTo, levelLow, levelHigh
{{"_shim_io_connect_method_scalarI_scalarO",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xC120-
0xB8B0, STACK_ALL_LEVEL_RANGE},
{{"_shim_io_connect_method_scalarI_structureO",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xDB94-
0xD5C0, STACK_ALL_LEVEL_RANGE},
{{"_shim_io_connect_method_scalarI_structureI",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xEA97-
0xE490, STACK_ALL_LEVEL_RANGE},
{{"_shim_io_connect_method_structureI_structureO",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0,
0xF588-0xF270, STACK_ALL_LEVEL_RANGE},
{{"_is_io_connect_method",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xb2a9-
0xaf10,STACK_ALL_LEVEL_RANGE},
}
チェックの方法 状態の範囲 3/3
• その他
– Mach_msg
• msg subsystem id…
– ユーザークライアント
• サービス名、クラス名、セテクター…
ユーザークライアントのサンプル
detail_control_entry_t g_white_listing_detail_control[] ={
// procName,uid,driverBundleName, driverClassName, selFunctionNO
//{"*",PROCESS_UID_ANY_INTEGER,"*","AGPMClient",7312},,
{"*",PROCESS_UID_ANY_INTEGER,"*","IGAccelSharedUserClient",1},//crash-24
{"*",PROCESS_UID_ANY_INTEGER,"*","AccelSurface",16},//crash-23
{"*",PROCESS_UID_ANY_INTEGER,"*",OBJECT_CLASS_NAME_NO_FOUND,16},
{"*",PROCESS_UID_ANY_INTEGER,"*","HD",2},//crash-21
{"*",PROCESS_UID_ANY_INTEGER,"*","IX",2},//crash-21
"*",PROCESS_UID_ANY_INTEGER,"*","AGPM",7312,//crash-11
"*",PROCESS_UID_ANY_INTEGER,"*","IGAccelGLContext",2,//crash-28
Mach-msg のサンプル
#define KMSG_IOKIT_SUBSYSTEM_RANGE 0xAF0, 0x0B47
detail_control_entry_for_ipc_kmsg_send_t g_black_listing_detail_control_foripc_kmsg_send[] ={
//procName,uid,msg_id_from, msg_id_to, routineName, addr, addr_offset_from, addr_offset_to
"chrome",PROCESS_UID_ANY_INTEGER,
KMSG_IOKIT_SUBSYSTEM_RANGE,"__Xio_connect_method",KMSG_ADDR_OFFSET_ANY_RANGE,KMSG_LEAVI
NG,};
• #define KMSG_IOKIT_SUBSYSTEM_RANGE 0xAF0, 0x0B47
• #define KMSG_MACH_VM_SUBSYSTEM_RANGE 0x12C0, 0x12D4
• #define KMSG_MACH_PORT_SUBSYSTEM_RANGE 0xC80, 0x0CA4
• #define KMSG_MACH_HOST_SUBSYSTEM_RANGE 0xC8, 0xE4
• #define KMSG_HOST_PRIV_SUBSYSTEM_RANGE 0x190, 0x1AA
• ……
なぜコンテキストを使うのか
• コードレビューのすすめ
– バグだらけのモジュール、REのためのインターフェース……
• バグハンティングの経験によって蓄積されたパ
ターン
• 脆弱性ではないが怪しい脆弱性の兆候
• 状態チェッカーを介した実装
コンテキストのサンプル
• いくつかのIOKitのメモリの破損に関係する脆
弱性がどうなるかは以下のコンテキスト:
– カーネルモードへのマッピングユーザーモードバッファー領域に
IOMemoryDescriptor::createMappingInTaskを呼び出す。
– バッファーからの値の読み込みと書き込みまたは読み込みのバッファー
へのサイズとしてのそれらを使用する。
• いくつかのカーネル情報が漏れた脆弱性がどう
なるかは以下のコンテキスト:
– 出力バッファーのコンテンツは 0xFFFFFF プリフィクスを持っている。
禅 やったことある?
ベストプラクティス/秘訣 1/3
• ファジングのソース:
– 複数のアプリケーション
• AppStore(MMORPGゲーム、FaceTime、USBハードディスク、ブルートゥース、Wifi、VM、DirectX…)
• Virus Total、Apple OpenSource UT、github サンプルコード
– 豊富な種類のファジングのソースの組み合わせ
• アクティブファジング, Python watchdog, browsing WebGL
• ファジングの安定性:
– アクティブハングのバイパス、ブラックスクリーン、状態チェッカーを使って再現したケース
(nvTestlaSurfaceTesla, IGAccelGLContext, IGAccelSurface…)
ベストプラクティス/秘訣 2/3
• 再現:
– ネットワーク経由のログ
– NVRAMへのログ?メモリへのログ、 kdp_panic_dump コールバック?
– コアダンプサーバ
• sh-3.2# nvram boot-args=”pmuflags=1 debug=0xd44 kext-dev-mode=1 kcsuffix=development –v _panicd_ip=10.64.80.106”
– Thunderbolt+fwkdp+lldb
• 自動化
– kdp_panic_dump callback+dump+reboot?
– VM(Vmware fusion, Qemu…) ロールバック?
ベストプラクティス/秘訣 3/3
• その他のトリック:
– 時々ファズを推奨
– 通常のプログラム起動中 – おもむろにファズ
– OSのバージョンアップを最新のKDKと共に継続する
アジェンダ
• 私たちは何者?
– CVE リスト
• パッシブファジングフレームワーク
– アプローチと検討
– 実装
– コンテキストエンライトメント
– ベストプラクティス
• ルート権限へのエクスプロイト
– セキュリティの緩和
– ルート
セキュリティ緩和策
• SIP (System Integrity Protection)
• KALSR
• SMAP
• SMEP
https://speakerdeck.com/marcograss/dont-trust-your-eye-apple-graphics-is-compromised
バグ vs 緩和策
Mitigation Bugs/Exploit Notes
KASLR KSlide leak e.g. CVE-2016-4655 カーネル情報の漏洩
SMAP Kernel Heap address leak CVE-2016-xxxx:ディスクイメージモジュールに
おいて、これはカーネルヒープの中に存在する
オブジェクトのアドレスをリークさせる。
SMEP a. Control RIP
b. ROP Chain
c. Disable CR4 bits
d. Execute any
CVE-2016-1820 :ディスクイメージモジュール
において、これはオブジェクトのアドレスを取
得し、関数ポインターの呼び出しとしてのオブ
ジェクトの中のQWORDの値を使う。
• OSX/iOSのハッキングの尊師ステファンエッ
サー(@i0n1c)がSyScan2012で提案した
OSUnserializeXMLはよい方法である。
https://reverse.put.as/wp-
content/uploads/2011/06/SyScan2012_StefanEsser_iOS_Kernel_Heap_Armageddon.pdf
ヒープ風水の秘訣 -OSUnserialize
• 最も多くのケースにおいて、OSDictionary は OSUnserializeXMLに
よって割り当てられ、一つのシステムコール中のOSObject::release
によって解放される
。。。
とはいえ…
とはいえ…
• もし 割り当てられたオブジェクトが他のコン
ポーネントによって参照されたら、たとえそれ
に関してobject::releaseを呼び出しても解放
されない。
• IORegistry はヒープ風水のためのよい選択
である
• それで我々は、 OSUnserializeXMLが近くの
IORegistry メソッド呼び出しを呼び出してい
るのを見つけた…
常に例外
• IOKITサービス IOMProotDomain , セ
レクター7 (kPMSleepSystemOptions)
において
RootDomainUserClient::secureSleepSystemOptions
。。。
エクスプロイト手順 1/2
payload
Ring3
Ring0
kernel
SMAP
SMEP
KASLR
kslide
Driver
Memory address – Disk Address
Call current_proc
Call proc_ucred
Call posix_cred_get
Call thread_exception_return
IOCommand
Exploit App
ROP Gadgets
mov cr4 rax; ret
Call payload
StackPivot
0x68
IOHDIXHDDriveOutKernel
xxx +0
+0x50
call [leak_addr+0x50]
[1]Leak kernel buffer IOCommand address
[3]Spray freed IOCommand
with OSData [2]Free IOCommand[5]Spray freed Object with
OSData(leaked IOCommand and
ROP)
[0]Leak kslide to
build up payload
[4]Trigger execution
xxx
2.ユーザークライアントの
IOHIDIXControllerUserClientのセレクター1
を呼ぶ。その出力から、我々はオブジェク
トのカーネルヒープアドレス
IOHDIXCommandを得ることができる。そ
して、IOHIDIXControllerUserClientのセレク
ター2を呼ぶ。そのオブジェクトをリリー
スする。
3. RootDomainUserClientの ユーザークライ
アントのセレクター 7 と共に 、慎重に準
備された<data> パートの中のROP ガ
ジェットを含むパラメーターとしてのXML
をコールする。
4. Call IOHIDIXControllerUserClient Selector
2 to get RIP execution
1. キーンチームの方法を使用してKSLIDE
を計算する
4. Call IOHIDIXControllerUserClient Selector
2 to get RIP execution
エクスプロイト手順 2/2
payload
Exploit App
call [leak_addr+0x50]
Demo
https://pan.baidu.com/s/1jH5tdki
Thanks

More Related Content

What's hot

Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019David Buck
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Takefumi MIYOSHI
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsFumitaka Yamada
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Uehara Junji
 
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料KLab勉強会#6 発表資料
KLab勉強会#6 発表資料Suguru Oho
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法LINE Corporation
 
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]David Buck
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Yuki Higuchi
 
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術Kohsuke Yuasa
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3DKouji Hosoda
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Mr. Vengineer
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタl_b__
 

What's hot (20)

Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
 
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料KLab勉強会#6 発表資料
KLab勉強会#6 発表資料
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
Slide
SlideSlide
Slide
 
Clojure
ClojureClojure
Clojure
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
 
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 

Viewers also liked

[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...
[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...
[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...CODE BLUE
 
[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes
[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes
[CB16] Who put the backdoor in my modem? by Ewerson GuimaraesCODE BLUE
 
[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...
[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...
[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...CODE BLUE
 
[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes
[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes
[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson GuimaraesCODE BLUE
 
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés RianchoCODE BLUE
 
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten NohlCODE BLUE
 
[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten Nohl[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten NohlCODE BLUE
 
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...CODE BLUE
 

Viewers also liked (8)

[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...
[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...
[CB16] Security in the IoT World: Analyzing the Security of Mobile Apps for A...
 
[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes
[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes
[CB16] Who put the backdoor in my modem? by Ewerson Guimaraes
 
[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...
[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...
[CB16] WireGuard: Next Generation Abuse-Resistant Kernel Network Tunnel by Ja...
 
[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes
[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes
[CB16] 私のモデムに誰がバックドアを仕掛けたのか? by Ewerson Guimaraes
 
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
 
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
 
[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten Nohl[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten Nohl
 
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
 

Similar to [CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang

Moony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinalMoony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinalPacSecJP
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)ryos36
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...SORACOM,INC
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
自作LSIコミュニティの可能性
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性Junichi Akita
 
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話Masawo Yamazaki
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理土岐 孝平
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチMr. Vengineer
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptxNAIST
 
Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化HitoshiSHINABE1
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignRyuji TAKEHARA
 
Bluetooth通信の 仕組みと活用法紹介
Bluetooth通信の仕組みと活用法紹介Bluetooth通信の仕組みと活用法紹介
Bluetooth通信の 仕組みと活用法紹介Takehiko YOSHIDA
 
ただのリンカを書いた話.pdf
ただのリンカを書いた話.pdfただのリンカを書いた話.pdf
ただのリンカを書いた話.pdfsimotin13 Miyazaki
 

Similar to [CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang (20)

Moony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinalMoony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinal
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
自作LSIコミュニティの可能性
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性
 
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
Reconf_201409
Reconf_201409Reconf_201409
Reconf_201409
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptx
 
Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
 
Bluetooth通信の 仕組みと活用法紹介
Bluetooth通信の仕組みと活用法紹介Bluetooth通信の仕組みと活用法紹介
Bluetooth通信の 仕組みと活用法紹介
 
ただのリンカを書いた話.pdf
ただのリンカを書いた話.pdfただのリンカを書いた話.pdf
ただのリンカを書いた話.pdf
 

More from CODE BLUE

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...CODE BLUE
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten NohlCODE BLUE
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo PupilloCODE BLUE
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫CODE BLUE
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...CODE BLUE
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka CODE BLUE
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...CODE BLUE
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...CODE BLUE
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...CODE BLUE
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...CODE BLUE
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也CODE BLUE
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...CODE BLUE
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...CODE BLUE
 

More from CODE BLUE (20)

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
 

Recently uploaded

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang

  • 2. アジェンダ • 私たちは何者? – CVE リスト • パッシブファジングフレームワーク – アプローチと検討 – 実装 – コンテキストエンライトメント – ベストプラクティス • ルート権限へのエクスプロイト – セキュリティの緩和 – ルート
  • 3. Moony Li - @Flyic - 7 years security - Sandcastle - Deep Discovery - Exploit Detection - Mac/Windows Kernel - Android Vulnerability
  • 4. Jack Tang - @jacktang310 - 10+ years security - Browser - Document - Mac/Windows Kernel - Virtualization Vulnerability
  • 5. で? • 下記は2015年から今までに提出したCVE と ZDI リスト (提出しているがペンディングのも のは含んでいない): CVE-2015-3787, CVE-2015-5867, CVE-2015-7021,CVE-2015-7020, CVE-2016-1716,ZDI-CAN-3536,ZDI-CAN-3558, ZDI-CAN-3598,ZDI- CAN-3596,ZDI-CAN-3603,CVE-2015-7067, CVE-2015-7076,CVE-2015- 7106,CVE-2015-7109,CVE-2016-1718,CVE-2016-1747,CVE-2016- 1749,CVE-2016-1753, ZDI-CAN-3693, ZDI-CAN-3694, CVE-2016-1795, CVE-2016-1808, CVE-2016-1810, CVE-2016-1817, CVE-2016-1820, CVE-2016-1798, CVE-2016-1799, CVE-2016-1812, CVE-2016-1814, CVE-2016-1818, CVE-2016-1816, CVE-2016-4648,CVE-2016-4699, CVE-2016-4700,CVE-2016-4750 • Root権限 10.11.3(時点) バグとともに2回
  • 6. アジェンダ • 私たちは何者? – CVE リスト • パッシブファジングフレームワーク – アプローチと検討 – 実装 – コンテキストエンライトメント – ベストプラクティス • ルート権限へのエクスプロイト – セキュリティの緩和 – ルート
  • 7. 一般的にどうやってバグをファズするのか? • IOKit インターフェースによる伝統的なファジング 通常は、彼らがテストしたいIOKitサービスネームを開き、IOKitユーザーモードAPI(e.g. IOConnectCallMethod) で ファジングデータを注入する – コールシーケンス依存 • AppleCamIn (OpenDevice, PowerOnCamera…) – 入力データ依存 • AppleHDAEngineInput(input as user mode buffer pointer) – タイミング依存 • IOHDIXHDDriveOutKernel( mount dmg)
  • 10. なぜなら Poison Here? Dam poison Passive fuzzing River Stream Data flow of code execution (Open driver, IOCtl driver……) Up stream User mode data Down stream Kernel mode data Poison at Dam Fuzz at hook of system call Fish die in downstream Kernel crash Trace the poison origin Reproduction …
  • 11. アジェンダ • 私たちは何者? – CVE リスト • パッシブファジングフレームワーク – アプローチと検討 – 実装 – コンテキストエンライトメント – ベストプラクティス • ルート権限へのエクスプロイト – セキュリティの緩和 – ルート
  • 13. アーキテクチャ概要 Origianl function Hooker IOAcceleratorFamily2.kext Targeted application from apple store Suspicious module/function manifest IOThunderboltFamily.kext IOUSBFamily.kext AppleGraphicsPowerManagement.kext AppleHDA.kext … … I. is_io_connect_method II. is_io_connect_async_method III. iokit_user_client_trap IV. IOMemoryDescriptor::createMappingInTask V. ipc_kmsg_get VI. ipc_kmsg_send VII. Copyio …... Conditon Checker Ring3 Ring0 Target drivers XNU/ IOKit Tamper StackFrame, Process, UserClient, MsgID, …... Context Matcher
  • 14. 擬似コード TargetAPI(params): //Call Original_TargetAPI(params) if (matchWhitelistParameter(params)) goto _exit(); if !(matchStackFrame() && matchBlacklistParameter(params)) goto _exit; if (random()) {record(params); fuzz(params);} Call Original_TargetAPI(params); if (matchContext(params)) alert;
  • 15. もっと知りたい? Hooker & Tamper • Hooker – ユーザーから直接汚染可能 – 多くのプロセスのための一つのフック • カーネルモード中のインラインフック • Tamper – ユーザーによって触れることができるバッファコンテンツのみのファジング • Inband_input, scalar_input, ool_input • サイズではない!(getTargetAndMethodForIndex のバイパスのチェック)
  • 16. … 0xffffff80c0c7b720 0xffffff7fa96ec9f2 AppleIntelHD3000Graphics`Gen6GLContext::bind_texture(VendorGLStreamInfo&, unsigned int, unsigned int, bool, Gen575TextureBuffer**) + 0x12e 0xffffff80c0c7b7c0 0xffffff7fa96f2bd5 AppleIntelHD3000Graphics`Gen6GLContext::process_token_BindTextures(VendorGLStreamInfo&) + 0x103 0xffffff80c0c7b7f0 0xffffff7fa96b6242 AppleIntelHD3000Graphics`IOIntelGLContext::processCommandBuffer(VendorCommandDescriptor*) + 0x12c 0xffffff80c0c7b820 0xffffff7fa96ec1eb AppleIntelHD3000Graphics`Gen6GLContext::processCommandBuffer(VendorCommandDescriptor*) + 0x7b 0xffffff80c0c7b900 0xffffff7fa96b540a AppleIntelHD3000Graphics`IOIntelGLContext::clientMemoryForType(unsigned int, unsigned int*, IOMemoryDescriptor**) + 0x5bc 0xffffff80c0c7b950 0xffffff7fa96b39c3 AppleIntelHD3000Graphics`IOIntelGLContext::submit_command_buffer(unsigned int, sIOGLGetCommandBuffer*) + 0x63 0xffffff80c0c7b980 0xffffff80276b9626 ::shim_io_connect_method_scalarI_structureO(IOExternalMethod *, IOService *, const io_user_scalar_t *, mach_msg_type_number_t, char *, IOByteCount *)((IOExternalMethod *) method = <>, , (IOService *) object = <>, , (const io_user_scalar_t *) input = <>, , (mach_msg_type_number_t) inputCount = <>, , (char *) output = <register r10 is not available>, , (IOByteCount *) outputCount = <register r11 is not available>, ) 0xffffff80c0c7b9e0 0xffffff80276baef0 IOUserClient::externalMethod(unsigned int, IOExternalMethodArguments*, IOExternalMethodDispatch*, OSObject*, void*)((IOUserClient *) this = <>, , (uint32_t) selector = <>, , (IOExternalMethodArguments *) args = 0xffffff80c0c7ba00, (IOExternalMethodDispatch *) dispatch = <>, , (OSObject *) target = <>, , (void *) reference = <>, ) 0xffffff80c0c7bb20 0xffffff80276b7f77 ::is_io_connect_method(io_connect_t, uint32_t, io_user_scalar_t *, mach_msg_type_number_t, char *, mach_msg_type_number_t, mach_vm_address_t, mach_vm_size_t, char *, mach_msg_type_number_t *, io_user_scalar_t *, mach_msg_type_number_t *, mach_vm_address_t, mach_vm_size_t *)((io_connect_t) connection = 0xffffff80c0c7ba60, (uint32_t) selector = 16, (io_user_scalar_t *) scalar_input = <>, , (mach_msg_type_number_t) scalar_inputCnt = <>, , (char *) inband_input = <>, , (mach_msg_type_number_t) inband_inputCnt = 0, (mach_vm_address_t) ool_input = <>, , (mach_vm_size_t) ool_input_size = <no location, value may have been optimized out>, , (char *) inband_output = <no location, value may have been optimized out>, , (mach_msg_type_number_t *) inband_outputCnt = <no location, value may have been optimized out>, , (io_user_scalar_t *) scalar_output = <>, , (mach_msg_type_number_t *) scalar_outputCnt = <no location, value may have been optimized out>, , (mach_vm_address_t) ool_output = <>, , (mach_vm_size_t *) ool_output_size = <>, ) 0xffffff80c0c7bcd0 0xffffff7fa9cd34ab trampline_is_io_connect_method((io_connect_t) connection = 0xffffff8035637000, (uint32_t) selector = 16, (io_user_scalar_t *) scalar_input = 0xffffff80331a4dcc, (mach_msg_type_number_t) scalar_inputCnt = 1, (char *) inband_input = 0xffffff80331a4dd8 "", (mach_msg_type_number_t) inband_inputCnt = 0, (mach_vm_address_t) ool_input = 0, (mach_vm_size_t) ool_input_size = 0, (char *) inband_output = 0xffffff8035805600 "", (mach_msg_type_number_t *) inband_outputCnt = 0xffffff80358055fc, (io_user_scalar_t *) scalar_output = 0xffffff80c0c7bd30, (mach_msg_type_number_t *) scalar_outputCnt = 0xffffff80c0c7bd2c, (mach_vm_address_t) ool_output = 0, (mach_vm_size_t *) ool_output_size = 0xffffff80331a4df8) 0xffffff80c0c7bde0 0xffffff8027158750 _Xio_connect_method((mach_msg_header_t *) InHeadP = <>, , (mach_msg_header_t *) OutHeadP = 0xffffff80358055d0) 0xffffff80c0c7be10 0xffffff8027083443 ipc_kobject_server((ipc_kmsg_t) request = 0xffffff80331a4d40) 0xffffff80c0c7be50 0xffffff802705ef03 ipc_kmsg_send((ipc_kmsg_t) kmsg = <>, , (mach_msg_option_t) option = <>, , (mach_msg_timeout_t) Hooker の実例?未報告なクラッシュの抜粋
  • 17. フッカーの要約 • (Driver interface)is_io_connect_method • (Driver interface)is_io_connect_async_method • (Kernel)iokit_user_client_trap • (Kernel)IOMemoryDescriptor::createMappingInTask • (Mach Msg)ipc_kmsg_get • (Mach Msg)ipc_kmsg_send • (General IO)Copyio • …
  • 19. なぜ状態チェッカーか • 安定したファジングを続ける – ノイズを取り除く • ビジー呼び出し、ブラックスクリーン呼び出し、ハング呼び出し • 再現されたクラッシュ • 脆弱性のコンテキストによる追跡 – カーネルヒープリーク – カーネル中のユーザーデータのマップとバッファサイズとして の読み込み – …
  • 20. チェッカーの動作 状態の範囲 1/3 • &&, ||, *(wild match), white(black) • プロセス – ユーザーID (ルート/ルート以外) – プロセス名 (e.g. Safari, RCE, sandbox-evasion) • モジュール – モジュール名 • 機能 – シンボル名/アドレス – オフセットの範囲
  • 21. ホワイトリストのサンプル //Config for mac prodetail_control_entry_t g_white_listing_detail_control[] ={ // procName,uid,driverBundleName, driverClassName, selFunctionNO //"*",0,"*","*",ANY_MATCH_INTEGER,#if 0 //Reported or collected yet: //{"*",PROCESS_UID_ANY_INTEGER,"*","AGPMClient",7312}, //{"*",PROCESS_UID_ANY_INTEGER,"*", "nvDeviceTesla", 5}, //{"*",PROCESS_UID_ANY_INTEGER,"*", "NV2DContextTesla", 17}, //{"*",PROCESS_UID_ANY_INTEGER,"*","IONVSurfaceTesla",10}, //{"*",PROCESS_UID_ANY_INTEGER,"*","IOHDIXHDDriveOutKernelUserClient",2}, {"*",PROCESS_UID_ANY_INTEGER,"*","IGAccelSharedUserClient",1},//crash-24 {"*",PROCESS_UID_ANY_INTEGER,"*","AccelSurface",16},//crash-23 {"*",PROCESS_UID_ANY_INTEGER,"*",OBJECT_CLASS_NAME_NO_FOUND,16}, {"*",PROCESS_UID_ANY_INTEGER,"*","HD",2},//crash-21 //"*",PROCESS_UID_ANY_INTEGER,"*","Accel",2,//crash-28 //"*",PROCESS_UID_ANY_INTEGER,"*","IG",2,//crash-28 //"*",PROCESS_UID_ANY_INTEGER,"*","Con",2,//crash-28 "*",PROCESS_UID_ANY_INTEGER,"*","IGAccelSharedUserClient",0,//crash-29 "*",PROCESS_UID_ANY_INTEGER,"*","IOThunderboltFamilyUserClient",22,//crash-30 //"*",PROCESS_UID_ANY_INTEGER,"*","IG",ANY_MATCH_INTEGER, //"*",PROCESS_UID_ANY_INTEGER,"*","Accel",ANY_MATCH_INTEGER, //"vm",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER, //"*",PROCESS_UID_ANY_INTEGER,"*","vm",ANY_MATCH_INTEGER, "sandbox",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER, "dog",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER, //{"WindowServer",PROCESS_UID_ANY_INTEGER,"*","AccelSurface",16},//crash-23 //"*",PROCESS_UID_ANY_INTEGER,"*","SMC",ANY_MATCH_INTEGER, //"windowserver",PROCESS_UID_ANY_INTEGER,"*","*",ANY_MATCH_INTEGER,};
  • 22. チェックの方法 状態の範囲 2/3 • データ – is_address_RWX – コピーの方向(in/out) – カーネルかユーザー領域か (SMAP ノイズ) • コールスタック – ret機能 – スタックレベル (下から上) – レベルの範囲[,]
  • 23. スタックフレームのサンプル stack_match_item_t stack_matcher_for_copyio[]={ //If any item in list match, then match //{routineName, cache}, routineAddress, offSetFrom, offsetTo, levelLow, levelHigh {{"_shim_io_connect_method_scalarI_scalarO",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xC120- 0xB8B0, STACK_ALL_LEVEL_RANGE}, {{"_shim_io_connect_method_scalarI_structureO",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xDB94- 0xD5C0, STACK_ALL_LEVEL_RANGE}, {{"_shim_io_connect_method_scalarI_structureI",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xEA97- 0xE490, STACK_ALL_LEVEL_RANGE}, {{"_shim_io_connect_method_structureI_structureO",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xF588-0xF270, STACK_ALL_LEVEL_RANGE}, {{"_is_io_connect_method",STACK_ANY_INTEGER},STACK_ANY_INTEGER,0, 0xb2a9- 0xaf10,STACK_ALL_LEVEL_RANGE}, }
  • 24. チェックの方法 状態の範囲 3/3 • その他 – Mach_msg • msg subsystem id… – ユーザークライアント • サービス名、クラス名、セテクター…
  • 25. ユーザークライアントのサンプル detail_control_entry_t g_white_listing_detail_control[] ={ // procName,uid,driverBundleName, driverClassName, selFunctionNO //{"*",PROCESS_UID_ANY_INTEGER,"*","AGPMClient",7312},, {"*",PROCESS_UID_ANY_INTEGER,"*","IGAccelSharedUserClient",1},//crash-24 {"*",PROCESS_UID_ANY_INTEGER,"*","AccelSurface",16},//crash-23 {"*",PROCESS_UID_ANY_INTEGER,"*",OBJECT_CLASS_NAME_NO_FOUND,16}, {"*",PROCESS_UID_ANY_INTEGER,"*","HD",2},//crash-21 {"*",PROCESS_UID_ANY_INTEGER,"*","IX",2},//crash-21 "*",PROCESS_UID_ANY_INTEGER,"*","AGPM",7312,//crash-11 "*",PROCESS_UID_ANY_INTEGER,"*","IGAccelGLContext",2,//crash-28
  • 26. Mach-msg のサンプル #define KMSG_IOKIT_SUBSYSTEM_RANGE 0xAF0, 0x0B47 detail_control_entry_for_ipc_kmsg_send_t g_black_listing_detail_control_foripc_kmsg_send[] ={ //procName,uid,msg_id_from, msg_id_to, routineName, addr, addr_offset_from, addr_offset_to "chrome",PROCESS_UID_ANY_INTEGER, KMSG_IOKIT_SUBSYSTEM_RANGE,"__Xio_connect_method",KMSG_ADDR_OFFSET_ANY_RANGE,KMSG_LEAVI NG,}; • #define KMSG_IOKIT_SUBSYSTEM_RANGE 0xAF0, 0x0B47 • #define KMSG_MACH_VM_SUBSYSTEM_RANGE 0x12C0, 0x12D4 • #define KMSG_MACH_PORT_SUBSYSTEM_RANGE 0xC80, 0x0CA4 • #define KMSG_MACH_HOST_SUBSYSTEM_RANGE 0xC8, 0xE4 • #define KMSG_HOST_PRIV_SUBSYSTEM_RANGE 0x190, 0x1AA • ……
  • 27. なぜコンテキストを使うのか • コードレビューのすすめ – バグだらけのモジュール、REのためのインターフェース…… • バグハンティングの経験によって蓄積されたパ ターン • 脆弱性ではないが怪しい脆弱性の兆候 • 状態チェッカーを介した実装
  • 28. コンテキストのサンプル • いくつかのIOKitのメモリの破損に関係する脆 弱性がどうなるかは以下のコンテキスト: – カーネルモードへのマッピングユーザーモードバッファー領域に IOMemoryDescriptor::createMappingInTaskを呼び出す。 – バッファーからの値の読み込みと書き込みまたは読み込みのバッファー へのサイズとしてのそれらを使用する。 • いくつかのカーネル情報が漏れた脆弱性がどう なるかは以下のコンテキスト: – 出力バッファーのコンテンツは 0xFFFFFF プリフィクスを持っている。
  • 30. ベストプラクティス/秘訣 1/3 • ファジングのソース: – 複数のアプリケーション • AppStore(MMORPGゲーム、FaceTime、USBハードディスク、ブルートゥース、Wifi、VM、DirectX…) • Virus Total、Apple OpenSource UT、github サンプルコード – 豊富な種類のファジングのソースの組み合わせ • アクティブファジング, Python watchdog, browsing WebGL • ファジングの安定性: – アクティブハングのバイパス、ブラックスクリーン、状態チェッカーを使って再現したケース (nvTestlaSurfaceTesla, IGAccelGLContext, IGAccelSurface…)
  • 31. ベストプラクティス/秘訣 2/3 • 再現: – ネットワーク経由のログ – NVRAMへのログ?メモリへのログ、 kdp_panic_dump コールバック? – コアダンプサーバ • sh-3.2# nvram boot-args=”pmuflags=1 debug=0xd44 kext-dev-mode=1 kcsuffix=development –v _panicd_ip=10.64.80.106” – Thunderbolt+fwkdp+lldb • 自動化 – kdp_panic_dump callback+dump+reboot? – VM(Vmware fusion, Qemu…) ロールバック?
  • 32. ベストプラクティス/秘訣 3/3 • その他のトリック: – 時々ファズを推奨 – 通常のプログラム起動中 – おもむろにファズ – OSのバージョンアップを最新のKDKと共に継続する
  • 33. アジェンダ • 私たちは何者? – CVE リスト • パッシブファジングフレームワーク – アプローチと検討 – 実装 – コンテキストエンライトメント – ベストプラクティス • ルート権限へのエクスプロイト – セキュリティの緩和 – ルート
  • 34. セキュリティ緩和策 • SIP (System Integrity Protection) • KALSR • SMAP • SMEP https://speakerdeck.com/marcograss/dont-trust-your-eye-apple-graphics-is-compromised
  • 35. バグ vs 緩和策 Mitigation Bugs/Exploit Notes KASLR KSlide leak e.g. CVE-2016-4655 カーネル情報の漏洩 SMAP Kernel Heap address leak CVE-2016-xxxx:ディスクイメージモジュールに おいて、これはカーネルヒープの中に存在する オブジェクトのアドレスをリークさせる。 SMEP a. Control RIP b. ROP Chain c. Disable CR4 bits d. Execute any CVE-2016-1820 :ディスクイメージモジュール において、これはオブジェクトのアドレスを取 得し、関数ポインターの呼び出しとしてのオブ ジェクトの中のQWORDの値を使う。
  • 37. • 最も多くのケースにおいて、OSDictionary は OSUnserializeXMLに よって割り当てられ、一つのシステムコール中のOSObject::release によって解放される 。。。 とはいえ…
  • 38. とはいえ… • もし 割り当てられたオブジェクトが他のコン ポーネントによって参照されたら、たとえそれ に関してobject::releaseを呼び出しても解放 されない。 • IORegistry はヒープ風水のためのよい選択 である • それで我々は、 OSUnserializeXMLが近くの IORegistry メソッド呼び出しを呼び出してい るのを見つけた…
  • 39. 常に例外 • IOKITサービス IOMProotDomain , セ レクター7 (kPMSleepSystemOptions) において RootDomainUserClient::secureSleepSystemOptions 。。。
  • 40. エクスプロイト手順 1/2 payload Ring3 Ring0 kernel SMAP SMEP KASLR kslide Driver Memory address – Disk Address Call current_proc Call proc_ucred Call posix_cred_get Call thread_exception_return IOCommand Exploit App ROP Gadgets mov cr4 rax; ret Call payload StackPivot 0x68 IOHDIXHDDriveOutKernel xxx +0 +0x50 call [leak_addr+0x50] [1]Leak kernel buffer IOCommand address [3]Spray freed IOCommand with OSData [2]Free IOCommand[5]Spray freed Object with OSData(leaked IOCommand and ROP) [0]Leak kslide to build up payload [4]Trigger execution xxx 2.ユーザークライアントの IOHIDIXControllerUserClientのセレクター1 を呼ぶ。その出力から、我々はオブジェク トのカーネルヒープアドレス IOHDIXCommandを得ることができる。そ して、IOHIDIXControllerUserClientのセレク ター2を呼ぶ。そのオブジェクトをリリー スする。 3. RootDomainUserClientの ユーザークライ アントのセレクター 7 と共に 、慎重に準 備された<data> パートの中のROP ガ ジェットを含むパラメーターとしてのXML をコールする。 4. Call IOHIDIXControllerUserClient Selector 2 to get RIP execution 1. キーンチームの方法を使用してKSLIDE を計算する 4. Call IOHIDIXControllerUserClient Selector 2 to get RIP execution

Editor's Notes

  1. Welcome everyone I’m very happy to be presenting here today at the CodeBlue conference. My name is Moony and I will be presenting today on the topic of How we fuzz and exploit the Apple core.
  2. Today I will cover several key areas 1. First I’ll tell you a little about me and my partner, and what we have done I will then introduce you to passive fuzzing framework that we use to hunt vulnerabilities. And finally I will show you exploit tips using the vulnerabilities we have found and how we root OSX machines.
  3. My name is Moony I’ve worked for 7 years in security. My role has been to develop sandbox systems. Focusing on Mac - Windows and Android Kernel vulnerabilities. Moony Li: Twitter: @Flyic 7 years of security production development RD Leader of Sandcastle core engine of DD(Deep Discovery) production for Gateway 0day exploit detection. Current focusing on research about Mac/Windows kernel ,Android vulnerability and exploit Jack Tang: Twitter: @jacktang310 10 years of anti-malware solution development Familiar with Windows/Mac kernel technology, browser and document exploit. Current focusing on research about Mac, virtualization vulnerability and exploit
  4. My partners name is Jack Jack has worked in security for 10 years His focus has been on browser and document vulnerabilities as well as Mac – Windows and virtualization vulnerabilities. Jack cannot be with us today he has broken his leg and is not able to travel. Moony Li: Twitter: @Flyic 7 years of security production development RD Leader of Sandcastle core engine of DD(Deep Discovery) production for Gateway 0day exploit detection. Current focusing on research about Mac/Windows kernel ,Android vulnerability and exploit Jack Tang: Twitter: @jacktang310 10 years of anti-malware solution development Familiar with Windows/Mac kernel technology, browser and document exploit. Current focusing on research about Mac, virtualization vulnerability and exploit
  5. We are proud to have found many vulnerabilities, exploiting them to root OSX machines Because of our work we have been awarded many CVE credits as shown here
  6. Today I will cover several key areas 1. First I’ll tell you a little about me and my partner, and what we have done I will then introduce you to passive fuzzing framework that we use to hunt vulnerabilities. And finally I will show you exploit tips using the vulnerabilities we have found and how we root OSX machines.
  7. 1. Traditional fuzzing by IOKit interface. These researchers open the IOKit service name which they want to test, and pour fuzzing data into kernel by the IOKit usermode API (e.g. IOConnectCallMethod, IOConnectCallAsyncMethod …) Optimized Fuzzing IOKit in iOS, Blackhat 2015 https://www.blackhat.com/docs/us-15/materials/us-15-Lei-Optimized-Fuzzing-IOKit-In-iOS-wp.pdf But it has a critical limitation. It is hard to hunt the bugs which are triggered with condition dependency. We summarize the condition decency as following: *Call sequence dependency For example: for the IOKit service “AppleCamIn”, which controls camera device, only correct IOConnectCallMethod call sequence would it work up: OpenDevice -> PowerOnCamera -> … If the fuzzer doesn’t invoke OpenDevice and PowerOnCamera IOKit call, following IOKit call will be returned with failure in earlier stage. *Input data dependency For example: the IOKit service “AppleHDAEngineInput” ‘s user client “IOAudioEngineUserClient” requires the input data to include a user mode buffer pointer. If the fuzzer doesn’t prepared the user mode buffer before , error will be returned in earlier stage. *Timing dependency For example: for the IOKit service “IOHDIXHDDriveOutKernel”, the service only appears after user or application opens a DMG file. If the fuzzer open it directly , it will fails directly.
  8. 2. Code review of target kernel extension This costs much effort to reverse binary code and in the face of so many IOKit services and userclient. So the target selecting will impact researcher’s efficiency. What target should be reviewed firstly for more possible vulnerabilities is a headache problem.
  9. Today I will cover several key areas 1. First I’ll tell you a little about me and my partner, and what we have done I will then introduce you to passive fuzzing framework that we use to hunt vulnerabilities. And finally I will show you exploit tips using the vulnerabilities we have found and how we root OSX machines.
  10. 0xffffff80c0c7b590 0xffffff7fa96c61a6 AppleIntelHD3000Graphics`IOGen575Tree::RemoveFromTree() + 0x102 0xffffff80c0c7b5d0 0xffffff7fa96c63ba AppleIntelHD3000Graphics`IOGen575Tree::FindOrCreateBlock(unsigned int, unsigned int, unsigned int&) + 0xca 0xffffff80c0c7b620 0xffffff7fa96d6a26 AppleIntelHD3000Graphics`IntelMemory::allocFixedPitch(IntelMemoryElement*, unsigned int, unsigned int, unsigned int, unsigned int) + 0xde 0xffffff80c0c7b660 0xffffff7fa96dac02 AppleIntelHD3000Graphics`Gen6Accelerator::allocateTexture(Gen575TextureBuffer*) + 0xbc 0xffffff80c0c7b6a0 0xffffff7fa96ecd9e AppleIntelHD3000Graphics`Gen6GLContext::alloc_and_load_texture(Gen575TextureBuffer*) + 0x2bc 0xffffff80c0c7b6d0 0xffffff7fa96ec067 AppleIntelHD3000Graphics`Gen6GLContext::get_texture(VendorGLStreamInfo&, Gen575TextureBuffer*, bool) + 0x3d 0xffffff80c0c7b720 0xffffff7fa96ec9f2 AppleIntelHD3000Graphics`Gen6GLContext::bind_texture(VendorGLStreamInfo&, unsigned int, unsigned int, bool, Gen575TextureBuffer**) + 0x12e 0xffffff80c0c7b7c0 0xffffff7fa96f2bd5 AppleIntelHD3000Graphics`Gen6GLContext::process_token_BindTextures(VendorGLStreamInfo&) + 0x103 0xffffff80c0c7b7f0 0xffffff7fa96b6242 AppleIntelHD3000Graphics`IOIntelGLContext::processCommandBuffer(VendorCommandDescriptor*) + 0x12c 0xffffff80c0c7b820 0xffffff7fa96ec1eb AppleIntelHD3000Graphics`Gen6GLContext::processCommandBuffer(VendorCommandDescriptor*) + 0x7b 0xffffff80c0c7b900 0xffffff7fa96b540a AppleIntelHD3000Graphics`IOIntelGLContext::clientMemoryForType(unsigned int, unsigned int*, IOMemoryDescriptor**) + 0x5bc 0xffffff80c0c7b950 0xffffff7fa96b39c3 AppleIntelHD3000Graphics`IOIntelGLContext::submit_command_buffer(unsigned int, sIOGLGetCommandBuffer*) + 0x63 0xffffff80c0c7b980 0xffffff80276b9626 ::shim_io_connect_method_scalarI_structureO(IOExternalMethod *, IOService *, const io_user_scalar_t *, mach_msg_type_number_t, char *, IOByteCount *)((IOExternalMethod *) method = <>, , (IOService *) object = <>, , (const io_user_scalar_t *) input = <>, , (mach_msg_type_number_t) inputCount = <>, , (char *) output = <register r10 is not available>, , (IOByteCount *) outputCount = <register r11 is not available>, ) 0xffffff80c0c7b9e0 0xffffff80276baef0 IOUserClient::externalMethod(unsigned int, IOExternalMethodArguments*, IOExternalMethodDispatch*, OSObject*, void*)((IOUserClient *) this = <>, , (uint32_t) selector = <>, , (IOExternalMethodArguments *) args = 0xffffff80c0c7ba00, (IOExternalMethodDispatch *) dispatch = <>, , (OSObject *) target = <>, , (void *) reference = <>, ) 0xffffff80c0c7bb20 0xffffff80276b7f77 ::is_io_connect_method(io_connect_t, uint32_t, io_user_scalar_t *, mach_msg_type_number_t, char *, mach_msg_type_number_t, mach_vm_address_t, mach_vm_size_t, char *, mach_msg_type_number_t *, io_user_scalar_t *, mach_msg_type_number_t *, mach_vm_address_t, mach_vm_size_t *)((io_connect_t) connection = 0xffffff80c0c7ba60, (uint32_t) selector = 16, (io_user_scalar_t *) scalar_input = <>, , (mach_msg_type_number_t) scalar_inputCnt = <>, , (char *) inband_input = <>, , (mach_msg_type_number_t) inband_inputCnt = 0, (mach_vm_address_t) ool_input = <>, , (mach_vm_size_t) ool_input_size = <no location, value may have been optimized out>, , (char *) inband_output = <no location, value may have been optimized out>, , (mach_msg_type_number_t *) inband_outputCnt = <no location, value may have been optimized out>, , (io_user_scalar_t *) scalar_output = <>, , (mach_msg_type_number_t *) scalar_outputCnt = <no location, value may have been optimized out>, , (mach_vm_address_t) ool_output = <>, , (mach_vm_size_t *) ool_output_size = <>, ) 0xffffff80c0c7bcd0 0xffffff7fa9cd34ab trampline_is_io_connect_method((io_connect_t) connection = 0xffffff8035637000, (uint32_t) selector = 16, (io_user_scalar_t *) scalar_input = 0xffffff80331a4dcc, (mach_msg_type_number_t) scalar_inputCnt = 1, (char *) inband_input = 0xffffff80331a4dd8 "", (mach_msg_type_number_t) inband_inputCnt = 0, (mach_vm_address_t) ool_input = 0, (mach_vm_size_t) ool_input_size = 0, (char *) inband_output = 0xffffff8035805600 "", (mach_msg_type_number_t *) inband_outputCnt = 0xffffff80358055fc, (io_user_scalar_t *) scalar_output = 0xffffff80c0c7bd30, (mach_msg_type_number_t *) scalar_outputCnt = 0xffffff80c0c7bd2c, (mach_vm_address_t) ool_output = 0, (mach_vm_size_t *) ool_output_size = 0xffffff80331a4df8) 0xffffff80c0c7bde0 0xffffff8027158750 _Xio_connect_method((mach_msg_header_t *) InHeadP = <>, , (mach_msg_header_t *) OutHeadP = 0xffffff80358055d0) 0xffffff80c0c7be10 0xffffff8027083443 ipc_kobject_server((ipc_kmsg_t) request = 0xffffff80331a4d40) 0xffffff80c0c7be50 0xffffff802705ef03 ipc_kmsg_send((ipc_kmsg_t) kmsg = <>, , (mach_msg_option_t) option = <>, , (mach_msg_timeout_t) send_timeout = 0) 0xffffff80c0c7bec0 0xffffff8027075985 mach_msg_overwrite_trap((mach_msg_overwrite_trap_args *) args = <>, ) 0xffffff80c0c7bf10 0xffffff7fa9ce413c trampline_mach_msg_overwrite_trap((mach_msg_overwrite_trap_args *) args = 0xffffff80c0c7bf28) 0xffffff80c0c7bfb0 0xffffff802717f000 mach_call_munger64((x86_saved_state_t *) state = 0xffffff8035407b80) 0x0000000000000000 0xffffff80271b4de6 kernel.development`hndl_mach_scall64 + 0x16 stackbottom = 0xffffff80c0c7bfb0
  11. typedef struct _symbole_routine_t { char rountineName[PATH_MAX]; uint64_t uCache; } symbole_routine_t; typedef struct _stack_match_item_t { symbole_routine_t symbolRoutine; uint64_t addressRoutine; uint64_t uOffSetFrom; uint64_t uOffSetTo; uint64_t uLevelLow; uint64_t uLevelHigh; } stack_match_item_t;
  12. #define KMSG_IOKIT_SUBSYSTEM_RANGE 0xAF0, 0x0B47 #define KMSG_MACH_VM_SUBSYSTEM_RANGE 0x12C0, 0x12D4 #define KMSG_MACH_PORT_SUBSYSTEM_RANGE 0xC80, 0x0CA4 #define KMSG_MACH_HOST_SUBSYSTEM_RANGE 0xC8, 0xE4 #define KMSG_HOST_PRIV_SUBSYSTEM_RANGE 0x190, 0x1AA #define KMSG_HOST_SECURITY_SUBSYSTEM_RANGE 0x258, 0x25A #define KMSG_CLOCK_SUBSYSTEM_RANGE 0x3E8, 0x3EB #define KMSG_CLOCK_PRIV_SUBSYSTEM_RANGE 0x4B0, 0x4B2 #define KMSG_PROCESSOR_SUBSYSTEM_RANGE 0xBB8, 0xBBE #define KMSG_PROCESSOR_SET_SUBSYSTEM_RANGE 0xFA0, 0xFAA #define KMSG_LOCK_SET_SUBSYSTEM_RANGE 0x96A28, 0x96A2E #define KMSG_TASK_SUBSYSTEM_RANGE 0x0D48, 0x0D72 #define KMSG_THREAD_ACT_SUBSYSTEM_RANGE 0x0E10, 0x0E2C #define KMSG_VM32_MAP_SUBSYSTEM_RANGE 0x0ED8, 0x0EF7 #define KMSG_UNDREPLY_SUBSYSTEM_RANGE 0x1838, 0x183A #define KMSG_DEFAULT_PAGER_OBJECT_SUBSYSTEM_RANGE 0x8E3, 0x8EE #define KMSG_MACH_VOUCHER_SUBSYSTEM_RANGE 0x1518, 0x151D #define KMSG_MACH_VOUCHER_SUBSYSTEM_RANGE 0x8E3, 0x8EE #define KMSG_MACH_VOUCHER_ATTR_CONTROL_SUBSYSTEM_RANGE 0x15E0, 0x15E2 ///NOT IN MIG_E below #define KMSG_CATCH_EXC_SUBSYSTEM_RANGE 0x961, 0x964 #define KMSG_CATCH_MACH_EXC_SUBSYSTEM_RANGE 0x965, 0x968 #define KMSG_DP_MEMORY_OBJECT_SUBSYSTEM_RANGE 0x898, 0x8A2 #define KMSG_MEMORY_OBJECT_CONTROL_SUBSYSTEM_RANGE 0x7D0, 0x7DC #define KMSG_UPL_SUBSYSTEM_RANGE 0x802, 0x806
  13. Today I will cover several key areas 1. First I’ll tell you a little about me and my partner, and what we have done I will then introduce you to passive fuzzing framework that we use to hunt vulnerabilities. And finally I will show you exploit tips using the vulnerabilities we have found and how we root OSX machines.
  14. a. Use KEEN team’s published method (Reference section [7]) to calculate KSLIDE. b. Open any DMG file in order to let IOHDIXHDDriveOutKernel service can be opened. c. Open IOHDIXHDDriveOutKernel service ‘s user client IOHIDIXControllerUserClient. Open IOPMrootDomain service ‘s user client RootDomainUserClient. d. Call user client IOHIDIXControllerUserClient ‘s selector 1 (getRequest64) . From the output , we can get a kernel heap address of object IOHDIXCommand whose size is 0x68. This is vulnerability #1. e. Call IOHDIXHDDriveOutKernel service ‘s selector 2 (processReply64). It will release the object. f. Call RootDomainUserClient user client ‘s selector 7 (kPMSleepSystemOptions) with a carefully prepared XML as parameter , which include ROP gadget in <data> part. The <data> part occurs multiply times in order to occupy the target space successfully. We tune the XML ‘s <data> ‘s size in order to create size 0x68 buffer which OSData field point to. After the call, our controlled buffer occupy the freed IOHDIXCommand object location. And the kernel address is known by user mode program. g. Call IOHIDIXControllerUserClient user client selector 2 (processReply64) with argument which include the address (leaked by step d). The call will take the address as a IOHDIXCommand object, and call the address located at 0x50 offset. So we control the RIP and let it execute ROP gadget. h. In the ROP gadget, we disable the SMAP and SMEP bits in CR4. Then executes the shell code to modify current process’ uid to root and fork a shell.
  15. https://pan.baidu.com/s/1jH5tdki