手动杀毒关键要点分析.docx
《手动杀毒关键要点分析.docx》由会员分享,可在线阅读,更多相关《手动杀毒关键要点分析.docx(12页珍藏版)》请在冰点文库上搜索。
手动杀毒关键要点分析
【titian排毒专题】手动杀毒关键要点分析
前言
病毒木马应用的技术越来越高级,很多安全软件可能会被轻松干掉,同时病毒木马的变种层出不穷,在安全软件的病毒库未能及时更新或者病毒木马专杀未出之前,很多人的表现都是不知所措,而不能在第一时间进行手动查杀。
这里我将做个专题,针对手动杀毒的各项关键技术进行介绍。
此贴可能为我在计算机技术与网络版块的最后一个主题帖,因为精力不够,卡巴斯基的帖子基本上都没有再更新,更别提初始准备建立CQU卡巴斯基更新服务器的想法。
欢迎转载,但请注明来源。
关键词:
恶意程序,HOOK,INLINE-HOOK,保护,查杀
目录:
1.前言
2.初试身手,解决LSASS.EXE病毒
3.系统启动过程
4.安全辅助工具介绍
5.常见病毒木马技术
6.手动杀毒要领
7.手动杀毒步骤
8.其它一些辅助方法
2.初试身手,解决LSASS.EXE病毒
最近是毕业打印论文高峰期,各类病毒也伴随着传播开来,如最近身边不少同学中的LSASS.EXE,SVCHOST.EXE等病毒。
正好这几天一位[b]裸奔[/b]同学中了LSASS.EXE,表现为系统会突然自动重启任务管理器多出几个类似LSASS.EXE,SMSS.EXE但是路径不是%windir%\system32\目录下,并且不是由系统用户启动,而且在任务管理器中无法结束这些进程。
首先使用XueTr,打开跳出提示有线程注入,进入XueTr界面。
设置选项勾选“禁止自动重启,关机”,“禁止进程创建”。
然后依次如下步骤:
1.检查各类钩子,发现c:
\windows\system32\dnsq.dll安装了用户级的代码钩子,基本上所有的进程都安装了OpenProcess的钩子,以便于注入新创建的进程,还有安装的EnumProcessModules钩子等,包括XueTr本身也被线程注入;
2.检查进程,发现了两个可疑进程,LSASS.EXE,SMSS.EXE,根据其路径可以得知为非系统进程,而且根据其父PID,路径可以确定病毒程序;
3.查看进程模块加载信息,首先通过数字签名验证,然后发现包括Explorer.exe,Winlogon.exe,svchost等进程都有dnsq.dll的线程注入,记下可疑信息。
如果直接对这些模块进行卸载会导致系统崩溃;
4.利用天琊的进程管理功能,添加%windir%\system32\com\lsass.exe为阻止启动进程,首先结束SMSS.EXE,然后依次结束winlogon.exe,services.exe等,仅仅留下Csrss.exe和system,然后恢复相关应用钩子;
5.进入启动项查看界面,发现AppInit_DLLS被修改为c:
\windows\system32\dnsq.dll,其会被具有用户界面的应用程序载入。
删除启动项目。
强制删除病毒文件,包括c:
\system32\dnsq.dll,c:
\windows\system32\com\lsass.exe,c:
\windows\system32\com\smss.exe,以及各分区下*\autorun.inf,*\pagefile.pgf。
清除AppInit_DLLS键值并使用辅助工具的“重启启动电脑”功能。
6.安装卡巴斯基,更新并全盘扫描。
3.系统启动过程
在了解杀毒技术之前,首先必须对Windows系统的启动有个大概的了解。
在按下主机电源键后,BIOS将检测系统硬件,如果检查失败,则主机报警;然后进入硬盘的主引导分区,读取硬盘引导程序(在DOS下可以通过fdisk/mbr命令重置引导分区);主引导代码会读取系统根目录下的NTDLR文件,如果没有找到,系统将停止启动并给出错误提示;
NTLDR文件的工作为读取系统根目录下的boot.ini文件,即引导菜单,接着清屏并显示系统进度条,这个进度条表示NTDLR文件在加载系统文件,如果加载失败则无法进入系统,这些系统文件首先是Hal.dll,NTOSKRNL.EXE,然后是注册表下SYSTEM注册表文件(%windir%\system32\config)下的各种系统驱动文件,因为如果加载驱动失败,如文件驱动,则所有的文件则无法被读取(这里是一个关键点);
加载完成后,系统将由NTOSKRNL.EXE文件创建SMSS.EXE进程,这个进程的工作是完成会话管理,负责创建用户模式环境,由用户模式环境向Windows提供可视的窗口界面;然后CSRSS.EXE,WINLOGON.EXE进程将被启用,如果这两个其中一个进程被KILL,SMSS.EXE将会让系统彻底崩溃;
Csrss.exe是做什么的呢?
它负责的工作是创建或删除进程、线程,控制台与虚拟DOS机的支持等;WINLOGON.EXE会启动SERVICES.EXE以及LSASS.EXE(本地安全认证子系统,会验证登陆用户与口令),并读取注册表中GinaDll中标明DLL,显示登录对话,口令验证通过后WINLOGON.EXE会启动USERINIT.EXE进入系统完成各种用户初始化工作,USERININT.EXE会在启动EXPLORER.EXE进程后退出。
4.安全辅助工具推荐
检查启动项工具:
Autoruns,RunViewer,
进程检查工具:
ProceXP
强制删除工具:
Unlock,killBox
综合辅助工具:
Iceword,XueTr,狙剑,wsyscheck
Iceword跟ProceXP混用,否则可能会蓝屏。
因为各类综合辅助工具都由INLINE-HOOK行为,可能会发生冲突。
推荐组合:
Autoruns+ProceXP+XueTr/狙剑。
5.常见病毒木马技术:
在杀毒之前,我们首先需要了解病毒木马常用的技术,包括隐藏自身(包括进程文件等),避免被删除,还有线程注入技术,DLL注入技术;纯驱动型病毒技术。
这些病毒木马程序可能隐藏了进程,也有可能根本没有进程存在,而是通过加载到其它的进程而达到生存并繁殖的目的。
这里我们必须知道的一点就是:
无论是什么样的恶意代码,只要其运行肯定会存在进程,只是看其是否以独立的进程还是以寄生的形式而存在。
建议阅读JEFFREYRICHTER的《windows核心编程》)。
(1)通过文件关联实现被动启动:
对于任何一个文件来说,其文件格式,exe,bat,jpg,doc其实没有什么区别,区别在于它们的关联方式,也就是文件打开方式。
如果病毒木马程序关联于正常的图片格式,如pif,jpg,则打开这些图片格式文件的时候,恶意程序将会被触发启动。
类似的BHO插件,恶意程序如果以这种形式存在,用户开启网页将会起启动这些恶意程序。
(2)通过自动播放功能实现被动启动:
常见的AutoRun.inf文件内容如下
——————————
[autorun]
open=AutoRun.exe
icon=AutoRun.ico
———————————
可以将Open后的启动程序改为病毒程序。
(3)实现附身式被动启动:
恶意代码附加到了正常的程序上面,修改程序的入口地址为病毒体的执行地址,最后再由恶意代码执行完毕后跳回原程序的入口地址来执行原程序的功能,这一切对用户来说都是不可见的。
这种恶意代码的实例可以参考琼台听雨鱼儿的精华帖子:
(4)通过替代系统文件被调用实现启动:
如%windir%\system32\下的各类系统文件,Svchost.exe,UserInit.exe.这类恶意软件最难解决,如果只是简单卸载其加载模块甚至是结束进程很有可能会使系统崩溃。
常规的解决方法为:
恢复正常的系统文件。
%windir%\system32下系统文件会被系统调用,其它文件夹下同名的则一般为病毒文件。
比如通过替代Svchost.Exe实现系统的加载启动:
Svchost.Exe的映像路径为%windir%\system32\,它被称为服务宿主程序或者容器程序,对应启动程序在注册表中位置为[HLOCAL_MACHINE\SYSTEM\CurrentControlSet\服务名称\Parameters]。
恶意代码通过在注册表中添加一个新的服务组并添加病毒服务名,或者是在现有的服务组里直接添加病毒服务名修改现有服务组里的属性,修改“ServiceDll”键值指向病毒程序。
正常情况下,SvcHost.exe应该由系统用户启动,如果同名进程但是进程的映像文件却不在%windir%\system32目录下,则肯定为恶意软件;如果在%windir%\system32目录下但数字签名不对,则也应该已经被注入或替换。
可以进入注册表编辑器依次打开[HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Svchost],观察有没有增加新的服务组,同时要留意服务组中的服务列表,观察有没有可疑的服务名称,通常来说,病毒不会在只有一个服务名称的组中添加,往往会选择LocalService和netsvcs这两个加载服务较多的组,以干扰分析,还有通过修改服务属性指向病毒程序的。
可以通过相关服务管理程序展开分支检查映像的相关信息排除是否为病毒程序并进行查杀。
也可以使用各类安全辅助工具,如狙剑,打开进程管理,工具栏-->外观-->选择“隐藏已签名项”,然后在Svchost.exe上右键查看进程模块。
(5)驱动型恶意软件:
驱动程序由于其特殊性,使得它在系统中有着超越一切的权力,而且有着优先加载执行的优势,它是做为操作系统的一部分来运行的,所以会被恶意软件利用。
通过附带虚拟设备加载”虚拟设备驱动程序“实现启动的恶意代码,可以在设备管理器中查看”隐藏的设备“-->非即插即用驱动程序-->属性页查看驱动信息。
当然也可以借助辅助工具,如XueTr或者狙剑查看加载的内核模块,并验证其数字签名。
(6)双进程木马:
系统存在病毒木马双进程,它们互相监视,如果其中一个进程被关闭,另外一个进程将其自动创建。
可以通过安全辅助工具,查找其父进程PID,然后相应进行查杀。
(7)进程保护
Windows通过提供一系列功能函数来查看系统进程运行情况,利用任务管理器的进程界面可以获取进程的PID,CPU使用,CPU时间,内存使用等,如果某一进程长时间占据高资源,则由可能是恶意行为。
现在很多的恶意代码都可以实现自身的隐藏与防止被删除,如进行DLL注入与线程注入。
另对系统API的HOOK包括应用层HOOK,内核级HOOK,对其中任何一个进行HOOK都可以达到隐藏自身的目的。
比如通过DLL注入或者是线程注入的恶意代码本身没有进程,而是寄身于其它的正常进程。
其中DLL注入可以通过注册表项,比如很著名的AppInit_DLLS,其键值对于需要使用User32.dll的EXE,DLL,OCX类型的PE文件都需要加载,也是基本上所有基于用户界面的应用程序都需要使用User32.dll,如果被恶意软件利用旧会特别危险。
所以有些安全软件厂商,比如卡巴斯基会将其处理以避免被利用。
查看进程是否被DLL注入或者线程注入可以通过相关的安全辅助工具,比如ProceXP查看,也可以使用狙剑,Icesword,XueTr查看模块加载情况,首先检验其模块的数字签名,排除第三方签名模块,一般来说每一个进程都至少存在着一个活动线程,比如Explorer.exe的模块中会至少有一个Explorer.exe,如果存在多个这样的线程则表示有可能存在线程注入,但并不是“一定有注入“。
通过相关HOOK行为实现隐藏与防止被删除。
通过HOOK相关的系统API可以实现这些功能,如SSDT-HOOK,对于”NtTerminateProcess“API的HOOK,可以防止进程被结束,如果在任务管理器结束该进程,会跳出”拒绝访问“提示。
对于INLINE-HOOK,相比于SSDT-HOOK更不容易被发现,更具危险性与不稳定性,对于系统来说是一个很大的潜在危害,但很多辅助工具,比如Icesword,会HOOK相关功能函数,如”结束进程“,”创建线程“等,对自身进程保护与操作权限的限制。
我比较习惯使用狙剑,天邪还有MD的ROOTKIT模块来综合查看系统的HOOK情况。
(8)病毒文件自身的保护:
很多病毒文件会利用系统功能或者其它技术隐藏自身,以避免被用户发现,尤其是那些裸奔用户,还是那句话没货别装逼,小心被雷劈。
首先是利用系统功能进程隐藏,这个可以通过”文件夹选项“-->依次选择显示系统文件与显示所有文件进行查看,当然现在的恶意软件没有这么弱智,它们会修改注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL的值,将“CheckedValue”这一项的值改为“0”,则在文件夹选项中无论怎么勾选”显示所有文件“,当点确定后会自动跳转至”不显示所有文件"选项。
另外恶意软件可以通过进行相关功能函数的HOOK,比如"NtDeleteFile"函数防止自身被删除。
8.手动杀毒要领
(1)检查启动项:
对于系统启动项的检查乃手动杀毒的重中之重,许多恶意代码通过Hook各类微软提供的API功能函数实现隐藏本身的启动,并防止被删除与修改,实现方式同进程隐藏与保护。
我们在检查启动项的一个思路是:
首先检查启动项的数字签名,集中检查第三方软件的启动项目,通过利用辅助工具恢复系统的服务函数,然后再次检查各类加载项。
针对注册表功能函数被HOOK的状况,我们最好借助各类安全辅助工具来实现查杀的目的,如狙剑,XueTr,,,,,如果你是个讲究的人,可以先借助工具将HIVE文件拷贝到其它文件夹,再利用注册表编辑器的加载配置单元方法查看注册表配置。
(2)检查进程:
首先针对进程,查看其父进程ID,以及启动用户,如果非系统用户启动了系统进程就有问题了,如titian用户启动了SvcHost.exe,通过该进程的映像路径,检查该进程是否已被替代还仅仅只是出现了同名情况。
然后依次查看其线程运行,模块加载情况,当然还是首先验明签名,再重点排除。
当然这一切都建立在和谐各类RootKit的前提下,对于所有非正常的HOOK都进行恢复。
[b][color=red]但是需要明确的是对于某些模块不可以轻易的进行强制卸载,否则很有可能触发恶软的保护机制,使得系统崩溃。
模块木马的加载包括两种方式:
通过进程注入:
这种恶意软件包括注入程序和恶意模块,启动注入程序将恶意模块注入其它进程,然后注入程序将结束自身的运行;通过注册表的某些项,如上面说过的AppInit_DLLS还有一些.\RUN下面的键值等,系统会自动启动或者应用程序进行恶意注册模块的加载。
(3)删除恶意文件:
对于一般正在运行的文件,可以使用Unlock进行强制删除,但是因为病毒文件的高级保护机制,使用Unlock可能无法删除,这时候应首先检查文件是否进行SSDT-HOOK(如NtDeleteFile)与INLINE-HOOKSSDT,HOOKFSD与INLINE-HOOKFSD,通过相关安全辅助工具恢复相关服务函数,然后再进行彻底删除,而且病毒文件可以通过加载文件过滤系统驱动,可以保护特定文件不被删除。
这些功能都可以通过天邪,狙剑等安全辅助工具实现。
9.手动杀毒步骤:
1.检查是否有恶意代码对系统功能函数的HOOK,包括各类SSDT-HOOK,SSDTINLINE-HOOK,FSDHOOK,FSDINLINE-HOOK等。
进行选择性的恢复,避免恢复了安全辅助工具的HOOK。
恢复工具:
XueTr,天琊,狙剑。
2.检查系统进程:
首先关掉无关进程,结束正在运行的其他无关应用程序,以避免干扰进程检查。
然后根据数字签名检查排除出系统进程,剩下的即是可疑进程,通过步骤1,这时候一般来说恶意软件已经是原形毕露,记下可疑进程,然后进行进程加载模块的检查,依然是首先通过数字签名验证挑出可疑模块,但不要轻易的将其卸载,因为根据前面对模块注入的恶意程序的了解,如果是通过注册表项进程注入的模块,简单的卸载模块并不能删除恶意注册模块,在下次系统启动或者应用程序重新运行,恶意注册模块又会被重新加载。
3.在步骤1对HOOK,INLINE-HOOK已修复的前提下,对比autoruns检查系统启动项,对照步骤2获取的恶意模块。
记得在删除系统启动项的时候,利用辅助工具的“防止注册表的写入”功能,在删除注册表启动项的时候避免恶意代码的重新注册。
4.重启,检查可以模块是否依然存在,如果是,则表明没清理干净;原因可能是该恶意代码可能是被动启动,如前面所说通过文件关联方式启动,AUTORUN.INF等;或者存在驱动文件,在设备管理器里查看或者使用系统自带的“系统信息”功能查看加载的驱动文件;
10.其它不错的方法
这个方法乃是"记事本杀毒"的升级版,来源于卡饭网,但是作者我记不到了,电脑上仅仅存了该方法的一个批处理文件,为针对在安全软件被干掉的情况下进行杀毒。
首先是建立一个属于自己的可执行文件类型,如.tit
在命令行提示符下依次输入如下命令:
---------------------------------------------------------
Assoc.tit=titfile
Ftypetitfile="%1"%*
Copy%systemroot%\system32\cmd.exe%systemroot%\system32\cme.tit/y
----------------------------------------------------------------------------
然后开始-->运行-->cmd.tit,就可以启动cmd了。
继续输入以下命令
-------------------------------------------------------------------------------
assoc.exe=txtfile
assoc.com=txtfile
assoc.scr=txtfile
assoc.cmd=txtfile
assoc.bat=txtfile
assoc.vbs=txtfile
assoc.js=txtfile
assoc.hta=txtfile
-----------------------------------------------------------------------------
或者新建一个记事本文件将以上命令复制进去,然后将记事本另存为:
txt.cmd。
重启电脑后发现病毒木马程序都已经无法运行,这时候启动cmd.tit,杀软拖进MS-DOS窗口,使用杀软或者专杀进行杀毒。
确定安全以后,然后再运行下面的命令恢复后缀名关联:
-----------------------------------------------------------------------------------------
assoc.exe=exefile
assoc.com=comfile
assoc.scr=scrfile
assoc.cmd=cmdfile
assoc.bat=batfile
assoc.vbs=vbsfile
assoc.js=jsfile
assoc.hta=htafile。
批处理文件:
-------------------------------------------------
assoc.xxx=xxxfile
ftypexxxfile="%%1"%%*
copy%systemroot%\system32\cmd.exe%systemroot%\system32\cmd.xxx/y
assoc.exe=txtfile
assoc.com=txtfile
assoc.scr=txtfile
assoc.cmd=txtfile
assoc.bat=txtfile
assoc.vbs=txtfile
assoc.js=txtfile
assoc.hta=txtfile
-----------------------------------------------------------------------------------------
点击开始->运行,输入cmd.xxx,在cmd.xxx下面用这个命令就可以关闭所有的记事本拉,
taskkill.exe/f/imnotepad.Exe
然后命令行提示符下恢复文件关联:
assoc.exe=exefile&assoc.com=comfile&assoc.scr=scrfile&assoc.cmd=cmdfile&assoc.bat=batfile&assoc.vbs=vbsfile&assoc.js=jsfile&assoc.hta=htafile