运行 23 年的 P2P 僵尸网络 Sality 遭协同瓦解:没有中心节点也能被干掉?

· 2026-09-02 16:13 · 2 阅读

原创 威胁情报中心 2026-09-02 16:13 北京

Sality 于 2003 年首次被发现,在互联网上持续活跃了二十多年,称得上是恶意软件界的"活化石"。此次瓦解行动通过 P2P 沉洞隔离了全球超过 15,000 台受感染主机,让幕后的运营者彻底失去了对自己"家业"的控制权。

僵尸网络

运行 23 年的 P2P 僵尸网络 Sality 遭协同瓦解:没有中心节点也能被干掉?

Sality 于 2003 年首次被发现,在互联网上持续活跃了二十多年,称得上是恶意软件界的"活化石"。此次瓦解行动通过 P2P 沉洞(sinkholing)隔离了全球超过 15,000 台受感染主机,让幕后的运营者彻底失去了对自己"家业"的控制权。

· 僵尸网络 · P2P sinkholing · 2026-09-02

2026 年 8 月 31 日,CrowdStrike 联合多国执法机构、Shadowserver 基金会,完成对运行 20 余年的 Sality P2P 僵尸网络协同瓦解行动。本次行动证明长期被认为难以根除的 P2P 无中心僵尸网络,依然可以通过协议层面的技术手段实现大规模隔离。本文梳理 Sality 二十余年演变,拆解 P2P 僵尸网络被瓦解的底层原理,并提供企业可直接使用的检测指标。

01 二十三年的进化史:从文件病毒到"自动化犯罪平台"

Sality 是一款针对 Windows 系统的文件感染型病毒(File Infector),主要感染 .EXE 和 .SCR 可执行文件。它最早现身于 2003 年——那是一个 Windows XP 才刚刚普及的年代。

回顾它的演进路线,大致可以分为几个阶段:

  • 2003 年:初代 Sality 以传统的文件感染方式传播,附带键盘记录、窃取注册表存储的密码和拨号上网配置等功能,窃得的数据通过电子邮件回传给攻击者。

  • 2008 年前后:引入 P2P 算法,早期的 1 号、2 号测试网络很快消亡,但验证了去中心化控制的可行性。

  • 2009—2010 年:3 号网络(V3,2009 年)和 4 号网络(V4,2010 年)相继建立,成为此后十几年间的主力。同一时期,部分变种开始集成 Rootkit 能力。

  • 2017—2018 年起:运营者逐渐放弃传统的垃圾邮件、代理服务等载荷,将重心转向加密货币窃取与挖矿,搭上了"币圈"的快车。

直到被瓦解前,V3 和 V4 两个独立的 P2P 网络仍在同时运作。两者共用同一套代码库、由同一名威胁行为者(CrowdStrike 内部追踪代号为 SALTY SPIDER)运营,但使用互不兼容的协议版本和不同的加密密钥,相当于同一个老板开的两家互不相通的"分公司"。

图 | Sality 全球感染主机地理位置分布(图源:CrowdStrike )

图 | Sality 二十三年演进时间线(2003—2026)(据 CrowdStrike 披露信息及 Symantec、Botconf 2015 等公开技术资料整理自绘)

02 它凭什么活了二十多年?

在众多昙花一现的僵尸网络中,Sality 的长寿并非因为载荷多么先进,而是赢在架构。其韧性来自两个相互叠加的设计。

2.1 没有"司令部"的 P2P 架构

传统僵尸网络依赖集中式的命令与控制(C2)服务器,执法机构只要查封域名、拔掉服务器,整个网络就会瘫痪。Sality 则完全不同:受感染主机之间直接通信,组成一个自我维持的网络,任务指令在节点之间接力传递,不存在单点故障。

更进一步,Sality 网络中分发的所有指令和文件都经过运营者的数字签名验证,这使得外人很难伪造命令来接管网络。技术上看,其 P2P 通信基于自定义的 UDP 协议、采用 RC4 加密,通信端口根据计算机名伪随机生成;其中一部分公网可达的受感染主机充当"超级节点"(Super Peer),构成整个网络的通信骨干。

