威胁情报|DarkSword 木马后台及 iOS 攻击链分析

DarkSword 攻击套件被用于窃密,iPhone 钱包面临风险。

文章作者、来源:慢雾科技 SlowMist

背景

2026 年 3 月 18 日,Google Threat Intelligence Group 发布报告《The Proliferation of DarkSword: iOS Exploit Chain Adopted by Multiple Threat Actors》,主题为 DarkSword 利用链在多个攻击团伙之间的扩散。

这条链针对运行 iOS 18.4 至 18.6.2 的 iPhone,用 Safari 打开特定页面就会触发,最后偷走文件、钥匙串和键盘输入,主要盯着三款加密货币钱包应用。整条链由六个 CVE 组成,其中三个在被观察时仍属在野 0day。

报告发布前后,这条链的一部分代码已经出现在公开渠道。2026 年 3 月 6 日,Coruna 的样本、二进制与解码载荷被整理发布至 GitHub;3 月 21 日至 24 日,五个与 DarkSword 相关的仓库先后建立,将整条链还原为可读源码。3 月 25 日,慢雾首席信息安全官 @im23pds 在 X 上提示 DarkSword 攻击工具已泄露,攻击者可通过 HTTP 接口从 iOS 设备提取并回传取证级数据,并可能结合社工或水坑攻击诱导目标访问植入恶意代码的页面。四天后,社区出现针对该链的加固插件。socket.dev 同期披露的恶意 Packagist 主题使用了同一套利用链,所涉 CVE 与 DarkSword 重叠。

2026 年 7 月 19 日,GitHub 上出现仓库 DarkSword-PROV2。仓库里已经不是研究性质的复刻,而是一套能直接部署的完整运营包:利用链、载荷投递服务端、管理后台、数据库和说明文档都在里面。

2026 年 9 月下旬,该套件被部署上线,投放范围并不限于这一条链:投递入口接受 iOS 13.0 之后的设备,载荷库收录一千余条记录,版本号最远至 26.6.1。它声称支持的版本,和实际能打穿的版本,并不是一回事。

先说明一下几个名字分别指什么。DarkSword 指这条 iOS 利用链本身;Coruna 指覆盖 iOS 13 至 17 的另一条链;DK 与 DK10 是两代面板的名称,其后台在源码中的标题是 DarkSword Admin API;产品源码中另出现过 IOS-Manager 与 K10-PROD 两个名字;ueyes 是 18+ 链在源码中的内部代号。

这条链从公开到落地的时间线如下:

同一时期还有另一起案件。2026 年 9 月,慢雾威胁情报发现 iOS 应用 FomoPeek 的 1.1 与 1.2 版本被发现植入内核利用模块(详见:威胁情报|FomoPeek App Store 投毒与 iOS 内核利用分析),通过 App Store 官方渠道分发,风险窗口为 9 月 9 日至 17 日。更早的公开分析还提到,外卖应用 ComeCome 2.9.3 内置了一个名为 DKStatistics 的隐藏组件,同样具备逃逸沙箱读取钱包、备忘录与 WhatsApp 的能力。DKStatistics 的命名与前述两代面板代号重合,能力集也接近。

MistEye 响应

MistEye 是由 SlowMist 自主研发的 Web3 威胁情报与动态安全监控系统,集成了安全监控与情报聚合能力,为用户提供实时的风险预警与资产守护。

MistEye 已第一时间通过情报推送与客户告警通道同步风险。

一、暴露的攻击基础设施

103[.]*[.]*[.]71:7001 与 160[.]**[.]**[.]27:7001 的登录页标题均为"管理后台"。前端为 Vite 打包的单页应用,后端为 uvicorn,即 Python 的 FastAPI。前者同时开放 22、80、443、7001、8080 五个端口。

同一批设施还包括 ios-app[.]addlabelorg[.]com/console/,其前端主包与 160[.]**[.]**[.]27:7001 上的版本逐字节相同(SHA-256 一致)。ad[.]playios[.]net 上是另一代产品,标题为"管理后台",技术栈为 UmiJS 与 Ant Design Pro。

投放侧还有主题各异的诱饵站。877k[.]org 伪装成名为"AI 股票分析器"的工具;8ll[.]im 则伪装成高端腕表回收服务,页面文案包含劳力士、百达翡丽、爱彼、理查德米勒等品牌与"免费估价、最高报价 45,500 美元"的话术。后者在页面中直接引入投递用的 SDK 与利用链入口,访客打开即触发,无需点击。

承担投递功能的是 3kxw2pjsb5hgq24t5qb[.]cc,该域名托管落地页 SDK,并在根路径承接整条 18+ 利用链;另有 310ijpo06dd-ijsxcfu[.]org 作为载荷回传域。经 Cloudflare DoH 查询,3kxw2pjsb5hgq24t5qb[.]cc、310ijpo06dd-ijsxcfu[.]org 与前面提到的 ad[.]playios[.]net 都解析到同一台服务器 192[.]*[.]*[.]227。

