SlideShare a Scribd company logo
1 of 43
How we fuzz and exploit the
Apple core
(P)FACE into the Apple core
and exploit to root
Agenda
• Who we are
– CVE list
• Passive fuzzing framework
– Approach & consideration
– Implementation
– Context enlightenment
– Best Practice
• Exploit to root
– Security mitigation
– Root
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
So what?
• Here below is the CVE and ZDI list until now(NOT including submitted but pending) since
2015:
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(then) twice with found bug
Agenda
• Who we are
– CVE list
• Passive fuzzing framework
– Approach & consideration
– Implementation
– Context enlightenment
– Best Practice
• Exploit to root
– Security mitigation
– Root
So… How Others Fuzz Bugs?
• Traditional fuzzing by IOKit interface
Usually open the IOKit service name which they want to test, and pour fuzzing data into by the IOKit usermode API (e.g.
IOConnectCallMethod)
– Call sequence dependency
• AppleCamIn (OpenDevice, PowerOnCamera…)
– Input data dependency
• AppleHDAEngineInput(input as user mode buffer pointer)
– Timing dependency
• IOHDIXHDDriveOutKernel( mount dmg)
Then What About Review?
•Code review of target kernel extension
This costs much effort to reverse engineering binary code and
in the face of so many IOKit services and userclient.
-Un-scalable
-Cost effort RE (upgrade)
Our approach:
Why not play (e.g. games) for
bugs
• Both code traditional fuzz and code review are tiring
• What about play (e.g. online games) to hunt kernel
bug?
• The MORE you play games, the MORE bug bounty you
get
• Just like this
Why Do You Think So?
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
…
Agenda
• Who we are
– CVE list
• Passive fuzzing framework
– Approach & consideration
– Implementation
– Context enlightenment
– Best Practice(tasted Zen)
• Exploit to root
– Security mitigation
– Root
Then, How Do You Do it?
Architecture Overview
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
Pseudo Code
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;
More Detail? Hooker & Tamper
• Hooker
– Directly accessible from user
– One hook for many processes
• Inline hook in kernel mode.
• Tamper
– Only fuzzing buffer content accessible by user
• Inband_input, scalar_input, ool_input
• NOT size!(bypass getTargetAndMethodForIndex check)
…
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)
A real Hooker example?Snippet of un-reported crash
Hooker Summary
• (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
• …
Like this in source code
Why Condition Checker
•Keep fuzzing stable
– Get rid of noise
• busy call, black screen call, hung call,
• reproduced crashes
•Hunt according to vulnerability context
– Kernel heap leak
– Map user data into kernel and read as buffer size
– …
How Checker Works Dimension of condition
1/3
• &&, ||, *(wild match), white(black)
• Process
– User id (root/Non-root)
– Process Name (e.g. Safari, RCE, sandbox-evasion)
• Module
– Module Name
• Function
– Symbol Name/Address
– Offset range
White listing Sample
//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,};
How Checker Works Dimension of condition
2/3
•Data
– is_address_RWX
– Copy direction(in/out)
– Kernel or User space (SMAP noise)
•Call-Stack
– Function ret
– Stack Level (from bottom to top)
– Level range[,]
Stack Frame Sample
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},
}
How Checker Works Dimension of condition
3/3
•Misc
– Mach_msg
• msg subsystem id…
– Userclient
• serviceName,ClassName,selector…
UserClient Sample
detail_control_entry_tg_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 Sample
#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_LE
AVING,};
• #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
• ……
Why Use Context & What is it?
•Enlightenment for code review
– Buggy module, interface for RE……
•The Pattern accumulated in bug hunting
activities
•No vulnerability but indicates suspicious
vulnerability
•Implemented through condition checker
Context Sample
• Some IOKit related memory corruption
vulnerabilities would happen in the following
context:
– Call IOMemoryDescriptor :: createMappingInTask to mapping user mode
buffer space to kernel mode.
– Read a value from the buffer and use it as a size to read or write a buffer.
•Some kernel information leak vulnerability
would happen in the following context:
– The output buffer’s content has 0xFFFFFF prefix.
Mmm,So far…What Zen Have You
Tasted?
Best Practice/Tips 1/3
• Fuzzing Source:
– Multiple application
• AppStore (MMORPG games, FaceTime,USB hardisk,BlueTooth, Wifi, VM,DirectX…)
• Virus Total, Apple OpenSource UT, github sample code
– Combination of rich kind of fuzzing source
• Active fuzzing, Python watchdog, browsing WebGL
• Fuzzing Stability:
– Bypass active hang, black screen, reproduced cases using condition checker(nvTestlaSurfaceTesla,
IGAccelGLContext, IGAccelSurface…)
Best Practice/Tips 2/3
• Reproduction:
– Log through network
– Log to NVRAM? Log to memory and kdp_panic_dump callback?
– Core dump server
• 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
• Automation
– kdp_panic_dump callback+dump+reboot?
– VM(Vmware fusion, Qemu…) revert?
Best Practice/Tips 3/3
•Misc tricks:
– Occasional fuzz activities recommended
– Normal program running – sudden fuzz
– Keep OS version updated with latest KDK
Agenda
• Who we are
– CVE list
• Passive fuzzing framework
– Approach & consideration
– Implementation
– Context enlightenment
– Best Practice(tasted Zen)
• Exploit to root
– Security mitigation
– Root
Security Mitigations
• SIP (System Integrity Protection)
• KASLR
• SMAP
• SMEP
https://speakerdeck.com/marcograss/dont-trust-your-eye-apple-graphics-is-compromised
Bugs vs Mitigation
Mitigation Bugs/Exploit Notes
KASLR KSlide leak e.g. CVE-2016-4655 kernel info leak
SMAP Kernel Heap address leak CVE-2016-xxxx: In disk image module, it will
leak a object address, which exists in kernel
heap.
SMEP a. Control RIP
b. ROP Chain
c. Disable CR4 bits
d. Execute any
CVE-2016-1820 : In disk image module, it will
take an object address and use a QWORD
value in the object as function pointer to call.
• The OSX/iOS hacking guru Stefan Esser (@i0n1c)
propose OSUnserializeXML is a good way in SyScan
2012
https://reverse.put.as/wp-
content/uploads/2011/06/SyScan2012_StefanEsser_iOS_Kernel_Heap_Armageddon.p
df
Tips of Heap FengShui -
OSUnserialize
• In most cases, the OSDictionary allocated by OSUnserializeXML will
be freed by OSObject::release in one system call
。。。
However
•If the allocated object is referenced by
another component, it will not be released
even if call object::release to it.
•IORegistry is a good choice for Heap
Fengshui
• So we find OSUnserializeXML invoking
nearby IORegistry method calling …
However
•In IOKIT service IOMProotDomain ,
slector 7 (kPMSleepSystemOptions)
RootDomainUserClient::secureSleepSystemOptions
。。。
Always an exception
Exploit Process 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
[0]Leak kslide to
build up payload
[4]Trigger execution
xxx
1. Use KEEN team’s method to calculate
KSLIDE.
2. Call user client
IOHIDIXControllerUserClient ‘s selector
1. From the output , we can get a kernel
heap address of object
IOHDIXCommand. Then call
IOHIDIXControllerUserClient ‘s selector
2. It will release the object.
3. Call RootDomainUserClient user
client ‘s selector 7 with a carefully
prepared XML as parameter , which
include ROP gadget in <data> part.
4. Call IOHIDIXControllerUserClient
Selector 2 to get RIP execution
1. Use KEEN team’s method to calculate
KSLIDE.
2. Call user client
IOHIDIXControllerUserClient ‘s selector
1. From the output , we can get a kernel
heap address of object
IOHDIXCommand. Then call
IOHIDIXControllerUserClient ‘s selector
2. It will release the object.
3. Call RootDomainUserClient user
client ‘s selector 7 with a carefully
prepared XML as parameter , which
include ROP gadget in <data> part.
4. Call IOHIDIXControllerUserClient
Selector 2 to get RIP execution
Exploit Process 2/2
payload
Exploit App
call [leak_addr+0x50]
Demo
https://pan.baidu.com/s/1jH5tdki
Thanks