2.2 自我再生的文件感染传播

Sality 同时是一款多态(Polymorphic)文件感染病毒:它附着在受感染系统的可执行文件上,借助网络共享、可移动存储设备和文件共享持续扩散。这意味着感染会不断"自然再生",运营者不需要钓鱼邮件、不需要漏洞利用工具包,几乎零运营成本就能维持网络规模。

这种"文件感染 + P2P 组网"的组合拳,让 Sality 在二十多年的时间里扛住了无数轮清理行动。

图 | Sality P2P 网络架构与任务分发机制(据 CrowdStrike 披露信息及 Symantec 技术分析整理自绘)

03 闷声发财:低调的变现之道

有趣的是,Sality 自身的技术能力其实非常单一——它唯一的"特长"就是向受感染机器下发额外载荷。但围绕这一能力,运营者构建了多样化的收入管道。历史上通过 Sality 分发的恶意软件家族横跨凭据窃取、垃圾邮件、代理服务、网络攻击和 DDoS 等多个领域。

3.1 剪贴板里的"提款机"

过去八年,Sality 的主力载荷是一个名为 EggJagger 的剪贴板劫持(Clipjacking)工具。它会监控受害者的剪贴板,一旦发现加密货币钱包地址,就悄无声息地替换为运营者控制的地址——当受害者复制比特币或以太坊地址准备转账时,资金便被神不知鬼不觉地转进了攻击者的口袋。

据 CrowdStrike 估算,仅凭这一招,运营者至少窃取了 1,210 万卢布(约合 15 万美元)的加密货币;其从未动用的钱包组合价值在 2025 年 1 月一度达到约 1.47 亿卢布的峰值。对于一套"自己跑起来"的基础设施来说,这笔收入足以支撑一名犯罪者以极低的开销长期运营。需要说明的是,这一估算仅覆盖 EggJagger 载荷家族,其他载荷还贡献着额外的收入。

图 | EggJagger 载荷窃取加密货币的金额变化曲线(图源:CrowdStrike)

图 | EggJagger 剪贴板劫持的资金流转过程(据 CrowdStrike 披露信息整理自绘)

3.2 偶尔"掀桌子":三次耐人寻味的 DDoS

Sality 的运营以牟利为主,但历史上三次值得注意的 DDoS 行动表明,这位运营者并不介意在"个人或政治目的"的驱动下临时武器化手中的僵尸网络:

  • 2016 年 4 月,阿拉伯语金融论坛:一个早期 DDoS 载荷瞄准了报道自然资源贸易公司的阿拉伯语网站 forex2030[.]com,并成功使其瘫痪。动机至今不明,可能是敲诈勒索,也可能是为了压制关于某上市公司的不利信息。

  • 2022 年 2 月,乌克兰论坛:就在俄乌冲突全面爆发的第二天(2 月 25 日),Sality 分发 DDoS 载荷攻击乌克兰网络论坛 kharkovforum[.]com——该论坛上有一个讨论哈尔科夫实时战况的帖子。载荷产生海量 HTTP 流量压垮论坛,显然意在压制对战争的讨论,其动机很可能带有"爱国"色彩。

  • 2023 年 9 月,俄罗斯加密货币交易所:一个 DDoS 载荷瞄准了俄罗斯加密货币交易平台 AvanChange。耐人寻味的是,该载荷在编译完成仅数秒后就被上传到分发设施,更像是一次因个人纠纷(或许是交易或账户问题)引发的冲动报复——运营者很可能正是利用这类交易所将窃取的加密货币兑换成法币。

04 瓦解行动:以子之矛,攻子之盾

此次行动的核心思路,用一句话概括就是:让 Sality 自己的架构反过来埋葬它自己

4.1 两个无法弥补的"先天缺陷"

CrowdStrike 的研究人员抓住了 Sality 架构中两个致命的结构性弱点:

