系统或LOLDrivers上的危险第三方驱动程序


您是否知道完全合法的驱动程序可以使攻击者有机会在您的系统中进行长时间注册,甚至在重新安装后仍保留在系统中? 还是将您的计算机变成砖头? 例如,某些无害的看似受信任(签名)的驱动程序是用于覆盖BIOS的工具。 经过这样的攻击,只有程序员会保存。


在Windows中,存在受信任的应用程序/脚本/库以及其他 有趣的 危险的功能,例如执行任意代码,下载文件,绕过UAC等。 如果在内核组件中发现了这样的附加功能,它将变得更加有趣。


从Windows Vista x64开始,将应用驱动程序签名强制(DSE)策略-必须对所有内核级驱动程序进行签名。 如果侵入系统的攻击者(具有用户/管理员权限)想要获得最大访问权限(安装内核rootkit / bootkit / SMM-rootkit / BIOS-rootkit),则他将不得不以某种方式绕过驱动程序的签名要求。 在内核模式下从内核模式调用某些功能或指令的能力可以为攻击者提供提升特权,泄露信息或导致拒绝服务的工具。 我们将此功能称为双重用途功能(在某些情况下,这可以称为漏洞或后门,但是,关于正确定义的讨论不在本文讨论范围之内)。


DSE解决方法


让我们看看攻击者通常必须绕过DSE的选项(您必须以某种方式穿透ring0)。 下表总结了绕过DSE的方法及其优点和缺点(对于攻击者,请注意安全防护)。 值得注意的是,此信息从Vista开始适用于Windows x64。


方式好处缺点
设置启动配置数据(测试模式)简单性
  • 并非适用于所有应用程序。
  • 水印出现在桌面上
  • 需要重启
使用泄露的私钥能够安装任何驱动程序
  • 如果检测到泄漏,则将证书添加到证书吊销列表(CRL)
在实施DSE控制中使用漏洞Windows防病毒和安全系统未检测到
  • 难以发现此类漏洞
  • 取决于操作系统版本
修改驱动程序检查机制(bootmgr,winload.exe,winresume.exe,ci.dll)无需OC检查即可安装任何驱动程序的能力
  • 修改复杂度
  • 需要一种绕过安全启动的方法(如果启用)
  • 需要重启
  • 取决于操作系统版本
  • 其他文件控件
使用带有漏洞的签名驱动程序攻击检测难度
  • 难以发现此类漏洞
  • 检测安全锁
使用具有双重用途的签名驱动程序Windows防病毒和安全系统未检测到
  • 具有所需的双重功能的搜索(对于攻击者)驱动程序的复杂性

从表中可以看出,具有双重用途的签名驱动程序是绕过攻击者DSE的最有吸引力的方法。


危险或双重用途功能