这台服务器不是新开的。微步在线对其历史解析记录的反查显示,2025 年 11 月 15 日就有 z[.]1688ac[.]cc、d[.]guonal[.]fit 等五个域名指向该 IP,目前均已失效。服务器至少已运营十一个月,本次更换的是 campaign 域名,而非新建基础设施。同一 IP 上还有十余枚域名组成分发集群,2026 年 8 月中下旬集中注册,后缀和注册商都不统一,其中两枚是主域名的字节级镜像。自 10 月 8 日起,该域名池按日轮换解析上线。

域名注册时间与 campaign 部署一致。playios[.]net、addlabelorg[.]com、877k[.]org 三个域名于 2026 年 9 月 22 日的三秒内由同一注册商 Gname.com Pte. Ltd. 注册;3kxw2pjsb5hgq24t5qb[.]cc 与 310ijpo06dd-ijsxcfu[.]org 则于 10 月 7 日的同一秒完成注册。

二、面板内的数据与规模

面板仪表盘展示的规模为:总访问量 6,115,总设备数 57,总窃取记录 10,125,iOS 日志 143,802。设备归属地分布于澳大利亚、马来西亚、拉脱维亚、韩国、乌克兰,以及中国江西与香港特别行政区。

面板内另有一条攻击链漏斗,把从页面访问到数据外传的全过程按七级统计。取证时的 30 天窗口里,页面访问 20,187 次、采集器加载 20,056 次、设备活跃 1,210 次、漏洞利用 1,187 次,到利用成功只剩 10 次,最终数据外传 9 次。仪表盘的 6,115 按近 7 天窗口统计,与这个 30 天窗口口径不同。

设备列表页可以逐台读取受害设备的机型、iOS 版本、浏览器版本、上网归属地与在线状态。下图为紧凑视图,为保护受害者隐私,图中设备标识与 IP 两列已做遮蔽。

同一列表的完整视图可以看到全部 57 台设备的分布情况。

面板还按 iOS 版本与机型对受害设备做了统计,并列出最近若干条回传记录。

面板的窃取数据总览页把采集到的内容按类别统计。分类覆盖浏览器数据、系统报告、文件浏览器、数字钱包、通讯录、账户,以及 Keychain、WiFi 密码、短信、通话与照片管理,每一类都有独立的计数。

三、管理后台与公开仓库的对应关系

这组面板的后端标识直接指向公开仓库。103[.]*[.]*[.]71:7001 的接口定义文件显示,后端标题为 DarkSword Admin API,版本 1.1.0,共 576 条路径。GitHub 上 adoemwanmei/DarkSword-PROV2 仓库的 admin/main.py 第一行写着同样三个值:app = FastAPI(title="DarkSword Admin API", version="1.1.0")。

前端同样吻合:仓库 admin/frontend/package.json 声明的依赖为 Vite 6、Vue 3.5、Element Plus 2.14、axios、ECharts、Pinia 与 vue-router,与面板主包中读取到的技术栈相同。admin/frontend/src/views/ 下的页面组件与面板侧边栏逐项对应,后端路由目录 admin/routers/ 同样如此,鉴权、设备、数据、钱包、命令、审计、通知等模块一应俱全。

该仓库的 README 标题为"DarkSword Red Team Framework",正文写明支持 iOS 18.4 至 18.7。文档中还有一段关于付费版本的说明,原文要求获取完整 PRO 项目需联系 Telegram 账号,技术支持费用 5000U。

面板本身还内置了落地页模板管理模块,可按渠道一键加载预设落地页。模板库中包含区块链抽奖、WhatsApp 验证、iOS 系统更新、iCloud 照片与 Apple ID 登录五种。

每个模板对应一类落地页主题,与该面板按落地页域名划分渠道的设计配合,一张主题化页面即一个渠道,面板据此统计各渠道的转化情况。

仓库的 darksword/payloads.py 里直接写着载荷要从哪里拉:利用链取自 htimesnine/DarkSword-RCE 与 ghh-jb/DarkSword 两个仓库的 raw 地址,内核利用取自 opa334/darksword-kexploit。三个都是公开仓库。

从利用链、内核利用、起服务的命令行工具,到带设备与钱包管理的后台,这条流水线在 GitHub 上是完整且现成的。相关仓库的建库时间与体量如下:

四、利用链与上游的代码差异

攻击方的整条 18+ 利用链放在分发域名的 /static/v2_18/ 目录下,文件可以直接下载。拿它和公开仓库 DarKSward 对照,第一处就完全一致:rce_module_18.6.js 在两边 SHA-256 相同,为 37efaa4237a28a4be411d40de80b2935be5b8c4e6731ee1f858c609142a87445。