第一,协议无法打补丁。常规恶意软件可以从 C2 服务器接收代码更新,但 Sality 的传播机制是文件感染——它必须附着在磁盘上的可执行文件来扩散。如果运营者想发布一个修复协议缺陷的新变种,新变种就得与老变种争夺同一批宿主文件,结果不是升级,而是把僵尸网络撕成碎片。换句话说,今天的 Sality 所表现出的协议行为,和二十年前一模一样,协议里的每一个弱点都是永久性的。

第二,网络对成员来者不拒。Sality 的节点无条件信任网络:任何一台公网可达、能正确回应 P2P 握手的机器,都会被接纳为合法节点。没有身份认证,没有密码学标识,没有白名单——唯一的要求是"在线"。这意味着任何人都可以作为正式成员加入网络,与真正的受感染机器毫无区别。

这两个特性叠加在一起就是死局:协议无法加固以抵御攻击,网络也无法将一个"说着同样语言"的主动防御者拒之门外。

4.2 动手:操纵节点列表

行动的实际切入点,是每台 Sality 节点赖以感知网络的核心数据结构——节点列表(Peer List)

每个 Sality 节点都维护着一份有限的已知超级节点列表,并且每 40 分钟验证一次列表中的节点是否仍然在线:应答的节点积累"信誉值",不应答的节点信誉值下降并最终被清除。瓦解行动正是利用了这套维护机制:

1清除合法节点:在节点验证环节进行协议层面的操纵,使每个节点列表中的合法超级节点条目被逐一作废,逐步将受感染主机与运营者的网络隔离;

2注入沉洞条目:向被清空的节点列表中注入专门搭建的沉洞节点,从而获得对行动进展的可视性,并支撑感染追踪与受害者通知。

行动优先打击超级节点——它们是网络的通信骨干。超级节点一旦被隔离,URL 包(载荷下载指令)和文件包(直接的载荷传输)就都停止了传播。而对于数量庞大、藏在防火墙或 NAT 之后无法直接触达的普通节点,行动方采取了更被动的策略:等这些节点在常规维护周期中主动联系沉洞节点时,再清空其节点列表,使其被永久孤立。

从运营者的视角看,受感染机器就这样一台接一台地"凭空消失"了。

这套手法与 2014 年瓦解 GameOver Zeus、2017 年瓦解 Kelihos 僵尸网络时使用的"节点列表操纵"技术一脉相承,此次针对 Sality 特有的协议行为做了适配。

图 | Sality 瓦解行动全流程:两大结构性缺陷 → 六步实施 → 行动结果(据 CrowdStrike 披露信息整理自绘)

4.3 双管齐下:载荷 URL 同步下架

在 P2P 沉洞行动进行的同时,行动方还与国际执法机构协作,下架了当时正在托管 Sality 载荷的 URL。这些 URL 通过 URL 包分发,指向被入侵的或由运营者维护的 Web 服务器上的文件。切断下载渠道,可以确保仍持有活跃 URL 包的节点在行动过渡期也无法获取新的载荷。

至此,Sality 背后的运营者彻底失去了与受感染机器通信的能力:所有节点被隔离于其控制之外,僵尸网络无法再接收任何新任务。

05 行动之后:防御者该做什么

需要提醒的是,瓦解控制不等于清除感染。此次行动阻断了新载荷抵达受感染机器,但这些机器上已安装的既有恶意软件仍处于活跃状态,仍需清除。

CrowdStrike 建议各组织采取以下措施:

  • 排查网络日志与终端遥测:所有 Sality 感染机器现在都会向行动方运营的沉洞发出信标。检查是否存在发往"灯塔"IP 188.166.101[.]148 的 UDP 流量,任何命中都意味着存在需要处置的 Sality 感染;

  • 监控载荷 URL:对本文技术附录中列出的最后一批 URL 包的任何访问尝试,均表明存在感染;

  • 内存扫描:使用官方提供的 YARA 规则扫描运行中的进程,通过检测僵尸网络硬编码的 RSA 公钥(用于验证载荷签名)来发现活跃感染。

