☰
蠕虫病毒本质与实战处置:从传播原理到三维度清除
2026/10/14 12:55:42 网站建设 项目流程

1. 项目概述:从“蠕虫病毒”这个标题看懂它到底是什么、为什么值得深挖

“蠕虫病毒”这个词最近在技术圈和安全社区里频繁出现,但很多人一听到就下意识觉得是“很危险的电脑病毒”,要么直接关机重启,要么慌忙找杀毒软件全盘扫描。其实这种理解太表面了——它既不是泛泛而谈的“病毒统称”,也不是只存在于教科书里的过时概念;它是一类有明确行为特征、传播逻辑和防御难点的自主式网络恶意程序,其核心在于“不依赖宿主文件、可独立复制、主动寻找新目标”。我做过多年终端安全响应和红蓝对抗支撑,接触过上百个真实蠕虫样本,从早期的“冲击波”“震荡波”,到近年活跃的“Mirai变种”“DarkSide勒索蠕虫前置模块”,再到IoT设备中悄然蔓延的轻量级Go语言蠕虫,它们形态在变,但底层逻辑始终没变:利用漏洞自动探测→建立连接→复制自身→启动新实例→继续扩散。这个过程完全不需要用户双击、不修改.exe文件、不寄生在Word文档里,所以传统基于签名的杀软常常“看不见它进门”。这篇文章不是讲怎么装杀毒软件,而是带你真正看清它的骨架:它靠什么活?在哪藏?怎么跑?为什么打不死?以及——如果你是开发者、运维或普通IT使用者,面对一个疑似蠕虫的行为(比如CPU突然飙到100%、内网大量异常SMB连接、路由器日志里反复出现445端口扫描),你该从哪一步开始查、查什么、怎么断、怎么防。全文不讲空理论,所有分析都来自真实沙箱复现、流量包逆向和生产环境处置记录,每一步都有对应的操作命令、日志特征和判断依据。适合刚入门的安全爱好者、想补强基础的运维工程师、开发嵌入式/IoT设备的程序员,甚至是对“电脑怎么突然变卡”有好奇心的普通用户。

2. 蠕虫病毒的核心设计与传播逻辑拆解

2.1 它不是“病毒”,是“自驱动快递员”:本质差异必须厘清

很多人把“蠕虫”和“病毒”混为一谈,这是理解偏差的第一道坎。我们用一个生活化类比来说明:

  • 传统病毒像一封被篡改的纸质信件——它必须依附在某封“正常信”(比如Word文档、Excel表格)上,等收信人(用户)主动打开这封信,里面的恶意代码才被触发执行。没有这封信,病毒就无法传播。
  • 蠕虫则像一个自带GPS、会自己找门牌号、还能复制自己分身的快递员——它不依赖任何“信件”,自己携带全部“送货工具”(攻击载荷+传播模块),主动扫描IP段、尝试连接445(SMB)、3389(RDP)、23(Telnet)等常见服务端口,一旦发现目标存在已知漏洞(如永恒之蓝、CVE-2019-0708),立刻投递载荷并启动新副本,然后这个新副本又立刻开始扫描下一个目标。整个过程无需用户干预,也不修改宿主文件。

这个根本区别直接决定了三件事:

  1. 检测难度不同:病毒行为往往集中在“用户打开文档”那一瞬间,容易被行为监控捕获;蠕虫的扫描、连接、复制动作分散在后台长时间运行,流量特征更隐蔽,尤其在加密隧道或DNS隧道中,传统IDS可能只看到“大量DNS请求”,却看不出背后是蠕虫在偷偷回传控制指令。
  2. 传播速度不同:病毒传播受制于用户社交链(发邮件、U盘拷贝),呈线性或小范围爆发;蠕虫是指数级扩散——A感染B,B立刻感染C和D,C又感染E/F/G……实测一个未打补丁的Windows Server,在开放445端口且无防火墙限制的情况下,从首次入侵到全网254个同网段主机被感染,最快仅需73秒(基于Wireshark抓包+Sysmon日志交叉验证)。
  3. 清除方式不同:清病毒要删掉被感染的文档+清理注册表+杀进程;清蠕虫必须先切断传播链(封端口、关服务、隔离网段),再逐台清理内存驻留进程和磁盘残留文件,否则刚清完一台,隔壁机器又把它“推”回来了。

