avatar
Ydc

志所向,一往无前;愈挫愈勇,再接再厉。

  • 归档
  • 分类
  • 相册
  • 音乐
所有文章 友链 关于我



{{ date }}

{{ time }}

avatar
Ydc

志所向,一往无前;愈挫愈勇,再接再厉。

  • 主页
  • 归档
  • 分类
  • 相册
  • 音乐
  • 开往

Daxin 专为隐蔽通信而设计的驱动级后门

  2022-03-28        
原创   字数统计: 3k字   |   阅读时长: 10min

1. 概述

  Daxin是一个高度复杂的rootkit后门,具有复杂、隐秘的命令于控制功能。使远程攻击者能够与未直接连接到互联网的安全设备进行通信,运行攻击者深入挖掘目标网络并泄露数据而不会引起怀疑。
  和普通rootkit恶意程序利用合法的操作系统进程不一样,Daxin利用服务器之间合法的安全网络流量来感染计算机并避免检测。通过劫持TCP通信,可以将恶意通信隐藏在被认为合法的流量中而不被发现,被劫持的流量本质上可以被认为是被加密的TCP隧道,还能够通过受攻击组织内受感染计算机网络中继其通信,攻击者可以选择跨受感染计算即的任意路径并发送一条命令,指示这些计算机建立请求的连接。
  从复杂的通信过程来看,Daxin开发者投入大量精力来开发通信技术,这些技术可以让恶意流量与目标网络的正常网络流量融合在一起。

2. 样本详情

文件名 Md5
Wantd.sys b0770094c3c64250167b55e4db850c04

3. 流程图

4. 详细分析

  驱动文件通过搜索某些重要结构来进行挂钩,将系统的收发包函数替换为自己的收发包函数,以此来达到隐蔽通信的效果,又因为拦截的是位于OSI七层结构最底层的链路层,而一般防火墙位于协议层,因此可以绕过大部分防火墙的流量监控,并且可以自定义协议或者伪装DNS、TCP/IP和ICMP等等协议数据而不被发现,当收到具有特定格式的数据包时才拦截并解析命令执行对应的操作,而对于其他流量数据则选择放过。

4.1 Wantd.sys分析

1. 文件信息

  驱动文件名为”wantd.sys”,文件描述被伪装成windows系统文件。产品版本为6.1.7600,可以得知编译器生成驱动时指定的目标操作系统为Win7,如果用于win10或win11可能会导致蓝屏问题。

  但是查看数字签名却不是微软的数字签名,使用的是某公司泄露的数字签名,安全意识高的用户很容易怀疑该文件为可疑文件。

2. HOOK NDIS中间层驱动

  遍历所有已经加载的驱动,通过比较模块名来查找驱动并返回对应的模块信息。

  遍历驱动模块的导出表获取api_name的函数地址。

  因为协议驱动需要与网络适配器做绑定,而每个网络适配器都会与TCPIP做绑定,因此对TCPIP进行HOOK是比较省力方便的方式,这样可以拦截所有网卡的TCPIP流量通信。

ndisMiniDriverList为内核网络编程中比较重要的变量,在注册和枚举微端口驱动时都会用到。
ndisFindMiniportOnGlobalList 给定一个对象名,遍历ndisMiniportList的NextGloabalMiniport字段找到指定对象名的_NDIS_MINIPORT_BLOCK结构,这个结构用于表示微端口信息,物理网卡和虚拟网卡等存在这个结构。
变量ndisMiniDriverList和函数ndisFindMiniportOnGlobalList在内核中是未公开和导出的,因此无法通过正常方式来获取。

  恶意驱动通过在特定函数中查找特征码的方式定位到关键结构然后获取其地址。

  1. 全局变量ndisMiniDriverList

    在函数NdisMRegisterMiniportDriver中搜索特征码。

    搜索到的汇编代码如下图:

  2. 函数ndisFindMiniportOnGlobalList

    在函数NdisIMInitializeDeviceInstanceEx搜索特征码。

    在ndis.sys中对应的汇编代码如下,获取到的数据为偏移,还需要计算以下转成函数地址。

通过微端口驱动的链表查找上一层网络(NDIS协议驱动)中名为”TCPIP”的协议驱动。

  暴力搜索tcpOpenBlock的字段Openqueue的内存数据,判断是否是有效指针,如果是指向的内存是否是特征”\x5c\x00\x5e\x00\x5c\x00\x5c\x00”,如果是则

