主引导区的恶意程序(Trojan.Mebroot)

首先来认识下 什么是主引导区

主引导扇区位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。

只要控制了该区域,那程序就能控制操作系统!

修改主引导区进行加载、感染的在上世纪80- 90年代较为流行,当年的反病毒软件很多都是磁盘介质的,而其中一个必不可少的功能,就是能写保护软盘然后用它引导启动电脑,在不带毒的情况下清除此类引导型的病毒。应该说早期的病毒技术含量还是比较高的,到了后期越来越多工具的出现,让只要会上网的人都能产生成百上千的各种恶意程序、病毒变种。值得注意的是利用修改覆盖主引导区进行加载的Rootkit后门现世了。

在2005和2007年有研究人员推出过两个修改主引导区的实验型Rootkit,而07年的这个实验型Rootkit甚至能突破安全性较高的全补丁Vista系统。

由于WINDOWS系统设计上的问题,普通权限的用户帐号可以随意读写硬盘,甚至MBR这些重要的位置而不受到任何限制。因此MBR类Rootkit对系统的危害是十分大的。

有些类型的主板BIOS自带一个反病毒功能,就是防止读写主引导区的,随着这类真正具有危害的MBR Rootkit的出现,也许现在大家应该在BIOS里打开这种保护选项了。 Continue reading

免疫机器狗

增加系统**

当机器狗刚出现时,就有人写出了相应的免疫批处理代码,如下:

md %systemroot%\system32\drivers\pcihdd.sys
cacls %systemroot%\system32\drivers\pcihdd.sys /e /p everyone:n
cacls %systemroot%\system32\userinit.exe /e /p everyone:r
exit
按说,这段代码对于最早的机器狗病毒(10月17日之前)是管用的。机器狗病毒早期的确生成了pcihdd.sys文件.而且还修改了 userinit.exe文件。基于这两点出发,建立一个pcihdd.sys的目录,以及设置userinit.exe的访问权限是管用的。

然而,病毒作者很快发现了这一点。他迅速的在后期的版本中,也加入了批处理的内容。即对以上批处理作了个反向工程,解除设置的权限,删除免疫目录,还是修改userinit.exe文件,达到加载其它病毒木马的目的。
后来,为了防止目录被删掉,有些强人更是出怪招,在pcihdd.sys目录下再建个怪异的目录名,形如”ty…/”的目录。这个目录用批处理是可以建立的,但是不可删除。同样,建了这个目录,pcihdd.sys目录也就不可删除了。
在后期变种中,病毒不再使用pcihdd.sys的这文件为驱动,改成了其他的文件名,比如笔者今天发现的变种,驱动名就是comint32.sys..
这样子看来,基于文件名的防疫方式宣告失败。有人还在不停的建那些怪异目录,以图防疫机器狗病毒。可这样子下去,你的系统里为增添多少**目录?你最后,你自己也没法删除这些**,甚至不得不格式化硬盘。

封域名,封IP
早期机器狗病毒,可以通过简单的反汇编工具,找到相应的下载病毒的网址。后期的机器狗病毒变种,也可通过查看中毒机器的IE临时文件找到下载病毒的网址。
机器狗病毒被各种检测方式很快被找到了,其ip地址和域名也能被发现。于是,在服务器或路由器里封掉这些域名或IP,的确可以有效防治它。然而,恶梦不会因此而结束。据笔者自身封的IP和域名,目前加起来已多达三十多个。还不包括每天都要新的域名或IP被以各种方式发现出来。
ROS里脚本在无限的加长些,路由器里的列表也就无限的增长着。这样的日子,我们看不到尽头在哪儿。

两行批处理,问题看是搞定,但也治标不治本

随着对机器狗病毒研究的深入,大家都一致发现了问题的关键在于userinit.exe和usrinit.exe(后期变种)文件。基于这点出发,可以使用以下两个批处理搞定问题:

wmic process where name=”userinit.exe” call terminate
wmic process where name=”usrinit.exe” call terminate