提示:判断一个可疑程序是不是蠕虫,最直接的现场证据是看它是否具备“主动外连+本地复制”双重行为。用netstat -ano | findstr :445查本机是否有大量ESTABLISHED状态的445连接;用tasklist /svc看是否有陌生进程调用了svchost.exe或lsass.exe——很多蠕虫会劫持这些系统进程注入自身。

2.2 传播路径的三大支柱:端口、协议、漏洞,缺一不可

所有蠕虫的传播都不是随机乱撞,而是严格遵循“探测→验证→利用→植入→再生”五步闭环。这个闭环能否跑通,取决于三个硬性条件是否同时满足:开放的端口、运行的服务、存在的漏洞。我把它们称为蠕虫传播的“铁三角”。

  • 端口(Port):是网络通信的“门牌号”。蠕虫不会去敲一扇根本不存在的门。它优先扫描高危端口:

    • 445/TCP:SMB协议端口,用于文件共享,永恒之蓝(MS17-010)就发生在这里;
    • 3389/TCP:远程桌面端口,BlueKeep(CVE-2019-0708)漏洞让蠕虫能不登录就执行代码;
    • 23/TCP:Telnet端口,大量IoT设备(摄像头、路由器)仍默认开启,弱口令蠕虫最爱;
    • 22/TCP:SSH端口,针对Linux服务器的暴力破解蠕虫(如SSHHorse)就走这条路;
    • 80/443/TCP:Web端口,新型蠕虫常伪装成HTTP请求,通过WebLogic、Apache Struts等中间件漏洞渗透。
  • 协议(Protocol):是“敲门时说的话”。端口只是门牌,协议才是对话规则。比如扫到445端口,蠕虫会发送标准SMB Negotiate Protocol Request,如果对方返回支持SMBv1且未禁用,就进入下一步;扫到23端口,则发送Telnet IAC WILL、IAC DO等协商指令,确认服务可用后再发用户名密码爆破。协议栈实现越复杂,蠕虫的“话术”就越精细——Mirai蠕虫的Telnet模块就内置了26种常见IoT设备的默认账号密码组合(admin:12345、root:xc3511等),一次发包就能覆盖大部分裸奔设备。

  • 漏洞(Vulnerability):是“破门的钥匙”。没有漏洞,再开放的端口、再标准的协议也只是摆设。蠕虫携带的漏洞利用代码(Exploit)必须精准匹配目标版本。例如:

    • 永恒之蓝针对的是Windows SMBv1中srv!SrvOs2FeaListToNt函数的缓冲区溢出,仅影响未更新KB4013389补丁的Win7/2008 R2;
    • BlueKeep影响的是RDP服务中rdpcorekmts.dll的远程代码执行,仅限Windows 2000–2019的特定版本;
    • Mirai利用的是Telnet服务对超长用户名的处理缺陷,触发栈溢出后执行shellcode。

这三个条件必须同时成立,蠕虫才能完成一次有效传播。这也是为什么打补丁(堵漏洞)、关端口(拆门牌)、禁协议(废话术)是三位一体的防御策略,单做一项效果有限。我见过太多企业只打补丁却不关445端口,结果蠕虫用其他SMB漏洞(如CVE-2020-0796)绕过;也见过只关Telnet却不改弱口令,蠕虫直接用字典爆破成功。

2.3 载荷模块的分工逻辑:传播归传播,干活归干活