文件集合也一一对应。DarKSward 中的 rce_loader.js、rce_module.js、rce_module_18.6.js、rce_worker.js、rce_worker_18.6.js、pe_main.js、sbx0_main_18.4.js、sbx1_main.js、MigFilterBypassThread_comp.js,均可在攻击方 /static/v2_18/ 下找到对应项。rce_worker.js 的对比同样明确:仓库版本 43,199 字节,攻击方 rce_worker_18.4.js 47,801 字节,两者前 4,000 字节完全一致,全文差异 181 行,差异内容即攻击方追加的主机改写逻辑。

最直接的证据来自代码注释。攻击方 18.5 worker 中保留了这样一行:

// Lab alignment (DarKDevz/GitHub): always VPS IPv4 + plain :4001 / TLS :4001.

攻击方的文件中还残留若干上游模块名:MigFilterBypass、MigFilterBypassThread、InjectJS、keychain_copier、file_downloader、sbx0_main、sbx1_main。代码中反复出现的"参照方""DEBUG 镜像"等表述,即指向这些上游实现。

将两方文件逐一比对,除一个 85 字节的占位文件外,没有任何文件完全相同。18+ 链入口由 689 字节增至 14,616 字节;rce_loader.js 由 7,244 增至 17,158;rce_module.js 由 173,079 增至 454,783;rce_worker_18.6.js 由 526,012 增至 815,122。设备被攻陷之后投放的后利用载荷,也就是 PE 阶段,在上游只有一个 pe_main.js,为 778,610 字节;攻击方侧有两个文件,pe_worker.js 为 939,388 字节、pe_main.js 为 871,571 字节,三者互为同一底本的不同变体。攻击方另有三个上游不存在的文件:投递配置 config.js,以及 rce_worker_18.5.js 与 rce_worker_18.7.js。上游的版本分支只有 18.4 与 18.6,18.5 与 18.7 由攻击方自行补充,装载器接受并分流的版本区间因此扩到 iOS 18.4.0 至 18.7.2,比 GTIG 报告所述的 18.4 至 18.6.2 更宽。四个分支的 worker 与 module 文件均部署在服务器上并可正常下载,但其中哪些版本确实被成功利用,目前没有数据可以确定。

改动的内容比体积更能说明问题。对上游 pe_main.js 与攻击方 pe_worker.js 做关键词计数:

上游对加密货币钱包的覆盖为零:未出现 imToken、TokenPocket、TronLink,无 keystore 解密、scrypt、PBKDF2、AES-CTR,无 AKS 钥匙串解包,无 SOCKS5 隧道,也无自毁逻辑。上述能力均由攻击方补充,即在通用窃密链之上增加了一层面向加密货币钱包的处理模块。

其余改动集中在可靠性。sbx1_main.js 中记录了 18.6 上载荷超过 200KB 时 CreateWithCString 返回带 PAC 的无效数据,攻击方改用 CFMutableString 拼接载荷并增加剥离 PAC 的步骤;同时将 18.6.1 以上的等待窗口由 45 秒延长至 90 秒,并注明跨进程读会导致 WebContent 挂起,进而触发 Safari 重新加载页面并二次启动整条链。sbx0_main_18.4.js 对机型与构建号做了精确匹配,注释写明 "never cross-build e.g. 22F76->22G86"。

上游提供的是可用的漏洞链,攻击方完成的是使其在真实设备上稳定运行的工程化工作。

不过 ueyes 只是这套设施手上的其中一条链。

五、载荷库与研发面

这套面板内置了一个载荷库,收录的载荷超过一千条,按类型和 iOS 版本分类归档。版本跨度很大:最新的一批集中在 iOS 26.4 与 26.5,再往前的 18、17、16、15 各代也都有对应条目,另有一些版本号只是先占了位、还没有载荷。

命名方式透露的信息更多。库里有一批成体系的利用链,各自带着代号:breezy、bluebird、terrorbird、seedbell、cassowary、ghostblade、kernel_ace,以及 varianta、variantb、variantD 三组变体。文件名里直接写着适用区间,breezy 的两个文件分别覆盖 13.0 至 14.x 与 15.0 至 16.2,bluebird 覆盖 15.6 至 16.1.2,terrorbird 覆盖 16.2 至 16.5.1,seedbell 覆盖 16.6 至 16.7.12。最早的一条能追到 iOS 13.0。

目录结构把研发流程也标了出来。从投递、第一段 RCE、内核读写、内核提权,到后渗透与窃取,每一段都有独立目录和版本化文件,编号从 Stage0 一直排到 Stage7。旁边还有配套的东西:一份完整的 PPL 工具编译源码、去混淆之后的原始代码、一个 TaskRop,以及一套 HEIF 处理工具。其中有一个装配包专门对应 CVE-2026-43818。

文件名里还带着大量中文标记,比如"部分有用""真实有用""错误偏移""旧布局""有断点""去混淆输出"。这批载荷经过人工验证和比对,按可用程度归档,其中相当一部分是从别人的混淆代码里还原出来的,与此前看到的"参照方""DEBUG 镜像"是同一回事。