让我们看看攻击者在具有危险双重用途功能的驱动程序的存在下出现的恶意功能的示例。


  • 权限提升到管理员级别/ SYSTEM。 需要读/写物理内存。 例如,可以使用ASUS的ASMMAP驱动程序进行此攻击。 为此,请读取物理内存并找到EPROCESS结构(它是链接列表的元素),然后遍历该列表以搜索要增加其特权级别的进程以及一些具有SYSTEM级别的知名进程(例如lsass,wininit)。 然后将系统进程结构的“令牌”字段的值复制到目标进程的结构。 此处提供了有关攻击的更详细描述。
  • 禁用SMEP。 为此,您需要写入控制寄存器cr4(更确切地说,将其第20位复位)。 例如,bandainamcoonline.sys驱动程序不仅禁用SMEP,而且根据从用户传递给它的指针来帮助执行代码。 对于那些感兴趣的人,有一篇文章详细介绍了驱动程序。
  • 在内核模式下执行任意代码。 读/写物理内存和所需的MSR。 含义是将在进行系统调用时将转换到的地址(位于MSR之一中)替换为攻击者代码所在的地址。 在这里您可以找到有关此的更多信息。 PatchGuard会一直干扰,但您可以根据需要解决。


    由于驱动程序和PatchGuard都在环0中运行,因此没有任何阻止驱动程序禁用PatchGuard检查的过程(当然,直到Microsoft听取Intel的意见并超过带有两个保护环的模型为止)。 Microsoft的内核开发人员非常清楚这一事实,并执行各种操作来隐藏此代码的位置,混淆其操作和所使用的内部结构。 换句话说,由于无法阻止您修改PatchGuard代码,他们会尽力将其隐藏。

    -Blunden B. Rootkit武库:在系统的黑暗角落中逃避和逃避。

    原来的
    鉴于驱动程序代码和PatchGuard代码都在第0环中执行,因此没有什么可以阻止KMD禁用PatchGuard检查的(当然,除非Microsoft从Intel得到启发,并且超越了两个环的特权模型)。 Microsoft的内核工程师敏锐地意识到了这一事实,并执行各种编程技巧,以混淆代码所在的位置,代码的功能以及所处理的内部数据结构。 换句话说,他们无法阻止您修改PatchGuard代码,因此他们将像地狱一样尝试将其隐藏。

    -Blunden B. Rootkit武库:在系统的黑暗角落中逃避和逃避。



  • BIOS条目。 Lojax是一个例子。 攻击者使用了著名的RwDrv.sys并将其用于肮脏的目的:他们读取BIOS,进行修改并写回。 由于恶意代码位于SPI闪存上的固件中,因此重新安装Windows将无济于事。 如果BIOS覆盖失败(或被专门覆盖),那么它也将是令人不快的。 无论如何,您将不得不驱使程序员解决烦人的后果。
  • 调用SMI处理程序。 首先,并不是所有的BIOS都对ring0模式下的代码同样无能为力:有多种读/写保护机制,因此可能需要降低安全性-进入SMM模式(最特权)。 从内核模式到达那里的一种方法是拉出SMI处理程序(很多情况下它们之间经常存在漏洞)。 要调用SMI处理程序,您必须能够写入I / O端口,并且只能使用ring0特权来完成。 也就是说,具有写I / O端口能力的驱动程序能够检测到易受攻击的SMI处理程序,该处理程序可以使攻击者以SMM模式执行代码。 在示例中,作者使用RwDrv.sys驱动程序。
  • 有关系统的信息。 在某些情况下,读取内核内存(通过读取物理内存),读取BIOS,有关系统设置,连接的设备和启用/禁用的保护机制的信息(通过读取MSR,控制寄存器,访问输入/输出端口),可以检测到已知的管理程序(例如通过MSR的 VirtualBox)。 对于此任务,即使是只能读取而不一定要写入的驱动程序,也是最合适的。 例如,Belkasoft的RamCaptureDriver64.sys适合读取物理内存。

如果我们分析有关CVE的各种文章和注释,则可以从驱动程序中的ring3函数访问时区分一些潜在危险类别。 下表列出了危险功能及其相关信息的来源。


识别出的危险功能有关安全做法的信息来源
读/写MSR寄存器CVE-2018-10711,CVE-2018-18535,CVE-2018-19323,CVE-2007-5633,CVE-2007-5761
读/写I / O端口CVE-2018-10712,CVE-2018-18536,CVE-2018-19322
读/写物理内存CVE-2018-16712,CVE-2018-10710,CVE-2017-15302,CVE-2017-15303,CVE-2018-19321
读/写控制寄存器CVE-2018-10709, Eset -2016年的Windows利用
访问性能/时钟计数器Leif Uhsadel,Andy Georges,Ingrid Verbauwhed-开发硬件性能计数器
读/写标志寄存器Wojtczuk R.,Rutkowska J.《白兔》:针对英特尔VT-d技术的软件攻击
缓存访问说明通过英特尔缓存监控技术和硬件性能计数器检测基于缓存的边信道攻击

这还不是潜在危险功能的全部清单。 您还可以讨论读/写内核虚拟内存,读/写MMIO,访问PCI设备等。


前三个功能是最感兴趣的,也是最大的危险(也是最有可能检测到具有此类功能的驱动程序):读/写MSR寄存器,读/写I / O端口,读/写物理内存。 使用控制寄存器,您可以绕过某些保护机制,写入标志寄存器可以使您启用ring3中的读/写输入/输出端口(顺便说一下,本文在哈布雷(Habré)中提到),成功攻击第三方通道(通过访问缓存,监视计数器)性能/周期)是最有可能的。


在拉斯维加斯举行的DEFCON 27会议上创建该材料的过程中,研究人员Jesse Michael和Mickey Shkatov提出了题为“如果不能开车就离开内核”的工作 ,它也讨论了这个问题,我们建议您研究此材料以完成图片。 使用此类驱动程序的场景非常简单明了,并提供了负责最关键功能的代码段示例。 并且还提供用于工作和查找相似驱动程序的代码