计算偏移。

要搜索的特征其实为设备名的长度。

继续暴力搜索字段Openqueue的字段ProtSendNetBufferListsComplete和ReceiveNetBufferLists字段。这两个字段为函数,主要用于接收和发送相关协议的数据包。

备份所有协议驱动对应的结构NDIS_OPEN_BLOCK中的收包和发包函数地址,用于在被hook的函数中调用原函数或者驱动卸载时恢复。

对所有已注册的协议驱动用于收发数据包的函数ReceiveNetBufferLists和SendCompleteNdisPacketContext,恶意驱动都将其替换成自己的处理函数。

在被hook的函数中,第二个参数为NET_BUFFER_LIST结构,待接收的数据包存放在其字段mdl描述里。

判断收到的数据包是否是LOOKUP_BACK类型,如果是则调用原函数,不进行任何拦截操作;否则拦截和修改数据包。

  在函数hook_SendCompleteNdisPacket中,将由恶意驱动发送的数据包从链表中移除从而隐藏其通信数据,使Wireshark、Tcpdump等抓包工具不能捕捉到其通信流量。

  数据包nbl的flags被设置成0x99100000,查找官方文档该值为无效值,应该是用来识别是否是由恶意驱动修改过的数据包,由于数据包被拦截不会到达系统的Windows TCP/IP堆栈,因此设置成任意值都不会对网络通信造成影响。

  在hook_NextSendBufferListsHandler函数中,比较数据包的NdisPoolHandle是否是ndis_hook_pool。ndis_hook_pool由恶意驱动创建的用于存放数据包的buffer,如果两者相等则调用员函数,如果不相等则需要拦截或修改数据包。

3. 拦截和修改数据包

将保存在nbl的数据包提取出来保存到dst中,方便对其中部分报文进行修改或者重组。

解析数据包的格式用于在重组数据包的时候使用。

在网络数据包被篡改后需要重新计算数据包的检验和,该恶意驱动只拦截ICMP(1)、TCP(6)和UDP(11)三种协议的数据包,因此只需要计算这三种协议的检验和。

网络数据包的检验和计算方式如下:

遍历所有网络接口的ip和子网掩码,找到和ip_addr处于同一内网的IP地址。如果没有找到则返回最后一个网络接口的默认网关。

  当发送包含”\x90\x10\x11”的数据到被感染的机器时,恶意驱动会断开用户连接并抢占连接。它与对等方进行自定义密钥交换,打开用于发送和接收据和命令的加密通信通道,使用这种隐蔽的通信方法,威胁参与者可以绕过防火墙并逃逸SOC分析师的检测。

  从下图可以看出,恶意驱动发送了两个包,第一个为发送原始目的地的欺骗性RST TCP数据包,
因此其接收者将TCP连接标记为关闭。第二个包是发送到原始源的ACK
TCP数据包。从这时开始,恶意驱动会保持与原始源IP的TCP连接,依靠ReceiveNetBufferList挂钩劫持任何相关的网络数据包。

在生成网络数据包时,daxin使用自己的代码伪造网络数据包,绕过合法的Windows TCP/IP堆栈。根据原始TCP协议报文重新组装报文,修改原始报文中涉及到的mac地址。

遍历所有网卡对应的IP地址,获取IP地址对应的mac地址,将其保存到全局变量g_packets。后续在伪造数据包时通过从g_packets获取最佳路由。

初始化过程如下:

4.通信隧道

  每当Daxin劫持TCP连接时,它都会检查接收到的数据中是否有特定消息。如果有则启动自定义密钥交换。密钥交换成功后会打开一个加密的通信隧道。Daxin使用这个通信隧道来交换各种信息。比如在被感染机器上启动任意进程,读写任意文件等等。

  在受感染的机器上,任何恶意网络连接都会绕过Windows TCP/IP堆栈,这可以提供某种程序的隐蔽性。从密钥交换开始,所有后门都采用恶意驱动开发者自定义的协议格式。

1
2
3
4
5
6
Struct protocol_head{
Uint16_t magic;
Uint8_t kind;
Uint8_t unkonw;
Uint32_t total_length;
}

  对于字段magic来说,其值总是0x9910或者0x9911。Kind为指定密钥交换时处于何种状态。一旦建立了加密通信通道,它就会对每条消息的用途进行编码并确定固定报文大小之后的数据格式。