版本标签的宽度不等于实际可利用的宽度。把这套设施的覆盖口径按层次拆开:

  • 投递触达:iOS 13.0 起的 iPhone,统一入口原文称"iOS 13.0 ~ 18.x 全版本覆盖"
  • 武器库:1,045 条载荷,24 个版本标签,标签最远到 26.6.1
  • 实际可利用:iOS 18.6 至 18.7.2,以及 26.0 至 26.1

要分清武器库和真正能打的范围,依据是攻击方自己的路由代码。内部路由文件 main_router.js 的 route() 函数里,每个版本的各阶段装配情况都有标注。对 26.2 之后,入口阶段 stage1 被设为空数组、提权阶段 stage3 被设为空串,注释写明"26.3+ 无存活漏洞(stage1已空)";对 26.2 则注明"43818/64766 真实 CVE,26.2 利用未验证"。

落地页的装载器和路由代码,卡的版本不一样。装载器从 iOS 18.4.0 起就会把设备引进 18+ 链,但路由代码里能凑齐各阶段、走完全程的窗口要到 18.6 才出现。18.4 和 18.5 的设备会被引入,却利用不完整。

真正能够利用完整的是两个窗口。第一个是 iOS 18.6 至 18.7.2:DarkSword 那三条在野利用的 CVE 在这一段都还有效,18.7.0 至 18.7.2 更是连第一阶段的绕过都可以省掉。第二个是 iOS 26.0 至 26.1,它复用 18 系已经可用的沙箱逃逸,另配一个 26 系自己的入口漏洞。

更早的版本分成三段,代码是齐的:15.2 至 15.5、15.6 至 16.1.2、16.2 至 16.5.1。剩下的 iOS 13 至 14、16.6 以上,以及整个 17.x,在代码里被标成不支持,缺的是最后一步提权。

这一点直接影响怎么读面板里的数据。设备列表中出现过运行 iOS 26.3、26.5.2 与 26.6.1 的设备,容易让人以为 26 系也已被攻陷。但按路由代码,26.2 之后第一阶段的入口就是空的。那些条目只说明这些设备打开过落地页、在 SDK 上注册过,不代表利用链在它们身上完成过。

载荷库中另有 11 个与 HEIF 图片解析相关的入口文件,都指向 CVE-2026-43818。这是 ImageIO 组件里的一个整数溢出,影响范围从 iOS 15.8.8 一直铺到 26.5.2,单这一个漏洞就横跨 15、16、17、18、26 五个大版本,而它的修复版本要等到 26.6。如果它能在真机上验证成功,攻击面会比现在这两个窗口宽得多。不过代码里明确标着尚未真机验证,说明还在研。另有针对 26.6 的入口漏洞 CVE-2026-64766。

目录里还出现了一个此前未提及的诱饵站。钓鱼落地页_3ll.im 指向 3ll[.]im,该域名解析到 107[.]*[.]*[.]157,页面标题为"全域AI",与 8ll[.]im 同属 Nll.im 命名。加上 877k[.]org,这套设施至少有三个主题化的落地页同时在跑。

六、投递链

投递分两级:先由统一入口判断设备版本,再把访客分到对应的利用链上。访问任何一个镜像域或主分发域的根地址,服务器都会返回一个跳转,把浏览器带到同一个页面,也就是 29df87ca7af308ebea209f30890d373f5f7f2f93.html,5,098 字节的一段脚本。页面注释写明它是 Coruna 利用套件的统一入口,声称覆盖 iOS 13.0 至 18.x,实际分两条路:

路径 A 把页面重定向到原始的 35f84f903156092fae6f232cc79fc288.html。路径 B,也就是 DarKSward 桥,会创建一个 1×1 的隐藏 iframe,加载 /darksward/frame.html,由它注入 /darksward/rce_loader.js(299,536 字节,代码经过 a0_0x 重混淆,还加了 speechSynthesis 反检测)。这个 loader 最终执行 Chain.init 拿到内核读写,用 Sandbox.createTokens 完成沙箱逃逸,再注入 Coruna 动态库。页内注释对整条链的目标有一句概括:连接、同步与下载、钱包注入、DGA C2、PLTextAnalyzer、数据上报。

除了统一入口这一层,落地页里还埋了第二层分流,负责把 iOS 18.4 至 18.7.2 的设备单独挑出来。分发域名上放置的是 sdk.min.js,大小 4,467 字节,用于挂载到任意落地页。页面加载后,脚本生成 UUID 并写入 cookie,随后解析 UA 判断系统版本,按版本分流:iOS 18.4.0 至 18.7.2 进入 18+ 链,其余版本进入同源链。之后脚本伪装 UA,并向 /sdk/register 上报落地页域名、设备 UA,以及从 ipv4[.]icanhazip[.]com 获取的真实出口 IP。前两项用于渠道标记,第三项用于确认访客的网络位置。