06 结语:没有真正"打不死"的架构

Sality 的倒下传递了一个重要信号:长期以来被视为"反瓦解护盾"的 P2P 架构,并非不可战胜。只要有足够的技术投入、对协议行为的精确理解,以及执法机构与产业伙伴的协同,再顽固的犯罪基础设施也可以被拆除。

这个案例还有一层耐人寻味的启示:让 Sality 屹立二十多年的设计,恰恰也是它无法修复自身缺陷的原因。一个永远停留在 2008 年协议水平的系统,注定要在 2026 年面对积累了二十年研究理解的对手。安全攻防的时间复利,最终站在了防御者一边。

这一案例也印证行业观点:威胁检测只能拿到情报,主动瓦解行动才可以直接削弱攻击者基础设施。

07 技术附录

附录 A:MITRE ATT&CK 技术映射

战术(Tactic)

技术 ID

技术名称

说明

初始访问 / 横向移动

T1091

Replication Through Removable Media

通过感染可移动存储设备上的可执行文件并配合 autorun 机制传播

横向移动

T1080

Taint Shared Content

感染网络共享目录中的可执行文件实现扩散

执行

T1204

User Execution

受害者执行被感染的宿主程序后触发病毒代码

持久化

T1547.001

Boot or Logon Autostart Execution

通过注册表自启动项、启动目录实现持久化

防御规避

T1027

Obfuscated Files or Information

多态变形引擎与入口点模糊(EPO)技术,每次感染产生不同代码特征

防御规避

T1055

Process Injection

向其他运行中进程(排除系统关键进程)进行远程线程注入

防御规避

T1562.001

Impair Defenses

终止安全软件进程、删除/破坏杀毒软件文件、屏蔽安全厂商网站访问、删除 SafeBoot 注册表项以阻止进入安全模式

防御规避

T1014

Rootkit

2010 年后的部分变种集成 Rootkit 能力以隐藏自身

防御规避 / 发现 / 权限维持

T1112

Modify Registry

修改防火墙策略、安全中心提示、隐藏文件设置等注册表项

命令与控制

T1095

Non-Application Layer Protocol

基于自定义 UDP 协议(RC4 加密)的 P2P 通信,端口由计算机名伪随机生成

命令与控制

T1090

Proxy

分发代理服务载荷,将受感染主机用作流量中转

命令与控制

T1105

Ingress Tool Transfer

通过 URL 包 / 文件包下载并执行额外载荷

收集

T1115

Clipboard Data

EggJagger 载荷监控剪贴板并替换加密货币钱包地址(Clipjacking)

收集

T1056.001

Input Capture: Keylogging

早期变种具备键盘记录能力

影响

T1498

Network Denial of Service

多次分发 DDoS 载荷实施定向攻击(2016、2022、2023)

附录 B:失陷指标(IoC)

沉洞"灯塔"IP(检测发往该地址的 UDP 流量):

188.166.101[.]148

瓦解前最后分发的 URL 包(任何访问尝试均表明感染):

Sality V3 URL 包(版本 25202):

http[:]//theunforgiven.p8[.]hu/img/top.gif

http[:]//painelwebradiodigital.awardspace[.]info/v3/readme.pdf

http[:]//sgwebdesigner.free[.]fr/left.gif

http[:]//www.yonelco[.]com/icon.png

http[:]//pozdravizbeograda[.]com/readme.pdf

http[:]//highclass.atspace[.]com/styles.gif

http[:]//situluimihai.3x[.]ro/top.png

Sality V4 URL 包(版本 31010):

http[:]//gatheredovertime[.]com/nb4

http[:]//imagebucket[.]biz/nv4

附录 C:YARA 内存扫描规则

以下规则通过扫描运行进程中的僵尸网络硬编码 RSA 公钥(用于验证载荷签名)来检测活跃的 Sality 感染。

Sality V3:

rule CrowdStrike_Salityv3_01 : p2p sality version3

