2020黑客大会——深入浅出现代Windows Rootkit

为什么你会想到用一个Rootkit?

  一、内核驱动在机器里有着很高的权限
  二、与一个传统的反病毒软件的权限相同
  三、相对于用户层来说,对于内核病毒的解决措施(mitigations)和方案更少
  四、反病毒软件对于Rootkit的动作可见度较差
  五、反病毒软件容易忽略驱动

驱动利用与签名

利用合法的驱动有很多的(quite a few)好处:
  1.简单地修改就可以做到提权
  2.找到一个有漏洞的驱动是相对比较简单(relatively trivial)的一件事
  3.不容易被检测到

缺点(DrawBack)就是:依赖操作系统,兼容性比较差,需要去研究让自己的利用更加稳定的方法。不然容易蓝屏。

滥用泄露的签名的好处:
  一、有不少泄露的签名可以从网上下载
  二、可以匿名(deanonymization)购买一个合法签名

滥用泄露的签名的坏处:
  一、泄露的签名不久的未来就会被发现
  二、如果签名时间早于(after)2015年7月29,在windows10的一些安装secure boot的版本中可能会失效

  大多数情况下,微软并不在乎签名是否过期或者被撤销(revoked),都是可以正常加载的。
在这里插入图片描述

  被公布泄露的签名有很多,而且大部分都没有被AV杀毒软件识别为恶意签名。

Rootkit的通信

  一、Rootkit直接和C2服务器通信,有可能会被防火墙拦截为可疑IP。
  二、一些先进的Rootkit会Hook通信过程中的一些函数,使用标准的通信协议与C2通信。这样不容易被检测到,但不够灵活。再者来说,目标主机可能不具有这种通信服务。

  这时可以考虑去Hook 一些特殊的应用程序。比如说类似wireshark的工具。改变这类工具的特殊过滤规则,让它允许通过我们发送到合法端口的恶意流量数据包。

  和Winsock有关的函数大多都在Afd.sys中实现,其他的函数可以参见“Ancillary Function Driver for WinSock”。可以通过IOCTLs发掘并逆向mswsock.dll中的一些函数,如果能拦截(Intercept)请求,就可以窥探(snoop in on)数据。

HOOK File Object拦截Afd.sys的IRP请求

  一、替换Driver Object中你想HOOK的Major Function
  二、在分发句柄上直接执行HOOK 代码

在这里插入图片描述
  Rootkit的设计每次做动作都会考虑这三个问题:你暴露了哪些检测向量这种方法的可用性怎么样检测你这种方法的成本高不高。所以Rootkit永远都在寻找一种未公开文档化的、稳定的、检测成本高的手段。

SystemHandleInformation类允许我们查找系统上的各种句柄,包括:
  一、进程PID所属句柄
  二、内核指针对象所关联的句柄

  File Object中有Driver Object。可以使用ObCreateObject函数创建一个虚假Object,用InterLockExchange来进行hook。且hook掉File Object之后,在我们的分发函数中要去做的两件事:
  一、检查有没有hook掉调用的MajorFunction
  二、确保MajorFunctions的IRP_MJ_CLEANUP要修复原始的Device Object。

  这样就通过HOOK了File Object,拦截了所有到Afd驱动的IRP。

DKOM来HOOK文件过滤驱动

  通过FltEnumerateFilters和FltEnumerateInstances.来枚举所有Filter和Instance。这两个函数在FLT_INSTANCE数据结构中的CallbackNodes数组中。
在这里插入图片描述
该方法不再详细介绍。

猜你喜欢

转载自blog.csdn.net/qq_43312649/article/details/108828782