18+ 链在源码中名为 ueyes,流程为入口页、rce_loader.js、按机型与版本加载的 rce_worker、sbx0_main、sbx1_main,最后到 pe_worker。注释中写明适用区间为 "LIVE band: iOS 18.4.0 - 18.7.2",并注明"18.7.3+ 已修补;18.0-18.3 无覆盖"。不在该区间的设备转交 Coruna 链,其范围为 13.0 至 17.2.1;该链本体同样公开可得,仓库 qzx200030728/coruna-full-version 的描述为 "iOS 13.0 ~ 17.2.1 Coruna Exploit full version"。

18+ 入口页内联了一段 SHA-256 引导解密器,口令硬编码于代码中:

口令为 9898asd147258。同一段代码中另有 window.__LAB_DELIVERY_HOST__ 与 window.__LAB_EXFIL__ 两处全局配置。

DK 面板上另有一份面向下游的部署包,可以直接下载。/api/sdk-deploy.zip 实测返回 HTTP 200、3,351 字节,内容包括 sdk.min.js、面向客户机的 Nginx 302 配置模板,以及一份接入说明。说明中写明"渠道归属:设备渠道取落地页 hostname。iOS 18.4.0-18.7.2 走 18+ 新链入口,其余版本走统一入口自动路由";Nginx 模板中则注明"不要放入 rce_worker / pe_main / pe_worker / sbx* 等 18+ 载荷"。

投递页面在受害者设备上的表现形式,是一个伪装成"设备安全检测"的进度界面,把从设备识别、RCE、沙箱逃逸、提权到后渗透窃取和数据回传的九个阶段逐条列了出来。页头显示"已完成 0 / 9"。下图是在非 iOS 设备上打开该页面时的状态,第一阶段即返回 no_ios · non-iOS or unknown UA,后续阶段保持等待。

这个界面同时把各阶段的内部命名暴露了出来:RCE Worker 一步标注为 no_cow / tree flatten,沙箱逃逸标注为 GPU 进程逃逸(sbx0),提权标注为 IOSurface 内核读写(sbx1),后渗透衔接标注为 pe_main.escalate(krw),采集目标标注为 keychain 与 wallet。这些名称与载荷目录里的 sbx0_main_18.4.js、sbx1_main.js、pe_main.js 三个文件一一对应。

七、后利用能力

走过前面几个阶段之后,这条链会在设备上留下两个组件:一个负责采集数据,一个负责长期接收指令。它们分别是 pe_worker.js 和 pe_main.js。

pe_worker.js 是数据窃取代理,其开头的注释写明了来源:

// ═══ 移植自 DarkSword-RCE 18.5-18.6.2 · 33 条命令 ═══

该代理实现了三十多个命令处理函数。从摄像头、麦克风、相册、通讯录、短信、WiFi 密码、定位这类常规采集,到钥匙串与 iCloud 令牌提取、剪贴板读取与劫持、前台应用监控,再到执行 shell、安装持久化、开 SOCKS5 代理、通过 DNS 外传和最后自毁,基本覆盖了 iPhone 上可采集的主要数据类别。

pe_main.js 的定位不一样,代码注释自述为"persistent loop in SpringBoard,runs until reboot",即注入 SpringBoard 的常驻控制代理。其 C2 地址硬编码于文件中,指向 310ijpo06dd-ijsxcfu[.]org 的 /beacon 与 /result,钱包回传端口为 443,采用 1MB 分块、2MB 单包阈值的上传方式。取证时 /beacon 与 /api/ds/log 返回 200,/result 返回 404。注释中还保留了服务端脚本名 server.py 与 command.py,说明 URL 在部署阶段由模板替换。

拿到内核读写之后,下一步就是提权。代码沿 proc + 0x18 -> credRef + 0x28 -> ucred 定位进程的 ucred,再取 ucred + 0x18 的 cr_uid 与 ucred + 0x78 的 cr_label。钥匙串处理是一套独立流水线,代码中称为 "V4 Local SQLite + Remote AKS Oracle Pipeline",包括远程 AKS 初始化、密钥解包、V7 blob 解析与扫表解密,路径覆盖 keychain-2.db 及其 wal/shm/journal 文件、System.keybag、Backup.keybag、device.kb、persona.kb、usersession.kb,以及 trustd/private/TrustStore.sqlite3。

钱包是采集的重点,代码里分三段处理:从 Realm 数据库提取(imToken 的主存储)、扫描 walletsV2/ 与 wallets/ 下的 keystore 文件、读取 React Native 的 AsyncStorage。涉及的目标包括 imToken、TokenPocket、TronLink、MetaMask、OKX、Coinbase、Exodus、BitKeep、Gate,以及两个 bundle id:com[.]global[.]wallet(TokenPocket)与 com[.]sixdays[.]trust(Trust Wallet)。这与 GTIG 报告所述 DarkSword 的三款目标钱包一致。