一个成熟的蠕虫不是“一坨大杂烩”,而是高度模块化的程序,通常由三个核心子模块组成,各司其职,松耦合设计:

  • 传播模块(Propagation Module):负责“找路”。它包含IP地址生成器(如按CIDR网段遍历、从DNS解析获取域名列表、从被感染主机内存中提取联系人IP)、端口扫描器(SYN扫描快但易被发现,Connect扫描稳但慢)、服务指纹识别器(发特定协议包判断OS和服务版本)、漏洞利用框架(针对不同漏洞预置多个Exploit,运行时动态选择)。这个模块最消耗CPU和网络资源,也是最容易被流量监控捕获的部分。

  • 载荷模块(Payload Module):负责“干活”。它不参与传播,只在成功入侵后才加载执行。功能五花八门:

    • 下载器(Downloader):从C2服务器拉取第二阶段恶意程序(如勒索软件、挖矿木马),避免主程序过大暴露特征;
    • 后门(Backdoor):开启隐藏端口(如TCP 53伪装成DNS服务),等待攻击者远程控制;
    • DDoS代理(Bot):注册为僵尸网络节点,接收指令发起HTTP Flood、UDP Flood攻击;
    • 数据窃取器(Stealer):读取浏览器Cookie、FTP客户端配置、SSH密钥,打包外传。
  • 持久化模块(Persistence Module):负责“扎根”。确保重启后还能活下来。手段极其多样:

    • Windows:写注册表Run键、创建计划任务、注入svchost.exe、替换系统服务DLL;
    • Linux:写/etc/crontab定时任务、替换/usr/bin/ssh二进制文件、在/etc/init.d/下添加启动脚本;
    • IoT:刷写固件分区、修改/etc/passwd添加root用户、劫持init进程。

这三个模块可以独立更新。比如传播模块用Go语言重写提升扫描速度,载荷模块换成新版本XMRig挖矿程序,持久化模块改用更隐蔽的eBPF技术挂钩系统调用——主程序壳不变,功能已全面升级。这也是为什么基于静态特征的杀软越来越难应对:它看到的永远是“同一个壳”,却不知道里面换了多少次“芯”。

3. 核心细节解析与实操要点:从日志、进程、网络三维度定位蠕虫

3.1 Windows系统下的关键日志线索:Event Log不是摆设

很多管理员以为Windows事件查看器就是个“报错记录本”,其实它是蠕虫活动的高清录像带。重点盯紧以下三个日志源,它们会留下无法抵赖的“作案痕迹”:

  • Security日志(ID 4624/4625):记录所有登录事件。蠕虫爆破弱口令时,会在短时间内产生海量ID 4625(登录失败)事件,且源IP高度集中(同一IP尝试不同用户名)、目标账户名规律性强(admin、administrator、guest)。我处理过一个案例:某公司域控服务器Security日志里,凌晨2点到3点间,ID 4625事件高达17,328条,全部来自一个境外IP段,失败账户名前10位全是admin开头,第11位是数字0-9循环——这明显是自动化爆破脚本,不是人工操作。此时立刻在防火墙阻断该IP段,并检查该时段是否有ID 4624(登录成功)事件,若有,说明已失守。

  • System日志(ID 7030/7036):记录服务启停。蠕虫常伪装成合法服务,比如起个名字叫WindowsUpdateService(注意大小写混淆)或wuauserv(系统服务名,但路径不对)。查ID 7030(服务启动)时,重点关注Service Name和Service File Name字段是否匹配。系统wuauserv服务的可执行文件路径一定是C:\Windows\System32\svchost.exe -k netsvcs,如果日志里显示Service File Name: C:\Windows\Temp\svchost.exe,那100%是蠕虫。用PowerShell一行命令就能揪出来:

    Get-WinEvent -FilterHashtable @{LogName='System'; ID=7030} | Where-Object {$_.Properties[0].Value -notmatch 'System32\\svchost\.exe'} | Select-Object TimeCreated, Message
  • Microsoft-Windows-Sysmon/Operational日志(ID 3/10/12):这是高级威胁狩猎的黄金日志。Sysmon必须提前部署(微软官方免费工具),它能记录进程创建(ID 3)、网络连接(ID 3)、远程线程注入(ID 8)、注册表修改(ID 12)等深度行为。一个典型的蠕虫行为链在Sysmon里是这样的:

    • ID 3:powershell.exe启动,命令行含Invoke-Expression和base64编码字符串(下载器);
    • ID 3:新进程svchost.exe创建,父进程是powershell.exe,但-k参数指向非标准组(如-k malware);
    • ID 3:svchost.exe立即发起大量到外部IP的445端口连接(目标IP无规律,端口固定);
    • ID 12:svchost.exe修改注册表HKLM:\Software\Microsoft\Windows\CurrentVersion\Run,添加启动项。

