看的是museHero写的文档,
源文档的链接:https://pan.baidu.com/s/1WMFii2xtVgcS4_eUaBxZbw
提取码:e0w4
1.木马的查杀之自启动项篇
自启动项的检查与清除,毫无疑问是查杀木马的关键手段与方法。而且,清掉木马的自启动项,让其自然而亡,是最优雅的杀马方法,不那么暴力也就轻易不会遇到反击。对驱动级的或注入型的木马,这种手段更显其优越性。而自启动项的选择与设置,更是一种创意的体现,一些非技术型的木马通常可在此看到其作者非同一般的创造性思维。
自启动,顾名思义,就是无须用户干预而自行启动的程序,按启动方式又分为两种,一种是开机自运行的程序;一种是触发式启动的程序。解剖之前先要学习一些基础的知识:
1 1 、 注册表基础
由于大多数的自启动位置都在注册表中,所以,首先,我们需要了解“注册表”是什么。注册表从功能上说,它是一个存储各种设置信息的数据仓库,系统的全部设置几乎都存在那里,比如:你用的是什么墙纸、什么屏保、IE 的首页、IE 窗口的大小等等。当然了,开机时需要加载的驱动、开启的服务、运行的程序等等也都存储在这里。而从实质上来说呢,注册表其实是由一些记录配置信息的文件组成的,这些文件中的大部分存在“\Windows\System32\Config\”目录下,还有一部分存在用户配置文件夹中。
这些文件有一个很难听的名字叫做储巢,也就是朋友可能听过的 HIVE 文件。由于注册表对系统实在是太重要的了,任何损坏都有可能造成系统彻底的崩溃,所以,系统对注册表的保护也是很严密的,正常情况下,你无法对注册表 HIVE 文件进行任何的直接操作,不仅无法打开、修改,甚至无法进行拷贝操作。而系统保护注册表的手段,就是由系统以独占的方式打开注册表文件,这样你的任何针对此文件的操作,都将被拒绝。(关闭系统打开的关键文件将发生无可预料的结果,切勿偿试)
操作注册表:系统在保护注册表文件的同时,也提供了操作注册表的工具--“注册表编辑器”:在“开始”菜单中,选择“运行”,输入“regedit.exe”就可以打开注册表编辑器,打开后的情况是这样的

上面的各项称为“键”,最上层的是“根键”下面的叫做“子键”,其与上面我们说的注册表文件一一对应,对应关系如下:
HKEY_LOCAL_MACHINE\SAM?Windows\System32\config\sam
HKEY_LOCAL_MACHINE\SECURITY\Windows\System32\config\security
HKEY_LOCAL_MACHINE\SOFTWARE\Windows\System32\config\software
HKEY_LOCAL_MACHINE\SYSTEM?Windows\System32\config\system
HKEY_USERS\.DEFAULT?Windows\System32\config\Default
HKEY_USERS\S-1-5-XX_XXX?\DocumentsandSettings\<用户名>\Ntuser.dat
HKEY_USERS\S-1-5-XX_XXX_Classes?\DocumentsandSettings\<用户名>\LocalSettings\ApplicationData\Microsoft\Windows\Usrclass.dat
除了上面的键外,其它的几个键是属于 REG_LINK 类型,直翻过来就是“注册表链接”,这种类型的键是透明的指向另一个键的一个链接,也可以理解成这些键只是另外的某个子键的快速入口或某类相似键的汇总而已,本身并没有文件,其链接的键对应如下:HKEY_CLASS_ROOT 中的内容来自于下面的两个注册键:HKEY_LOCAL_MACHINE\SOFTWARE\Classes、HKEY_CURRENT_USER\SoftWare\Classes
HKEY_CURRENT_USER 中的内容是当前用户的信息,来自于HKEY_USERS\S-1-5-XX-XXXX?\DocumentsandSettings\<用户名>\Ntuser.dat
HKEY_CURRENT_CONFIG 中的内容来自于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\HardwareProfiles\Current
当你修改有链接关系的任一键中的数据时,对应的链接键也会体现出来,比如:你修改了HKEY_CLASS_ROOT 中的内容,那么你的修改也同时体现在了 HKEY_LOCAL_MACHINE\SOFTWARE\Classes 中,因为这本就是同一个文件中的同一部分数据。
SID(安全标识符)也就是“S-1-5-XX-XXX”,其后面部分用“XXX”取代了,后面是不定值。SID 前面的定义是固定的,比如:S-1-5-18 是本地系统账户(LocalSystem)S-1-5-19 是本地服务账户、S-1-5-20 是网络服务账户等(更多信息,请参考专业资料)而 SID 后面的部分是全球唯一的,就是:329068152-606747145-682003330-1003 那部分,在注册表中这个是保存了当前用户的配置信息,也就是 HKEY_CURRENT_USER 指向的部分。
每个键中都存储了哪些信息:
HKEY_CURRENT_USER 中存储了一些与当前登录用户有关联的数据,也就是你个人的一些设定都存在了这里。
HKEY_CLASSES_ROOT 中存储的是文件关联和 COM 对像的注册信息,什么样的文件由什么程序来打开就是存在了这里。
HKEY_LOCAL_MACHINE 中存储的是系统相关的信息,比如:驱动、服务等。
HKEY_USERS 存储的是所有账户的信息。
HKEY_CURRENT_CONFIG 中存储的是当前硬件配置信息。
(1)复制注册表:
打开狙剑,选择“磁盘文件管理”,在打开的选择框中选择系统盘,然后找到 Windows\System32\config\目录下的注册表文件,按右键,选择“复制文件”。在弹出的保存框中,给新文件起个名字。我们成功的复制出了系统本来不想让我们看到的注册表文件。
(2)查看注册表内容:
一种是用十六进制编辑器查看,当然了,这种文件是特殊格式的文件,用十六进制编辑器看,看得一定是有些晕的,要做好心理准备哦.
第二个方法就是利用 Regedit.exe(注册表编辑器)的“加载配置单元”的功能。打开注册表编辑器,先选中 HKEY_LOCAL_MACHINE 键(注意:这一步不
要省略,不然加载配置单元项是灰的,也可以选中 USER 键),然后依次选择“文件”--“加载配置单元”。