4.1 密钥交换

  密钥开始交换时初始消息处于未加密状态,字段magic和字段kind为TCP数据包前三个字节0x10 0x99 0x11。如果已经感染了恶意驱动的计算机接收到该数据包会导致TCP连接被劫持。

  根据会话状态检查接收到的消息是否有效,确保magic值为0x9910,并且kind为0x10或者0x11。接下来会生成一个随机数,用于加密任何之后传入的消息。最后它发送一条响应消息,其中包含随机数、自身详细信息以及有关被感染机器的信息,从该数据包开始,后续所有的数据包无论是发送还是接收都处于加密状态。


发送的响应包格式如下,用于识别是否处于登录状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
Struct format{
Uint16_t magic; //0x9910
Uint8_t kind; //0x12
Uint8_t pad;
Uint32_t totalLength;
Uint8_t unkown[0x10];
Uint32_t target_build?:3;
Uint32_t target_version?:3
Char target_nonce[0x80];
Char recognised_login[0x10];//识别登录
Uint32_t initator_ip_addr;
Uint32_t netmask;
}

发起者收到识别登录的数据包后,发送使用哈希密码登录后门的响应包。

响应的数据包数据格式为:

1
2
3
4
5
6
7
8
9
Struct format{
Uint16_t magic;
Uint8_t kind;//0x15
Uint8_t pad;
Uint32_t totalLength;
Char login[0x10];
Char password_hash[0x4];
Initiator_nonce[0x80];
}

如果登录成功则发送kind为0x16的成功登录消息包给发起登录方。假设请求建立隧道端为A,隧道另一端为B。

Kind 描述
0x10 A向B请求建立通信隧道
0x11
0x12 B接收到A请求登录的消息时,B生成随机数以及将随机数和自身信息作为响应消息发给A。
0x15 A发送登录信息到B,包括登录名和哈希密码
0x17 B接收到A的登录信息,但是A在B机器上处于已登录状态。
0x16 B接收到A的登录信息,A在B机器上处于未登录状态。生成共享密钥,用于加密消息正文。

4. APC注入

从所有运行的进程中找到进程svchost,通过APC的方式将dll或者exe注入到该进程。

使用函数KeAttachProcess附加到svchost的进程空间,并获取一些API的地址保存到apc参数上下文中。

附加到目标进程然后利用APC机制将shellcode注入到svchost进程中。

Shellcode的主要功能为执行可执行文件。当文件为dll时通过LoadLibrary加载,为exe时用CreateProcess创建进程。

6. IOC

b0770094c3c64250167b55e4db850c04

\\Device\\Tcp4

7. ATT&CK矩阵

Tactic ID Name Description
Command and Control T1572 Protocol Tunneling 劫持TCP创建加密通信隧道
T1573 Encrypted Channel 流量被加密
Discovery T1012 Query Registry 查询注册表获取网络接口信息
T1057 Process Discovery 查找进程svchost
Privilege Escalation T1055 Process Injection 注入shellcode到进程svchost
Command and Control T1105 Ingress Tool Transfer 下载程序并执行
T1573 Encrypted Channel C&C之间使用加密流量
本文作者: KenYang
最后更新: 2024年01月07日 16:30:47
本文链接: http://shxi.cc/post/8e5746b1.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!

扫一扫,分享到微信

微信分享二维码
Lazarus利用 Log4Shell 漏洞投递恶意程序NukeSped
APT41将恶意程序Moonbounce写入UEFI固件
目录
  1. 1. 1. 概述
  2. 2. 2. 样本详情
  3. 3. 3. 流程图
  4. 4. 4. 详细分析
    1. 4.1. 4.1 Wantd.sys分析
      1. 4.1.1. 1. 文件信息
      2. 4.1.2. 2. HOOK NDIS中间层驱动
      3. 4.1.3. 3. 拦截和修改数据包
      4. 4.1.4. 4.通信隧道
        1. 4.1.4.1. 4.1 密钥交换
      5. 4.1.5. 4. APC注入
  5. 5. 6. IOC
  6. 6. 7. ATT&CK矩阵

预览:

0  字
评论
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8

36 篇 | 82.8k
21028 次 | 13913 人
本站已安全运行 2690 天 18 小时 15 分 16 秒
2018-2024 KenYang
  • 所有文章
  • 友链
  • 关于我