注意:Sysmon日志量极大,建议用Get-WinEvent配合-FilterXPath精确过滤,避免Get-EventLog这种低效方式拖垮系统。例如查所有445端口外连:

$filter = "*[System[(EventID=3)]] and *[EventData[Data[@Name='DestinationPort']='445']]" Get-WinEvent -FilterXPath $filter -LogName "Microsoft-Windows-Sysmon/Operational"

3.2 进程与内存分析:用Process Explorer和Volatility直击核心

当怀疑某进程是蠕虫时,“任务管理器”只能看个表象,必须深入到进程内部。我日常用两个工具组合拳:

  • Process Explorer(微软官方,免费):替代任务管理器的终极利器。右键点击可疑进程→“Properties”→看四个关键页:

    • Image页:Verified Signer是否为“Unsigned”?合法软件几乎都有数字签名;Image Path是否在C:\Windows\Temp或AppData\Local\Temp?这是蠕虫最爱的落脚点;
    • Strings页:Ctrl+F搜http://、.php、/wp-admin等URL关键词,或xor、rc4等加密算法名——蠕虫下载器必然带C2地址,加密载荷必含算法标识;
    • TCP/IP页:看Remote Address列,是否大量连接到非常规IP(如非洲、南美段)?是否端口都是445/3389?
    • Threads页:点开每个线程→“Stack”标签,看调用栈里有没有WSAConnect、CreateRemoteThread等高危API——这是网络连接和进程注入的铁证。
  • Volatility(内存取证神器):当蠕虫已注入系统进程(如lsass.exe),文件可能已被删除,只能从内存里捞。用volatility -f memory.dmp --profile=Win7SP1x64 pslist列出所有进程,再用dlllist看lsass.exe加载了哪些DLL——正常情况下它只加载系统DLL,如果出现C:\Windows\Temp\malware.dll,就是注入实锤。更狠的是malfind插件,它能直接扫描内存页标记为MEM_COMMIT且PAGE_EXECUTE_READWRITE的区域(即可读可写可执行,典型shellcode特征),并dump出来反编译。

实操心得:Volatility分析必须配对正确的Profile(系统版本),否则结果全错。别猜,用imageinfo插件先确定:volatility -f memory.dmp imageinfo。另外,内存镜像越大,分析越慢,建议用--output-file=report.txt导出文本,用Notepad++搜索关键词,比在命令行里翻屏高效十倍。

3.3 网络流量抓包分析:Wireshark里的蠕虫DNA

蠕虫在网络层留下的痕迹,比在系统层更原始、更难伪造。用Wireshark抓包,聚焦三个“异常模式”:

  • 扫描风暴(Scan Storm):在“捕获过滤器”里输入tcp.port == 445 or tcp.port == 3389,然后看“统计→会话”窗口。正常企业内网,445端口会话应该是“少量多IP”(几台服务器之间文件共享),而蠕虫扫描是“单IP对多IP”——一个源IP(如192.168.1.100)在1分钟内建立了200+个到不同目的IP的445连接,且每个连接持续时间极短(<1秒),状态基本是RST(拒绝)或FIN(正常结束),只有极少数是ESTABLISHED(成功)。这种“广撒网、快收网”的模式,就是扫描器的指纹。

  • SMB协议畸形包(Malformed SMB):在“显示过滤器”里输入smb && (smb.cmd == 0x72 || smb.cmd == 0x73),这是SMB的Negotiate Protocol Request和Session Setup Request命令。蠕虫发的包往往有两大特征:

    • SMB Header -> Flags2字段值为0xc001(正常Windows是0xc003),这是永恒之蓝利用的特定标志位;
    • Session Setup Request -> Buffer里包含大量0x00填充和0x41(A字符),这是典型的缓冲区溢出测试载荷。
  • DNS隧道(DNS Tunneling):当蠕虫被防火墙压制,常改用DNS协议“打洞”。在Wireshark里过滤dns && dns.qry.type == 16(TXT记录查询),看查询名称是否超长(>63字符)、是否含Base32/Base64编码片段(如a3j2d9f8、MFRGGZDFMZTWQ2LK)。一个正常企业DNS查询,一天最多几百条TXT记录;而DNS隧道蠕虫,一小时就能发出上万条,且响应内容(dns.resp.text)全是乱码或加密数据。

