32 views

Rootkit技术 5 – Managed Code Rootkit

 

image

简称MRC,也就是托管代码Rootkit。所谓托管代码的例子就是C#、Java这样生成中间语言后经过虚拟机运行的语言。用这类托管语言也可以编写传统的Rootkit,例如这里,用VB.NET实现了API替换以及隐藏自身的功能,只是看着笨拙。这里的MRC含义不同,指的是以JVM或者CLR为视角的Rootkit。主要参考【1】。

之所以称之为Rootkit是因为,这里语言运行环境(Process VM)被理解为OS,MCR可以Hook在语言运行环境中,拦截上层应用,改变逻辑等。类比OS中的kernel-level rootkit。MRC可以在app不知情的时候,向目录写入文件,app读注册表的时候,MRC也可以拦截,隐藏自己。

 

为什么这个层次的Rootkit有意义,下面是几点MCR的优势:

1.JVM,.NET之类的虚拟运行环境已经成了OS的一部分,Windows预装.NET,很多系统预装JVM。

2.有很多托管代码的上层应用,微软自身也尽量使用C#开发系统应用,减少原生语言开发,目的是提高效率。

这两点原因也决定了托管代码应用现在攻击面很大,有价值。

3.VM相对稳定,相比OS Kernel Rootkit,利用也稳定,不用适配经常变换的OS版本。系统的所有托管代码的应用,通过这一个点就可以攻击。利用比较稳定和便捷。

4.基于托管代码可以做很多事情,调用底层接口操作注册表、文件、Socket、内存等,足够满足Rootkit需求,如隐藏文件、目录、进程、网络连接、安装后门。

5.入侵检测系统、端点安全产品等,通常不理解字节码。不容易被检出(不知道现状如何)。

6.语言的OO机制给MRC带来了便利,例如在base class加入MCR,会被继承到子类等。

 

image

这个图是几个MCR可以做手脚的地方:

1.控制编译其,编译阶段注入字节码

2.在字节码解释的阶段,修改虚拟机,修改字节码执行逻辑

3.修改系统扩,加入Rootkit逻辑

4.在JIT部分修改逻辑

 

MRC的安装实现方式

1.系统库的替换

这是最早UNIX出现的时候的古老方法了。

【1】中给出了一个替换.NET系统库函数的例子,思路和Android应用的重新打包类似:

.NET的类库位于GAC(Global Assembly Cache )中,其实就是目录“c:\windows\assembly”,如果用Windows文件管理器打开,会看到类库,用Total commander打开,会看到目录和DLL文件。对于想要修改的DLL,可以采用如下步骤:

1.定位到你需要修改的系统类库

可以查看应用运行时结构(用Reflactor工具),查找引用的库文件。从GAC中拷贝出来对应的DLL。

2.反编译

用idlasm将DLL反编译为字节码中间语言

3.修改想要替换的函数对应的字节码

4. 重新编译,打包成DLL,拷贝的GAC替换原来的系统库

对于系统库的签名验证保护,因为我们已经得到了Root权限,可以有如下思路:

1.diable验证功能

2.伪造证书进行签名等。

2.控制编译器编译过程来加入恶意字节码

【1】中提到一个实际的例子,

“In fact, this kind of attack inspired the writers of the W32/Induc-A virus, which infects the Delphi language compiler on Windows machines in such a way that each newly created executable contains additional code planted by the virus, without the programmer’s knowledge. It took about a year until one of the antivirus vendors, Sophos Labs, finally discovered this virus.”

这是专门针对Delphi编译器的病毒,在编译的时候注入恶意代码。

对于托管代码,思路类似。

Java提供了Java Agent技术,它运行在JVM内,在Java加载过程中拦截、监控、修改类的字节码。在Agent中加入callback,实现Rootkit安装。

.NET的类似即使是.NET Profiler API

 

MRC的功能

这边内容虽多,但是本质和其它的Rootkit类似了,可以隐藏文件、进程、注册表项…

基于MRC可以实现的恶意软件功能也是就看想象力了,例如。

1.修改逻辑

修改业务逻辑,跳过认证。

2.网络拦截

修改DNS解析结果,重定向到恶意服务器等。

3.Keylogger, reverse shell, port scanner等.

……

 

【参考】

1.Managed Code Rootkit

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">