Presentation is loading. Please wait.

Presentation is loading. Please wait.

基于硬件辅助的内核漏洞挖掘框架 闫广禄.

Similar presentations


Presentation on theme: "基于硬件辅助的内核漏洞挖掘框架 闫广禄."— Presentation transcript:

1 基于硬件辅助的内核漏洞挖掘框架 闫广禄

2 贡献者 潘剑锋 360首席安全架构师 闫广禄 360冰刃实验室高级安全研究员 范晓草 360冰刃实验室高级安全研究员

3 内核漏洞 永恒之蓝(EternalBlue) 内核漏洞 NSA网络军火库民用化第一例 WannaCry勒索病毒 Adylkuzz挖矿僵尸网络
本地提权->完整控制操作系统

4 整体架构 1 错误检测 2 内容提要 路径探测 3 漏洞检测 4

5 整体架构

6 组成 路径探测 日志分析 错误检测 路径探测 错误检测 日志分析
基于代码覆盖导向型路径探测方法,构造、变异输入用例,执行目标程序,以发现更多的路径为目标。 错误检测 监控目标程序执行过程,捕获漏洞特征行为、收集关键数据。 日志分析 分析日志数据,生成漏洞报告

7 Hardware (CPU + virtualization extensions + Intel PT)
整体架构 Guest OS Loader Fuzzer Log Analyzer User Space Kernel Space Middleware Interface Detection VMM Infrastructure Memory Detection Hypervisor PT Trace Hardware (CPU + virtualization extensions + Intel PT) Target Program Logs 初始化 Driver  hypervisor OS  guest OS 基础功能组件 虚拟页面监控器 内核与Hypervisor间通信 事件监控器 CPU模拟器 线程调度监控器 PT Trace

8 错误检测子系统

9 虚拟页面监控器 影子页表(SPT) BitMap #PF handler MTF/TF handler 监控虚拟页面 记录 私有中断
VA PA #PF Not Match MA Propagate GPT SPT CR3 Handle Log Inject Interruption MTF/TF Handler Match Clear P Set MTF/TF Update #VMEXIT 影子页表(SPT) BitMap 监控虚拟页面 #PF handler 记录 私有中断 设置MTF/TF 更新SPT MTF/TF handler 再次监控虚拟页面

