文章总结: 该文档为BlackHatUSA2026议题笔记,讲述从DNG图片漏洞入手调查移动间谍软件Landfall的完整链条。调查始于无IOC的公开漏洞线索,通过将漏洞条件转化为样本特征、分析DNG复杂格式、识别系统级媒体索引攻击链,最终关联到配置对象、基础设施和归因线索。文档强调时间线分析、标准化配置提取和跨进程因果关系检测等方法,并提供了可操作的检测与取证代码示例。 综合评分: 85 文章分类: 漏洞分析,恶意软件,威胁情报,移动安全,安全分析
Black Hat USA 2026:DNG与LANDFALL
原创
Max Luo Max Luo
白帽子罗棋琛
2026年9月27日 09:19 中国香港
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
从 DNG 图片到 LANDFALL:一条移动间谍软件调查链
Black Hat USA 2026 议题笔记:Hunting LANDFALL: From Overlooked Images to State-Linked Mobile Spyware
2025 年 8 月,多条移动端零日漏洞消息进入公开视野,但当时没有 IOC,也没有公开样本。对威胁猎手来说,这类线索很尴尬:知道攻击可能通过图片处理链触发,却没有 Hash、域名或可直接检索的恶意代码。
LANDFALL 的调查并不是从一份完整 APK 开始,而是从被忽视的 DNG 图片出发。研究者沿着文件格式、Android MediaStore、Samsung 后台图片服务、落地 ELF 和 C2 配置逐层推进,最后把移动植入物、基础设施和其他平台恶意软件联系起来。
图 1:LANDFALL 调查议题课件封面
这份材料值得复用的不是某个特定 IP,而是调查方法:没有现成 IOC 时如何构造搜索条件,怎样把图片解析漏洞还原成设备执行链,以及如何把攻击者针对扫描器的 OPSEC 反过来变成基础设施信号。
下面的检测和取证代码为依据课件整理的安全分析示例,不包含漏洞利用代码。
1、没有 IOC 时,先把漏洞条件翻译成样本特征
调查起点是一个公开但信息有限的事实:DNG 图片处理链存在被用于定向攻击的内存破坏问题。课件提到的 CVE-2025-43300 位于 Apple 的 RawCamera 图像处理组件,触发条件涉及 TIFF 元数据与 JPEG Stream 参数不一致。
图 2:漏洞已经公开,但样本和 IOC 仍然缺失
直接搜索 CVE 编号不会得到恶意文件。更有效的做法,是把漏洞描述拆成可检索的结构特征:
- 文件是 TIFF/DNG 容器;
- 包含 JPEG 数据流;
- 元数据尺寸、Offset、Length 或解码参数存在异常组合;
- 文件尾部可能附加额外数据;
- 样本出现时间早于漏洞公开和补丁发布时间。
第一轮 Triage 不需要完整实现 DNG 解码器,可以先做魔数、尺寸和尾部对象检查:
python
from dataclasses import dataclass from pathlib import Path MAGIC = { b"\x7fELF": "elf", b"PK\x03\x04": "zip", b"\xfd7zXZ\x00": "xz", } @dataclass(frozen=True)classEmbeddedObject: kind: str offset: intdefinspect_dng(path: Path) -> list[EmbeddedObject]: data = path.read_bytes() if data[:2] notin {b"II", b"MM"}: return [] findings: list[EmbeddedObject] = [] for marker, kind in MAGIC.items(): start = 0while (offset := data.find(marker, start)) >= 0: findings.append(EmbeddedObject(kind=kind, offset=offset)) start = offset + 1return findings
命中 ELF、ZIP 或 XZ 不能单独证明恶意,DNG 预览图和压缩数据也可能制造相似字节。结果应与 IFD、Opcode List、文件尾熵值、上传时间和已知漏洞条件一起评分。
2、DNG 不是“普通图片”,Opcode 扩大了解析面
DNG 建立在 TIFF 之上,并提供三组 Opcode List,用于镜头校正等图像处理。课件强调这套 Opcode 机制具备很强的表达能力。对安全分析来说,这意味着 DNG 不是只有像素和少量标签的静态容器,解析器需要处理复杂的偏移、类型和操作序列。
图 3:DNG 包含三组用于图像处理的 Opcode List
文件格式越复杂,越不适合只用扩展名或 MIME Type 做入口控制。邮件网关、即时通信和移动端内容服务通常会把 DNG 当作图片放行,但真正承担风险的是下游 Native Decoder。
可以先用 YARA 标记“TIFF/DNG 中出现可执行或归档对象”的样本,作为人工分析队列:
yara
rule Suspicious_DNG_With_Embedded_Payload { meta: purpose = "triage only; not a standalone malware verdict" strings: $dng_tag_le = { 12 C6 } // TIFF tag 50706, little-endian $dng_tag_be = { C6 12 } // TIFF tag 50706, big-endian $elf = { 7F 45 4C 46 } $zip = { 50 4B 03 04 } $xz = { FD 37 7A 58 5A 00 } condition: filesize < 50MB and (uint16(0) == 0x4949 or uint16(0) == 0x4D4D) and 1 of ($dng_tag_*) and 1 of ($elf, $zip, $xz) }
这条规则的用途是缩小样本集,不应直接进入封禁。后续仍要用 exiftool、tiffinfo、自定义解析器和沙箱分别验证元数据结构与嵌入对象。
3、攻击链的关键不是 WhatsApp,而是系统级媒体索引
课件还原的流程分三步:WhatsApp 接收并保存图片;Android 将文件加入系统 MediaStore;com.samsung.ipservice 周期性扫描 MediaStore,为 AI 标签等功能解析图片。真正暴露在恶意输入前的是第三步。
图 4:即时通信应用只负责落盘,后台系统服务完成危险解析
这条链路说明,移动端攻击面不能只按“哪个 App 收到了文件”建模。文件进入共享媒体库后,图库、索引、缩略图、AI 分类、云同步和厂商服务都可能自动读取它。用户没有打开图片,也不代表内容没有被解析。
从威胁建模角度,com.samsung.ipservice 同时踩中三个高风险条件:
- 处理外部不可信输入;
- 使用 Native/内存不安全解析代码;
- 运行在缺少充分隔离的高权限上下文。
课件用 Google “Rule of 2” 说明了同一个问题:处理不可信输入、无沙箱、内存不安全语言三个条件,不应同时满足两个以上。
移动 EDR 应关注跨进程因果关系,而不是只记录 WhatsApp 下载:
yaml
title:SystemMediaServiceSpawnsShellAfterParsingUserMediastatus:experimentallogsource:product:androiddetection:parent_service:parent_package:com.samsung.ipservicesuspicious_child:process_path:-/system/bin/sh-/system/bin/id-/system/bin/pingmedia_context:recent_file_path|contains:/Android/media/com.whatsapp/condition:parent_serviceandsuspicious_childandmedia_contextlevel:critical
具体字段取决于设备遥测,这里展示的是关联逻辑:系统图片服务解析近期落盘媒体后,出现 Shell、网络探测或原生库加载。
4、时间线证明“样本先于公开漏洞存在”
课件给出的时间线是:首个恶意 DNG 在 2024 年 7 月出现在 VirusTotal;后来成为 CVE-2025-21042 的问题在 2024 年 9 月 25 日被私下报告给 Samsung;Samsung 于 2025 年 4 月发布固件更新;2025 年 8 月 Apple 修复 DNG 漏洞、WhatsApp 披露链式利用并通知 Samsung 另一个问题 CVE-2025-21043;2025 年 9 月 Samsung 继续修复并披露相关 CVE。
图 5:恶意样本出现时间早于漏洞公开和补丁发布
这个时间差对取证很重要。按 CVE 公布日期筛样本,会漏掉攻击最活跃的前置阶段。样本库搜索应该把时间窗向前扩展,并保留首次上传、首次发现、重新提交和父子样本关系。
sql
SELECT sha256, first_submission_at, file_type, dng_opcode_count, embedded_object_types FROM sample_catalog WHERE file_type ='dng'AND first_submission_at < TIMESTAMPTZ '2025-04-01 00:00:00Z'AND ( dng_opcode_count >0OR embedded_object_types &&ARRAY['elf', 'zip', 'xz'] ) ORDERBY first_submission_at;
日期只是候选条件,不能用来推断利用成功。真正的证据仍来自文件结构、漏洞触发路径和载荷关联。
5、从图片中拆出的不是一个文件,而是一条安装链
课件展示的样本中出现了两个关键对象:b.so 是 AArch64 ELF Shared Object,另一个文件是 XZ 压缩的 ELF。脚本还会从图片尾部切出 ZIP,解压到设备文件系统,设置执行权限,并通过 LD_PRELOAD 加载原生库。
这些行为提供了一组比 Hash 更稳定的端点特征:
text
/data/data/com.samsung.ipservice/files/b.so /data/data/com.samsung.ipservice/files/l /data/data/com.samsung.ipservice/files/l.so LD_PRELOAD from com.samsung.ipservice private storage system media service -> /system/bin/sh media file tail -> ZIP/XZ/ELF carving
若设备侧无法采集完整进程树,仍可以在取证镜像中查找文件名、ELF Build ID、Section、导入函数、配置结构和压缩包尾部。不要只搜索 b.so 这个文件名,攻击者很容易修改它。
6、配置对象把植入物和基础设施连了起来
LANDFALL 配置包含 C2 Host、端口、Base URL、Agent ID、Command ID、Sleep Time、SELinux Policy 文件路径和 Magic。课件示例中的 sepolicy_magic 为 CAFEBABE。
图 6:从样本中提取的 C2 与本地路径配置
分析时应把配置字段标准化,避免每个样本报告各写一段文本:
json
{"family":"LANDFALL","sample_sha256":"<sha256>","c2":{"host":"<defanged-host>","port":22398,"base_path":"is/"},"agent_id":"<uuid>","command_id":"<uuid>","sleep_seconds":1,"device_artifacts":["/data/data/com.samsung.ipservice/files/l","/data/data/com.samsung.ipservice/files/l.so"],"sepolicy_magic":"CAFEBABE"}
标准化后的对象可以按端口、证书、Agent ID 格式、路径、Magic 和基础设施指纹做聚类。C2 IP 失效后,这些关系仍然能帮助关联新样本。
7、LANDFALL 的能力符合长期监控型植入物
课件列出的能力包括麦克风录音、通话录制与拦截、定位、短信和联系人、摄像头、浏览器数据库、应用信息、WhatsApp 图片、任意文件读写、图片外传和反分析。
图 7:植入物覆盖通信、位置、媒体和文件系统数据
这不是一次执行完就退出的 Downloader。结合 Sleep 配置、C2 控制和 SELinux Policy 相关文件路径,更接近需要长期驻留和广泛数据访问的移动监控组件。
防守侧可以把能力映射成数据源需求:
| 能力 | 可观察信号 | | — | — | | 麦克风/通话 | AppOps、AudioRecord、Telephony 调用与后台进程关系 | | 定位 | Location Provider 调用、后台唤醒和频率变化 | | 短信/联系人 | Content Provider 查询、批量读取量 | | 浏览器数据库 | 跨应用私有目录访问、数据库文件打开 | | 图片外传 | MediaStore 批量读取后出现长连接或异常上传 | | 任意文件读写 | 高权限服务访问非预期路径、SELinux Denial/Policy 变化 |
移动平台可见性通常不如桌面端完整,因此样本取证、网络遥测、系统服务调用和 MDM 状态需要合并使用。
8、两个基础设施集群提供了归因线索
从 LANDFALL 配置提取的地址形成 Cluster A:使用多组非标准端口、不同版本 Nginx、自签名 OpenSSL 默认证书,并把 404、405、500 等响应作为控制信号。
进一步分析又得到 Cluster B:标准 443、Nginx 1.18.0 Ubuntu、Let’s Encrypt 证书、通用 WordPress 伪装站点、Namecheap 注册,以及两到三个英文单词组成的域名。课件还观察到 Windows 恶意软件向 Cluster B 回连。
图 8:移动植入物配置与另一层通用 HTTPS 基础设施形成关联
材料将这些线索与 Stealth Falcon / TGR-UNK-1069 联系起来,并指出其目标包括中东和北非的政府、金融和电信机构。这里应保持归因强度:基础设施复用、受害区域和工具能力支持“关联判断”,但不等于仅凭一个 Nginx 指纹就能确认行为体。
课件也说明了为什么传统指纹无效:Nginx 1.18.0、443、Let’s Encrypt 和 WordPress 在互联网上约有数百万匹配对象。把这些通用属性相加,仍然只是一个巨大的误报集合。
9、差分扫描:攻击者屏蔽扫描器的动作本身就是信号
研究者比较了三个互联网扫描数据源。12 个已确认 C2 在 Scanner C 中全部可见,在 Scanner A 和 B 中全部缺失;普通 Nginx 服务则能同时被三个扫描器看到。
图 9:12 个已知 C2 对两个扫描器不可见,却全部出现在第三个扫描器中
课件据此判断,攻击者屏蔽了 Scanner A 和 B 的地址范围,却漏掉 Scanner C。于是“缺失数据”不再只是覆盖不足,而成为 OPSEC 选择留下的特征。
图 10:查询、相减、细化和验证构成差分扫描流程
最小实现就是集合运算:
python
from dataclasses import dataclass @dataclass(frozen=True)classService: ip: str port: int fingerprint: strdefdifferential_candidates( visible_c: set[Service], visible_a: set[Service], visible_b: set[Service], ) -> set[Service]: # 只保留 C 可见、A/B 同时不可见的服务。return visible_c - visible_a - visible_b defrefine(services: set[Service]) -> set[Service]: return { item for item in services if item.port == 443and"nginx/1.18.0"in item.fingerprint.lower() and"wordpress"in item.fingerprint.lower() }
实际工程中还要先处理扫描时间差、IP 复用、CDN、端口瞬时变化和各平台 Schema 差异。随后用已知 C2 做召回验证,用正常 Nginx 服务估计误报,再叠加证书、域名历史、Registrar、页面模板和被动 DNS 关系。
这类差分方法不只适用于 LANDFALL。只要攻击者针对已知测绘平台做屏蔽,就可能在多个数据源之间留下系统性缺口。
10、把调查方法固化到日常狩猎
从这份课件可以提炼出一条适合移动威胁团队的工作流:
text
漏洞情报 -> 翻译成文件结构与处理链条件 -> 回溯搜索漏洞公开前的样本 -> 解析容器、尾部数据和嵌入对象 -> 从落地文件提取配置与能力 -> 聚类 C2、证书、端口和域名 -> 比较多个互联网扫描源 -> 用已知样本与正常服务验证 -> 谨慎输出行为体关联强度
其中有三个容易被漏掉的检查点:
- 不要只检查接收文件的 App,要列出所有会自动解析该文件的系统服务;
- 不要按 CVE 公开日期截断样本时间线,攻击样本通常更早;
- 不要把扫描平台中的“没有结果”直接当作数据缺失,先比较其他观测点是否存在系统性差异。
LANDFALL 的案例表明,移动端零点击链条可能隐藏在一张看似普通的图片后面。但从防守角度看,攻击链并非完全不可见:复杂 DNG 结构、嵌入对象、系统服务拉起 Shell、本地原生库、配置字段、C2 集群和扫描可见性差异,都能留下独立证据。调查质量取决于能否把这些弱信号连成同一条时间线,而不是等待一份现成 IOC 列表。
资料来源
- Itay Cohen,Black Hat USA 2026:《Hunting LANDFALL: From Overlooked Images to State-Linked Mobile Spyware》
- Black Hat 官方 Session 页面
原始会议材料(仓库内)
- 演讲课件 PDF
开源资料与原始议题 PDF
本文对应的 Markdown 原稿、Black Hat 原始议题 PDF 与配图已整理到 GitHub,可按文章编号查找和下载。
https://github.com/cybermaxluo/black-hat-usa-2026-talks
也可以点击文末“阅读原文”进入仓库。欢迎 Star、提交 Issue 或参与勘误。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白帽子罗棋琛 Max Luo Max Luo《Black Hat USA 2026:DNG与LANDFALL》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论