tag:

  • Lazarus
  • 分析技巧
  • BlackLotus
  • Lazarus利用
  • APT41
  • Donot
  • BPFDoor
  • Symbiote
  • 逆向引擎
  • CobaltStrike
  • 盲眼鹰
  • Gamaredon
  • Nobelium
  • hook

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

    			  jsonContent:
    				meta: false
    				pages: false
    				posts:
    				  title: true
    				  date: true
    				  path: true
    				  text: false
    				  raw: false
    				  content: false
    				  slug: false
    				  updated: false
    				  comments: false
    				  link: false
    				  permalink: false
    				  excerpt: false
    				  categories: false
    				  tags: true
    			

  • Bitter APT组织将孟加拉国视为新的攻击目标

    2024-04-29

  • Mustang Panda使用新的Korplug变种Hour

    2024-04-15

  • 摩诃草组织以巴基斯坦相关政府机构文件为诱饵的攻击活动分析

    2024-04-15

  • Lazarus组织使用工作机会诱饵展开攻击

    2024-04-07

  • Lazarus组织以虚假工作机会为诱饵攻击金融科技行业员工

    2024-04-07

  • Gamaredon滥用社交软件Telegram攻击乌克兰组织

    2024-03-22

    #Gamaredon

  • APT-C-48(CNC)组织针利用摆渡攻击对军工和教育行业进行攻击

    2024-03-21

  • 攻击者利用美国政府承包商和PSA plus的工作机会投递Cobalt Strike beacons

    2024-03-21

    #CobaltStrike

  • APT29组织使用DropBox和Google Drive释放恶意负载

    2024-03-21

    #Nobelium

  • DeathStalker组织利用Janicab木马新变种攻击律师事务所

    2024-01-10

  • 双尾蝎利用恶意Android程序攻击中东地区

    2024-01-07

  • Symbiote:几乎不可能被检测到的Linux rootkit

    2023-11-01

    #Symbiote

  • BPFdoor:隐形Linux恶意软件绕过防火墙进行远程访问

    2023-10-14

    #BPFDoor

  • BlackLotus 首个绕过安全启动的UEFI bootkit(下)

    2023-03-17

    #BlackLotus

  • BlackLotus 首个绕过安全启动的UEFI bootkit(上)

    2023-03-10

    #BlackLotus

  • 新组织NewsPenguin 使用高级间谍程序针对巴基斯坦组织

    2023-02-17

  • 将shellcode编译成可执行程序

    2023-02-05

    #分析技巧

  • Lazarus分发伪装成加密货币应用程序的AppleJeus恶意软件

    2022-12-23

    #Lazarus

  • Lazarus组织以日本瑞穗銀行等招聘信息为诱饵的攻击活动分析

    2022-12-22

    #Lazarus

  • 疑似Lazarus组织针对韩国的攻击活动分析

    2022-11-17

    #Lazarus

  • Lazarus组织以工作机会为诱饵,分发macOS恶意软件

    2022-10-20

    #Lazarus

  • Fin7通过XLL扩展投递恶意程序JSSLoader

    2022-09-01

  • DoNot组织在其框架中引入浏览器窃取模块

    2022-08-26

    #Donot

  • Kimsuky APT继续使用AppleSeed后门攻击韩国政府

    2022-07-15

  • TraderTraitor:朝鲜国家赞助的 APT 瞄准区块链公司

    2022-06-13

  • Lazarus利用 Log4Shell 漏洞投递恶意程序NukeSped

    2022-05-27

    #Lazarus

  • Daxin 专为隐蔽通信而设计的驱动级后门

    2022-03-28

  • APT41将恶意程序Moonbounce写入UEFI固件

    2022-02-17

    #APT41

  • 盲眼鹰针对厄瓜尔多的近期活动分析

    2022-02-10

    #盲眼鹰

  • 一次面试过程中的样本分析

    2021-11-21

  • mbr结构和代码分析

    2020-04-12

  • VB Crypt Payload分析

    2020-04-12

  • hook-usercall修饰的函数

    2020-04-12

    #hook

  • debug IDApython script

    2018-09-16

  • 病毒样本快到碗里来,一个样本下载爬虫的实现

    2018-04-13

  • 安卓游戏资源解密

    2016-03-27

  • 三水のBlog
  • 三水的笔记

想带你去看电影,明天你就不是我女朋友了。

——《撒哈拉的故事》


new-yilia
一个简洁优雅的hexo主题