数据外传有两条通道。一条走明文 HTTP,代码里标注为向分发域 80 端口的 wallet_grab 回传钱包数据;另一条将数据编码为 DNS 查询的子域名发送,注释中保留了"DNS label 最大 63 bytes"的说明。另有基于原生层实现的高性能 SOCKS5 隧道。

除此之外还有一组原生动态库,管的是采集、提权和通道三件事。nb_daemon_new.dylib 在沙箱外拉起一个 IPC 守护,命令里包括调用 security dump-keychain 导出钥匙串、用 popen 执行命令,以及直接读写系统剪贴板;photo_grabber.dylib 和 wallet_grabber.dylib 分别盯相册与钱包;ppl_bypass.dylib 做 XNU 的 PPL 旁路;libSMSBroadcast.dylib 处理短信;libgrabkernel2.dylib 则会自动从 Apple 的开发者站点拉 kernelcache 来解符号。

收尾环节还包含清理 cron、清理 dylib 注入残余、卸载 LaunchDaemon、删除 /tmp/.ss_*、/tmp/.cam_*、/tmp/.mic_* 等痕迹,并具备自毁命令。

八、钱包归集与 IM 接管

DK 面板的接口列表可以从公开前端资源里完整读出,其中一组路径直接对应资金操作:查余额、刷新余额、解密字段,以及归集。

对应的页面是助记词管理,列出助记词、私钥、派生地址与链上余额,并提供一键归集。从解出明文到转出资金,整套动作都在同一个界面内完成。

面板源码里还定义了一份支持的钱包清单,MetaMask、Trust Wallet、imToken、TokenPocket、TronLink 等主流钱包都在列,每一款都配好了对应的 bundle id。

除钱包之外,DK 还在开发另一组能力:接管受害者的即时通讯账号。前端已经做好了 WhatsApp、Telegram、备忘录和访问记录四个页面,配套脚本会去调用一组同名接口。它能读到 WhatsApp 的账号身份与聊天数据,也能枚举 Telegram 账号、读取本地数据库;代码里还标着"待解密(class key 未取)"这样的中间状态,说明解密那一步还没完成。

该页面在后端接口未就绪时会回落显示示例数据,示例数据中的时间戳为 2026-10-16 05:12,与代码中 [MERGE-18.5-20261016] 的更新日期同为取证当天凌晨。IM 会话接管是这套设施正在上线的下一项能力。

两代面板在功能上互补:设备数据由 pe_worker 与 pe_main 采集并汇入 DK 面板的设备列表与数据总览,助记词则进入 DK,在面板内完成解密、地址派生、余额查询与归集。

九、开发者痕迹

开发过程中的一些痕迹,直接留在了 DK 面板的前端脚本和设备上那批载荷里。

DK 皮肤层脚本中包含 var APP_NAME_OLD = 'IOS-Manager'; var APP_NAME_NEW = 'DK';,说明该代产品原名 IOS-Manager,DK 为改名后的版本。同目录另一脚本的注释提及其内部工程 K10-PROD,路径精确到 K10-PROD/vue/src/components/FluidBackground.vue。导航图标脚本中保留了本机路径 /Users/wind/Documents/默认项目/ICON。

更具体的路径来自动态库的 Mach-O 加载信息,其中保留了三个内置路径:

  • photo_grabber.dylib:/Users/wind/Documents/K10-PROD/ios-native/build/photo_grabber.dylib
  • ppl_bypass.dylib:/Users/wind/Downloads/DarkSword-PROV2-master/payloads/ppl_bypass.dylib
  • wallet_grabber.dylib:/workspace/wallet_grabber.dylib

第二条直接说明开发者从 GitHub 下载了 DarkSword-PROV2 的源码压缩包。<仓库名>-<分支名> 是 GitHub 下载压缩包的固定命名,该仓库默认分支为 master。第一条与 K10-PROD 注释互为印证,说明该工程同时包含 Vue 前端与 iOS 原生两部分。第三条位于 /workspace/,说明除个人开发机之外还有独立的构建环境。

设备上的 nb_daemon.dylib 为 arm64e,构建版本 minos 26.5、sdk 26.5,编译时用的是当时的 Xcode。

代码中还保留了带日期的变更标记:[LOGIN-GATE-20261012]、[LOGIN-PAGE-HIDE-20261015]、[SDK-FIX-20261011]、[MERGE-18.5-20261016],并标注了生产环境需关闭的调试开关。导航守卫注释中提到"原脚本克隆自「解密工具」"与"前同事的内嵌 iframe 模式",显示该项目由多人协作完成。其中 [MERGE-18.5-20261016] 的日期为本文取证当天。

两个载荷中各烧录了一个兜底设备标识:pe_main.js 使用 69DD25B2CA8B5682BA2470D77124E2FC,pe_worker.js 使用 06ADE268C4BC32E1D933A594E648AC6B。该字段用于信标与外传包,正常情况下由 loader 在注入前赋值;一旦注入失败,受害者数据会归到该烧录值名下。其中 06ADE268 还出现在 DK IM 页面与输入框占位符中,配套示例为 +86 138、+86 139 号段与 @zhangsan。