10 Hypervisor Components
User Space Kernel Space Hypervisor Hypervisor Components Target Module Work Thread Log Shared Memory 3 1 2 2` K2H 服务函数 H2K 共享内存

11 ProbeRead/ProbeWrite/ProbeAccess AllocVirtualMemory/GetPebTeb
事件监控器 Check ProbeRead/ProbeWrite/ProbeAccess 检测用户指针 Access MemAccess 访问用户地址空间 Start Syscall/Trap2b/Trap2e 系统调用入口 Mark AllocVirtualMemory/GetPebTeb 标记内存合法 End RetUser 系统调用出口

12 CPU模拟器 ProbeAccess事件 目标内存 解释执行
1) cmp esi, dword ptr [nt!MmUserProbeAddress] 2) mov eax, dword ptr [nt!MmUserProbeAddress] cmp eax,XXX ProbeAccess事件 目标内存 nt!MmUserProbeAddress win32k!W32UserProbeAddress 解释执行 N cmp 固定指令数 #DR Target Memory DR Handler EAX EBX …… EIP Guest CPU EAX EBX …… EIP Virtual CPU N UVA-1 Update UVA-2 cmp Emulator …… UVA-N

13 路径探测子系统

14 Executing System Calls
代码覆盖导向型路径探测子系统 User User Space Building Parameters Mutating Executing System Calls Checking Bitmap Inputs Logs configuration Kernel Space Target Program Auxiliary Hypervisor PT Trace

15 进化算法 Input: Seed Inputs S 1: T’ = ∅; 2: T = S 3: while(1) 4: {
4: { 5: t = chooseNext(T) 6: p = assignEnergy(t) 7: for(i=0; i<p; i++) 8: { 9: t’= mutate input(t) 10: if t’ crashes 11: add t’ to T’ 12: if IsInteresting(t’) 13: add t’ to T 14: } 15: } Output: Crashing Inputs T’

16 PT Trace Intel® Processor Trace (Intel PT) 数据包(Data Packets)
Taken Not-Taken (TNT) packets: TNT包负责跟踪条件跳转指令的跳转方向,即1代表跳转,0代表未跳转。 Target IP (TIP) packets: TIP包记录间接分支、异常和中断处理程序的目标地址。

17 线程调度监控器与准实时数据处理 目标线程 VS 非监控线程 _KPCR->_KPRCB->CurrentThread
SPT or GPT 性能开销 _KPCR->_KPRCB->CurrentThread 监控 _KPRCB Write Monitor _KPCR Thread #1 …… _KPRCB Thread #2 Thread #n Thread #i PT buffer 1 PT buffer n Buffer is full/ Thread exits Thread call back Full path Bitmap 线程级别的准实时处理,无需内存或文件存储大量packets

18 块缓存(Block Caches) Cache for Block B Cache for Block A
Address Size Jump type Next block array Next block 1 Next block 2 …… Block B Address Bitmap offset (1) Block C Address Bitmap offset (2) Cache for Block C 在解析数据包和构建bitmap时带来极大的性能提升。 程序运行一次即可建立起相应的块缓存 通过1bit(即跳转与否)可立即定位到目标块

19 改进的BitMap\全路径信息 改进的BitMap:在bitmap中为每一条新发现的路径分配固定位置 5 E 2 C 6 A F 1 B 4
动态分配 仅为执行过的路径分配 分配的位置记录到块缓存中 快速、无碰撞 A B C D F E 1 3 2 6 5 4 全路径信息

20 降噪实例 — 消除外部中断影响 × Stub (nop vmcall) External Interrupt Monitor (EIM)
Guest OS Hypervisor Stub (nop vmcall) × External Interrupt Monitor (EIM) Interrupt Window Monitor (IWM) Guest IF = 1 Guest IF = 0 Disable EIM&PT, Tamper Guest EIP to Stub Disable EIM, Enable IWM sti Disable PT&IWM, Tamper Guest EIP to Stub External Interrupt VMCALL Monitor Enable EIM&PT, Return Guest EIP Target Program

21 构建、变异系统调用参数 [info] ;funs count number=4
;STRATEGY_GUID = 2, STRATEGY_RANDOM =1 strategy=2 [parameters1] index=0x15c SubStructsNum=3 args=_HANDLE_PTR,_UINT32,_STRUCT_PTR,_STRUCT_PTR,_UINT32,_UINT32,_HANDLE,NIL mask=0xffffffff ;deep first subargs1=_UINT32,_HANDLE,_STRUCT_PTR,_UINT32,_VOID_PTR,_VOID_PTR,NIL submask1=0xffffffff subargs2=_INT16,_INT16,_VOID_PTR,NIL submask2=0xffffffff subargs3=_INT32,_INT32,_INT64,NIL submask3=0xffffffff ……

22 路径探测导出函数 线程级别路径探测 实时分析 DTENABLETRACE EnableTrace;
DTDISABLETRACE DisableTrace; DTTRACEADDTHREAD TraceAddThread; DTTRACESTARTTHREAD TraceStartThread; DTTRACESTOPTHREAD TraceStopThread; DTQUERYTRACEINFORMATION QueryTraceInformation; DTENABLEIPT EnableIpt; DTDISABLEIPT DisableIpt; DTIPTQUERYINFORMATION IptQueryInformation; DTIPTADDTHREAD IptAddThread; DTIPTSTARTTHREAD IptStartThread; DTIPTSTOPTHREAD IptStopThread; DTPREPAREDECODER PrepareDecoder; DTDECODEIPTLOG DecodeIptLog; DTINITIALIZEDECODECACHE InitializeDecodeCache; DTDECODEIPTLOGSIMPLE DecodeIptLogSimple; DTDECODEIPTLOGTOBITMAP DecodeIptLogToBitmap; 线程级别路径探测 实时分析

23 漏洞检测

24 UNPROBE 与 TOCTTOU 类型错误检测
(Probe X) n Syscall n+4 RetUser n+1 ProbeRead (Access X) n+3 MemAccess n+2 (Access Y) 系统调用过程的事件记录示例

25 漏洞示例 UNPROBE (Avast 11.2.2262) TOCTTOU (Dr. Web 11.0)
NtAllocateVirtualMemory : Eip : 89993f3d, Address : 0023f304, rw: R Eip : 84082ed9, Address : 0023f304, PROBE KiFastSystemCallRet TOCTTOU (Dr. Web 11.0) NtCreateSection : …… Eip : 89370d54 Address :3b963c Sequence :399 rw: R Eip : 89370d7b Address :3b963c Sequence :401 rw: R KiFastSystemCallRet

26 检测UAF漏洞 MS16-123/CVE-2016-7211: 跟踪释放内存 通过虚拟页面监控器捕获 “use” 操作
记录“free”函数及其调用栈 延迟释放 MS16-123/CVE : Single step exception - code (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. win32k!_ScrollDC+0x21: 96b50f3e 83ff01 cmp edi,1 kd> r eax=fe ebx=96b50e37 ecx=85eefb40 edx= esi=fe edi= …… 96b50f3b 8b7e68 mov edi , dword ptr [esi+68h] 96b50f3e 83ff01 cmp edi ,1// win32k !_ScrollDC+0x21

27 检测OOB漏洞 MS16-090/CVE-2016-3252: 监控待测模块分配与释放内存 利用虚拟页面监控器捕获内存访问
额外内存块 — 保护区(red zone) Single step exception - code (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. win32kbase!RGNMEMOBJ::bFastFill+0x385: 93e34bf mov dword ptr [ebx+4],edx kd> r eax= ebx=9fa3f4f0 ecx=000003f0 edx= b esi=9fa3f4f0 …… BAD_POOL_HEADER (19) FOLLOWUP_IP: win32kfull!NSInstrumentation::PlatformFree+10 a0efaade 5d pop ebp STACK_TEXT: nt!RtlpBreakWithStatusInstruction nt!KiBugCheckDebugBreak+0x1f MS16-090/CVE : Digtool Driver Verifier

28 检测内核信息泄露漏洞 CVE-2017-8470 CVE-2017-8474 CVE-2017-8476 CVE-2017-8482
内核会把某些关键的信息写入用户态的内存——监控内核代码对用户态内存的写操作: 未初始化堆/栈拷贝与直接敏感信息拷贝 初步试验产出60+ case,目前微软已分配18个CVE。 CVE CVE CVE CVE CVE CVE ...

29 总结 & 优势 无需Crash 提供准确上下文 检测多种类型漏洞 性能损耗低 连续记录漏洞特征 在漏洞触发时,可中断客户操作系统
UNPROBE, TOCTTOU, UAF(MS16-123/CVE ), OOB, 信息泄露… 性能损耗低 只影响目标线程中被监控的系统调用 Intel PT仅带来很小的性能开销

30 谢谢!


Download ppt "基于硬件辅助的内核漏洞挖掘框架 闫广禄."

Similar presentations


Ads by Google