{

meta:

copyright = "(c) 2026 CrowdStrike Inc."

description = "Sality Version 3"

version = "202608181745"

last_modified = "2026-08-18"

actor = "SALTY SPIDER"

malware_family = "Sality"

strings:

$ = "IPFILTERDRIVER"

$ = {

99 65 40 34 cd ae 9d b3 af f5 82 ad 8c 2e 63 51

e1 34 53 fa 47 54 e4 70 97 4c a5 3d 3c a3 9b 57

29 02 49 89 46 4c f2 76 b1 ad 8e 79 5d b2 41 28

4f 2a a5 9a 13 18 c0 1d ed da e4 52 98 16 7f b3

a9 d7 7a e4 c4 6f 51 f6 38 fe a6 fb ad 8c 64 1d

23 b5 a4 9d 40 20 74 61 be 81 c3 eb 3d 24 01 75

13 07 58 c5 f0 56 09 94 58 e7 6b c3 f3 8c 70 73

4e f5 0b 2d 88 0b 9a bd 18 e4 36 72 26 1a 32 9b

}

condition:

all of them

}

Sality V4:

rule CrowdStrike_Salityv4_01 : p2p sality version4

{

meta:

copyright = "(c) 2026 CrowdStrike Inc."

description = "Sality Version 4"

version = "202608181745"

last_modified = "2026-08-18"

actor = "SALTY SPIDER"

malware_family = "Sality"

strings:

$ = "IPFILTERDRIVER"

$ = {

        bb d2 96 8e ed 0b 93 8a 82 e4 e9 bc c3 c5 32 72

4c 08 aa 56 9f 2d 64 0f 1b 86 68 0e 2b 62 e9 c6

35 6d 75 b6 32 2d 4f a8 b8 d9 2a 44 8b f0 7f e0

d9 8e be 66 9d a6 7a 9a 6d e1 45 f1 d3 48 01 0d

39 2e 9d 2a 45 fb 0b fb 1d 96 f3 b7 4f 55 e5 e1

16 5b f7 a1 cc 7c 87 c0 c8 9c ef 4e ce 29 58 e2

99 bd 8a 7a 55 be b4 1c d9 79 52 25 d8 28 86 7b

81 39 98 5f 2c 6f 14 bb a5 6b ce 44 e5 91 93 38

8b 9a c1 74 46 84 e1 26 ec 04 94 96 75 09 e3 b5

88 d6 08 f0 4a b7 84 d3 13 2f 00 cc d5 2a 8c 17

07 09 de 6f b0 d3 d6 2b c6 a6 9d 38 18 8c 74 9d

86 16 d5 48 6e 97 32 db e1 4e f8 04 a6 00 7c 16

2e 70 1c 23 37 dd 5a 52 76 62 70 d4 86 66 6e df

0c e9 a1 68 f9 5e e8 dd 09 0c 02 7d 35 d0 54 e7

00 c0 14 9f ce 4a 9f f3 99 50 1a 0b cd cc ff 05

b9 04 12 e2 11 76 2f ff a4 6e 64 18 e0 d0 7b 3b

}

condition:

all of them

}

08 参考链接

  1. https://crowdstrike.com/en-us/blog/inside-sality-botnet-disruption-operation

  2. https://aroundcyber.wordpress.com/wp-content/uploads/2012/11/sality_peer_to_peer_viral_network.pdf

  3. https://www.botconf.eu/wp-content/uploads/formidable/2/OK-P18-Kleissner-Sality.pdf

  4. https://malpedia.caad.fkie.fraunhofer.de/actor/salty_spider

  5. https://malpedia.caad.fkie.fraunhofer.de/details/win.sality

  6. https://www.welivesecurity.com/2014/04/02/win32sality-newest-component-a-routers-primary-dns-changer-named-win32rbrute/

  7. https://www.freebuf.com/articles/218404.html

  8. https://www.shadowserver.org/what-we-do/network-reporting/drone-botnet-drone-report/

阅读原文

跳转微信打开