荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: lvyou (GO→GO→GO——→), 信区: Security
标  题: DLL木马篇.
发信站: 荔园晨风BBS站 (Sun Jun 10 22:56:11 2001), 转信

发信人: charls (charls), 信区: Security
标  题: DLL木马篇
发信站: 武汉白云黄鹤站 (2001年06月10日21:15:31 星期天), 站内信件

NT系统下木马进程的隐藏
  在WIN9X中,只需要将进程注册为系统服务就能够从进程查看器中隐形,可是
这一切
在WINNT中却完全不同, 无论木马从端口、启动文件上如何巧妙地隐藏自己,始终
都不
能欺骗WINNT的任务管理器,难道在WINNT下木马真的再也无法隐藏自己的进程了?

  我们知道,在WINDOWS系统下,可执行文件主要是Exe和Com文件,这两种文件
在运行
时都有一个共同点,会生成一个独立的进程,寻找特定进程是我们发现木马的方法
之一
(无论手动还是防火墙),随着入侵检测软件的不断发展,关联进程和SOCKET已经
成为
流行的技术(例如著名的FPort就能够检测出任何进程打开的TCP/UDP端口),假设
一个
木马在运行时被检测软件同时查出端口和进程,我们基本上认为这个木马的隐藏已
经完
全失败(利用心理因素而非技术手段欺骗用户的木马不在我们的讨论范围之内)。
在NT
下正常情况用户进程对于系统管理员来说都是可见的,要想做到木马的进程隐藏,
有两
个办法,第一是让系统管理员看不见(或者视而不见)你的进程;第二是不使用进
程。

  让系统管理员看不见进程的方法就是进行进程列表欺骗,为了了解如何看不见
进程
,我们首先要了解怎样能看得见进程:在Windows中有多种方法能够看到进程的存
在:P
SAPI(Process Status API),PDH(Performance Data Helper),ToolHelp
API,如
果我们能够欺骗用户和入侵检测软件用来查看进程的函数(例如截获相应的API调
用,替
换返回的数据),我们就完全能实现进程隐藏,但是一来我们并不知道用户和入侵
软件
使用的是什么方法来查看进程列表,二来如果我们有权限和技术实现这样的欺骗,
我们
就一定能使用其它的方法更容易的实现进程的隐藏。(例如:能够替换DLL或挂接
API来
隐藏进程不如直接用来做木马。)
  第二种方法是不使用进程,不使用进程使用什么?为了弄明白这个问题,我们
必须
要先了解Windows系统的另一种“可执行文件”----DLL,DLL是Dynamic Link
Library(
动态链接库)的缩写,DLL文件是Windows的基础,因为所有的API函数都是在DLL中
实现
的。DLL文件没有程序逻辑,是由多个功能函数构成,它并不能独立运行,一般都
是由进
程加载并调用的。(你你你,你刚刚不是说不用进程了?)别急呀,听我慢慢道来
:因
为DLL文件不能独立运行,所以在进程列表中并不会出现DLL,假设我们编写了一个
木马
DLL,并且通过别的进程来运行它,那么无论是入侵检测软件还是进程列表中,都
只会出
现那个进程而并不会出现木马DLL,如果那个进程是可信进程,(例如资源管理器
Explo
rer.exe,没人会怀疑它是木马吧?)那么我们编写的DLL作为那个进程的一部分,
也将
成为被信赖的一员而为所欲为。
  运行DLL文件最简单的方法是利用Rundll32.exe,Rundll/Rundll32是Windows
自带的
动态链接库工具,可以用来在命令行下执行动态链接库中的某个函数,其中
Rundll是16
位而Rundll32是32位的(分别调用16位和32位的DLL文件),Rundll32的使用方法
如下:

  Rundll32 DllFileName FuncName
  例如我们编写了一个MyDll.dll,这个动态链接库中定义了一个MyFunc的函数
,那么
,我们通过Rundll32.exe  MyDll.dll  MyFunc就可以执行MyFunc函数的功能。
  这个和木马的进程隐藏有什么关系么?当然有了,假设我们在MyFunc函数中实
现了
木马的功能,那么我们不就可以通过Rundll32来运行这个木马了么?在系统管理员
看来
,进程列表中增加的是Rundll32.exe而并不是木马文件,这样也算是木马的一种简
易欺
骗和自我保护方法(至少你不能去把Rundll32.exe删掉吧?想从Rundll32进程找到
DLL木
马还是有一点麻烦的)
  使用Rundll32的方法进行进程隐藏是简易的,非常容易被识破。(虽然杀起来
会麻
烦一点)比较高级的方法是使用特洛伊DLL,特洛伊DLL的工作原理是使用木马DLL
替换常
用的DLL文件,通过函数转发器将正常的调用转发给原DLL,截获并处理特定的消息
。例
如,我们知道WINDOWS的Socket1.x的函数都是存放在wsock32.dll中的,那么我们
自己写
一个wsock32.dll文件,替换掉原先的wsock32.dll(将原先的DLL文件重命名为
wsockol
d.dll)我们的wsock32.dll只做两件事,一是如果遇到不认识的调用,就直接转发
给ws
ockold.dll(使用函数转发器forward);二是遇到特殊的请求(事先约定的)就
解码并
处理。这样理论上只要木马编写者通过SOCKET远程输入一定的暗号,就可以控制
wsock3
2.dll(木马DLL)做任何操作。特洛伊DLL技术是比较古老的技术,因此微软也对
此做了
相当的防范,在Win2K的system32目录下有一个dllcache的目录,这个目录中存放
着大量
的DLL文件(也包括一些重要的exe文件),这个是微软用来保护DLL的法宝,一旦
操作系
统发现被保护的DLL文件被篡改(数字签名技术),它就会自动从dllcache中恢复
这个文
件。虽然说有种种方法可以绕过DLL保护(例如先更改dllcache目录中的备份再修
改DLL
文件、或者利用KnownDLLs键值更改DLL的默认启动路径等),但是可以想见的未来
微软
必将更加小心地保护重要的DLL文件;同时由于特洛伊DLL方法本身有着一些漏洞(
例如
修复安装、安装补丁、升级系统、检查数字签名等方法都有可能导致特洛伊DLL失
效),
所以这个方法也不能算是DLL木马的最优选择。
  DLL木马的最高境界是动态嵌入技术,动态嵌入技术指的是将自己的代码嵌入
正在运
行的进程中的技术。理论上来说,在Windows中的每个进程都有自己的私有内存空
间,别
的进程是不允许对这个私有空间进行操作的(私人领地、请勿入内),但是实际上
,我
们仍然可以利用种种方法进入并操作进程的私有内存。在多种动态嵌入技术中(窗
口Ho
ok、挂接API、远程线程),我最喜欢的是远程线程技术,这种技术非常简单,只
要有基
本的进线程和动态链接库的知识就可以很轻松地完成嵌入,下面就为大家介绍一下
远程
线程技术。
--
※ 来源:·武汉白云黄鹤站 bbs.whnet.edu.cn·[FROM: 211.97.126.233]

--
       ▕﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋
       ▕ ▕﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋▏
       ▕ ▕          落霞与孤鹜齐飞,   秋水共长天一色!?         ▏
       ▕ ▕                                                      ▏
       ▕   ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.29]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店