DK 首页还挂载了 Google Tag Manager 编号 G-59NF1VHHPF。

十、总结

综合来看,这是一条已经产品化的 iOS 窃密与变现链条。统一入口按系统版本把访客分流到不同的利用链,两代管理面板负责设备与数据管理并托管一个 1,045 条规模的载荷库,DK 则负责助记词解密、地址派生、余额查询与归集。

它的覆盖面比单看一条链要宽,但不能按载荷数量来理解。投递入口声称覆盖 iOS 13.0 起的设备,载荷库的版本标签排到 26.6.1,而代码里确认还能打通的窗口只有 iOS 18.6 至 18.7.2 和 26.0 至 26.1 两处,多数 26.x 条目仍标着"部分有用""有断点""错误偏移",说明还在调试。这条线的开发并没有停在 DarkSword 覆盖的 18.6.2。

技术底座几乎全部来自公开来源。管理后台对应 GitHub 仓库 adoemwanmei/DarkSword-PROV2 的 admin/,后端标题和版本号与现网一致;利用链与 DarKDevz/DarKSward 同源,有四项独立证据指向它,其中一项是攻击方自己在注释里写下的仓库名。攻击方的主要工作量在工程化和扩版本:上游的 ueyes 链只覆盖 iOS 18.4 和 18.6,攻击方补上了 18.5 和 18.7;上游完全没碰加密货币钱包,攻击方补上了 keystore 解密、AsyncStorage 读取、AKS 钥匙串解包和归集接口;此外,载荷库里的其他家族把范围推到了更早的版本和 26.x。

漏洞链在 2026 年 3 月被多方发布,投递服务框架、内核利用、载荷源同样公开,四个月后出现的 DarkSword-PROV2 又把前端、后台和数据库打包在一起,文档里还写了付费版本的联系方式和价格,整条流水线因此不再需要理解漏洞就能照着部署。这也意味着单靠等苹果更新系统解决不了问题,真正要同时处理的是公开套件被直接使用带来的门槛下降,以及载荷与后台共用同一批公开指纹所导致的可检测性上升。

十一、建议

1. 保持 iOS 为最新版本,不要长期停留在旧版本上。

2. 不要访问来历不明的链接。短信、私信中的短链风险最高,Safari 打开即可能触发利用链,无需额外交互。

3. 若设备曾在可疑落地页停留,按凭据泄露处置:在一台未访问过该页面的设备上新建钱包、生成新助记词并转移资产,旧助记词与私钥视为已泄露,不再复用。同时排查各链账户的异常转账与授权记录,撤销不再使用的授权,保留 Safari 历史、崩溃记录与异常交易记录。

IOC

IP 地址

192[.]252[.]179[.]227

103[.]230[.]240[.]71

160[.]20[.]58[.]27

107[.]149[.]129[.]157

域名

3kxw2pjsb5hgq24t5qb[.]cc

310ijpo06dd-ijsxcfu[.]org

ad[.]playios[.]net

w83lfokwwmqoyo0r[.]info

8jh2oinahnr4rntb4vj80ayy[.]app

ikspanceem[.]xyz

met2ndsiu8k[.]icu

fudervzvb[.]com

tpkcosbs[.]info

huncvkov9[.]icu

vartn8iau6vpk[.]org

8ll[.]im

3ll[.]im

ios-app[.]addlabelorg[.]com

877k[.]org

URL

http[:]//103[.]230[.]240[.]71:7001/login

http[:]//160[.]20[.]58[.]27:7001/login

https[:]//ios-app[.]addlabelorg[.]com/console/

https[:]//ad[.]playios[.]net/

https[:]//877k[.]org/

https[:]//8ll[.]im/

https[:]//3ll[.]im/

https[:]//8ll[.]im/static/sdk.min.js

https[:]//3kxw2pjsb5hgq24t5qb[.]cc/sdk.min.js

https[:]//3kxw2pjsb5hgq24t5qb[.]cc/sdk/register

https[:]//3kxw2pjsb5hgq24t5qb[.]cc/index.html

https[:]//3kxw2pjsb5hgq24t5qb[.]cc/static/v2_18/

https[:]//3kxw2pjsb5hgq24t5qb[.]cc/29df87ca7af308ebea209f30890d373f5f7f2f93.html

https[:]//3kxw2pjsb5hgq24t5qb[.]cc/darksward/rce_loader.js

http[:]//3kxw2pjsb5hgq24t5qb[.]cc:80/wallet_grab

https[:]//310ijpo06dd-ijsxcfu[.]org/beacon

https[:]//310ijpo06dd-ijsxcfu[.]org/api/ds/log

https[:]//ad[.]playios[.]net/api/sdk-deploy.zip

文件哈希(SHA-256)

sdk.min.js

28dc591c6b5ba43d1c02dca653e6f9f65e8e085be73b72605f0b5e718abda2cf

