1. 重装系统解决不了的那部分问题我处理过的机器里有相当一部分是被主人重装过两三次之后才送过来的。用户的描述几乎一模一样卡、弹窗、浏览器主页被改、杀毒软件打不开于是格式化C盘、重装系统干净了三天又开始弹窗。到这一步问题通常已经不在系统文件坏了而在于初始感染源和持久化机制一个都没被碰过。电脑病毒木马的清除和防范这件事最容易出错的地方恰恰不是清除动作本身而是清除之前没有搞清楚我面对的到底是什么东西、它靠什么活下来。这两件事没搞明白后面的操作再熟练也是白忙。这一篇我想按我实际处置机器的顺序来写先分清对手是什么再判断有没有中招然后走一套从断网、扫描、手工清残留到验证的分级流程接着处理那些打不死的顽固样本最后聊防范。每一步我都会说清楚为什么这么做以及不做会出什么事。适合两类人看一类是自己机器出了状况、想动手但又怕越弄越糟的普通用户另一类是帮同事、帮家里人修电脑的半个技术担当你们需要的不是一句重装吧而是一条能复现的排查链路。1.1 病毒、木马、蠕虫、勒索、挖矿处理思路完全不同很多人把所有恶意程序统称为病毒但从处置角度看这几类的行为模式差别很大混着叫会直接导致用错方法。传统病毒的核心特征是寄生自我复制它把自己附到可执行文件上靠人拷贝文件传播。这类东西现在其实少见了因为现代系统的文件保护和数字签名机制让它很难活下去。蠕虫是自己会走路的那一类不需要用户点击靠网络漏洞、弱口令、共享目录自动扩散局域网里一台中招、整片沦陷的场面通常就是它干的。木马不自我复制它靠伪装骗你运行进去之后干的是盗号、远控、下载二阶段载荷这类活特征是有一个持续的外联通道。勒索软件本质是加密敲诈它关心的是尽快把你的文件锁死所以动作粗暴、磁盘写入量大。挖矿程序追求长期潜伏占GPU或CPU但尽量不让你察觉特征是风扇常转、待机功耗高。广告软件和流氓软件严格说不算病毒但危害一点不小它们改主页、锁搜索引擎、装一堆卸载不掉的全家桶而且经常是更严重感染的入口。为什么这个分类重要因为清除的着力点不一样。对蠕虫你要先堵住它的传播路径补丁、共享权限、弱口令否则清完这台隔壁那台还在往外打对木马你要重点查的是持久化和外联文件本身删掉不算完对勒索第一优先级是断网保住还没被加密的备份和共享盘而不是急着找解密工具对挖矿你要找的是那个看起来像正常进程的挖矿程序和它的守护进程。用一句重装吧糊过去等于把对手的类型判断也一起省了。1.2 只格式化C盘为什么等于没清这是我最想先说清楚的一点。重装系统这个动作默认只覆盖系统盘通常是C盘上的东西并且很多时候只是覆盖安装连原有文件都没删干净。以下这些位置重装是碰不到的其他数据盘。D盘、E盘里躺着的安装包、激活工具、绿色版软件、被感染的文档和压缩包重装完你一双击等于自己把门又打开了。移动存储。U盘、移动硬盘里的自运行文件、伪装成文件夹图标的可执行文件重装后一插上就复发这也是重装三次还是中招最常见的解释。引导区。主引导记录、UEFI引导项、隐藏的恢复分区这些不在系统盘的文件系统里常规格式化根本覆盖不到。少数引导区级别的感染会在这里存活重装之后系统一启动就被重新加载。局域网里的邻居。路由器被改了DNS、共享盘里放着感染文件、同网段还有一台没处理的机器在自动扫描你的新系统连上网几分钟就再次沦陷。账号级别的持久化。浏览器账号同步会把恶意扩展同步回来云盘同步会把带毒文件同步回来邮箱里的自动转发规则会继续把验证码往外送。这些东西跟着账号走不跟着这台机器走。我见过最典型的一种情况用户重装完系统第一件事是去某个下载站装某某驱动大师和某某激活工具而这两个安装包里就捆绑了推广程序和下载器。整个过程他做得很熟练问题也复发得很稳定。所以判断一台机器要不要重装、重装之后能不能保持干净得先回答一个问题初始感染源是什么它现在还在不在。这个源可能是某个安装包、某个U盘、某封邮件、某个共享目录也可能是某个被改过的路由器设置。源没除掉重装只是重置了倒计时。顺带说一句重装之前如果条件允许把系统盘做个镜像或者至少把重要文档、浏览器书签、聊天记录导出来。不是为了留证据而是很多时候清完之后才发现某个配置文件、某个软件许可证、某个加密盘的恢复密钥只存在于旧系统里那时候哭都来不及。2. 感染之后的第一现场哪些迹象值得停下来查一查绝大多数感染不是毫无征兆的。它会有痕迹只是这些痕迹太像电脑变慢了这种日常抱怨容易被归因到系统老了该加内存了。我的经验是把以下几类信号当成红灯看到一个就停下来查十分钟比事后花三小时清理划算得多。2.1 性能和网络层面的异常先看谁在干活打开任务管理器不要只看总占用率要看具体是哪个进程在吃资源。正常的浏览器、播放器、编译工具占用高是合理的可疑的是那种名字看起来像系统组件、但路径不在系统目录里的进程或者名字完全随机的一串字母数字。重点看三个地方CPU和GPU的长期占用挖矿的典型特征尤其是你什么都没干、机器待机时候风扇还在狂转、磁盘的持续写入勒索加密阶段会有大量写操作、以及网络的上传流量。资源监视器里能看到每个进程的发送字节数一个你不认识的进程在上传几十KB/s且持续不断那不是正常软件的行为那是心跳或者数据外传。还有一个细节值得注意开机时间。如果一台机器开机明显变慢而且慢在登录之后到桌面可用这个区间通常说明启动项里有东西在抢跑。另外凌晨两三点机器自己亮起来、硬盘灯闪一阵这种半夜活动要么是系统更新要么是计划任务在跑别的东西值得去计划任务里核对一下。2.2 系统配置层面的信号比性能异常更可靠性能是主观的配置是客观的。我判断一台机器是否干净基本靠下面这张清单走一遍五分钟能出结论。检查位置正常状态异常表现启动项启动文件夹与注册表启动键只有你认识的软件出现随机名、无签名、路径在临时目录的条目计划任务系统自带任务为主多出触发器为登录时空闲时每分钟的陌生任务系统服务服务名与显示名对得上显示名像系统组件但可执行文件路径在用户目录浏览器扩展你主动装过的几个多出不认识的扩展且开发者模式被打开浏览器主页与搜索引擎你设置的那个被改成陌生地址改回来重启又变安全软件状态正常运行、能打开界面界面打不开、实时防护被关、更新失败系统更新能正常检查更新更新服务被禁用、更新被暂停到很久以后用户账户控制保持默认或更高被调到最低或者直接关闭hosts 文件基本为空或只有少量条目出现大量指向陌生地址的记录文件关联双击文档用对应软件打开文档图标变成白纸或双击后被别的程序接管文件夹选项可以显示隐藏文件选项被禁用或受保护的系统文件无法取消勾选这张表里我最看重的是计划任务和服务这两项。原因很直接启动项太显眼了稍微懂点的恶意程序都不会只靠它而计划任务和服务是系统原生机制普通用户几乎不会去看藏在这里的持久化最稳。我看过一台机器启动项干干净净服务里多了一个显示名叫某某系统辅助服务的东西可执行文件落在用户目录下一个隐藏文件夹里这就是典型的穿西装混进来。2.3 别忽略行为层面的怪事有些迹象不体现在配置里体现在你的操作被干扰。比如任务管理器打不开、注册表编辑器一闪就退、安全软件的安装包双击没反应、某些安全类网站打不开但别的网站正常、下载的查杀工具解压出来是空文件夹。这些现象指向一个共同原因有东西在主动拦截你。这类拦截通常通过映像劫持把某个程序名重定向到别处、驱动级过滤、或者修改系统策略来实现。遇到这种情况不要在原系统里死磕直接跳到第4节的离线处置因为在病人身上做手术是最费时间的做法。还有一种情况是浏览器层面的搜索结果的链接点进去跳转到别的站、地址栏输入正确域名却到了别处、页面上多出一层浮窗广告。这类问题很多时候不在本机而在路由器或者运营商链路上处置方法完全不同先别急着删文件。3. 分级处置从断网到验证的完整链条真正动手的时候我习惯把处置分成四步顺序不能乱。乱序的典型后果是先删文件结果触发了守护进程重新下载先重启结果丢了内存里的线索先联网找工具结果二阶段载荷在后台已经下完了。3.1 第一步断网、留证再谈其他断网这件事很多人觉得我先把杀毒跑完再断这是反的。先断网的理由有三条一是切断外联通道防止正在被远程控制、防止数据继续外传二是防止恶意程序在检测到被清理时下载二阶段载荷或者自我更新三是防止它向局域网内其他机器横向扩散尤其是共享目录和弱口令的主机。断网的操作要彻底拔网线、关无线开关、在系统里把网卡禁用三选二比较稳妥。断网之后不要急着重启也不要急着删东西先花几分钟留证。截图记录可疑进程的名字、完整路径、PID、启动时间记录可疑服务的名称把任务管理器的进程列表导出或者拍照。这些信息在后续判断清干净没有的时候非常有用因为很多恶意程序被清掉之后会换个名字回来你有原始记录才能对得上。另外如果机器里有重要数据且怀疑是勒索类第一优先级是把还没被加密的文件复制到一块离线、只读的移动介质上复制完立刻拔掉不要留在机器上。3.2 第二步在可信环境里扫而不是在染毒系统里扫这一步是效率的分水岭。在已经可能被控制的系统里跑扫描器问题在于恶意程序可能拦截文件读取、隐藏自己的文件、阻止扫描器加载病毒库、甚至在扫描时把关键文件恢复回去。所以更靠谱的做法是把硬盘拆下来挂到一台干净的机器上扫或者用一块可启动的查杀介质从外部引导起来扫本地磁盘。这样恶意程序根本没有运行的机会它只是一堆躺在磁盘上的字节扫描器想看哪就看哪。如果拆盘不现实笔记本、一体机、加密盘退一步的做法是进安全模式扫或者用第二套引擎交叉验证。交叉验证的意义在于不同引擎的样本库和启发式规则不一样A引擎报不出来的B引擎可能报反过来A引擎报的B引擎没报也值得你手工看一眼。我自己习惯是先用一套主引擎全盘扫再用一套轻量引擎补扫系统目录和用户目录两边结果对照着看。关于隔离和删除的选择我的建议是先隔离别直接删。隔离区里的样本在确认系统干净之后可以清空但如果误报了正常文件这种情况真实存在尤其是某些工具软件和加壳程序你还能恢复。直接删除的代价是不可逆的。3.3 第三步手工清掉扫描器不报的合法外衣这是最费时但最见功力的一步。原因很简单大量恶意程序并不以病毒文件的形态存在它落在磁盘上的东西可能是一个普通的脚本、一个看起来正常的可执行文件甚至是系统自带的工具被拿来当跳板比如系统自带的命令解释器、下载组件、计划任务工具。这些东西本身没有恶意特征扫描器不会报但它确实是持久化链条的一环。需要逐项过的地方我按优先级排计划任务。看触发器登录、空闲、每分钟、系统启动和动作执行什么程序、带什么参数。特别注意那些动作为调用命令解释器执行一串参数的任务这是最经典的藏法。系统服务。核对每个非系统服务的可执行文件路径路径在用户目录、临时目录、程序数据目录下的全部可疑。还要看服务的登录身份有些服务会伪装成系统账户运行。启动项。启动文件夹和注册表的多个启动键都要看不止常说的那一个位置。启动项的值如果是一长串带参数的命令行尤其可疑。浏览器扩展与主页设置。逐个核对扩展的来源和权限不认识的直接移除主页和搜索引擎改回默认后重启验证一遍如果又变了说明有东西在后台改它回到第1、2项继续查。文件关联与右键菜单。文档图标变白纸、右键菜单多出陌生项通常意味着注册表里的关联项被改。改回来之后要观察是否复发。hosts 文件与代理设置。hosts 里如果有大量陌生条目说明有人在定向屏蔽或重定向系统代理设置被改成陌生地址也要一并还原。每改一项之前先做两件事把要改的注册表项或配置文件导出备份把可疑文件的完整路径和文件时间记下来。文件时间这个细节很多人不看但它很有用一个声称是系统组件的文件创建时间却是上周二凌晨这本身就说明问题反过来一个时间戳被改成很多年前的系统文件也可能是伪装。3.4 第四步清完之后怎么确认真的干净了清完不等于清干净。我的验证方法是四件事重启后再查一遍。很多持久化机制是你删了它它下次启动时重建所以重启之后再走一遍第2节的清单看有没有东西回来。有东西回来说明还有守护者没找到回到第3步继续。观察两到三天的资源与网络。看有没有异常的CPU、磁盘、上传流量看有没有陌生进程反复出现。这一步不要偷懒很多样本是延迟触发的。用第二套引擎全盘补扫一次。时间点放在清理完成、重启之后这时候残留文件不会再被保护检出率会高一些。核对账号侧。登录邮箱看有没有陌生转发规则、看最近的登录记录登录重要账号看有没有陌生设备浏览器账号同步里把不认识的扩展清掉。这一步经常被跳过但它是清完之后过几天又出问题的常见来源。4. 遇到打不死的样本安全模式、离线环境与引导区有一部分样本你在正常系统里怎么删都删不掉删了文件它自己回来杀了进程它重启安全软件被它关掉连安全模式都进不去。这类情况不必硬拼换环境就行。4.1 安全模式能挡住什么挡不住什么安全模式的原理是只加载最基本的驱动和服务第三方程序和大部分自启动项都不加载。这个特性决定了它能挡住绝大多数用户态的自启动所以对付那些靠启动项、计划任务、普通服务活着的样本很有效。但它的边界也很清楚驱动级和引导区级的东西它挡不住因为基本驱动还是要加载的如果恶意程序把自己注册成了一个启动时必需的驱动安全模式里它照样跑。进安全模式的方式有好几种开机时连续强制关机几次可以进入恢复环境也可以在系统配置工具里设置下次启动进入还可以从安装介质引导进入修复模式。注意一个坑有些恶意程序会修改引导配置来阻止你进入安全模式表现是选了安全模式之后黑屏重启或者直接进正常系统。遇到这种别在系统里折腾了直接做可启动介质。4.2 可启动介质与离线处置的操作要点准备一块U盘做成可启动的维护环境很多安全厂商提供现成的可启动查杀镜像也有通用的维护盘系统。从U盘引导起来之后本地磁盘就变成了一堆文件你可以用离线工具扫、手工删、改注册表、清计划任务和服务。几个实操细节盘符会偏移。离线环境里看到的盘符和正常系统里不一样删文件之前一定先确认目录结构别删错盘。权限问题。有些目录在离线环境里也打不开需要先取得所有权、修改访问控制列表才能删。离线的注册表要手动加载。想改离线系统的注册表得先把对应磁盘上的注册表配置单元文件加载进来改完再卸载直接改文件是不行的。别在原地写东西。扫描和清理尽量在内存或者另一块盘上做避免覆盖可能还有用的证据。清完先别急着重启进系统在离线环境里把启动项、服务、计划任务再核一遍确认没有残留。4.3 引导区、固件与重装也复发的那一类如果一台机器重装之后仍然复发而且复发的表现是系统还没完全起来就有异常那就要怀疑引导区或者固件层面的问题。判断线索包括重装多次都复发、多个系统互相感染、开机自检阶段就有异常提示、磁盘上有无法解释的隐藏分区。处置思路是重写引导记录、核对并清理引导项、把固件更新到官方版本。这类情况在实际中比例不高但一旦碰上按常规思路清一天也清不完。还有一类重装复发其实不是引导区的问题而是感染源还在U盘没处理、移动硬盘没处理、局域网里另一台机器还在传播、装完系统后第一时间装的某个安装包本身就是带毒的。判断方法很简单重装后先不联网、不插任何移动介质、不装任何第三方软件观察一天。如果这样是干净的那问题就在外面逐个把变量加回来加到哪个复发源就找到了。这个控制变量法笨但极其有效我在排查反复感染的机器时基本都靠它。5. 把入口堵死比事后清除划算得多清除是一次性的体力活防范是长期的习惯。我见过太多人清理的时候很上心清完该干嘛干嘛三个月后同样的问题再来一遍。下面这几件事投入产出比高得离谱。5.1 补丁和权限两件最省钱的安全投资补丁这件事的道理不用多讲大部分蠕虫和相当一部分木马利用的都是已经修补过的漏洞。要做的就三件打开系统自动更新、把浏览器和办公软件也纳入更新范围很多人只更新系统浏览器几年不升、把不再使用的老版本组件卸载掉。企业环境里还应该关闭那些历史遗留的、已经不该开的网络共享协议版本这类老协议是横向传播的重灾区。权限这件事被低估得最厉害。日常使用标准用户而不是管理员账户能挡掉相当一部分双击就中的情况因为恶意程序想写入系统目录、想装服务、想改全局配置的时候会弹权限提示你有一次喊停的机会。用户账户控制不要关宁可多点两次是。再进一步是软件白名单的思路只允许运行已知的程序其余一律拦。这个在个人机器上略显繁琐但在家里老人的机器上、在存放重要资料的机器上非常值得。5.2 来源控制绝大多数感染是自己请进来的我把常见的自己请进门的套路列一下你对号入座看看中过几条套路表现正确做法下载站的高速下载器安装包很小运行后先装一个下载器只从软件官方渠道取安装包捆绑安装安装过程中默认勾选一堆推荐每一步都点自定义把勾去掉破解补丁与激活工具要求关闭安全软件再运行不运行这类工具是重灾区邮件附件与文档宏附件是压缩包或文档打开提示启用宏不启用宏先核实发件人双扩展名伪装文件名像照片.jpg实际是可执行文件打开显示文件扩展名镜像文件挂载收到 .iso/.img双击挂载后里面有安装程序不挂载来源不明的镜像假冒更新提示网页弹窗说你的浏览器需要更新只从软件自身的更新入口更新网盘绿色版免安装、体积小、功能全优先用官方版本有一条硬规矩我想单独强调任何要求你先关闭安全软件的安装步骤一律拒绝。正规软件不会提这种要求。这一条能挡掉我见过的相当比例的严重感染。5.3 备份要做得病毒也删不掉备份的意义不在于防硬件坏而在于出事之后你有得选。勒索软件的第一件事就是找备份删掉——它会扫描挂载的网络盘、云盘同步目录、外接硬盘把能找到的备份一起加密。所以备份的关键不是有没有而是出事那一刻它够不够不着。我的建议是三点一是离线副本备份完把介质拔掉物理断开二是多份异地至少一份不在同一台机器、不在同一个网络里三是版本化保留多个时间点的副本因为如果备份是实时同步的你同步过去的可能已经是被加密的版本。做完备份之后一定要演练一次恢复没恢复过的备份等于没有备份这个道理吃过亏的人都懂。5.4 账号侧很多人漏掉的那一半机器干净了账号不一定干净。要检查的包括邮箱的自动转发和收信规则有的恶意程序会偷偷加一条规则把所有含验证码账单的邮件转发出去、重要账号的登录设备列表、密码是否在多处复用、有没有开双因素。密码复用这件事的危害被严重低估一个不重要的论坛泄露了攻击者拿这组账号密码去撞你的邮箱、网盘、支付账号成功率比想象中高得多。用密码管理器给每个站生成不同的密码这一步做了之后很多莫名其妙被盗的问题会直接消失。6. 几个流传很广的误区以及我踩过的坑6.1 装了安全软件就没事了安全软件是必要不充分的。它能挡住已知样本和一部分可疑行为但挡不住你自己点允许、挡不住零日漏洞、挡不住你主动关掉它去装破解软件。我见过太多机器安全软件装得满满当当结果用户为了装某个必备工具手动加了白名单然后全盘沦陷。安全软件的价值在于提高作恶成本不在于万无一失。真正的防线是习惯不装来源不明的东西、不关更新、不用管理员账户日常上网。6.2 把病毒文件删掉就完事了文件只是结果不是原因。删掉文件之后那个让它自动恢复的计划任务还在、那个守护进程还在、那个被改过的注册表项还在过几个小时它就从别的地方重新生成一份。正确的顺序是先断掉持久化链条再删文件停服务、删计划任务、清启动项、然后在断网状态下删文件最后重启验证。顺序反了你就是在跟一个会自我修复的东西赛跑。6.3 任务管理器里看不到就是没中招现代样本基本都会做进程隐藏。有的用驱动级手段让进程列表里看不见有的干脆不常驻靠计划任务定时拉起、干完活就退出。所以看不到不等于没有。判断依据应该是行为有没有异常的网络外联、有没有解释不了的文件写入、启动项和服务里有没有对不上的东西。工具上任务管理器只够看个大概要看启动项的全貌得用专门的启动项审计工具要看文件和行为得用文件与注册表行为监控工具把某个可疑程序运行期间的所有读写操作录下来比盯着进程列表有用得多。6.4 几个省时间的小技巧说几个我实际用下来最省时间的点。看数字签名右键属性里看签名者和是否有效系统组件和正规软件基本都有有效签名一个自称系统组件却没有签名的文件基本可以直接判断。看路径恶意程序很少能把自己放进系统目录多数落在用户目录、程序数据目录、临时目录下路径本身就是线索。看父进程一个由办公软件启动的命令解释器进程和一个由系统启动的正常服务性质完全不同。看命令行参数带一长串编码参数、指向远程地址的命令基本没有正当用途。开文件扩展名这一个设置能挡掉双扩展名伪装成本几乎为零。最后分享一个个人的习惯我给自己家里和常帮人维护的机器都留了一份基线记录——正常状态下有哪些启动项、哪些服务、开机多久、平时网络上传大概什么水平。出问题的时候不用从零判断拿现在的状态跟基线一比多出来的那个就是嫌疑对象。这个方法笨但比任何工具都直观而且不需要额外装什么。踩过几次凭感觉排查、查了两小时没结论的坑之后我现在第一件事永远是先取基线再动手。