跟踪追击,打赢木马“围歼战”
2016-03-14刘景云
刘景云
病毒通常以破坏系统、摧毁数据为“乐趣”,经常以凶狠暴虐的形象出现。相比之下,木马则显得比较低调,通常以隐蔽状态活动。但是,木马却比病毒阴险许多,木马是黑客最大的帮凶,其主要目的不是大肆破坏系统,而是开启后门,让黑客获得目标主机的控制大权,进而执行盗窃重要数据、传播恶意程序、窥视隐私、非法获取经济利益等罪恶勾当。一般我们都是使用杀软等安全软件来对付木马,不过这并非万全之策,对于黑客精心“调教”出来的免杀型木马,常见的安全工具往往无法查杀。如何才能防范和查杀木马,让其不再在您的电脑中作恶呢?这里就从追踪木马活动踪迹、精准定位和删除木马文件,防御木马入侵等方面,全面介绍清除木马的通用方法,让您不惧木马侵袭,打赢打好木马歼灭战!
兵法云,知己知彼,方可百战不殆。要想清除木马,首先必须发现其行踪,然后才能采用各种手段,对其进行围捕绞杀。木马要想发挥威力,必须采用开启后门端口、潜入启动项等方式,才可以顺利激活成为黑客的帮凶。接下来,我们就从清查网络连接、启动项人手,来寻觅木马的踪迹。
1.明辨端口,追寻木马踪迹
当木马侵入系统后,必须要做的事情之一就是非法开启秘密端口,为黑客遥控本机打开了大门。从编程原理上说,木马一般都是通过调用Winsock库中的Socket()函数来建立套接字,从而实现网络通讯的。因此,只要查看本机的端口信息,就能够发现木马的踪迹。例如,我们一般都是在CMD窗口执行“netstart-ano”命令,不仅可以查看端口使用情况,还可以在“PID”列中显示使用该端口的进程标识符。在任务管理器打开“进程”面板,点击菜单“查看”-“选择列”项,在弹出窗口中选择“PID”项,就可以在进程列表中发现目标进程了。在CMD窗口中执行“wmic”命令,如果初次使用,会显示“正在安装WMIC,请稍后”。在随后的“wmic:root\cli>”栏中输入“Process”命令,就会显示进程和实际程序之间的关系列表。据此不难找到目标程序具体位置。
如果确认是木马,就可以使用专用的删除工具(例如Unlocker,IceSword,Syscheck等),将其直接清除掉。不过“netstat”命令对付基于TCP协议的端口很有效,但是应对基于UDP协议的木马就有些力不从心了,因此,还必须借助于专业的端口查看工具(例如TCPEye,Antiyports,Fport等)帮忙才行。例如运行TCPEye,在其主窗口(如图1)中显示当前所有的网络连接项目,包括相关进程的名称、本地地址和端口、远程地址和端口、连接状态、协议类型、远程地址所属国家、关联的程序路径、程序名称、开发者、文件描述信息、文件版本等信息。TCPEys可以动态刷新网络连接信息(默认周期为1秒),在“State”列中以不同的颜色表示目标网络连接所处的状态,例如绿色表示连接已经建立、黄色表示正在发送数据、浅红色表示正在等待连接、深红色表示连接请求等。
在工具栏上按下倒数第二个按钮,表示仅仅勇示打开了监听端口,还没有建立实际连接的“空连接”项目。在工具栏上按下倒数第一个按钮,可以打开网址解析功能,在本地地址和远程地址中就会显示对应主机的名称,用来替代实际的IP地址。如果您觉得连接列表看起来有些眼花缭乱的话,可以使用TCPEye提供的连接自动检测功能。在工具栏上按下第三个按钮,TCPEye即可对网络连接进行实时监控,当发现新的网络连接后,即可在屏幕右下角弹出提示面板,在其中显示目标连接的远程地址、端口、相关的进程名和所属国家等信息。如果在工具栏上按下第四个按钮,可以激活声音报警功能,当出现新的网络连接后,TCPEye就可以发出报警声提醒您的注意。
对于来历不明的网络连接,可以在其右键菜单上点击“Cechk Whit VirusTotal”项,TCPEye可以将相关程序上传到在线病毒检测网站上,进行全面检测分析,确定其是否存在危害性。对于确认是非法的网络连接,在其右键菜单上点击“Close Connection”项(或者按下“Ctrl+K”键),即可关闭该网络连接(前提是其处于该连接处于建立状态)。在上述菜单中点击“Properties”项,可以显示相关进程的详细信息,点击“End Process”项,可以直接中止相关进程的运行。当然,为了防止木马非法开启端口,最好的应对策略是开启防火墙来保护系统。不管是系统自带的防火墙,还是第三方的防火墙软件,都可以有效抗击木马侵入。
2.严查启动项,让木马现出原形
对于一般“平庸”的木马,使用上述方法可以轻松应对。但是,如果木马比较狡猾,采用了原始套接字通信技术,就大大增加了通过端口发现其行踪的难度。从编程原理上分析,常用的网络编程都是在应用层的报文收发操作,大多数开发者接触到都是流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DCRAM),相应的网络数据包都是由系统提供的协议栈实现,用户只需要填充应用层报文,由系统完成底层报文头的填充并发送。然而,在某些情况下需要执行更底层的操作,比如修改报文头、避开系统协议栈等,这就需要利用原始套接字(SOCK_RAW)来实现。和以上套接字不同,原始套接字由系统核心实现,可以处理ICMP、IGMP,特殊的IPv4报文,甚至可以利用原始套接字来自定义构造IP头,处理一些特殊协议报文等。不过,这并不要紧,木马要想作恶,必须借助于自启动方式才可以进入活动状态。就目前的木马技术来说,实现自启动无非有两种常用方式:其一利用注册表中的自启动项目,让木马跟随系统自动运行;另外一种就是创建、替换系统服务的方式,让木马获得优先启动权。
3.擦亮眼睛,揪出木马服务
我们先来谈谈如何查找木马服务,要想明晰服务自启动技术,必须了解Windows服务的结构,Windows服务一般由服务控制管理器、服务控制程序、服务配置程序、服务程序等要素组成。例如“C:\Windows\system32”文件夹下的“Services.exe”就属于服务管理控制程序,它在注册表中存在一个存储系统服务信息的数据库。在注册表编辑器中打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”分支,可以看到具体的信息。当系统启动时,会根据注册表中“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControISet\Control”分支中存储的服务启动配置信息,来启动所有启动类型为“自动”的系统服务。我们熟知的“Services.msc”“net start”等程序属于服务控制程序,主要用来查看服务信息、调整启动类型、控制服务启动关闭等作用。“sc.exe”程序属于服务配置程序,可以用来创建、删除服务。服务程序就是和特定服务关联的程序,大都属于DLL库文件。
4.查找木马服务的常规思路
不管黑客如何千方百计的设计木马程序,让其藏身于系统服务来浑水摸鱼,它们都离不开一个关键条件—木马服务的启动类型必须为自动!根据这一线索,就大大缩小了定位木马服务的范围。例如,运行“msconfig.exe”程序,在系统配置实用程序窗口中的“服务”面板中勾选“隐藏所有Microsoft服务”项,可以只显示数量较少的第三方的服务信息,找到和“状态”列中显示为“正在运行”对应的服务,对其细致分析,可以很快找到木马服务。之后在“服务”列中取消其选择状态,重新启动系统,就会让其失去活力。根据木马服务名称,在CMD窗口中执行“wmlc”命令,之后输入“servlce”命令,在服务统计信息中的“Caption”列中找到木马服务名称,在“Pathname”列中可以定位其服务程序,然后将其删除即可。
此外,还可以使用Comodo Cleaning Essentials(简称CCE)的安全软件,来侦测服务的真伪。打开得到的ZIP包,运行其中的“Autoruns.exe”程序,在启动项分析窗口点击菜单“View”→“Language”→“中文”项,之后重新启动该程序,即可得到中文界面。这个小工具可以对系统启动项进行全面分析,在窗口左侧的“分类”列表中分门别类列出所有的启动项目,包括资源管理器、IE、驱动、映像劫持、Winlogon、网络等十几种类别。可以说,隐藏再深的启动项也会在此显露出来。在窗口左侧选择“服务”项,在右侧窗口中列出所有自动运行的服务项目(如图2)。
木马要想通过服务潜入系统,必须将对应的服务设置为自动运行状态。该工具可以快速分析系统服务的安全性,在服务列表中的“评价”列中如果显示为“Safe”项,表示对应的服务为正常服务。否则的话,表示该服务存在安全隐患。例如,在一个没有标注为“Safe”信息的系统服务的右键菜单上点击“跳到”项,可以直接定位到注册表关联路径。点击“跳到目录”项,可以定位到其主程序路径中。点击“在线搜索”项,可以深入研究其真实来历。对于检测出来的恶意服务项,在上述菜单中取消“启动”项选择,禁止其自动运行,点击“删除”项可以将其删除。
5.让木马“顶包”服务露出真面目
对于一些狡猾的木马,为了避免暴露,会采用替换正常服务的方法,让自身顶替正常服务,来实现冒名顶替的非法启动的目的。当然,被木马服务“顶包”的服务一般都是一些很不常用的服务,例如Alerter,ClipBook等服务。如何才能发现其行踪呢?例如有的木马会将自身替换为“ClipBook”服务,因为该服务并不常用,因此木马隐藏的很成功。运行“msconfig.exe”程序,在“服务”面板中却没有发现可疑服务。但打开系统服务管理器,经过仔细查看,发现“ClipBook”服务处于启动状态,实际上该服务应处于禁用状态。通过对其主程序“clipsrv.exe”的分析,发现系木马伪装而成。
借助于超级巡警工具箱这款免费的安全软件,可以让那些“冒牌”服务现出原形。在超级巡警工具箱工具栏中点击“服务管理”按钮,会列出所有的系统服务。对于正常的系统服务,会以绿色加以标识。对于非系统自带的服务项目,会以棕色加以标示。如果发现有黄色外观的服务项目,就说明该服务已经被可疑程序替换了。例如以清除假冒的“FAX”服务为例,点击“FAX”服务项,在弹出面板中显示其名称、状态、类型、描述信息、开发者、MD5值等详细信息。点击“文件路径”链接,可以直接定位到其主文件上。先点击“停止服务”按钮,结束其运行。
之后使用Unlocker等专用删除工具,将病毒文件清除。之后在其它电脑复制了该服务的正常的主程序“clipsrv.exe”,将其存放到“C:\WINDOWS\system32”中。然后在该服务的右键菜单上点击“编辑服务”项,在其属性窗口(如图3)的“执行文件路径中”栏中输入“C:\Windows\system32\fxssvc.exe”,在“启动类型”列表中选择“Disabled”项,禁止其运行,点击确定按钮,恢复了该服务的原来面貌。对于其它被替换的服务,按照同样的方式进行修复即可。此外,超级巡警工具箱也提供了服务检测功能,在服务列表的“分析”列中以“安全”标识正常的服务,对于标识为“未知”的服务,可以在其右键菜单中点击“使用百度搜索”项,来查验其真实身份。对于可疑服务,最好将其停止或者删除。
6.值得注意的非常规启动位置
当然,对于狡猾的木马来说,绝不会采用在诸如“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”等“显眼”的位置藏身,毕竟这样做太容易暴露。例如对于采用进程插入技术的DLL木马来说,注册表中“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows”下的“AppInit_DLLs”键值是其很好的藏身地,该位置是很容易被大家忽视的可以用来启动木马的位置。如果DLL木马将对其进行了修改,将自身添加进来,那么不管任何进程,只要其使用到了“User32.dll”动态库,都会被上述键值指向的DLL木马所注入。因为“User32.dll”是系统自带的很常用的动态库,主要用来提供和程序使用界面、消息控制等相关的功能,几乎被大多数程序使用。当然,只有极少数程序(诸如CMD控制台)是不会使用该动态库的。此外,注册表中的“HKEY_ CURRENT_USER\Software\ Microsoft\Windows\CurrentVersion\Policies\Explorer\Run”分支也应引起我们的关注,这个组策略中的启动项目紧密相关的。为了避人耳目顺利启动,木马还常会在注册表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”分支下的“userlnlt”和“shell”键值中添加恶意程序,悄无声息的跟随系统启动自动激活。
对于国外的木马来说,通常会利用ActivcX技术来自启动。例如比较有名的Beast木马,会在注册表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\lnstalled Components\{4A202188F04D-IICF-64CD-31FFAFEECF20}”分支下的“StubPath”键值中设置木马程序路径,进而实现自启动操作。有些狡猾的木马会采用映像劫持技术绑架特定程序,当用户执行该程序时,运行的却是木马程序。如果采取将注册表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\lmage File Execution Options”分支彻底删除的方法,来防御映像劫持的话,就显得过于简单了,因为从编程角度看,木马程序通常会使用RegCreateKeyEx()和RegSetValueEx()等函数,来动态地创建或者修改注册表键值数据。因此,为了有效防御映像劫持,可以采取控制上述注册表路径权限的方法,取消“Administrators”组和“SYSTEM”账户对该分支的写权限,具体的方法比较简单,这里就不赘述了,这样木马就无法凭借映像劫持来启动了。
7.巧用记事本,对付进程守护型木马
例如有些木马会采取双进程守护方式,当您在任务管理器中关闭其中一个木马进程后,另外一个会自动将其激活。其实,使用记事本这个小工具,就可以轻松对付双进程守护型木马。假设某种病毒侵入本机,在系统中创建了名称为“a.exe”和“b.exe”的守护型进程,造成您无法直接清除该进程组合的情况。在“开始”→“运行”中执行“msinfo32.exe”程序,在系统信息窗口左侧点击“系统摘要”→“软件环境”→“正在运行任务”项,在右侧窗口中显示详细的进程信息,在其中得知“a.exe”进程的主文件保存路径为“c:\windows\system32”。接着打开“c:\windows\system32”文件夹,将“notepad.exe”文件复制到D盘根目录下,并将其改名为“a.exe”。接着打开记事本程序,在其中输入以下内容:
@echo off
Taskkill/f/im a.exe
Delete c:\windows\system32\a.exe
Copy d:\a.exe c:\windows\system32
之后将其保存为“qingchu.bat”文件即可。该段程序的作用是先使用Taskkill命令结束“a.exe”病毒进程,之后将其删除,接着将D盘中由记辜本程序改名的“a.exe”来取代其位置。之后运行qingchu.bat”程序,系统即可中止真实的“a.exe”进程,同时将由记事本“冒充”的病毒程序复制到目标路径中,当另一个病毒进程“b.exe”发现对方被关停后,即可自动将其激活,但是运行的却是记事本程序。接下来的工作就简单了,直接使用命令“Taskkill/f/im a.exe”,将再生的“a.exe”中止,根据系统提示信息,可以看到激活“a.exe”进程的另一个进程的PID号码,在任务管理器中根据得到的PID号码,就可以查询到另一个与之关联的病毒进程,也就是“b.exe”进程。之后在上述系统信息窗口中可以查到“b.exe”进程的路径信息,接下来在任务管理器中中止“b.exe”进程,同时进入对应目录,将其删除即可。这样就很轻松地击破了病毒的进程守护机制。
8.增强任务管理器,多个木马进程一键杀
有些木马并非单兵作战,一旦其运行后会从网上下载更多的病毒、木马或者黑客程序,打开任务管理器,您就会发现其中拥挤着来历不明的程序,甚至连杀软也会被其强制关停。如果手工逐一关闭,实现起来非常困难。如何才能将恶意进程一网打尽呢?使用TaskmgrPro这款任务管理器插件,就可以一键清除全部恶意进程。
TaskmgrPro安装后和任务管理器实现紧密集成,在任务管理器主窗口的“进程”面板(如图4)中按下Ctrl或者Shift键,点击对应进程名称,即可选中多个进程。点击“结束进程”按钮,在确认对话框中点击OK按钮,即可将目标进程全部关闭。此外,使用进程列表功能,可以更加灵活地控制进程的批量操作。点击“Execute List”按钮,在弹出菜单中点击“New Kill List”项,输入新的列表名称,即可创建所需的进程列表项目。按照上述方法,您可以创建任意多个进程列表项目。之后在“Current List”列表中显示所有的列表项目,选择目标列表项目,在目标进程的右键菜单上点击“Add to List”项,即可将该进程添加到当前的列表中。
按照同样的方法,可以在当前列表中添加多个进程。之后点击“Execute List”按钮,在弹出菜单中点击“Execute Kill List”项,可以将当前列表中的所有进程全部关闭。在上述菜单中点击“Resurrect Process”项,可以重新启动当前列表中的所有进程。当然,也可以使用TaskmgrPro自带的列表项目,例如在“Cureent List”列表中选择“Clean XP.xml”项,则可以自动选择Windows XP的所有核心进程,之后点击“Execute List”按钮,在弹出菜单中点击“Edit Kill List”项,在弹出窗口中确保选择“Invert List”(反向选择)项,之后点击“Execute List”按钮,在弹出菜单中点击“Execute Kill List”项,即可关闭系统进程之外的所有进程。这样,可以迅速净化进程环境,将各种杂乱的进程全部关闭。