More Related Content

Viewers also liked

[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 Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés RianchoCODE BLUE
 
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...CODE BLUE
 
[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...
[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...
[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...CODE BLUE
 
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...CODE BLUE
 
[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英
[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英
[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英CODE 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] 基調講演: セキュリティはどれくらいが適量? – 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] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac DawsonCODE BLUE
 

Viewers also liked (10)

[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 Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
 
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
 
[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...
[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...
[CB16] ATMS how to break them to stop the fraud. by Olga Kochetova & Alexey O...
 
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
[CB16] Electron - Build cross platform desktop XSS, it’s easier than you thin...
 
[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英
[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英
[CB16] IoTとしての自動車とセキュリティ: リモートサービスのセキュリティ評価とその対策の検討 - by 和栗直英
 
[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] 基調講演: セキュリティはどれくらいが適量? – 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] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
 

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

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Recently uploaded (20)

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

[CB16] (P)FACE into the Apple core and exploit to root by Moony Li & Jack Tang

  • 1. How we fuzz and exploit the Apple core (P)FACE into the Apple core and exploit to root
  • 2. Agenda • Who we are – CVE list • Passive fuzzing framework – Approach & consideration – Implementation – Context enlightenment – Best Practice • Exploit to root – Security mitigation – Root
  • 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. So what? • Here below is the CVE and ZDI list until now(NOT including submitted but pending) since 2015: 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(then) twice with found bug
  • 6. Agenda • Who we are – CVE list • Passive fuzzing framework – Approach & consideration – Implementation – Context enlightenment – Best Practice • Exploit to root – Security mitigation – Root
  • 7. So… How Others Fuzz Bugs? • Traditional fuzzing by IOKit interface Usually open the IOKit service name which they want to test, and pour fuzzing data into by the IOKit usermode API (e.g. IOConnectCallMethod) – Call sequence dependency • AppleCamIn (OpenDevice, PowerOnCamera…) – Input data dependency • AppleHDAEngineInput(input as user mode buffer pointer) – Timing dependency • IOHDIXHDDriveOutKernel( mount dmg)
  • 8. Then What About Review? •Code review of target kernel extension This costs much effort to reverse engineering binary code and in the face of so many IOKit services and userclient. -Un-scalable -Cost effort RE (upgrade)
  • 9. Our approach: Why not play (e.g. games) for bugs • Both code traditional fuzz and code review are tiring • What about play (e.g. online games) to hunt kernel bug? • The MORE you play games, the MORE bug bounty you get • Just like this
  • 10. Why Do You Think So? 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. Agenda • Who we are – CVE list • Passive fuzzing framework – Approach & consideration – Implementation – Context enlightenment – Best Practice(tasted Zen) • Exploit to root – Security mitigation – Root
  • 12. Then, How Do You Do it?
  • 13. Architecture Overview 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. Pseudo Code 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. More Detail? Hooker & Tamper • Hooker – Directly accessible from user – One hook for many processes • Inline hook in kernel mode. • Tamper – Only fuzzing buffer content accessible by user • Inband_input, scalar_input, ool_input • NOT size!(bypass getTargetAndMethodForIndex check)
  • 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) A real Hooker example?Snippet of un-reported crash
  • 17. Hooker Summary • (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 • …
  • 18. Like this in source code
  • 19. Why Condition Checker •Keep fuzzing stable – Get rid of noise • busy call, black screen call, hung call, • reproduced crashes •Hunt according to vulnerability context – Kernel heap leak – Map user data into kernel and read as buffer size – …
  • 20. How Checker Works Dimension of condition 1/3 • &&, ||, *(wild match), white(black) • Process – User id (root/Non-root) – Process Name (e.g. Safari, RCE, sandbox-evasion) • Module – Module Name • Function – Symbol Name/Address – Offset range
  • 21. White listing Sample //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. How Checker Works Dimension of condition 2/3 •Data – is_address_RWX – Copy direction(in/out) – Kernel or User space (SMAP noise) •Call-Stack – Function ret – Stack Level (from bottom to top) – Level range[,]
  • 23. Stack Frame Sample 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. How Checker Works Dimension of condition 3/3 •Misc – Mach_msg • msg subsystem id… – Userclient • serviceName,ClassName,selector…
  • 25. UserClient Sample detail_control_entry_tg_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 Sample #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_LE AVING,}; • #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. Why Use Context & What is it? •Enlightenment for code review – Buggy module, interface for RE…… •The Pattern accumulated in bug hunting activities •No vulnerability but indicates suspicious vulnerability •Implemented through condition checker
  • 28. Context Sample • Some IOKit related memory corruption vulnerabilities would happen in the following context: – Call IOMemoryDescriptor :: createMappingInTask to mapping user mode buffer space to kernel mode. – Read a value from the buffer and use it as a size to read or write a buffer. •Some kernel information leak vulnerability would happen in the following context: – The output buffer’s content has 0xFFFFFF prefix.
  • 29. Mmm,So far…What Zen Have You Tasted?
  • 30. Best Practice/Tips 1/3 • Fuzzing Source: – Multiple application • AppStore (MMORPG games, FaceTime,USB hardisk,BlueTooth, Wifi, VM,DirectX…) • Virus Total, Apple OpenSource UT, github sample code – Combination of rich kind of fuzzing source • Active fuzzing, Python watchdog, browsing WebGL • Fuzzing Stability: – Bypass active hang, black screen, reproduced cases using condition checker(nvTestlaSurfaceTesla, IGAccelGLContext, IGAccelSurface…)
  • 31. Best Practice/Tips 2/3 • Reproduction: – Log through network – Log to NVRAM? Log to memory and kdp_panic_dump callback? – Core dump server • 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 • Automation – kdp_panic_dump callback+dump+reboot? – VM(Vmware fusion, Qemu…) revert?
  • 32. Best Practice/Tips 3/3 •Misc tricks: – Occasional fuzz activities recommended – Normal program running – sudden fuzz – Keep OS version updated with latest KDK
  • 33. Agenda • Who we are – CVE list • Passive fuzzing framework – Approach & consideration – Implementation – Context enlightenment – Best Practice(tasted Zen) • Exploit to root – Security mitigation – Root
  • 34. Security Mitigations • SIP (System Integrity Protection) • KASLR • SMAP • SMEP https://speakerdeck.com/marcograss/dont-trust-your-eye-apple-graphics-is-compromised
  • 35. Bugs vs Mitigation Mitigation Bugs/Exploit Notes KASLR KSlide leak e.g. CVE-2016-4655 kernel info leak SMAP Kernel Heap address leak CVE-2016-xxxx: In disk image module, it will leak a object address, which exists in kernel heap. SMEP a. Control RIP b. ROP Chain c. Disable CR4 bits d. Execute any CVE-2016-1820 : In disk image module, it will take an object address and use a QWORD value in the object as function pointer to call.
  • 36. • The OSX/iOS hacking guru Stefan Esser (@i0n1c) propose OSUnserializeXML is a good way in SyScan 2012 https://reverse.put.as/wp- content/uploads/2011/06/SyScan2012_StefanEsser_iOS_Kernel_Heap_Armageddon.p df Tips of Heap FengShui - OSUnserialize
  • 37. • In most cases, the OSDictionary allocated by OSUnserializeXML will be freed by OSObject::release in one system call 。。。 However
  • 38. •If the allocated object is referenced by another component, it will not be released even if call object::release to it. •IORegistry is a good choice for Heap Fengshui • So we find OSUnserializeXML invoking nearby IORegistry method calling … However
  • 39. •In IOKIT service IOMProotDomain , slector 7 (kPMSleepSystemOptions) RootDomainUserClient::secureSleepSystemOptions 。。。 Always an exception
  • 40. Exploit Process 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 [0]Leak kslide to build up payload [4]Trigger execution xxx 1. Use KEEN team’s method to calculate KSLIDE. 2. Call user client IOHIDIXControllerUserClient ‘s selector 1. From the output , we can get a kernel heap address of object IOHDIXCommand. Then call IOHIDIXControllerUserClient ‘s selector 2. It will release the object. 3. Call RootDomainUserClient user client ‘s selector 7 with a carefully prepared XML as parameter , which include ROP gadget in <data> part. 4. Call IOHIDIXControllerUserClient Selector 2 to get RIP execution 1. Use KEEN team’s method to calculate KSLIDE. 2. Call user client IOHIDIXControllerUserClient ‘s selector 1. From the output , we can get a kernel heap address of object IOHDIXCommand. Then call IOHIDIXControllerUserClient ‘s selector 2. It will release the object. 3. Call RootDomainUserClient user client ‘s selector 7 with a carefully prepared XML as parameter , which include ROP gadget in <data> part. 4. Call IOHIDIXControllerUserClient Selector 2 to get RIP execution
  • 41. Exploit Process 2/2 payload Exploit App call [leak_addr+0x50]

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. In this section I will first compare different approaches usually used to hunt vulnerabilities I will then provide you details of - how we designed our approach and - how we implemented our solution Finally I will outline best practice tips during fuzzing activities.
  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. 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
  10. 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;
  11. #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
  12. 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.
  13. https://pan.baidu.com/s/1jH5tdki