在弹出的选择框中选择我们刚才复制出来的注册表文件,在项名字中随便输入一个名字,这里我输入的是“Test”,然后,就加载成功了,看下图 03-23,
多出了一个 Test 键,这个键跟 System 键的内容是一样的,因为我们复制的就是 System 注册表文件:Test 里面少了这个键“CurrentControlSet”,再看看他的名字“ Current- Control- Set”,键也是个链接键,是从 ControlSet001 与 ControlSet002 中链接的内容,是“当前的”设置。所以,文件中是没有的。而注册表编辑器是从内存中读取的注册表内容,因此是有的。
(3)卸载配置单元
选中“Test”键,在文件菜单中选择“卸载配置单元”就可以卸掉这个键了。
2 2 、 开机自运行的程序
“开机自动运行程序”是操作系统为方便用户的使用而提供的一个方法,让每次开机都须频繁操作的一些工作得到自动的执行。而木马只是利用了这一方法,来完成自己的非法启动目的罢了。最早加载启动的是驱动程序,这是因为硬件设备与底层功能是由它们来实现的,最早加载启动的是驱动程序,这是可以理解的,因为硬件设备与底层功能是由它们来实现的。
系统启动时,由引导程序 Ntldr 来读入 system 注册表文件,加载里面列出的驱动程序。文件系统驱动就是在这时加载的,文件系统加载前,对文件的读取是无法实现的,那么 Ntldr 又如何读取 system 注册表文件的呢?因为 Ntldr 中内置了只读的 NTFS 与 FAT 文件系统代码,虽然很简单但足够用了。再追问下去,Ntldr 也是以文件形式存在的,那 Ntldr 这个文件又是如何读取的呢?Ntldr 是引导扇区中的引导代码加载的,而引导扇区中有更加简单的文件系统读取代码,区别是越向上越简单,一直到文件系统驱动接手后,才是完整的文件系统代码。引导代码中的文件系统代码简单到只能读取根目录中的文件,所以 Ntldr 只能放在根目录;而 Ntldr 中文件系统代码已经能读取子目录中的文件了,所以驱动是可以放到任意目录的。
驱动的加载:驱动肯定不是一个,那先加载哪个后加载哪个呢?系统加载时,就是依照HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sr 键下的内容进行驱动加载的,
注册内容中的各项含义如下:
l DisplayName:这是服务名称,在前面一章中我们讲到服务管理器时讲过,这个名字就是在服务管理器中显示的名称,没什么要紧的,随便起一个就行。
2 ErrorControl:错误控制码,可以取值为,0:忽略任何错误;1:如果出错,显示一个警告;2:如果出错,且有最后一次正确配置则启动最后一次正确配置,否则继续引导过程;3:如果出错,且有最后一次正确配置,则使用最后一次正确配置,否则显示蓝屏崩溃。这里的“最后一次正确配置”是指在启动过程中按 F8 键进入高级菜单后的其中的一个选项,利用这个选项通常可以正常进入系统。
3 Group:组的名称,这个根加载顺序就有关系了。
4 ImagePath:驱动或服务的执行文件路径。需要注意的是,如果一个驱动有这一项,那么系统会根据这一项中标明的文件进行加载,如果驱动中没有这一项,系统会自动在 Windows\System32\Drivers\目录下寻找与注册键同名的驱动加载。
5 Start:驱动或服务的加载启动顺序。可取值为:
0:引导。Ntldr 预先加载此值为零的驱动,在引导过程中这类驱动一直待在内存中;
1:系统。在标明为 0 的驱动初始化之后,值为 1 的驱动开始被加载到内存中并初始化,其是在内核初始化的过程中加载的(参见进程篇的系统启动过程)。
2:自动。在 Services.exe 启动后,由该进程来加载启动值为 2 的驱动或服务(Service.exe 的情况请参阅进程篇);
3:手动。Services.exe 根据需要加载这类的驱动或服务,也就是在服务管理器的启动一项中标明为“手动”的。标明为手动并不是指一定要由用户来手动启动,而是由系统识情况启动,当系统需要相应的驱动或服务提供的功能时,系统就将自动启动此服务,而无须用户手动操作;
4:禁用。驱动或服务并不加载到内存,当然也不启动了。也就是服务管理器中标为“禁用”的服务,这一类的服务,即使系统需要用到其提供的功能,也不会自动加载。
6 Tag:在组中的顺序,这也是根加载顺序有关系的。
7 Type:服务的类型,可取值为,1:设备驱动程序;2:内核模式的文件系统驱动程序;4:已废弃;8:文件系统识别器驱动程序;16:该服务运行在一个只能容纳一个服务的进程中;32:该服务运行在一个可容纳多个服务的进程中;256:允许该服务在控制台显示窗口,并接收用户输入。除了上面的Start 决定了加载顺序外,还有 Group 与 Tag 来共同作用决定驱动的加载顺序。在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder 键里,表明了一个组的概念,驱动是分组并按组来分别按顺序加载的,Group 决定了驱动是在哪一个组中,而 Tag 却决定了在同一个组的哪一个位置上。注意一下儿就会发现,Start 值为 0 的驱动基本上都是分到了*前的几个组中。

