欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

RobbinHood勒索软件另辟渠道,通过驱动漏洞干翻杀毒软件

来源:本站整理 作者:佚名 时间:2020-03-14 TAG: 我要投稿

2月初,奇安信病毒响应中心在日常样本监控过程中发现了一款名为“RobbinHood”的勒索软件通过使用“另类”的方式关闭并删除杀软,经分析,在执行过程中会释放并加载带有漏洞的技嘉驱动程序,之后会对该驱动程序进行漏洞利用,关闭Windows DSE机制,一旦利用成功便会迅速加载没有签名的Rootkit,Rootkit主要功能为结束并删除指定的进程和杀软,上述操作完成后开始加密。
威胁细节
在以往的勒索软件中,Nemty勒索使用Taskkill来结束指定的进程和服务,Snatch勒索会进入安全模式来加密文件,Sodinokibi勒索会使用CVE-2018-8453内核提权漏洞来提升自己的权限结束相关进程和服务。而本文的主角“RobbinHood”结束进程和服务的方式要比上述“残暴”不少。
RobbinHood勒索执行流程如下:

CVE-2018-19320分析
漏洞出现在GIGABYTE(技嘉)主板相关驱动程序程序中,在处理特定的IOCTL时,由于没有对输入的参数进行相关的校验,导致驱动程序在内核中执行memcpy的操作,从而实现内核任意地址读写。驱动的数字签名如下:

驱动功能较为简单,问题出在IRP派遣函数中,首先会获取从用户层传来的IOCTL,并与固定值进行比较:

通过调试POC发现当IOCTL等于0xC3502808时会进入问题函数:

在问题函数中不做任何校验直接对从用户层传来的数据进行操作:

且Dest、Src、Size三个内核memcpy的参数在用户层均可控:

从而实现任意地址读写的功能

DSE ByPass
样本在执行过程中会释放名为ROBNR.EXE的可执行程序,该程序的主要功能是释放并加载带有漏洞的技嘉驱动,通过利用CVE-2018-19320禁用DSE签名机制,并迅速加载没有签名的恶意驱动。
以win7 x64为例,CodeIntegrity初始化简要过程如下,在系统初始化过程中会调用SepInitializeCodeIntegrity:

通过系统是否进入安全模式来给g_CiEnabled赋值,g_CiOptions代表签名策略状态的标志默认开启完成性检查值为6,禁用完整性检查时CiOptions等于0,处于测试模式时值为8,最后会调用ci.dll的导出函数CiInitialize给g_CiCallbacks函数数组进行初始化,至此初始化结束。
当有驱动加载入内核时会调用g_CiCallbacks数组中的函数进行校验,最终会调用SeValidateImageHeader:

如果g_CiEnabled等于0时则直接返回STATUS_SUCCESS,所以可以通过CVE-2018-19320将g_CiEnabled的值置位0从而绕过代码完成性检验。
在Win7以上版本时,修复了SeValidateImageHeader逻辑问题。
在win7以上的版本时需要对g_CiOptions置0,表示“DISABLE_INTEGRITY_CHECKS”,所以如果想要Bypass DSE需要对操作系统版本进行判断,体现在样本中的代码如下:

在Find_g_CiEnabled_Or_g_CiOptions_Address函数中会跟据不同版本的操作系统取相关地址。

当系统为win7或win7以下时,通过获取ntoskrnl.exe的基址,在内核中遍历寻找立即数,最终获取g_CiEnabled的地址。获取内核地址代码如下:

当系统为win8或win8以上时,获取CI.DLL的基址,通过对导出表进行解析获取CiInitialize函数地址,再对该函数进行反汇编以此寻找jmp CipInitialize和mov cs:g_CiOptions, ecx指令。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载