这是批处理高手写的,果然非同反响。该代码的的意思是:当发现进程里有userinit.exe时,即关闭;当发现进程里有usrinit.exe时,也关闭。因为批处理在winlogon后运行,所以病毒刚启动,就被杀掉了。这样也就失去了下载其它病毒的机会。不过,缺点是它只运行一次。这两代批处理的基础上,加入了每秒检查进程,一发现即终止的vbs脚本:

do while(1)
strComputer = “.”
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)

Set colProcessList1 = objWMIService.ExecQuery _
(“Select * from Win32_Process Where Name = ‘userinit.exe'”)
For Each objProcess1 in colProcessList1
objProcess1.Terminate()
Next

Set colProcessList2 = objWMIService.ExecQuery _
(“Select * from Win32_Process Where Name = ‘usrinit.exe'”)
For Each objProcess2 in colProcessList2
objProcess2.Terminate()
Next

Set colProcessList3 = objWMIService.ExecQuery _
(“Select * from Win32_Process Where Name = ‘conime0.exe'”)
For Each objProcess3 in colProcessList3
objProcess3.Terminate()
Next

Wscript.Sleep(1000)
Loop

这段vbs脚本的机制和以上两段代码有异曲同工之妙。不过,用了无限循环语句,实现了对进程的动态监控,使得被监控进程无法运行。
然而,无论如何,这也依然是治标(userinit.exe)的方法,而非治本(内核驱动被加载,并成功穿透还原软件)的方法。

各大公司,各其奇谋,其中不泛有高手中的高手。给出的方案也是切中要害,一针见血的。

第一节 从底层防病毒-内核也玩驱动过滤

这招首推南京小哨兵公司推出的机器狗防疫补丁。通过安装该补丁侦察得知,该防疫补丁在内核驱动中加入了相关文件,并在进程里进行了监听,便于软件补丁的升级。早期的防疫补丁可能有缺陷,会造成系统死机等现象,以及防不了变种等。由于其不断更新,防疫级别在系统底层,应该是值得信赖的。
小哨兵官方网站:http://www.sentry.com.cn,时常关注,应该能下载到最新的防疫补丁

第二节 从系统引导文件NTLDR下手

NTLDR是xp系统的内核级引导文件,关于它的介绍如下:

深入Win XP之认识神秘的引导文件NTLDR

NTLDR一般存放于C盘根目录下,是一个具有隐藏和只读属性的系统文件。它的主要职责是解析Boot.ini文件。如果你对它的理解还不是很清楚,那么下面我们就以Windows XP为例介绍NTLDR在系统引导过程中的作用。
Windows XP在引导过程中将经历预引导、引导和加载内核三个阶段,这与Windows 9X直接读取引导扇区的方式来启动系统是完全不一样的,NTLDR在这三个阶段的引导过程中将起到至关重要的作用。

1.预引导阶段

在预引导阶段里计算机所做的工作有:运行POST程序,POST将检测系统的总内存以及其他硬件设备的状况,将磁盘第一个物理扇区加载到内存,加载硬盘主引导记录并运行,主引导记录会查找活动分区的起始位置。接着活动分区的引导扇区被加载并执行,最后从引导扇区加载并初始化NTLDR文件。

2.引导阶段

在引导阶段中,Windows XP将会依次经历初始引导加载器阶段、操作系统选择阶段、硬件检测阶段以及配置选择阶段这四个小的阶段。

(1)在初始引导加载器阶段中,NTLDR将把计算机的微处理器从实模式转换为32位平面内存模式,在实模式中,系统会为MS-DOS预留640KB 大小的内存空间,其余的内存都被看做是扩展内存,在32位平面模式中系统将所有内存都视为可用内存,然后NTLDR执行适当的小型文件系统驱动程序,这时 NTLDR可以识别每一个用NTFS或FAT格式的文件系统分区,至此初始引导加载器阶段结束。

(2)当初始引导加载器阶段结束后将会进入操作系统选择阶段,如果计算机上安装了多个操作系统,由于NTLDR加载了正确的Boot.ini文件,那么在启动的时候将会出现要求选择操作系统的菜单,NTLDR正是从boot.ini文件中查找到系统文件的分区位置。如果选择了NT系统,那么NTLDR 将会运行NTDETECT.COM文件,否则NTLDR将加载BOOTSECT.DOS,然后将控制权交给BOOTSECT.DOS。如果 Boot.ini文件中只有一个操作系统或者其中的timeout值为0,那么将不会出现选择操作系统的菜单画面,如果Boot.ini文件非法或不存在,那么NTLDR将会尝试从默认系统卷启动系统。

小提示:NTLDR启动后,如果在系统根目录下发现有Hiberfil.sys文件且该文件有效,那么NTLDR将读取Hiberfil.sys文件里的信息并让系统恢复到休眠以前的状态,这时并不处理Boot.ini文件。

(3)当操作系统选择阶段结束后将会进入硬件检测阶段,这时NTDETECT.COM文件将会收集计算机中硬件信息列表,然后将列表返回到NTLDR,这样NTLDR将把这些硬件信息加载到注册表“HKEY_LOCAL_MACHINE”中的Hardware中。

(4)硬件检测阶段结束后将会进入配置选择阶段,如果有多个硬件配置列表,那么将会出现配置文件选择菜单,如果只有一个则不会显示。

3.加载内核阶段

在加载内核阶段中,NTLDR将加载NTOKRNL.EXE内核程序,然后NTLDR将加载硬件抽象层(HAL.dll),接着系统将加载注册表中的 “HKEY_MACHINESystem”键值,这时NTLDR将读取“HKEY_MACHINESystemselect”键值来决定哪一个 ControlSet将被加载。所加载的ControlSet将包含设备的驱动程序以及需要加载的服务。再接着NTLDR加载注册表 “HKEY_LOCAL_MACHINESystemservice”下的start键值为0的底层设备驱动。当ControlSet的镜像 CurrentControlSet被加载时,NTLDR将把控制权传递给NTOSKRNL.EXE,至此引导过程将结束。

小提示:如果在启动的时候按F8键,那么我们将会在启动菜单中看到多种选择启动模式,这时NTLDR将根据用户的选择来使用启动参数加载NT内核,用户也可以在Boot.ini文件里设置启动参数。
通过修改这一特殊文件,达到防疫机器狗病毒的,首推转转游戏公司。它修改这一文件,并将userinit.exe文件改名为www.ceelsoft.com.userinit文件名,并置入根目录下,达到防疫冰点被穿透的目的。具体细节,得问他们公司的技术人员了。转转最新机器狗补丁下载:
http://www.ceelsoft.com/nb/proxy/www/new0.htm

第三节 系统补丁还必须得都打上

系统漏洞给病毒提供可乘之机的例子,可谓举不胜举。可是,还是有些网吧网管兄弟图个简便,图个懒,做个系统,N年都懒得管他。由于系统补丁未能及时打上,给病毒提供可利用的漏洞,大开方便之门,类似于机器狗病毒泛滥也就不奇怪了。

笔者实测显示,默认安装完windows Xp SP2后,到今天为止,还必须给系统打上多达七十多个补丁。这么多的补丁,哪怕有一个没打好,都有可能给病毒带来机会。

第四节 插件,应用软件漏洞也不得不防

IE插件,各类流氓软件,以及以各种形式安装的控件,都有可能给系统带来新的漏洞。这一点,恐怕我们以前从未意识到。有些兄弟在做完系统后,甚至都懒得清理一下系统里这些**残渣。很多免费软件,都会多少默认安装一些插件或流邙软件,以图一点广告经济利益。而做完系统,又没能很好的清理之,就给系统带来漏洞。百度搜霸就是个很好的例子.

另外,一些应用软件的漏洞,也给病毒提供了可乘之机。诸如本文提到迅雷,realplay,以及通过ppstream(也可以说它是IE插件)这些常用软件等。这些软件的漏洞,往往不会引起注意。然而,他们带来的灾难,不亚于系统漏洞。通过本文先前给出的源码,不难看出这一点.

第五节 全网大检查

现在你可以,也应该对你管理的局域网络进行全面大检查了。检查你的系统是否中了机器狗病毒,是否存有以上提到的那些漏洞,检查你是否都打好了各种防穿透补丁和防疫补丁。

Rootkit FAQ(how to…)

常见问题解答 : 如何入门rootkit?

来源:rootkit.com 作者:Clandestiny 翻译:fqh

“Help!我是一名新手!我需要一款rootkit入侵朋友的机器…我想编写自己的rootkit…我想开始开发代码… 该从哪里入手?”

此类问题在rootkit.com上不断地出现,并且重复回答一些人问的相同问题浪费了大量时间,我想到我们应当编辑一个短小的文档来对它们进行一般性的叙述。下面的论述远非完整的,社区中有经验的人可以提建议来对它进行拓展。

你 想知道从哪里入门?好的,首先,如果你来到这里是为了寻找入侵你朋友机器的既成方法,你可来错了地方!Rootkit.com主要是一个知识性的网站,它 目的是提供一些有关rootkit开发的资料和相关编程的文章。另一方面,如果你是一名想学习如何编写自己的rootkit的新手,你需要一些如何入门的 建议,请接着阅读…不幸的是,rootkit开发和软件开发需要相当多你必须掌握的前提知识:

1. 首先,你得学习一种语言。C / C++最好的选择。不像其他语言,C具有内嵌汇编语言的能力。虽然大多数程序员极少使用到汇编语言,但是rootkit的开发有时需要汇编语言的灵活性, 所以x86汇编应当成为你的辅助编程语言。Randall Hyde的《Art Of Assembly》是汇编编程最好的参考资料之一。该书有印刷和电子书两种可获取的版本。
《Art of Assembly》 (下载版) 的下载网址是http://webster.cs.ucr.edu/AoA/DOS/

2. 你需要学习一些操作系统的理论。虽然大学的设计操作系统理论课程不是必需的,但阅读大学计算机学科教材的若干章节是有益的。特别是进程﹑线程﹑内存管理等知识,你得了解。
这方面很好的书籍有两本:
《Operating System Concepts》 ,Silberschatz, Galvin, 和 Gagne著
《Operating Systems》Deitel & Deitel著

3. 你得应用理论知识,理解真实世界中的操作系统比如windows实际上是如何工作的。虽然Windows不公开源代码,但是有很多牛人热衷于对系统内核工 作原理进行逆向分析,并公开了他们的发现。弄一本此类的书吧,比如Sven Schreiber写的《Undocumented Windows 2000 Secrets》 或者Prasad Dabak, Milind Borate,和 Sandeep Phadke写《Undocumented Windows NT》。

4. 如果你想着手开发内核rootkit,你还得学习如何编写内核模式驱动程序(KMD)。很不幸,互联网上关于内核编程的教程,适合初学者的很少。不过,Four-4写出了几篇很好的win32汇编版的教程,它们可在http://www.assembly-journal.com/sitemap.php获 取。除此之外,这方面的书籍还有一些:包括Art Baker 和Jerry Lozano蓍的《The Windows 2000 Device Driver Book》以及Walter Oney蓍的《Programming The Microsoft Windows Driver Model》。

5. 学习逆向代码分析的基础知识,也就是说对于没有源代码的二进制文件也能(通过逆向分析)了解到(代码功能等)有关信息。练习逆向分析软件的保护机制(序列 号,时间检验,脱壳,演示软件的功能限制等等)是发展这个技能的有趣方式。有很多程序员编写了训练用的小型程序。这些程序称之“crackmes”和” “reversemes”,我们可用它们来进行练习。在http://www.crackmes.dehttp://www.reversemes.de上收集了大量这样的小程序。http://www.woodmann.com上有大量高手写的关于逆向工程的资源。http://bib.universitas-virtualis.org/上也有若干优秀教程和文章。逆向分析同样需要一些特别的工具,包括反汇编器和调试器。IDA Pro是首选的反汇编器,SoftICE (内核调试器)和OllyDebug是可供使用的调试器。其他各式各样的此类工具可从http://protools.cjb.net获取

6. 最后,本站讨论了一些入侵工具和rootkit,如果你需要理解它们的资料,我推荐Greg Hoglund的《Exploiting Software》(本站就有)和《Shell Coder’s Handbook》。两者都会提供给你很好的入门知识。《Exploiting Software》有一章节介绍了基本的rootkit技术。一般,基于它们的数据拦截方法,Rootkit可以分为两种:要么是挂勾,要么是直接内核对 象操作(DKOM)。为了理解挂勾技术,以下链接可能对你有帮助。

API 检测技术(API Spying Techniques)
http://www.internals.com/articles/apispy/apispy.htm
挂勾高级函数(Advanced Function Hooking)
http://www.phrack.org/show.php?p=58&a=8
挂勾Windows NT服务表(Windows NT Service Table Hooking)
http://www.wiretapped.net/~fyre/sst.html
挂勾Windows NT系统服务(Hooking Windows NT System Services)
http://www.windowsitlibrary.com/Content/356/06/2.html
挂勾Windows NT系统调用(Windows NT System-Call Hooking)
http://www.ddj.com/articles/1997/9701/
为了理解DKOM,你可以阅读fuzen_op 写的FU rookit的源代码,它可在本站中获取

基于栈指纹检测缓冲区溢出的一点思路

一. 现有的检测栈溢出的模式
二. 现有检测体系存在的不足
三. 针对引擎要做的改进
四. 关于未来

引言
当前主动防御等的概念逐渐进入人们视野,国外主流的杀毒软件都有栈溢出的检测模块,尽管相对传统的木马和病毒来说,缓冲区溢出仍占攻击的很小一部分,但是基于传统的“木桶理论”,安全是一个整体,威胁还是无处不在。

现有的栈溢出检测模式 Continue reading

编写绕过卡巴主动防御的Shellcode

本文已经发表在《黑客防线》2007年8月刊。作者及《黑客防线》保留版权,转载请注明原始出处。

适合读者:溢出爱好者
前置知识:汇编语言、Shellcode基本原理
编写绕过卡巴主动防御的Shellcode
文/图 gyzy[江苏大学信息安全系&EST]
现 在主动防御的概念已经深入人心,市面上已经有不少安全产品加入了防范缓冲区溢出的功能,典型代表就是Macfee和卡巴,作为一个攻击者,就得想法设法的 绕过,假如一个0day被拦截的话,就前功尽弃了。这我就以卡巴为例子,详细讲一下如何尽量少的修改原Shellcode来穿透卡巴的壁垒。

知己知彼
要想绕过卡巴,必须首先了解卡巴是怎么判断溢出的发生的,卡巴通过挂接GetProcAddress、LoadLibraryA、LoadLibraryW等函数,根据返回地址是否在栈中来判断是否发生了栈溢出。卡巴Hook的GetProcAddress代码如图1: Continue reading

伪造返回地址绕过CallStack检测以及检测伪造返回地址的实践笔记

伪造返回地址绕过CallStack检测以及检测伪造返回地址的实践笔记

Author:[CISRG]KiSSinGGer
E-mail:kissingger@gmail.com
MSN:kyller_clemens@hotmail.com

题目有点搞……Anti-CallStack Check and Anti-Anti-CallStack Check…(;- -)

发现最近MJ0011的“基于CallStack的Anti-Rootkit HOOK检测思路”和gyzy的“基于栈指纹检测缓冲区溢出的一点思路”两篇文章有异曲同工之妙。
两者都通过检测CallStack中的返回地址来做文章。
最近在初步学习一些AntiRootkit技术,这两个不得不吸引我的眼球。
Continue reading