darksward/rce_loader.js

88511bc5b2cf91f0badd10b62fcaea28225eb201cebcb62583b7636a14514305

static/v2_18/config.js

eb66bc5b0c5e57d0a4272a004250ee3ddbd755e3464a554a9fb31ff494c8d18f

static/v2_18/rce_loader.js

e35878dd45b9762b42a35a5a311eb16054056e3dc295d8705f5466b715d92925

static/v2_18/rce_module.js

a9cd377c5fdb7671fe28e5655059051dee2e609276d19908a2a49475c1009bc4

static/v2_18/rce_module_18.6.js

37efaa4237a28a4be411d40de80b2935be5b8c4e6731ee1f858c609142a87445

static/v2_18/rce_worker_18.4.js

a1e9fcee41479a73664ec045bb532a392bb35de773ca376109a0e07722a2f051

static/v2_18/rce_worker_18.5.js

df1349655d7b4a9d5f2d753629a70893862c03aa91bb9d850a79e55b37727bad

static/v2_18/rce_worker_18.6.js

4ed41f8b5bad6473bc1b7d955d120e57375f1d29b8755947fc0f6e4af96e78e1

static/v2_18/rce_worker_18.7.js

fdf227df835cc7e90a483e7c82353b6d253c8aca0478c2e630d8aa2c340f6c5f

static/v2_18/sbx0_main_18.4.js

49a279c21493e24fcd5c6ce6d898e194a7252da5851e8ff7b7715b97137861fe

static/v2_18/sbx1_main.js

02e3888e5bbf31b78da117b70be28c56777b278d4591b39925c3670cb3a6442b

static/v2_18/pe_main.js

df687a655411437eb44d67e54a9af9284b8dd489c0873e0605f0e47f96016b5e

static/v2_18/pe_worker.js

21fabf605f421e71c28758fdca59b71da740ca5fe40d00e30dec8d32cb499e4a

static/v2_18/native_bridge.js

ed87a3741feac29f63eba654c45cfed16f8c9542e21a105d7c9ad5304e91eba4

nb_daemon_new.dylib

467cd2dd8e2242ea09e4ce50afc14bd8ae6eeeff642859038faf47f7ccf81316

关于 MistEye

MistEye 是由 SlowMist 自主研发的 Web3 威胁情报与动态安全监控平台,通过 API 提供开源包生态的恶意活动检测与供应链风险预警能力。

本次行动涉及的全部恶意包及 IOC 已接入 MistEye 威胁检测引擎,开发者可通过 API 对项目依赖进行自动化检测,快速判定是否命中已知恶意包并获取处置建议。

📖 API 文档:https://app.misteye.io/api-docs

🛠️ MistEye-DepScan:https://github.com/slowmist/MistEye-DepScan轻量级 CLI 工具,一行命令扫描项目依赖与全局安装包中的已知恶意包,支持 npm / PyPI / Cargo / Go / RubyGems 生态

🛠️ MistEye-Skills:https://github.com/slowmist/misteye-skillsAI 编码助手安全技能包,在依赖安装与 URL 访问前自动触发 MistEye 安全检测

🛠️ MistEye-DNS-Guard:https://github.com/slowmist/MistEye-DNS-GuardDNS 安全防护工具,检测恶意域名与风险访问,识别钓鱼、C2 等网络威胁

本文由 SlowMist 威胁情报团队结合 MistEye 威胁情报系统、SlowMist Agent AI驱动分析编写,有任何问题欢迎咨询反馈。

参考资料

[1] Google Threat Intelligence Group, 2026-03-18. The Proliferation of DarkSword: iOS Exploit Chain Adopted by Multiple Threat Actors. https://cloud.google.com/blog/topics/threat-intelligence/darksword-ios-exploit-chain

[2] 慢雾首席信息安全官 @im23pds, 2026-03-25. https://x.com/im23pds/status/2036624111968100402

[3] DarKDevz/DarKSward. https://github.com/DarKDevz/DarKSward

[4] adoemwanmei/DarkSword-PROV2. https://github.com/adoemwanmei/DarkSword-PROV2

[5] khanhduytran0/coruna. https://github.com/khanhduytran0/coruna

[6] EolnMsuk/AntiDarkSword. https://github.com/EolnMsuk/AntiDarkSword

[7] socket.dev. 恶意 Packagist 主题使用 WebKit 到内核的利用链.

https://socket.dev/blog/packagist-themes-ios-spyware

[8] 慢雾安全团队, 2026-09-04. 威胁情报|iOS Safari DarkSword 窃取钱包资产.

https://mp.weixin.qq.com/s/M2HZw8dIcnqfNY4FOM5eng

[9] 慢雾安全团队, 2026-09-20. 威胁情报|FomoPeek App Store 投毒与 iOS 内核利用分析. 

https://mp.weixin.qq.com/s/LjhN6oejbOmbAX6Y7oRHdQ