Windows的梦魇:木马文件、进程、注册表隐藏技术

一、首先从rootkit说起

rootkit是什么?是指通过入侵计算机系统,并获得管理员访问权限的一类软件。rootkit软件能够在系统最底层上控制计算机,就连微软安全部门都感到头痛。它能够隐藏行踪,使计算机用户无法发现它或发现它完成某些任务。与大多数的计算工具一样,R ootkit从本质上说并非一种恶意技术,但木马作者可以使用这一技术控制用户的计算机,并隐藏他们自己的“作品”,因此被黑客们大肆利用。现在,rootkit已经成了采用此技术的特洛伊木马的代名词。

有人把常见的木马分为3个级别:

1、应用级:如WinShell、Radmin、冰河等,它们基本没有采取别的方法来隐藏自己,只是一个普通的能够实现远程控制的应用程序而已;

2、系统级:多少采用了一些下隐藏行踪的编程技术,如Bingle、Portless、ZXshell,常见的比如Hxdef(Hacker defender)、灰鸽子等;

3、内核级:木马程序主要部分工作在系统内核,采用的隐身方法有象病毒一样感染系统文件,修改系统内核等,因此有很强的隐蔽性和杀伤力。如hacker’s door(黑客之门)等。

应用级的木马只是在后台运行,通过检查被感染系统进程,就能够轻易地发现它们。但是,系统级和内核级的rootkit木马越来越常见,其隐身能力取得了飞速的发展。一些新的rootkit能够截获传递给内核的系统调用,过滤由rootkit生成的查询,其 结果是木马正在运行的典型特征,例如文件名、进程、注册表,都无法被系统管理员或扫描工具所发现。

以下是网上一段木马性能优劣与否的评价摘录:

1、一个合格的木马至少应该做到不能有陌生进程存在于任务管理器里,给后门进程起一个看起来像系统进程的名字只是掩耳盗铃;
2、不能在注册表Run启动项或者服务启动项里留下众所周知的启动键值或新增服务,当然更不能直接写开始菜单的启动项;
3、不能如同无视管理员或者防火墙一般明目张胆地打开陌生端口;像Bits.dll那样等待连接时无端口,连接时开端口的程序,在端口检查时只有30%的几率能逃脱。
4、另外,后门最好能隐藏自己生成的文件,或者避免感染一些管理员经常检查完整性的系统文件。
前三点没有做到的后门程序不是一个优秀的木马程序,当然在使用的时候也就没有稳定性、保密性可言了。

二、木马攻防战

第一回合:隐身:拦截系统查询

除了喜欢“裸奔”的人之外,几乎所有的PC上都安装了杀毒软件。在各种各样的杀毒软件的围剿下,真正的、严格意义上的计算机病毒在我们的计算机世界里越来越难得一见了。随着internet的普及,通过网络传播的木马、蠕虫却四处为虐。

就象前文对木马分级别的观点一样,早期的木马只是一个应用程序,具备了普通程序的特征:文件名、进程调用。人们对付木马的常规手段无非是检查是否有异常进程、注册表启动项目、NT服务等。

后来,随着木马隐藏技术的发展,木马开始拦截传递给系统内核的查询,达到隐身的目的,导致普通基于Windows API的进程查看工具(如Windows的任务管理器)和NT服务查看工具(如Windows的services.msc),无法发现木马的进程和服务,木马文件也在硬盘上隐身,常规检查手段失效。

于是,一些新的基于系统内核的进程、NT服务和注册表查看工具应运而生,例如RKDETECTOR、国产的冰刃(IceSword)、Kernel PS(knlps)、Kernel SC(knlsc)、SPW、Fport、Llister等。系统级木马的行踪在上述工具下,暴露无遗。第一回合,木马拦截系统查询的隐身技术被攻破,木马败下阵来。

第二回合:寄生和感染

新一代的木马采取了更为隐蔽的手段。第一种方法,利用线程嵌入DLL到系统进程,木马本身无进程。在木马线程嵌入加载后,立即解除DLL映射,同时删除DLL文件、嵌入工具的NT服务或注册表启动项,关机时恢复。这类木马启动后无文件、无进程、无DLL、 无启动项、无NT服务,也不改写系统文件,检查进程及加载的DLL线程、NT服务和注册表都无法发现木马的行踪。不过假如Windows突然崩溃重启、或断电,这类木马就死跷跷了。有的木马在安全模式下能无法加载,可在安全模式下查杀,但有的在安全模式下 也能加载,那我们只好回到DOS下或用双Windows的方法来检查了。

第二种方法,结合病毒技术,采取感染系统文件的方法,这已经和病毒越来越象了。传统病毒能做的只是传染、删除文件、格式化硬盘、中止某些进程等,几K大小的代码足以完成。而木马是网络程序,功能复杂,体积也庞大得多,难以写入或附加到系统文件中,所谓感染 只是修改文件的DLL引入链表等内部结构,使其能自动加载木马DLL文件,被感染文件的大小、日期和原有功能不会改变。然后,把木马DLL文件复制到指定的文件夹内,以便被加载,加载后同样可以用第一种方法中解除DLL映射的方法让加载的DLL线程隐身, 而且,此类木马还能轻而易举地解除Widnows的系统文件保护功能。

对于第二回合的病毒,内核级的进程、NT服务和注册表查看工具也无从查找,木马查看工具败下阵来。用此类工具手工检测,基本上都会无功而返,那么只有依靠杀毒软件和反木马软件了。

第三回合:和杀毒工具的较量

任何软件都有代码,杀毒软件通常都是把病毒和木马的固定特征代码写入病毒库,以作为判断病毒和木马的依据。早在几年以前,就出现了所谓的“病毒生产机”类的超级病毒,感染系统后,用重新编译、加壳等方法,自动繁衍出成百上千个特征代码不同的变形后代,为此 ,杀毒软件开发出“启发式”扫描未知病毒的方法来应对,即在内存中模拟一个环境,让未知病毒在虚拟环境中发作,从而发现未知病毒。但木马毕竟不是病毒,它和病毒最大的区别就再于是否会通过繁衍的方法来传染其它文件和其它计算机,对未知木马,启发式扫描作用 不大。杀毒软件扫描后建立文件特征数据库的方法,对文件感染型木马有效,但对无文件、无进程、无DLL、无启动项的木马,杀毒软件试着只好去内存地址空间中查找木马的行踪了。

第三回合,未分胜负,但杀毒软件总是比木马慢半拍,等新木马传播开来了,杀毒软件才把其特征码加入到病毒库中。那时候,说不定你的电脑早成了黑客的乐园了。