吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18696|回复: 68
收起左侧

[PC样本分析] ROOTKIT 初了解

  [复制链接]
hjm666 发表于 2020-7-2 11:04
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 hjm666 于 2020-7-2 14:33 编辑

前言


       在看报告的时候,了解到一个很强很骚的技术BOOTKIT技术,一种用恶意代码写入MBR(磁盘主引记录)的方式技术【一种高级的内核劫持方式】,恶意代码写入后计算机开机时恶意代码会比内核还更早加载执行,及其隐蔽非常牛逼和难以清除【当然软格当我没说】。
       今天的主题却不是BOOTKIT,而是它的小弟ROOTKIT......    一搜就搜出来说BOOTKIT技术是ROOTKIT技术的升级版,那自然要了解一下了,结果就栽进去出不来了......
       人家都是学海无涯,苦做舟。  我就是学海无涯,只沉不浮。   在没有一点内核知识基础和分析经验分析下来后,还有很多不懂,思虑良久,还是决定出来水一篇,权当"记仇"吧!
找样本还挺难找的,终在freebuf找到了rootkit的样本的hash还能用,说起来样本还是吾爱出来的:
     https://www.freebuf.com/articles/system/168650.html     【样本的行为分析地址】


介绍


首先要了解rootkit技术它是一样什么样的技术【扒衣才能坦诚相见
Rootkit木马解析:
      Rootkit木马是一种系统内核级病毒木马,其进入内核模块后能获取到操作系统高级权限,从而使用各种底层技术隐藏和保护自身,绕开安全软件的检测和查杀,通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的【一种高明的Hook技术,既然是一种Hook那么自然有多种的Hook方式】
     由dll 注入木马【Ring3层的注入到】,到内核层次的注入【Ring0层的注入】的一种技术转变.
截至百度:
    后门作者把后门写成符合wdm规范(windows driver model)的驱动程序模块,把自身添加进注册表的驱动程序加载入口,便实现了“无启动项”运行。一般的进程查看器都只能枚举可执行文件exe的信息,所以通过驱动模块和执行文件结合的后门程序便得以生存下来,由于它运行在ring0级别,拥有与系统核心同等级的权限,因此它可以更轻易的把自己隐藏起来,无论是进程信息还是文件体,甚至通讯的端口和流量也能被隐藏起来,在如此强大的隐藏技术面前,无论是任务管理器还是系统配置实用程序,甚至系统自带的注册表工具都失去了效果。
【总结】       这是一种ring0 级别的高级注入技术。【不了解ring0,只需要理解为这是一个权限等级,ring3便是用户操作权限,权限逐级递增,ring0是最高权限】 image.png
样本背景
       样本是一个盗号木马下载器,以及含有锁定计算机浏览器主页功能的系统计算机驱动木马文件,引擎判定是一个Rootkit木马。
       本篇内容我将把重点放在这个样本的Rootkit技术上,进行简单且水的分析。
分析内容


       DriverEntry函数是驱动文件的重要的主函数,其一切的函数行为都将在其中运行,通常情况下会存在一个DriverUnload函数用来卸载驱动程序,但多数情况下是驻留在系统中达到持久化的行为。
image.png
      其次在Rootkit木马必须要做的一件事--- 创建文件句柄。为了从用户模式的程序中使用内核驱动程序,用户模式的程序必须打开一个驱动程序句柄。这只有当驱动程序已经注册了一个指定的设备之后才能进行。一旦注册完成,用户模式的程序就可以将指定设备像文件一样打开。创建了一个名为【\\Device\\93218ec2da92e0af】的设备对象。
       一旦打开了文件句柄,它就可以在用户模式的函数如ReadFile和WriteFile 中充当参数,也可以用于进行IOCTL调用,这些操作会导致生成要在驱动程序中处理的IRP。【我一下消化不了IOCTL什么的,留给以后消化了】
image.png
       还有一个重要的概念就是添加链接符号,为了便于用户模式的程序打开文件句柄,一些驱动程序使用了符号链接,这个步骤不是必需的。【对于Rootkit的实现是有益的】
image.png
       这个样本中我所发现的Rootkit技术中,只发现了两种hook技术,一种SSTD HOOK 和 IRP HOOK。先从SSTD HOOK 开始,      图中是样本Hook的四个系统函数。
image.png
image.png
       图中重点是qword_88540的值,跟一下函数过程可有一个了解是怎么做到Hook SSDT的,先是获取到获取到smss.exe 的进程pid.
image.png
       先是通过PsGetProcessPeb函数获取了smss.exe进程的EPROCESS结构信息,再返回进程中EPROCESS结构体中关于ntdll.dll 的信息将其返回到v1。人菜不会说,以及EPROCESS结构体不熟,一搜好多好多不知道具体是什么信息。
