前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BlackHat USA 2021 洞察(二):议题技术解读

BlackHat USA 2021 洞察(二):议题技术解读

作者头像
泉哥
发布2021-08-20 10:29:00
8180
发布2021-08-20 10:29:00
举报
文章被收录于专栏:漏洞战争漏洞战争

发现看议题材料也不容易啊,有些议题挺有技术深度的,而且内容还特长,长就算了,有些ppt其实只讲了不到一半的内容,另一半都得靠作者演讲才能知道,剩下的只能靠自己脑补或搜索资料了,我只能说真的费脑费时间。

1、利用 hAFL1 Fuzzing Hyper-V 挖掘0day漏洞

议题名:hAFL1: Our Journey of Fuzzing Hyper-V and Discovering a 0-Day

开源工具:https://github.com/SB-GC-Labs/hAFL1

ppt都是图,没啥文字说明,也没有paper,所以只能算看个大概,后来找他们官网博客看了下。

  1. https://www.guardicore.com/labs/hafl1-our-journey-of-fuzzing-hyper-v-and-discovering-a-critical-0-day/
  2. https://www.guardicore.com/labs/critical-vulnerability-in-hyper-v-allowed-attackers-to-exploit-azure/

专门去翻了下最新的Hyper-V漏洞奖金,非常可观,难怪最近那么多人盯着Hyper-V去挖洞,这次BlackHat就有2个Hyper-V相关议题,一个个都是上百页ppt,看得真有点费脑。

先来看下Hyper-V的内部架构和通信原理,主机运行在Root Partition,客机运行在Child Partition,为了向Child Partition提供硬件设备接口,Hyper-V提供了半虚拟化设备的扩展使用,主机与客机都可以修改硬件接口,主要是出于性能考虑。作者正是盯上半虚拟化设备vmswitch。每个半虚拟化设备由两部分组成:虚拟服务消费者VSC(netvsc.sys)与虚拟设备提供者VSP(vmswitch.sys),两者基于hypercalls通过VMBus进行内部通讯,VMBus提供收发主客机之间通信数据的收发缓冲区。

编写harness的方法,作者参考MSRC之前分享的文章“Fuzzing para-virtualized devices in Hyper-V”:https://msrc-blog.microsoft.com/2019/01/28/fuzzing-para-virtualized-devices-in-hyper-v/,最后找到vmswitch是使用VmbPacketAllocate和VmbPacketSend通过VMBus Channel(该指针可通过ndis.sys去查找)发送数据,然后编写个harness.sys在客机上运行用于fuzzing。

每个VSP都需要注册回调函数EvtVmbChannelProcessPacket去处理包数据,对应vmswitch回调函数VmsVmNickPvtKmclProcessPacket。vmswitch使用NVSP类型的数据包,它是通过VMBus传输的数据包专有格式。NVSP包类型有多种,有的负责设置VMBus收发缓冲区,有的执行VSP与VSC握手,有的用于发送主客机间的RNDIS消息。作者此次正是Fuzzing RNDIS消息的处理代码,不过作者没有公开hareness源码。

最后重点看下hAFL1的实现吧,hAFL1是基于kAFL开发的,名称中的1是指虚拟化等级,代表Hyper-V Host,由于对方是的Linux上运行,所以实际上此处Hyper-V Host是Linux主机上开启Hyper-V的Windows 10虚拟机,虚拟机里面的Hyper-V虚拟机才是L2(看作者也开源了hAFL2应该就是针对L2的Fuzzer)。

在创建hAFL1过程也遇到不少问题,作者整理了个列表,就不展开细说了:

然后结合libprotobuf-mutator支持protobuffer fuzzing,用于Fuzzing Hyper-V vmswitch半虚拟化设备,挖到vmswitch.sys上的一个驱动漏洞,可用于实现虚拟机逃逸。后面有空可以拿来试用下hAFL1,读读源码学习下。

2、利用PDB解析器进行Windows提权

议题名:Crashing Your Way to Medium-IL: Exploiting the PDB Parser for Privilege Escalation

以前就曾关注过PDB解析器(Dbghelp.dll)这个攻击面,但后来发现有人报漏洞给微软被忽略了,因为缺少实际攻击场景。没想到被来自"平底锅"的哥们"曲线救国"式的找到提权攻击场景了,利用程序崩溃会启动WerFault.exe,而它会使用Dbghelp.dll去解析pdb文件,关键是崩溃程序处于Low Integrity时,仍可启动Medium Integrity的WerFault.exe。所以,整个漏洞挖掘与利用的过程如下:

  1. 作者先参考https://github.com/microsoft/microsoft-pdb上的API示例编写harness,然后用winafl去Fuzz,3天就有209个崩溃,先挖到pdb解析0day出来;
  2. 编写本地程序,将恶意pdb文件写入 %AppData%\LocalLow路径;
  3. 触发本地程序崩溃,启动WerFault.exe;
  4. WerFault.exe加载恶意pdb文件实现漏洞利用,完成从Low到Medium Integrity的提权;

