吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18317|回复: 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++] 纯文本查看 复制代码
 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, 2024-11-15 13:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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