了解了上面的知识后,只要你有足够的耐心,那么你就可以将系统中的驱动加载顺序搞出来了。
驱动加载后,还有一些系统启动过程中需要的程序会得到加载执行的机会,而且应用程序的启动顺序永远无法超越高启动级别的驱动,所以讲他们启动顺序也没多大意义。在注册表中可以启动程序的地方很多,而且,我们也不可能手动来从注册表中查找每一个启动项,启动项的查找只有依靠专业工具来进行,才是最佳的选择。(启动项管理软件中最出名的是 Sysinternals 出品的 e AutoRuns.exe 这是国外的一个专业启动项管理工具,很出名。但是如果用于清除木马,这个工具很显然是远远不够的,就像它的名字一样,这是一个“启动项管理”工具,它虽然列出了很全的自启动项,但却缺少反黑工具所特有的查找被隐藏的启动项、清除被保护的启动项的能力)。狙剑是借签了 AutoRuns.exe 的启动项,另外加入了一些 AutoRuns.exe 并没有列出的启动项,从全面上来说应该是更胜一筹了,关键的是狙剑做为一个专业的安全工具来对自启动项进行管理,充分考虑到了木马病毒对自启动项的隐藏与保护,加入了隐藏 HOOK 的恢复,所以,更适合安全相关的自启动项管理。
对于大量自启动项的判断上,将用进程判断的方法来进行判断,也就是数字签名验证,在启动列表中按右键选择“隐藏微软签名项”后,就会将全部有微软签名的启动项隐藏,剩下的也就没多少了,在正常情况下,清除掉所有的非微软签名启动项,是不会影响系统正常使用的。但有些情况是需要注意的,比如:Tcpip.sys 是网络驱动,正常情况下是可以通过微软数字签名验证的。但有些下载软件比如迅雷会修改此驱动以达到最大的连接数,而由于 Tcpip.sys 被改动后,将不再能够通过微软的数字签名验证,所以,在不特别注意下,清除所有非微软认证的自启动项时,就会将这个驱动清掉,导致无法上网。另外,向进程篇中提到的 Userinit.exe 的情况也是类似的,Userinit.exe 同样为系统必须的程序,但如果这种程序被感染了,那么,直接清掉就会存在问题,当然了,安全程序在清这类启动必须的程序时是不会删掉启动项的,但作为我们用户来说一定要搞清除哪些是木马的启动项,那些是被修改或感染的系统启动项,对这种被修改或感染的系统文件的处理,最佳方式无疑就是利用“系统文件修复”功能了。而千万不要直接手动清除相应的启动项,清掉后,将导致系统功能出现问题甚至不能进入系统。所以,对启动项进行清理时,在隐藏微软验证的文件后,仍然要对剩余的进行判断,有针对性的清理,当然,判断的过程是需要经验的。第一次清理时不知道,上网查询或求助,第二次就知道了。新的启动位置仍然在不断的挖掘中,没有哪个软件敢说全,只能是比较全而已,仍然需要不断的补充与完善。
-----------------------END-----------------------




