UpK软件安全社区's Archiver

hellfish 发表于 2007-3-30 05:17

邪恶的RING0注射SHELLCODE,脆弱的PE加载机制

ZwCreateProcessEx 是个非常非常好的东西,虽然他是个UNDOC.但是如果你仔细阅读过WIN2K的SRC,并且非常了解PE的运行机制,你会发现一些很有趣的东西。

这对目前的所有NT内核的系统来说都是致命的

可以用来做什么?

1. 制造漏洞
2. 提升权限
3. 拿来写病毒
4. 拿来写各种木马
5. 各种ROOTKIT

但是这里我只想很简单的说一下原理。我只希望这样的东西只用来讨论而已,当然这不是纯理论
在后面有个简单的EXAMPLES

其实你阅读过2K的SRC,分析过PE的加载,就会发现所有的进程在创建时都是由一个THREAD开始

而NtCreateThread有个很趣的参数 ThreadContext .这就是关键

在任何进程创建时,第一次调用的 NtCreateThread 中的 ThreadContext->Eax 都是这个进程被分配的在内存中的基址,

然而这个时候进程甚至没有开始加载,但正是这个没有被加载的进程,系统却已经为他分配好了一个正常进程所需要的一切

那么我们就可以利用这个地址用ZwAllocateVirtualMemory为我们的代码分配一段空间,

然后把我们的SHELLCODE写进去,我的这个例子仅仅是打开一个MessageBox并显示一句简单的字符串.

但是这并不妨碍你把你的病毒代码又或者是一整个木马写进去...只要你想

也许第一个 100% Ring0 Virus 或者 Ring0 Housr 就诞生了

在这只后,你只需要把ThreadContext->Eax的地址修正,进程就能被顺利的加载。

并且首先被运行的就是我的SHELLCODE, 并且这个小玩意只有一个SYS,除此之外再没有任何多余的东西了

下面是个例子只是为了证明这个理论可以变成实际,驱动没有做任何的处理。并且可以正常的加载与卸载, 也没有从链表中移走,你可以用任何驱动管理工具来终止他

在驱动加载后,你再运行任何的进程都将会被注入我的SHELLCODE..

PS: 请原谅我说的非常之模糊,毕竟我不想 100% Ring0 Virus 或者别的什么诞生与这篇文章

命令行 loader 加载 loader -u 卸载

如果这时候你用OD附加打开的进程,你会发现我的SHELLCODE就在你附加的进程的头部,

仿佛天生就是这个进程的一部分,而实际上你不可能在这个进程的文件中发现他们。是不是很有趣,呵呵

而且可以注进目前的任何可执行文件,包括ICESWORD,卡巴,NOD32..想想某一天突然发现你的杀毒软件或者防火墙本身就是个木马或者毒源吧,那简直太有趣了

Examples:
[attach]7393[/attach]

下载
[attach]7394[/attach]

[[i] 本帖最后由 hellfish 于 2007-3-30 05:22 编辑 [/i]]

cyto 发表于 2007-3-30 07:26

Win2K+所有补丁+NOD32
第一次导致蓝屏重启。
第二次,第三次,。。。一直没能出现Message。

Niklen 发表于 2007-3-30 09:29

楼主发源码~~

hnxyy 发表于 2007-3-30 10:06

强~~~

在XP最新补丁下一切正常,打开任何程序都弹出哪个框

2K下估计ThreadContext->Eax基址不对

boyachang 发表于 2007-3-30 10:36

呵呵,下来看看

river3moon 发表于 2007-3-30 10:49

楼主的这个想法只要不往某些方向发展
将会是一个新的技术制高点

hellfish 发表于 2007-3-30 12:39

2K下更要命,2K用的是 ZwCreateProcess 而不是 ZwCreateProcessEx. 所以会出现这种情况

2K下蓝,肯定是驱动里 ZwCreateProcessEx 的IDT出了问题

ww990 发表于 2007-3-30 13:27

感觉有点:funk:

hellfish 发表于 2007-3-30 13:32

