【Day 12】- 找出看不见也摸不着的 Process,终极办法!

Agenda

  • 资安宣言
  • 测试环境与工具
  • 前情提要
  • 技术原理
  • 下期预告

资安宣言


撰写本系列文章目的在於提升资讯安全之实务能力,
并透过实作体悟到资讯安全领域的重要性,
本系列所有文章之内容皆有一定技术水平,
不得从事非法行为、恶意攻击等非法活动,
「一切不合法规之行为皆受法律所约束」,
为了避免造成公司、厂商或玩家之间困扰,
所有实作不会拿已上市产品、Online Game 等等来作范例学习,
且部分具有深度、价值之内容,将会提升一定阅读门槛(不对该技术做分析、解说),
请勿透过本系列文章所学,从事任何非法活动,请不要以身试法!!!


测试环境与工具

前情提要

在昨天的文章中,
【Day 11】- 再次创造 Ghost Process,这次找不到了吧哈哈(基於修改 PspCidTable 隐藏的 Rookit)
已经有说到第二种隐藏 Process 的方法,
这种方法是修改 Process 的 PspCidTable,
这样就拿不到 Process 的 Object 了。
今天会来谈谈如何找出透过这种方式隐藏的 Process。

技术原理

首先开始前要先说一下,
小弟我目前还属於菜鸟阶段,正不断努力学习中,
若有发现错误或不妥之处还请不吝赐教。
欢迎大家多多留言,互相交流交流。

那就开始今天的主题吧~~

在今天开始前,先来看看透过以下两种方法所隐藏的 Process 能不能逃过 ARK 工具的侦测:

  1. 修改 EProcess 的 ActiveProcessLinks
  2. 修改 PspCidTable

一、Windows-Kernel-Explorer

二、YDark

可以看到两种 ARK 工具都有侦测出来,
只是 YDark 侦测的结果较不完整、资讯较少,
不过也许是因为我使用的版本较低,所以没有侦测出来,
在这篇文章发布前几十天已经有新版本在它们 GitHub 上发布。

再来看到 Windows-Kernel-Explorer 就稍微强大了一些,
还是能完整的将藏起来的 Process 找出来,
今天就要来说说找出这种 Rookit 的一种办法,
我个人称之为:「暴力搜寻法」

一个 Process 能执行是因为已经载入了 Memory,
既然载入了 Memory 一定会有 EProcess Address,
EProcess Address 就相当於是 Process 的身分证,
只要能拿到 EProcess Address 就有 Process 相关资讯,
所以其实这个方法说烂不烂、说好不好,就是穷举 EProcess Address,
然後判断是有效的 EProcess Address,且当前 Process 还「活着」。

怎麽从 EProcess 判断 Process 还「活着」?
下方列个几点供参考:

  1. ExitTime,这东西有时 Process 退出不会被清空,最好别只判断这个。
  2. VadRoot
  3. NumberOfPrivatePages
  4. ActiveThreads
  5. ObjectTable,这东西经过测试,Process 退出後基本上都为空,可以判断这个。
  6. ... ...
  7. ... ... ...

暴力搜寻 EProcess:

其实以上方式都还是有机会被绕过的,缺点就是地址空间较大,会花满长时间在穷举地址。

最後结论就是没有一个完美的方法能隐藏或找出来,
因为攻防战无时无刻都在创新,只有花比较多时间下去研究的那一方胜率会较大。

接着,这篇文章其实已经结束了,
不过以下来讲讲、复习一下这几天所讲的这个 Process 隐藏系列:

在【Day 08】讲了简单修改 PEB 的方法,来达到伪装成其他 Process 的效果。

还没看的可以去看一下哦:
【Day 08】- 见鬼了(っ °Д °;)っ我明明没有启动这支程序…

在【Day 09】讲了基础的 Process 隐藏方法,
这个方法是基於修改 EProcess 的 ActiveProcessLinks 来达成(断链)之目的。

还没看的可以去看一下哦:
【Day 09】- 今天来创造 Ghost Process(基於断链隐藏 Process 的手法)

在【Day 10】讲了如何找出断链後所隐藏的 Process,
这个方法是基於 CALL 现有 API 来找到断链後隐藏的 Process,
这几个 API 是透过 PspCidTable 来找到对应的 EProcess Object。

还没看的可以去看一下哦:
【Day 10】- 藏起来的 Process 真的看不见摸不着?(讲解找出断链後的 Process 方法)

在【Day 11】讲了 Day 10 所讲到的两种 API 部分实作方法,
找到 PspCidTable 後,列举所有 HANDLE TABLE 找出所有的 Process,
最後修改 PspCidTable 来隐藏 Process。

还没看的可以去看一下哦:
【Day 11】- 再次创造 Ghost Process,这次找不到了吧哈哈(基於修改 PspCidTable 隐藏的 Rookit)

最後来讲讲今天之後的规划:
明天 Day 13 会来讲一下如何禁止一个 Process 的新建。
後天 Day 14 会来实作/讲解一款驱动级别的「键盘侧录器」。
再来 Day 15 会开始来谈谈在 R0 下的 HOOK,目标是实作一个系统时钟加速器。

最後的最後,提前公布一下 Day 16:
没意外的话会来实作一款阻止关机的驱动 XD,只能透过长按电源或拔插头来关机。

後面的主题就会在 Day 15 公布!敬请期待 :D

好了,这篇就讲到这结束了,
大家若有发现哪里写得不好或错误的地方,都留个言讨论一下吧 XD
那我们下期见 o( ̄▽ ̄)ブ

下期预告


<<:  [想试试看JavaScript ] 阵列一些操作阵列好用的方法 map

>>:  [Day 16] 第一主餐 pt.8-我带几个data去。你就在此地,不要走动

【Day 14】if 条件的范例讲解

不知道大家在写 BMI 的题目时,有没有遇到甚麽问题呢? 我们今天就来讲解一下 BMI 的题目吧! ...

Day07 NAT 类型

NAT 网路位址转换(英语:Network Address Translation,缩写:NAT)是...

【第二十二天 - XSS Lab】

Q1. XSS Lab 为了避免骇客透过 JS 进行攻击,工程师会进行过滤,以下就针对 prompt...

[FGL] 吸星大法 - IMPORT之 2: 带入JAVA或其他FGL套件

前一篇IMPORT中,提到Genero Package中有提供一些预先制作的功能套件可用。 可是面对...

[Day 25] 中场休息 - 没信用卡的学生福星,heroku

好的,由於昨天aws架设完环境後今天突然爆炸了 所以可能要重新架过aws 那今天就先来讲讲没有信用卡...