image.png
image.png
       V1返回后赋值到qword_88540后,传入到sub_735C0函数中,猜测是根据ntdll.dll的什么信息,计算出来的ZwProtectVirtualMemory等四个函数的具体地址,sub_735C0达到了GetProcessAddress函数的效果 。
image.png
另一波同样方法的hook.
image.png
       剩下IRP HOOK就更水一些了。在其样本连接服务器下载盗号木马运行的这一块代码中,我找到了注入进程运行过程,尝试服务器是否存活过程,就是没发现连接服务器进行下载文件过程,也未有发现有网络相关的API以及相关API字符串。还好写样本的人为了方便调试留下了一些信息反推到IRP HOOK点。
image.png
       通过构建的DeviceObject 信息 ,在利用IoBuildDeviceIoControlRequest函数创建一个IRP信息,并利用IofCallDriver 函数执行处理这个IRP信息,达到作者想要隐藏的网络行为。
[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
struct _IO_STATUS_BLOCK IoStatusBlock; // [rsp+50h] [rbp-78h]
 PMDL MemoryDescriptorList; // [rsp+60h] [rbp-68h]
 PIRP Irp; // [rsp+68h] [rbp-60h]
 PDEVICE_OBJECT DeviceObject; // [rsp+70h] [rbp-58h]
 NTSTATUS v9; // [rsp+78h] [rbp-50h]
 struct _KEVENT Event; // [rsp+80h] [rbp-48h]
 ULONG *v11; // [rsp+98h] [rbp-30h]
 __int64 v12; // [rsp+A0h] [rbp-28h]
 _MDL *v13; // [rsp+A8h] [rbp-20h]
 unsigned int v14; // [rsp+B0h] [rbp-18h]
 _FILE_OBJECT *FileObject; // [rsp+D0h] [rbp+8h]
 PVOID VirtualAddress; // [rsp+D8h] [rbp+10h]
 ULONG Length; // [rsp+E0h] [rbp+18h]
 int v18; // [rsp+E8h] [rbp+20h]
 
 v18 = a4;
 Length = a3;
 VirtualAddress = a2;
 FileObject = a1;
 MemoryDescriptorList = 0i64;
 DeviceObject = IoGetRelatedDeviceObject(a1);
 KeInitializeEvent(&Event, 0, 0);
 Irp = IoBuildDeviceIoControlRequest(3u, DeviceObject, 0i64, 0, 0i64, 0, 1u, &Event, &IoStatusBlock);///////////////////////////
 if ( !Irp )
   return 3221225626i64;                       // 资源不足
 if ( Length )
 {
   MemoryDescriptorList = IoAllocateMdl(VirtualAddress, Length, 0, 0, 0i64);
   if ( !MemoryDescriptorList )
   {
     IoFreeIrp(Irp);
     return 3221225626i64;
   }
   MmProbeAndLockPages(MemoryDescriptorList, 0, 0);
   v9 = 0;
 }
 sub_16320((__int64)Irp, 0i64, 0i64, 0, 0, 0);
 v12 = sub_162C0((__int64)Irp);
 *(_BYTE *)v12 = 15;
 *(_BYTE *)(v12 + 1) = 7;
 *(_QWORD *)(v12 + 40) = DeviceObject;
 *(_QWORD *)(v12 + 48) = FileObject;
 v11 = (ULONG *)(v12 + 8);
 *(_DWORD *)(v12 + 12) = v18;
 *v11 = Length;
 if ( Length )
   v13 = MemoryDescriptorList;
 else
   v13 = 0i64;
 Irp->MdlAddress = v13;
 v9 = IofCallDriver(DeviceObject, Irp);////////////////////
 if ( v9 == 259 )
 {
   KeWaitForSingleObject(&Event, 0, 0, 0, 0i64);
   v9 = IoStatusBlock.Status;
 }
 if ( v9 < 0 )
   v14 = v9;
 else
   v14 = IoStatusBlock.Information;
 return v14;

IRP介绍
      IRP 是由 I/O 管理器发出的, I/O 管理器是用户态与内核态之间的桥梁,当用户态进程发出 I/O 请求时, I/O 管理器就捕获这些请求,将其转换为 IRP 请求,发送给驱动程序。 I/O 管理器无疑是非常重要的,具有核心地位。它负责所有 I/O 请求的调度和管理工作,根据请求的不同内容,选择相应的驱动程序对象,设备对象,并生成、发送、释放各种不同的 IRP 。整个 I/O 处理流程是在它的指挥下完成的。  【我的理解是比如说你说你要进P站,你网址栏打下了那个腥气满满的网址,浏览器就帮你访问打开解析下页面给你看,IRP就如浏览器生成的访问请求】




       啊!!大海你全是水!!!!   水完了,查了很多资料也没啃下来,卑微.jpg    沉水里,尸骨无存都被鱼吃了个干净,骨灰都没了。哦,我主题是来"记仇"来着,挂知识点,https://bbs.pediy.com/thread-177772.htm          内核api运作知识
https://www.malwaretech.com/2013/09/ring3-ring0-rootkit-hook-detection-12.html          rootkit 检测与原理
https://bbs.pediy.com/thread-57900.htm  rootkit之路   【这里有个大佬,rootkit 啥hook都发帖子了,建议逛主页,不过我大多看不懂,心死.jpg】
https://blog.csdn.net/bcbobo21cn/article/details/51145258   rootkit 技术简介
585678_67hi0eqg6aho6la.jpg 585678_x6qkka5m4r7twlc.jpg function_call_path.png

     最后,如果都以上文章所阐述点有自己观点和见解的,希望老师傅指点,带带彩笔!!!  给您鞠躬了!!!
然后还有一个问题这玩意中毒了后怎么清除,我查了下这玩意特点     
1,无进程。RING0木马编译后是一个SYS文件,它和DLL文件那样,是插入到进程里运行的。但DLL插入的是地址在0x80000000下的用户区,而 RING0木马插入到地址在0x80000000以上的系统区,而且所有进程共享,只要它本身不提供unload例程,几乎不可能被卸载,而且没有多少个工具可以列举系统里装载的SYS模块。
2,无端口。RING0木马可以直接控制网卡收发包,系统和防火墙根本不知道,因此它可以使用任何端口,任何协议。或者通过使防火墙的NDIS驱动失效,突破防火墙的封堵。
3,难发现,难查杀,生存能力强。但是,要写出这样一匹好马,需要对系统内核和通讯协议非常熟悉的高手才能胜任,尤其要对ntoskrnl.exe, hal.dll,ndis.sys三个系统模块导出的函数要非常熟悉才行。  【所以能用ring0的代码让代码正确运行本身就是一门艺术,凑s*还写马】
      清除的话也是众口难一,首先重做系统因该是可以的毕竟还不是bootkit, 大多数也就说进windows的安全模式开杀毒【也没毛病,病毒都进Ring0了,凭啥杀毒不能进Ring0了(别为某某零卸载了还有文件删不掉了)】。 你说怎么发现你中了马? 这么秀的技术都拿来写锁首页,盗号了

免费评分

参与人数 24威望 +2 吾爱币 +119 热心值 +23 收起 理由
0615 + 1 + 1 热心回复!
wsrdyx2008 + 1 + 1 我很赞同!
brIckZ + 1 热心回复!
叶一苇 + 1 我很赞同!
hml233 + 1 + 1 谢谢@Thanks!
bourneidea + 1 我很赞同!
fei8255 + 1 + 1 谢谢@Thanks!
若可 + 1 用心讨论,共获提升!
victos + 1 + 1 谢谢@Thanks!
TATITzz + 1 6
amovokiss + 1 + 1 我很赞同!
zhoumeto + 1 + 1 用心讨论,共获提升!
fengbolee + 1 + 1 用心讨论,共获提升!
zhczf + 1 + 1 我很赞同!
BrainFlower + 1 + 1 热心回复!
ZKingKZing + 1 + 1 我很赞同!
jnez112358 + 1 + 1 谢谢@Thanks!
风扫春残雪 + 1 + 1 我很赞同!
小黑侠 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sym945 + 1 + 1 热心回复!
cryfly + 1 + 1 看不懂的小白先膜拜,总觉得木马都是把自己写成杀毒软件来隐藏自己的…
打字的小强 + 1 + 1 用心讨论,共获提升!
罩到胸前必有沟 + 1 + 1 说得太好了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

minibeetuaman 发表于 2020-7-2 15:56
玩这个东西你得先告诉大家运行的环境,是32或者64环境,还有就是支持到哪个版本的windows

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
JFF + 1 + 1 我很赞同!

查看全部评分

siqintu 发表于 2020-7-2 11:21
都说正经了就别说水不水的,照你这意思正经帖子都是水喽,
 楼主| hjm666 发表于 2020-7-2 11:28
siqintu 发表于 2020-7-2 11:21
都说正经了就别说水不水的,照你这意思正经帖子都是水喽,

害,正经写了,内容水啊
罩到胸前必有沟 发表于 2020-7-2 11:14
说得好!
xieboo 发表于 2020-7-2 11:17
无言以对~~~
tlngln 发表于 2020-7-2 11:18
学习了!!!!
safe-夏天 发表于 2020-7-2 11:35
tql,看懂了一半
shr123 发表于 2020-7-2 12:20
进来的时候是懵的
出去的时候更懵了
lep52 发表于 2020-7-2 12:47
终于看完了,虽然看不懂
猪蹄不香 发表于 2020-7-2 12:59
我完完全全懵了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-24 22:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表