[quote]原帖由 [i]river3moon[/i] 于 2007-3-30 10:49 发表 [url=http://www.unpack.cn/redirect.php?goto=findpost&pid=113600&ptid=11474][img]http://www.unpack.cn/images/common/back.gif[/img][/url]
楼主的这个想法只要不往某些方向发展
将会是一个新的技术制高点 [/quote]

恩,如果用在杀毒软件,那可以免除很多虚拟机的烦恼,所要做的仅仅在所有进程被加载后进行检查,又或者在注入的代码中阻止一切的恶意操作

用在网络游戏的反外挂,那即使这个外挂用了驱动,也难以逃脱监控

如果用在安全软件,那可以很有效的阻止恶意程序乃至SHELLCODE

---

用在某些方向的话....

说实在的,也许用于某些方向能获得的利益更多...

loveboom 发表于 2007-3-30 14:09

去年见过这种病毒

海风月影 发表于 2007-3-30 14:56

希望楼主别用在木马,病毒上:loveliness:

hellfish 发表于 2007-3-30 15:13

[quote]原帖由 [i]loveboom[/i] 于 2007-3-30 14:09 发表 [url=http://www.unpack.cn/redirect.php?goto=findpost&pid=113648&ptid=11474][img]http://www.unpack.cn/images/common/back.gif[/img][/url]
去年见过这种病毒 [/quote]

我可以保证,绝对不是我干的

wzmooo 发表于 2007-3-30 18:15

强啊  楼主:victory:

v-ken 发表于 2007-3-30 18:41

不寒而栗

vfer 发表于 2007-3-31 00:17

直接用调用门不就OK了 干吗还来个loader??

cirouter 发表于 2007-9-13 13:02

**** 作者被禁止或删除 内容自动屏蔽 ****

aaaaaa 发表于 2007-9-15 13:06

**** 作者被禁止或删除 内容自动屏蔽 ****

AkingHK 发表于 2007-12-13 20:45

[quote]原帖由 [i]aaaaaa[/i] 于 2007-9-15 13:06 发表 [url=http://www.unpack.cn/redirect.php?goto=findpost&pid=165643&ptid=11474][img]http://www.unpack.cn/images/common/back.gif[/img][/url]
LZ这个东西也是抄袭的,源代码8进制论坛有人发过 [/quote]
相近但不相同,hellfish的技术是公认的。

AkingHK 发表于 2007-12-13 20:48

[quote]原帖由 [i]loveboom[/i] 于 2007-3-30 14:09 发表 [url=http://www.unpack.cn/redirect.php?goto=findpost&pid=113648&ptid=11474][img]http://www.unpack.cn/images/common/back.gif[/img][/url]
去年见过这种病毒 [/quote]

病毒还记得是什么不?杀毒软件的杀毒效果怎么样?
很想关注这类病毒的运作与清除方法。

suxiaojack 发表于 2007-12-14 08:40

:P 非常厉害!
[quote]
来自 邪恶八进制信息安全团队官方讨论组 -> 论坛原创{ Original Paper } -> [原创]邪恶的RING0注射ShellCode脆弱的PE加载机制

hellfish        2007-03-30 15:18
最新测试结果,把驱动设置为 SERVICE_BOOT_START ,一旦重启 system 以及 system idle process 也一样被注
[/quote]

great1234 发表于 2007-12-15 18:26

很有创意,关键是你的shell代码如何第一次感染别人啊

lcy3125891 发表于 2008-3-20 10:31

向楼主学习!

mapleleaf 发表于 2010-3-5 21:59

没有源码吗?

不死怨灵 发表于 2010-3-8 10:52

很强大~学习了~

chhzh 发表于 2010-3-8 13:02

look look

zuoyefeng 发表于 2010-3-9 16:34

晕,这么老的贴都被顶起来了
用zzzevazzz的话来科普一下
zzzevazzz 2007-3-30 22:48
真是大惊小怪。进了ring0自然是无所不能,何来“脆弱”、“致命”一说。在Vista以前,OS总是完全信任驱动的。给SeAccessCheck打个补丁,就能让Everyone对任何对象具有完全控制权限,你能说这是致命错误吗?就算有错,也是整个NT系统的设计错误。
修改入口点注入shellcode是很平常的技术,微软的Detours1.5就用这个办法实现dll注入。而Detours2.1改用增加并替换导入节的方法,实现了比修改入口点更优先的dll注入。这些都是正常利用PE加载机制实现的。如果这是所谓的“脆弱”,微软就应该修改加载机制,而不是出个 Detours自挖墙角。

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.