ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OWASP MASTG Android 动态分析:使用 lsof 获取进程打开文件列表(Get Open Files)

OWASP MASTG Android 动态分析:使用 lsof 获取进程打开文件列表(Get Open Files) 文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载lsof是 Linux 平台最经典的文件句柄查看工具在 OWASP MASTG 的 Android 逆向与动态分析体系中它对应技术条目 MASTG-TECH-0027Get Open Files通过lsof -p pid一次性列出目标进程当前打开的所有文件。在面向混淆、加固、反逆向应用的黑盒分析中这一技巧可以让你在不反编译、不 hook 代码的前提下直接看见应用正在读写哪些文件——例如临时落盘的加密数据、被删除后仍占用的句柄、WebView 缓存目录中的残留文件等。读完本文你将掌握 lsof 的核心用法、输出字段的解读方法以及如何将它与 OWASP MASTG 中的 WebView 监控MASTG-TECH-0143、系统调用追踪MASTG-TECH-0032和密钥落盘检测等实战场景串联起来。技术定位MASTG-TECH-0027 在 MASTG 体系中的角色MASTG-TECH-0027 属于 techniques/android 目录下动态分析 / 反逆向对抗一类的基础观察手段。它在 MASTG 文档体系中被多处测试用例直接引用典型场景包括密钥材料落盘检测tests/android/MASVS-CRYPTO/MASTG-TEST-0013.md、MASTG-TEST-0014.md、MASTG-TEST-0015.md 均要求在密码学操作执行的同时监控文件系统访问以判断密钥材料被写入或读取到哪里——lsof 正是完成这一观察的最直接手段。WebView 存储目录监控MASTG-TECH-0143 明确给出组合用法lsof -p app_pid | grep /app_webview/用于监控 WebView 渲染内容如 JavaScript 的localStorage引发的文件操作。root 检测对抗tests/android/MASVS-RESILIENCE/MASTG-TEST-0045.md 建议通过执行追踪找出应用与操作系统的可疑交互例如打开su进行读取、获取进程列表——lsof 可以快速确认应用是否持有对su、/proc等敏感文件的打开句柄。从源码结构看该条目属于观察式技术不修改应用、不注入代码只读取操作系统层面的进程信息因此对绝大多数反调试、反注入防御都是免疫的。核心命令lsof -p 查看指定进程的打开文件在 Android 设备需 adb 连接通常需要 root 才能观察到目标应用上执行adb shell # 或直接 adb shell lsof -p pid lsof -p 6233命令的核心是-p pid标志只返回指定进程的打开文件列表。若不加任何参数lsof会列出系统上所有活动进程的打开文件输出量极大且包含大量其他进程的噪音若使用-c 进程名则可按进程名过滤。MASTG-TECH-0027 文档给出的实际输出如下# lsof -p 6233 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME .foobar.c 6233 u0_a97 cwd DIR 0,1 0 1 / .foobar.c 6233 u0_a97 rtd DIR 0,1 0 1 / .foobar.c 6233 u0_a97 txt REG 259,11 23968 399 /system/bin/app_process64 .foobar.c 6233 u0_a97 mem unknown /dev/ashmem/dalvik-main space (region space) (deleted) .foobar.c 6233 u0_a97 mem REG 253,0 2797568 1146914 /data/dalvik-cache/arm64/systemframeworkboot.art .foobar.c 6233 u0_a97 mem REG 253,0 1081344 1146915 /data/dalvik-cache/arm64/systemframeworkboot-core-libart.art ...注意 COMMAND 列开头的点号.foobar.c是lsof为了适配终端宽度对进程名做的截断显示并非文件内容的一部分。这段输出本身已透露大量信息进程 6233 是u0_a97Android 应用沙箱用户对应 UID 10097 的应用派生的一个 ART 运行时进程其可执行文件为/system/bin/app_process64并映射了系统框架的 boot.art 预编译镜像——这是典型的 Android 应用进程画像。按需获取目标进程 PID-p需要一个 PID获取应用进程号常用两种方式# 方式一按包名精确匹配 adb shell pidof org.owasp.mastestapp # 方式二按完整命令行匹配适合多进程/多实例场景 adb shell pgrep -f org.owasp.mastestapp | head -1pgrep -f的用法与 MASTG-TECH-0032Execution Tracing中strace -p $(pgrep -f org.owasp.mastestapp | head -1)的写法一致可以在脚本中直接复用。输出字段逐列解读MASTG-TECH-0027 明确指出对本技术而言最相关的字段是两个NAME文件路径。这是分析的直接入口——它告诉你在那一瞬间进程持有哪些文件的句柄。TYPE文件类型例如DIR目录还是REG普通文件。除此之外输出中其他字段的含义可与lsof标准语义对应如下表所示字段含义示例输出解读COMMAND进程名可能被截断左侧出现..foobar.cPID进程 ID6233USER进程属主Android 应用沙箱用户形如u0_a97u0_a97FD文件描述符/用途标签cwd、rtd、txt、memTYPE文件类型DIR、REG、unknownDEVICE设备号主设备号:次设备号如253,0表示某个磁盘分区259,11、253,0SIZE/OFF文件大小或当前偏移量23968NODE文件系统 inode 号399、1146914NAME文件路径重点/system/bin/app_process64对FD列中出现的常见标签可以这样理解cwd进程的当前工作目录示例为/rtd进程的根目录示例为/txt进程正在执行的程序代码文件示例中是/system/bin/app_process64——所有 Android 应用都由 zygote 分叉而来因此共享这一可执行文件mem内存映射文件示例中是/data/dalvik-cache/arm64/systemframeworkboot.art与boot-core-libart.artART 运行时预编译的系统类镜像以及/dev/ashmem/dalvik-main space (region space) (deleted)被删除的匿名共享内存区域。从输出中可读出的隐蔽信息注意上表中最后一行NAME为/dev/ashmem/dalvik-main space (region space) (deleted)末尾的(deleted)标记意味着该文件已被 unlink 但句柄仍被进程持有。这是 Android/Linux 上临时文件销毁不彻底的典型痕迹——应用若想把敏感数据短暂落盘再删除分析者依然能在(deleted)行中看到残留的路径线索与映射大小。实战场景一黑盒监控混淆/反逆向应用的临时文件行为MASTG-TECH-0027 文档给出的核心应用场景是在监控使用了混淆或其他反逆向技术的应用时无需逆向代码即可发现异常文件。例如一个应用可能对数据执行加密-解密操作并将其临时存入文件——只要用 lsof 周期性观察目标进程的打开文件就能在文件被删除前捕获它的路径、类型与大小。这一场景与 OWASP MASTG 密码学测试用例高度吻合tests/android/MASVS-CRYPTO/MASTG-TEST-0013.md 等测试要求在密码学操作执行的同时监控文件系统访问以判断密钥材料被写入或读取到哪里。操作流程可以概括为启动目标应用并触发需要观察的功能如解密流程循环采样lsof -p pid或用 grep 定向过滤while true; do lsof -p $(pgrep -f org.owasp.mastestapp | head -1) \ | grep -E /data/user/0/|/tmp|deleted; sleep 1; done对捕获到的可疑路径如shared_prefs下的 XML、cache下的临时文件进一步导出取证。同样的思路也适用于 root 检测分析应用检测 root 时往往会open(/system/xbin/su)之类的文件参见 MASTG-TEST-0045 中打开 su 进行读取的描述lsof 输出中出现的su相关句柄即是强信号。实战场景二与 MASTG-TECH-0143 组合监控 WebView 存储目录MASTG-TECH-0143Monitor File System Operations in WebViews 给出了 lsof 的另一种标准用法监控 WebView 存储目录/data/data/app_package/app_webview/中的文件操作。即使应用自身没有直接调用文件 APIWebView 在渲染内容如 JavaScript 使用localStorage时也可能在内部产生文件读写。此时lsof -p app_pid | grep /app_webview/比 strace 追踪系统调用见下节更轻量——它不依赖ptrace附加也不会触发应用的反调试逻辑只需 root 读取/proc即可。这对于捕获 WebView 中 localStorage/IndexedDB 数据落盘位置、评估注入面参见 MASTG-TEST-0032 中setAllowFileAccess相关分析非常实用。与其他动态分析技术的关系与取舍lsof 并非唯一观察文件行为的手段在 MASTG 体系中它与其他技术互补技术手段粒度优点局限MASTG-TECH-0027本文读取/proc中的打开文件快照进程级无侵入、不触发反调试、零依赖现代 Android 已内置只能看到当前时刻仍打开的句柄瞬时操作可能错过MASTG-TECH-0032straceptrace附加后追踪系统调用系统调用级能看到openat、renameat2、unlinkat等完整调用序列包括被删除文件的整个生命周期依赖ptrace一旦启用反调试即失效需先编译部署MASTG-TECH-0033方法追踪Frida/jdb hook Java 方法方法级能拿到输入输出值定位谁打开了文件侵入性强易被检测需要处理 hook 对抗典型组合策略是先用 lsof 快速建立应用在写哪些文件的全局画像黑盒、零风险发现可疑路径后再针对性地用 strace 观察该系统调用的完整调用序列如 MASTG-TECH-0032 中展示的MasSharedPref_Sensitive_Data.xml从faccessat检查、renameat2备份、openat写入到unlinkat删除的完整流程必要时再用方法追踪定位触发点。权限、前提与注意事项在使用该技术前请确认以下前提与限制root 权限无特权的普通用户只能看到自己进程的打开文件要观察目标应用进程需在 root 权限下执行adb shell后su或直接adb root。lsof 的可用性绝大多数现代 Android 系统通过 toybox 内置了lsof若目标设备缺失该命令可借助 busybox 或从 NDK 交叉编译的静态二进制推送到设备后使用iOS 平台则普遍缺失该工具需另行安装参见 MASTG-TECH-0080 与 MASTG-TECH-0067 的讨论。快照性质lsof输出的是调用瞬间的打开文件快照不提供历史记录对短时打开的文件如加密后立即删除的临时文件需结合循环轮询或改用 straceMASTG-TECH-0032才能完整捕获其生命周期。不触发反调试这是 lsof 相对 strace 的显著优势——它只是被动读取/proc不通过ptrace附加进程因此不会触发基于ptrace检测的反调试逻辑strace 则会在反调试启用后失败详见 MASTG-TECH-0032。(deleted)标记被 unlink 但仍被进程持有的文件会保留在输出中并标注(deleted)这正是发现应用试图销毁却未完全销毁的敏感临时文件的关键线索。关联资源本条技术原始文档Get Open FilesAndroidiOS 平台对应条目Get Open FilesiOS-c 进程名/-p pid过滤方式网络端口版Get Open Network Portslsof -i -a -p pidWebView 文件操作监控Monitor File System Operations in WebViews系统调用级追踪strace/ftrace/KProbesExecution Tracing方法级追踪Method Tracing典型应用测试密码学密钥落盘检测 MASTG-TEST-0013、MASTG-TEST-0014、MASTG-TEST-0015root 检测对抗 MASTG-TEST-0045总而言之lsof -p是 Android 动态分析中投入产出比极高的一招一条命令即可拿到进程级文件句柄全景为后续的 strace 深挖、文件取证和 hook 定位提供精确的靶点且天然规避了反调试对抗。把它纳入你的黑盒分析工具箱能在面对混淆与加固应用时显著提升定位效率。赞分享文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载相关推荐jc lsof 解析器详解将进程打开文件列表lsof转换为结构化 JSONjc lsof 解析器详解将进程打开文件列表lsof转换为结构化 JSON 本文以 jc/parsers/lsof.py https://link.git开发工具OWASP MASTG 实战用 Semgrep 静态检测 Android StrictMode 使用MASTG-DEMO-0039OWASP MASTG 实战用 Semgrep 静态检测 Android StrictMode 使用MASTG DEMO 0039 导读 本文基于 OW文档教程网络安全Android 对象反序列化漏洞检测实战OWASP MASTG MASTG-DEMO-0100 与 semgrep 静态分析Android 对象反序列化漏洞检测实战OWASP MASTG MASTG DEMO 0100 与 semgrep 静态分析 本篇技术指南围绕 OWASP 移文档教程网络安全上一篇终极指南10分钟上手Mac CLI让开发者效率提升300%的命令行神器下一篇gh_mirrors/mi/misbrands历史里程碑项目发展中的关键事件回顾创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进