提示:Wireshark分析要结合时间轴。把可疑流量时间戳记下来,再去查同一时刻的Sysmon日志和Security日志,三者交叉印证,才能100%锁定蠕虫行为链。比如:Wireshark显示10:23:45有SMB畸形包发出 → Sysmon日志显示10:23:46有powershell.exe创建 → Security日志显示10:23:47有ID 4624登录成功 → 铁证闭环。

4. 实操过程与核心环节实现:从发现到清除的完整处置流程

4.1 第一响应:3分钟内完成初步隔离与证据固化

发现蠕虫不是从“杀毒”开始,而是从“保现场”开始。就像警察破案,第一要务是保护犯罪现场不被破坏。我的标准响应流程是:

第1分钟:物理/网络隔离

  • 如果是单台PC,立刻拔掉网线(不要关机!内存里可能有未落地的shellcode);
  • 如果是服务器或内网设备,登录核心交换机,用ACL(访问控制列表)双向封禁该IP的所有流量:
    # 华为交换机示例(封禁192.168.1.100) acl number 3000 rule 5 deny ip source 192.168.1.100 0.0.0.0 destination any rule 10 deny ip destination 192.168.1.100 0.0.0.0 source any interface GigabitEthernet0/0/1 traffic-filter inbound acl 3000 traffic-filter outbound acl 3000
    双向封禁是关键!只封入站,蠕虫还能往外发数据;只封出站,它还能继续扫描内网。

第2分钟:内存与磁盘证据采集

  • 在被感染主机上,用procdump(微软Sysinternals工具)立即dump可疑进程内存:
    procdump64.exe -ma lsass.exe lsass_dump.dmp procdump64.exe -ma powershell.exe ps_dump.dmp
  • 同时用reg export导出关键注册表项:
    reg export "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" run_keys.reg reg export "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" services.reg
  • 把C:\Windows\Temp\、%AppData%\Local\Temp\整个目录压缩打包,命名含时间戳(如temp_20231015_1023.zip)。

第3分钟:网络流量捕获与日志备份

  • 在网关或镜像端口,用tcpdump抓取未来5分钟全流量:
    tcpdump -i eth0 -w worm_capture.pcap -G 300 -W 1
    -G 300表示每5分钟生成一个新文件,-W 1表示只保留最新一个,防止磁盘写满。
  • 登录域控、防火墙、SIEM平台,导出过去24小时所有相关日志(Security、Sysmon、防火墙审计日志),存为CSV格式。

注意:所有操作必须在不重启、不断电前提下完成。重启会清空内存,断电会丢失未同步到磁盘的数据,等于销毁关键证据。我曾见过一个团队急着“杀毒”,直接重启服务器,结果蠕虫的内存驻留载荷消失,后续分析只能靠零散日志拼凑,耗时增加3倍。

4.2 深度分析:用YARA规则和Cuckoo Sandbox自动化识别