最后作者演示了IE沙盒逃逸的利用场景。

微软对此的修复方案也很暴力,直接禁止WerFault.exe解析pdb文件,连Dbghelp.dll上的解析漏洞都懒得修了。

3、利用Nvidia vGPU实现虚拟机逃逸

议题名:Another Road Leads to the Host: From a Message to VM Escape on Nvidia vGPU

来自Tencent Blade Team的议题,通过上图可以知道主客机消息交互的流程,重点就在nvidia-vgpu-mgr上面,它加载libnvidia-vgpu.so来处理RPC消息:

nvidia.ko(guest) => nvidia-vgpu-vfio => nvidia-vgpu-mgr(root, libnvidia-vgpu.so) => nvidia.ko(host)

主客机的vGPU通讯通过VRPC消息交互,所以它是个fuzzing测试点,看fuzzer代码片段应该是借助libfuzzer写的,构造符合一定数据校验要求的RPC消息再进行变异测试,调用的API是通过逆向获取的,还有其参数构造。在 libnvidia-vgpu.so上面跑出一个nday,在新版中修复了,另外搞到几个nvidia-vgpu-mgr漏洞。最后利用ROP+信息泄露的组合完成利用,逃逸出虚拟机获得主机root权限。据说打算在github开源fuzzer,有兴趣的可以关注下https://github.com/tencentbladeteam。

4、通过漏洞内部细节探索Hyper-V攻击面

议题名:Mobius Band: Explore Hyper-V Attack Interface through Vulnerabilities Internals

关于Hyper-V的架构在前面刚好介绍过,但该议题讲得相对细一点。以Linux客机为例,拿Linux内核源码讲解主客机基于VMBus的通讯原理。然后以历史漏洞为例,介绍Hyper-V利用与传统提权漏洞的区别:基于VMBus通讯的限制,主机ring0不能直接读客机内存,不能直接操作对象分配释放,也没有直接的API提供。

最后介绍了几个Hyper-V漏洞细节,主要是一些调试截图,没有太多文字描述,看着有些零散,如果有paper会好理解一些,自己也没动手调试过,只能看个大概。

重点看下作者总结的Hyper-V攻击面:

  1. 虚拟设备:网络适配器、PCI设备、存储设备、Hvsocket(Hyper-V 套接字面向虚拟器的新地址系列和专用终结点,在Hvsocket上运行时无需使用网络,并且所有数据都保存在相同的物理内存中)
  2. VMBus:负责处理来自guest主机的消息,可能存在消息解析问题
  3. VMWP.exe & vmconnect.exe:集成服务、键盘鼠标、合成视频、动态内存、远程桌面虚拟化等等
  4. HyperCall API接口:通过调用VMCALL指令触发,审计API背后的处理程序也是一个攻击点
  5. Hypervisor Ring-1:MSRs虚拟化、APIC虚拟化、嵌套虚拟化、客机物理地址转换等
  6. Hyper-V更新点:关注Hyper-V的更新,特别是一些组件的新特性可能很容易挖到漏洞

5、Windows Printer Spooler 打印服务提权漏洞分析

议题名:Diving Into Spooler: Discovering LPE and RCE Vulnerabilities in Windows Printer

最初spooler漏洞被用于10年前的Stuxnet攻击,但最近该服务漏洞也被披露了不少漏洞,看下今年的微软公告就知道了。

应用程序可以通过RPC与Spoolsv.exe交互,Spoolsv.exe是System用户权限的,如果存在漏洞就可用于提权。主要介绍了一些spooler服务漏洞成因,以及微软的修复方法,又是被如何绕过补丁刷CVE的过程。然后介绍一些RCE漏洞的利用,包括"PrintNightmare"(首次披露是CVE-2021-675,后来补丁被绕过获得CVE-2021-34527)漏洞,利用漏洞都是为了加载dll以高权限执行,由于是RPC调用,所以也可以算是远程代码执行。关于这两个漏洞的分析,推荐直接看下网上的分析文章:https://paper.seebug.org/1635/,因为这ppt内容太简短了,可能现场听比较容易理解些。最后建议不需要打印服务的,可以直接关闭它。

这些漏洞比较偏逻辑类的,应该是人工挖的,一开始看标题以为是漏洞挖掘,看了才发现是漏洞分析与利用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏洞战争 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、利用 hAFL1 Fuzzing Hyper-V 挖掘0day漏洞
  • 2、利用PDB解析器进行Windows提权
  • 3、利用Nvidia vGPU实现虚拟机逃逸
  • 4、通过漏洞内部细节探索Hyper-V攻击面
  • 5、Windows Printer Spooler 打印服务提权漏洞分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档