BlackHatUSA2026:DNG与LANDFALL

admin 2026-09-28 04:59:53 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档为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 编号不会得到恶意文件。更有效的做法,是把漏洞描述拆成可检索的结构特征:

  1. 文件是 TIFF/DNG 容器;
  2. 包含 JPEG 数据流;
  3. 元数据尺寸、Offset、Length 或解码参数存在异常组合;
  4. 文件尾部可能附加额外数据;
  5. 样本出现时间早于漏洞公开和补丁发布时间。

第一轮 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 { &nbsp; &nbsp; meta: &nbsp; &nbsp; &nbsp; &nbsp; purpose = "triage only; not a standalone malware verdict" &nbsp; &nbsp; &nbsp;strings: &nbsp; &nbsp; &nbsp; &nbsp; $dng_tag_le = { 12 C6 } &nbsp;// TIFF tag 50706, little-endian &nbsp; &nbsp; &nbsp; &nbsp; $dng_tag_be = { C6 12 } &nbsp;// TIFF tag 50706, big-endian &nbsp; &nbsp; &nbsp; &nbsp; $elf = { 7F 45 4C 46 } &nbsp; &nbsp; &nbsp; &nbsp; $zip = { 50 4B 03 04 } &nbsp; &nbsp; &nbsp; &nbsp; $xz &nbsp;= { FD 37 7A 58 5A 00 } &nbsp; &nbsp; &nbsp;condition: &nbsp; &nbsp; &nbsp; &nbsp; filesize < 50MB and &nbsp; &nbsp; &nbsp; &nbsp; (uint16(0) == 0x4949 or uint16(0) == 0x4D4D) and &nbsp; &nbsp; &nbsp; &nbsp; 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&nbsp; &nbsp; &nbsp;sha256, &nbsp; &nbsp; first_submission_at, &nbsp; &nbsp; file_type, &nbsp; &nbsp; dng_opcode_count, &nbsp; &nbsp; embedded_object_types&nbsp;FROM&nbsp;sample_catalog&nbsp;WHERE&nbsp;file_type&nbsp;='dng'AND&nbsp;first_submission_at&nbsp;<&nbsp;TIMESTAMPTZ&nbsp;'2025-04-01 00:00:00Z'AND&nbsp;( &nbsp; &nbsp; &nbsp; dng_opcode_count&nbsp;>0OR&nbsp;embedded_object_types&nbsp;&&ARRAY['elf',&nbsp;'zip',&nbsp;'xz'] &nbsp; )&nbsp;ORDERBY&nbsp;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&nbsp;dataclasses&nbsp;import&nbsp;dataclass &nbsp;&nbsp;@dataclass(frozen=True)classService: &nbsp; &nbsp; ip:&nbsp;str&nbsp; &nbsp; &nbsp;port:&nbsp;int&nbsp; &nbsp; &nbsp;fingerprint:&nbsp;strdefdifferential_candidates(&nbsp; &nbsp; &nbsp;visible_c:&nbsp;set[Service], &nbsp; &nbsp; visible_a:&nbsp;set[Service], &nbsp; &nbsp; visible_b:&nbsp;set[Service],&nbsp;) ->&nbsp;set[Service]: &nbsp; &nbsp;&nbsp;# 只保留 C 可见、A/B 同时不可见的服务。return&nbsp;visible_c - visible_a - visible_b &nbsp;&nbsp;defrefine(services:&nbsp;set[Service]) ->&nbsp;set[Service]: &nbsp; &nbsp;&nbsp;return&nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; item &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for&nbsp;item&nbsp;in&nbsp;services &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;item.port ==&nbsp;443and"nginx/1.18.0"in&nbsp;item.fingerprint.lower() &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;and"wordpress"in&nbsp;item.fingerprint.lower() &nbsp; &nbsp; }

实际工程中还要先处理扫描时间差、IP 复用、CDN、端口瞬时变化和各平台 Schema 差异。随后用已知 C2 做召回验证,用正常 Nginx 服务估计误报,再叠加证书、域名历史、Registrar、页面模板和被动 DNS 关系。

这类差分方法不只适用于 LANDFALL。只要攻击者针对已知测绘平台做屏蔽,就可能在多个数据源之间留下系统性缺口。

10、把调查方法固化到日常狩猎

从这份课件可以提炼出一条适合移动威胁团队的工作流:

text

漏洞情报 &nbsp; -> 翻译成文件结构与处理链条件 &nbsp; -> 回溯搜索漏洞公开前的样本 &nbsp; -> 解析容器、尾部数据和嵌入对象 &nbsp; -> 从落地文件提取配置与能力 &nbsp; -> 聚类 C2、证书、端口和域名 &nbsp; -> 比较多个互联网扫描源 &nbsp; -> 用已知样本与正常服务验证 &nbsp; -> 谨慎输出行为体关联强度

其中有三个容易被漏掉的检查点:

  1. 不要只检查接收文件的 App,要列出所有会自动解析该文件的系统服务;
  2. 不要按 CVE 公开日期截断样本时间线,攻击样本通常更早;
  3. 不要把扫描平台中的“没有结果”直接当作数据缺失,先比较其他观测点是否存在系统性差异。

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》

评论:0   参与:  0