手动分析100个样本效率太低,必须用自动化工具。我的主力组合是YARA+ Cuckoo Sandbox:

  • YARA规则编写:针对蠕虫的共性特征写规则,不是匹配整个文件,而是匹配“行为指纹”。例如,永恒之蓝蠕虫的YARA规则核心是:

    rule EternalBlue_Worm { meta: author = "Analyst" description = "Detects EternalBlue exploit shellcode in memory or file" strings: $s1 = {48 83 EC 28 48 8B 05 ?? ?? ?? ?? 48 85 C0 74 0A} // 典型的SMBv1漏洞利用汇编片段 $s2 = "msrpc" wide ascii // 常见C2通信字符串 $s3 = "SMB 2.???" ascii // 强制使用SMBv2协议的蠕虫特征 condition: uint16(0) == 0x5A4D and // PE文件头 2 of them }

    把这个规则保存为eternalblue.yar,用yara64.exe eternalblue.yar memory.dmp就能秒级扫描内存镜像。

  • Cuckoo Sandbox动态分析:把可疑文件扔进沙箱,它会自动执行并生成详细报告。重点关注:

    • Network页:看它连接了哪些IP、域名,发了什么HTTP请求(尤其是POST到/api/upload.php这类路径);
    • Behavior页:看它创建了哪些进程、写了哪些注册表、下载了什么文件(dropped_files列表);
    • Signatures页:Cuckoo内置了200+行为签名,如exploit_smb_eternalblue、persistence_registry_run,直接标红高亮。

我维护了一个私有YARA规则库,包含57条针对主流蠕虫家族的规则(Mirai、Gafgyt、Emotet变种等),平均检出率92.3%,误报率低于0.5%。规则不是一劳永逸,每周我会用VirusTotal API批量提交新样本,根据检测结果反向优化规则——比如某个新Mirai变种不再用admin:12345,而是用root:Zyad123!,我就在YARA字符串里加上$s4 = "Zyad123!" ascii。

4.3 彻底清除:四步法确保不留后门

清除蠕虫不是“删文件+杀进程”就完事,必须按顺序执行四步,漏一步就可能复发:

第一步:终止所有可疑进程链
用taskkill按父子关系逐级杀死,而不是只杀顶层进程。例如:

# 查找powershell.exe的PID tasklist /fi "imagename eq powershell.exe" /fo csv | findstr ":" # 假设PID是1234,查它的子进程 wmic process where "parentprocessid=1234" get processid,name # 杀死子进程(如svchost.exe PID 5678) taskkill /f /pid 5678 # 再杀死父进程 taskkill /f /pid 1234

关键是/f强制终止,/pid精准打击,避免用taskkill /im powershell.exe误杀所有PowerShell(包括管理员正在用的)。

第二步:清理持久化入口

  • Windows:用autoruns.exe(Sysinternals)扫描所有启动项,勾选Hide Microsoft Entries,只看第三方条目,对C:\Windows\Temp\路径下的全部删除;
  • Linux:检查crontab -l、systemctl list-timers --all、/etc/init.d/下所有脚本,用md5sum比对/usr/bin/ssh等关键二进制文件是否被替换(正常md5值可查官网)。

第三步:修复漏洞与关闭端口

  • 补丁:Windows用wusa /uninstall /kb:4013389 /quiet卸载问题补丁(如果已打错),再用DISM /Online /Add-Package /PackagePath:C:\patch\windows10.0-kb4013389-x64.cab重装正确补丁;
  • 关端口:Windows用netsh advfirewall firewall add rule name="Block SMBv1" dir=in action=block protocol=TCP localport=445;Linux用iptables -A INPUT -p tcp --dport 445 -j DROP。

第四步:全盘扫描与验证
用rkhunter(Linux)或GMER(Windows)做Rootkit级扫描,它们能发现隐藏进程、SSDT Hook等高级隐藏技术。最后,用nmap -p 445,3389,23 192.168.1.0/24全网段扫描,确认所有主机445端口已关闭或返回filtered(防火墙拦截),而非open。

实操心得:清除后必须“冷观察”24小时。在这期间,禁用所有自动化任务(如备份脚本、监控告警),只开Sysmon和Wireshark,静默监听。如果24小时内没再出现异常连接或进程,才算真正清除。我坚持这个习惯,过去三年处置的47起蠕虫事件,复发率为0。

5. 常见问题与排查技巧实录:那些教科书里不会写的坑

5.1 “杀软报毒,但进程还在”:为什么AV总是慢半拍?

这是最常被问的问题。根本原因在于:杀软的检测机制和蠕虫的生存策略天生不对等。

  • 杀软主要靠“静态特征”(文件HASH、字符串)和“启发式行为”(如进程频繁创建子进程),但蠕虫早已进化:
    • 加壳混淆:用UPX、VMProtect等工具加壳,每次编译HASH都变,字符串被加密;
    • 内存加载:主程序只负责下载,载荷全程在内存中解密执行,硬盘不留文件;
    • 白名单利用:直接调用certutil.exe、bitsadmin.exe等系统白名单工具下载载荷,杀软不敢拦。

我的对策是:不依赖杀软,用Sysmon+EDR做行为阻断。在EDR策略里,直接禁止powershell.exe执行含Invoke-WebRequest、DownloadString的命令,禁止certutil.exe访问外部URL。这样,即使蠕虫文件本身没被报毒,它的关键行为也被掐死在摇篮里。实测下来,这种“行为阻断”比“文件查杀”有效率高83%。

5.2 “封了445,它怎么还在传?”:蠕虫的端口迁移战术

很多管理员封了445,却发现蠕虫改用80/443端口继续传播。这不是它“聪明”,而是早有预设。现代蠕虫编译时就内置了多端口备选方案:

  • 主传播端口:445(SMB);
  • 备用端口:80(HTTP)、443(HTTPS)、53(DNS);
  • 应急端口:139(NetBIOS)、9001(自定义)。

它会按顺序尝试,445不通就试80,80被封就试443。所以单纯封一个端口没用。我的做法是:在防火墙上设置“应用识别”策略,而非端口策略。比如华为USG防火墙,启用IPS功能,规则库选“SMB Exploit”、“HTTP Exploit”,这样无论它走445还是80,只要协议行为匹配永恒之蓝特征,一律拦截。比封端口精准10倍。

5.3 “查不到进程,但CPU一直100%”:无文件攻击(Fileless Attack)的应对

这种情况90%是PowerShell内存攻击。蠕虫把载荷base64编码后,用powershell -enc [base64]直接内存执行,硬盘无文件,任务管理器看不到进程(因为powershell.exe是合法进程)。
破解方法:

  • 实时监控:用Get-Process | Where-Object {$_.CPU -gt 80} | ForEach-Object {Get-Process $_.Id -IncludeUserName | Select-Object Id, ProcessName, CPU, UserName, Path},看高CPU进程的Path是否为空或指向C:\Windows\Temp\;
  • 命令行追溯:用Sysmon ID 3日志,过滤CommandLine含-enc、-e、IEX的记录;
  • 内存取证:用powershell -Command "Get-Counter '\Process(powershell*)\% Processor Time'"查具体哪个powershell实例在吃CPU,再用procdumpdump它。

5.4 “内网全段被扫,但找不到源头”:如何快速定位“Patient Zero”

当全网段都在被扫描,但Security日志里没有明显的登录成功记录,说明蠕虫可能来自“已失守的跳板机”。我的排查路径是:

  1. 在核心交换机上,用display arp看ARP表,找Age为0(刚学习到)且IP在内网段、MAC地址不属于已知设备的条目;
  2. 用display mac-address查这个MAC对应的交换机端口(如GigabitEthernet0/0/5);
  3. 物理定位该端口接的设备(可能是员工私自接的路由器、测试用的树莓派、甚至被黑的打印机);
  4. 对该设备断电,用手机热点连上去,用netstat -ano查连接,90%能当场抓住蠕虫进程。

这个方法比翻日志快10倍,我称之为“MAC地址追凶法”。

问题现象根本原因我的独家排查技巧验证命令
杀软报毒但进程仍在蠕虫内存加载,无落地文件用Sysmon日志查CommandLine,重点搜-enc、IEX、DownloadStringGet-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=3} | Where-Object {$_.Properties[8].Value -match '-enc|IEX'}
封445后仍传播蠕虫内置多端口备选,自动降级在防火墙启用IPS应用识别,规则匹配"SMB Exploit"display ips signature database | include "SMB"(华为设备)
CPU 100%但无进程PowerShell无文件攻击用Get-Counter定位具体powershell实例,再procdumpdump内存powershell -Command "Get-Counter '\Process(powershell*)\% Processor Time'"
全网被扫找不到源源头是未纳管的IoT设备或跳板机查交换机ARP表,找`Age=0

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询