总的来说,值得注意的是,此主题长期以来一直与安全研究人员有关。 早在2018年,研究员Alexander Matrosov在他的文章“是什么使OS驱动程序对BIOS构成危险?” 提出了这个问题,并演示了利用BIOS的简单性。


双功能驱动程序


以下是具有双重功能的驾驶员最著名的代表。


  • RwDrv.sys是一个非常受欢迎的驱动程序(随RWeverything实用程序一起提供)。 读写物理内存,I / O端口,MSR和控制寄存器。 它已在各种PoC中反复使用,然后在之前提到的Lojax rootkit中使用。 接口是用C ++ 为其编写 ,并且还用于chipsec


  • cpuz / gpuz



    读取和写入物理内存,端口和MSR。 有多个PoC实用程序正在使用它( 此处此处 )。


  • pcdsrvc_x64-Dell驱动程序,有关更多信息,请联系职位。 允许您在I / O端口中读取/写入物理内存。


  • AsIO64.sys
    图片
    它提供了读取/写入物理内存和I / O端口的功能,并且还带有用于执行这些请求的便捷dll。


  • Asmmap64.sys是ASUS的另一个驱动程序,可让您读取/写入物理内存,I / O端口和MSR。 对于攻击者而言,这尤其令人愉悦,因为可以由没有管理员权限的普通用户访问驱动程序。 好奇的人可以求助于源头


  • 来自MSI的ntiolib_x64.sys / winio64.sys驱动程序,在前面提到的文章中进行了详细描述。 使用ntiolib_x64.sys可以读写物理内存,I / O端口和MSR,winio64.sys提供了所有这些功能,但MSR除外。



通常,如果用户在没有管理员权限的情况下即可访问驱动程序(错误的ACL),或者当该驱动程序允许直接执行任意代码时(如bandainamcoonline.sys),这些危险功能将被视为漏洞。 在其他情况下,这仅仅是功能,并且由于用户具有管理员权限,因此他可以使用所有驱动程序功能,这是规范。


如果您认为这样的驱动程序不多于12个,那么您就大错特错了。 您可以看到一系列有趣的驱动程序。 此列表包含来自ASUS,AVAST,Razer,LG,American Megatrends和其他知名公司的驱动程序。 因此,它们很多,您只需要搜索即可。 因此,它们构成了真正的威胁。


Microsoft员工也理解此威胁。 他们将不胜感激有关此类驱动程序的信息;)
图片


推荐建议


对于用户:


  • 您不应不必要地坐在管理员帐户下并禁用UAC(尽管不难解决 )。
  • 您可以安装检测器以尝试安装驱动程序(例如, 此处 )。
  • 如果有必要将实用程序与此类驱动程序一起使用(诊断程序,用于更新BIOS等),请在使用后删除这些驱动程序。
  • 设置Device Guard (如果您是Windows 10的所有者)。 使用此技术,您可以创建自己的代码完整性策略,并添加程序和证书的白名单。 例如,将任何内核模式驱动程序必须具有Microsoft WHQL签名的要求添加到策略中。 在本文中 ,您可以更好地熟悉为此目的设置Device Guard。

制造商最好不要签署此类驱动程序。 如果用户需要更新BIOS,检查系统是否存在漏洞(hello,chipsec),测量性能或执行其他一些需要安装此类驱动程序的操作,那么他很可能进入测试模式,执行所有这些操作然后退出。 可用性将下降,但安全性将提高。


结论


如果已签名,则无论如何您都无法信任它。 首先,您可以签署类似的签名,其次,攻击者可以利用此签名的签名(即使它来自受信任的制造商)。


信息安全专家不应从威胁模型中排除攻击者需要具有危险功能的驾驶员进行攻击的情况。 这样的驱动程序足够多;执行此操作非常简单。 如果不是使用RwEverything这样的流行驱动程序来进行攻击,而是使用一些鲜为人知的驱动程序来进行攻击,则检测起来将更加困难。 因此,您需要保持警惕,监视此类情况,并且不允许每个驱动程序启动到系统中。


作者:Elizaveta Khomenko

Source: https://habr.com/ru/post/zh-CN468691/


All Articles