🔴
channel-lion 恶意 iOS SDK
完整静态取证分析报告
Static Forensic Analysis · channel-lion SDK · AD902F3
生成时间: 1788043473
分析对象: libwebuiopsercore + DKStatistics + SDWebuiopser + riskdetector
受害应用: 光语 (com.hongYiTeaching) v1.8.2
目 录
- 定性结论
- 组件概览(四组件)
- 密钥与协议参数
- C2 基础设施与 IOC
- SockPort 内核利用链
- 七条命令 Wire Format
- 55 条 XOR 常量表
- 数据库当前快照
⚠️ 1. 定性结论
channel-lion SDK 是一个全功能移动端间谍软件开发工具包,伪装为广告/统计 SDK 分发,实际功能包括:
- iOS Keychain 完整提取(涵盖 genp/inet/keys/cert 全部条目)
- 基于 SockPort + IOSurface 内核利用的 root 提权
- TronLink 加密钱包私钥定向窃取(XOR 常量特征确认)
- Photos + Vision OCR 截图识别,AWS S3 上传敏感图像
- AES-256-GCM + RSA 双层加密 C2 通信(SSP1 帧协议)
- 三套反调试机制(Flutter伪装 / FakeViewController / ASLR绕过)
攻击者标识: [email protected] (va long) ·
受害 App: 光语 AD902F3 ·
SDK 接入名: ChannelLionModule
2. 四组件概览
📦 DKStatistics v1.0.4 / v1.0.8
| 角色 | 外层 C2 通信核心 |
| 协议 | SSP1 + zstd + AES-256-GCM + RSA |
| HMAC key | 空串(无对端认证) |
| 路由 | /api/report/deviceHeartbeat, /api/report/data |
| 特征 | X-Report-Sign / X-Report-Type headers |
🔑 libwebuiopsercore 7.77 MB
| 角色 | 内核利用 + Keychain 解包 |
| 利用链 | SockPort + IOSurface + PAC xpaclri |
| 线程入口 | pthread@0xa338 → SockPort核心@0x57d7d4 |
| 状态机 | 5阶段: init→spray→pivot→kread→kwrite |
| koffset | arr[3]=0xec arr[4]=0x10 (vtable[+0x10]@0x98b4) |
🎭 SDWebuiopser 127 KB
| 角色 | Acquisition 协议桥接 + 流量伪装 |
| User-Agent | HTTPSUploader/3.04 |
| 伪装 | Flutter / FakeViewController / TLS bypass |
| 路由 | /api/handshake.php, /api/session.php, /api/upload.php |
| 备注 | 被 DK 完全拦截,仅作协议分层 |
🦀 riskdetector.framework 4.1 MB · Rust
| 角色 | Photos OCR + 截图上传 |
| 识别引擎 | Photos.framework + Vision 文字识别 |
| 存储 | SQLite FTS3 + 关键词命中 |
| 上传 | AWS S3(SaaS 多租户: orgId/pwrs) |
| 特征 | uploadSwitch / orgId / pwrs 配置 |
3. 密钥与协议参数
| 参数 | 值 | 用途 | 来源 |
| AES-256-GCM Key | a37f2c91b5e24d8fa1c63902e7b84f15 | DK/SD/Core 数据加密 | binary 静态分析 |
| HMAC Key | "" (空串) | X-Report-Sign 签名 | binary 静态分析 |
| RSA 公钥 SHA-256 | 85ec8a4c… | session key wrap | binary 抠取 |
| DK Addr XOR | out[i] = b ^ ((13*i+0x6b)&0xFF) | DK 地址混淆 | 逆向确认 |
| SD XOR 公式 | marker=b^((-98*i+55)&0xFF); out=marker^0x96 | 55条字符串常量混淆 | 逆向确认 |
| SockPort seed | 0x55AAC33C | MadVM字节码种子 | binary 静态分析 |
| 神秘 MD5 | 53d887e912ff255294a2acfdb5e42e13 | TronLink 特征哈希 | binary 抠取 |
4. C2 基础设施与 IOC
🌐 已确认在线节点(探测时间: 报告生成时)
| 地址 | 端口 | 类型 |
| 47.245.60.160 | 8080 | 旧主 C2 |
| rt.wlfzwl.com | 36887 | 新主 C2 (AWS GA) |
| ga-a9.co | 443 | CDN 前端 (Cloudflare) |
| cnsdcdeshidsfojkgj.ga-a9.co | 443 | XOR 解码域名 |
📋 攻击者信息 IOC
| 类型 | 值 |
| Email | [email protected] |
| Email | va long (网络别名) |
| GitLab 远程配置 | cu2oub / jqxatbp (键名) |
| C2 URL | wlfzwl.com (新域名) |
| C2 URL | ru998.vip (备用) |
| Bundle | com.acquisitionhook.upload |
| MD5 | 53d887e912ff255294a2acfdb5e42e13 |
5. SockPort 内核利用链(五阶段)
阶段 1
init
0x98b4
初始化 MadVM + koffset 探测
阶段 2
spray
0xa338
IOSurface 堆喷 1MB/134MB
阶段 3
pivot
0x57d7d4
SockPort 线程入口 + 提权
阶段 4
kread
vtable[+0x10]
内核任意读(PAC xpaclri 剥离)
阶段 5
kwrite
flag@0x6c3000+0x898
内核任意写 + Keychain 解包
; 阶段3: pthread@0xa338 → SockPort核心@0x57d7d4
; vtable[+0x10]@0x98b4 — 纯指针链迭代器 (idx 完全忽略)
; koffset(48) = arr[3] = 0xec ← proc.p_pid offset
; koffset(49) = arr[4] = 0x10 ← task ptr offset
; IOSurface 堆喷: 1 MB 对象 × 134 个 = ~134 MB RSS
; PAC 剥离: xpaclri ; 消除 pointer-auth bits
; SockPort 喷洒基地址: flag@0x6c3000 + 0x898
6. 七条命令 Wire Format
| CMD | 名称 | Wire (hex) | 动作 |
| 0 | deviceInfo | 00 00 00 00 | 上报 iOS版本/设备型号/UDID |
| 1 | securityd | 01 00 00 00 | 通过 securityd 通道触发提权 |
| 2 | reportKeychain | 02 00 00 00 [len:4] [xml_b64] | 上传完整 Keychain XML |
| 3 | pullConfig | 03 00 00 00 | 拉取 GitLab/Bitbucket 远程配置 |
| 4 | heartbeat | 04 00 00 00 [ts:8] | 心跳保活 + 获取下一条 task |
| 5 | fileExfil | 05 00 00 00 [path_len:2] [path] [chunk_len:4] [data] | 读取任意文件并分块上传 |
| 6 | screenCapture | 06 00 00 00 [keyword_len:2] [keywords] | OCR 截图 → riskdetector → S3 |
| 7 | appsList | 07 00 00 00 | 枚举已安装 App (LSApplicationWorkspace) |
7. 55 条 XOR 常量(SD公式解码)
公式: marker = b ^ ((-98*i+55)&0xFF);decoded = marker ^ 0x96
| # | 解码值 | 类型 |
| 1 |
TronLinkData.sqlite |
钱包DB |
| 2 |
walletsV2 |
钱包键 |
| 3 |
keystore |
私钥目录 |
| 4 |
IOSurfacePrefetchPages |
内核对象 |
| 5 |
HTTPSUploader |
User-Agent |
| 6 |
3.04-hook |
版本标识 |
| 7 |
com.acquisitionhook.upload |
Bundle ID |
| 8 |
cnsdcdeshidsfojkgj.ga-a9.co |
C2域名 |
| 9 |
cyanide_fb |
MadVM标签 |
| 10 |
AcqViewCntrlr_ |
伪类名 |
| 11 |
FakeViewController |
伪视图控制器 |
| 12 |
FlutterView |
Flutter伪装 |
| 13 |
ru998.vip |
备用C2 |
| 14 |
ga-a9.co |
主CDN |
| 15 |
wlfzwl.com |
新C2域 |
| 16 |
rt.wlfzwl.com |
新主C2 |
| 17 |
47.245.60.160 |
旧主C2 IP |
| 18 |
53d887e912ff255294a2acfdb5e42e13 |
TronLink MD5 |
| 19 |
ChannelLionModule |
SDK注册名 |
| 20 |
channel-lion |
SDK标识 |
| 21 |
securityd |
系统服务伪装 |
| 22 |
springboard |
UI进程伪装 |
| 23 |
AppleKeyStore |
Keychain服务 |
| 24 |
com.apple.security.securityd |
系统Bundle |
| 25 |
genp |
Keychain-generic-password |
| 26 |
inet |
Keychain-internet-password |
| 27 |
keys |
Keychain-key |
| 28 |
cert |
Keychain-certificate |
| 29 |
X-Report-Sign |
协议Header |
| 30 |
X-Report-Type |
协议Header |
| 31 |
reportKeychain |
CMD名 |
| 32 |
deviceHeartbeat |
CMD名 |
| 33 |
reportDevice |
CMD名 |
| 34 |
cu2oub |
GitLab配置键 |
| 35 |
jqxatbp |
Bitbucket配置键 |
| 36 |
orgId |
riskdetector租户 |
| 37 |
pwrs |
riskdetector策略 |
| 38 |
uploadSwitch |
OCR开关 |
| 39 |
SSP1 |
帧魔数 |
| 40 |
pullConfig |
CMD名 |
| 41 |
fileChunk |
CMD名 |
| 42 |
fileTaskStatus |
CMD名 |
| 43 |
MadVM |
内部标签(误命名) |
| 44 |
SockPortExploit |
利用策略名 |
| 45 |
CicutaVirosa |
备用利用 |
| 46 |
DanglingJoin |
备用利用 |
| 47 |
xpaclri |
ARM64 PAC strip |
| 48 |
IOSurface |
堆喷对象 |
| 49 |
kernel_read |
内核读原语 |
| 50 |
kernel_write |
内核写原语 |
| 51 |
koffset |
内核偏移 |
| 52 |
task_self |
mach task |
| 53 |
pid_for_task |
提权辅助 |
| 54 |
proc_find |
进程查找 |
| 55 |
vm_map_wire |
内存锁定 |
8. 数据库当前快照
📱 设备列表(5 台)
| 设备ID | 协议 | 最后在线 |
| unknown | dk/1.0 | 1788037884 |
| e33694e8dfa47463afa5cc6977bc8638163c481b | dk/1.0 | 1787963882 |
| dev_da550dd25e88 | dk/1.0 | 1787963743 |
| probe_test | dk/1.0 | 1787963697 |
| test_device_iphone_b_01 | dk/1.0 | 1787962199 |
📡 最近协议包(142 条)
| 时间 | 方向 | 协议 | 端点 | 大小 |
| 1788038607 |
IN |
SD |
/api/handshake.php |
376 |
| 1788038069 |
IN |
SD |
/api/handshake.php |
385 |
| 1788038046 |
IN |
SD |
/api/handshake.php |
376 |
| 1788037884 |
IN |
DK |
/api/report/deviceHeartbeat |
150 |
| 1788037881 |
IN |
DK |
/api/report/deviceHeartbeat |
150 |
| 1788037500 |
IN |
DK |
/api/report/deviceHeartbeat |
73 |
| 1788036972 |
IN |
SD |
/api/handshake.php |
385 |
| 1788036714 |
IN |
SD |
/api/handshake.php |
387 |
| 1788036481 |
IN |
SD |
/api/handshake.php |
376 |
| 1788036405 |
IN |
SD |
/api/handshake.php |
387 |
| 1788036059 |
IN |
SD |
/api/handshake.php |
385 |
| 1788036006 |
IN |
SD |
/api/handshake.php |
376 |
| 1788035513 |
IN |
SD |
/api/handshake.php |
376 |
| 1788035460 |
IN |
SD |
/api/handshake.php |
385 |
| 1788035406 |
IN |
SD |
/api/handshake.php |
381 |
| 1788035352 |
IN |
SD |
/api/handshake.php |
382 |
| 1788035299 |
IN |
SD |
/api/handshake.php |
380 |
| 1788033912 |
IN |
SD |
/api/handshake.php |
387 |
| 1788026712 |
IN |
SD |
/api/handshake.php |
387 |
| 1788026463 |
IN |
SD |
/api/handshake.php |
387 |
| 1788025665 |
IN |
SD |
/api/handshake.php |
387 |
| 1788024461 |
IN |
SD |
/api/handshake.php |
376 |
| 1788024144 |
IN |
SD |
/api/handshake.php |
376 |
| 1788023977 |
IN |
SD |
/api/handshake.php |
376 |
| 1788023811 |
IN |
SD |
/api/handshake.php |
376 |
| 1788023600 |
IN |
SD |
/api/handshake.php |
376 |
| 1788023259 |
IN |
SD |
/api/handshake.php |
376 |
| 1788022687 |
IN |
SD |
/api/handshake.php |
376 |
| 1788021710 |
IN |
SD |
/api/handshake.php |
376 |
| 1788021486 |
IN |
SD |
/api/handshake.php |
376 |
| …共 142 条 |
channel-lion SDK 完整取证报告 · 生成于 1788043473 · 分析工具: channel-lion C2 Forensic Panel v6