)
文档教程网络安全【免费下载链接】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点击查看免费下载本文以 OWASP Mobile Application Security Testing GuideMASTG知识条目 MASTG-KNOW-0021 为骨架系统讲解 Android 平台上对象序列化的六大技术路线Java Serializable、JSON、XML、ORM、Parcelable、Protocol Buffers及其安全特性并结合本仓库中的静态分析规则 mastg-android-object-deserialization.yml、测试用例 MASTG-TEST-0337 与漏洞演示 MASTG-DEMO-0100完整还原格式选型 → 内存特性 → 加密/完整性保护 → 反序列化攻击面 → 自动化检测的实战链路。引言序列化是 Android 应用安全测试的必修课对象序列化Object Serialization是把对象及其数据表示为字节序列的过程反向操作称为反序列化。它是 Android 应用中最常见的隐形数据通道应用之间通过Intent传递序列化对象、进程间通信IPC借助Parcel打包数据、网络层与本地缓存里流动着 JSON/XML/Protobuf 文本。序列化本身并不安全——它只是一种二进制或文本格式攻击者完全可以伪造序列化数据真正决定安全边界的是反序列化的输入从哪来、是否经过类型过滤、敏感数据是否加密或签名。本文依据 MASTG-KNOW-0021 的完整知识框架逐一剖析每种序列化方案的技术原理与安全取舍读者学完后将能为 Android 数据通道选择正确的序列化方案识别并修复不安全的反序列化逻辑并使用 MASTG 提供的规则与工具完成静态检测。Java Serializable API最经典也最容易被滥用的二进制格式原理与实现Java 对象可以通过 Serializable 接口序列化为字节序列用于本地存储典型如.ser文件。序列化不是安全机制它只是一种二进制表示只要密钥安全存放对序列化后的数据做加密与 HMAC 签名是可行的。反序列化要求当前类与序列化时使用的类版本一致——一旦类结构发生变更ObjectInputStream就无法从旧的.ser文件重建对象。实现一个Serializable类只需实现该接口原文档示例import java.io.Serializable; public class Person implements Serializable { private String firstName; private String lastName; public Person(String firstName, String lastName) { this.firstName firstName; this.lastName lastName; } //.. //getters, setters, etc //.. }随后即可在另一个类中用ObjectInputStream/ObjectOutputStream读写该对象// 写入 ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(person.ser)); oos.writeObject(new Person(Ada, Lovelace)); oos.close(); // 读取 ObjectInputStream ois new ObjectInputStream(new FileInputStream(person.ser)); Person p (Person) ois.readObject(); ois.close();安全风险readObject() 是反序列化攻击的核心入口Serializable 的真正危险不在序列化本身而在于ObjectInputStream.readObject()的不可控类型重建。本仓库的静态分析规则 mastg-android-object-deserialization.yml 正是针对这一调用点设计的rules: - id: mastg-android-object-deserialization severity: WARNING languages: - java metadata: summary: This rule looks for use of Object Deserialization message: [MASVS-CODE-4] The application makes use of Object deserialization in the code using the ObjectInputStream.readObject() function call. patterns: - pattern: |- $VAR new java.io.ObjectInputStream(...); ... $OBJ $VAR.readObject();该规则对应 MASVS-CODE-4代码质量与构建设置类别下与反序列化相关的弱点。从源码结构可以推断只要出现new ObjectInputStream(...)后紧跟readObject()的模式即触发告警——因为仅凭模式匹配无法判断反序列化数据是否来自可信源需要结合测试用例进一步评估数据来源与过滤策略。端到端漏洞演示MASTG-DEMO-0100仓库中的 MASTG-DEMO-0100 完整还原了一次真实可利用的反序列化提权攻击。演示应用MainActivity在onCreate()中调用MastgTest(this).processIntent(intent)processIntent()读取Intent的payload_b64extraBase64 解码后直接交给ObjectInputStream.readObject()若结果是BaseUser子类则覆盖UserManager.currentUserpublic final void processIntent(Intent intent) ... { ... if (intent.hasExtra(payload_b64)) { String b64Payload intent.getStringExtra(payload_b64); ... byte[] serializedPayload Base64.getDecoder().decode(b64Payload); ObjectInputStream ois new ObjectInputStream(new ByteArrayInputStream(serializedPayload)); Object untrustedObject ois.readObject(); ois.close(); if (untrustedObject instanceof BaseUser) { UserManager.INSTANCE.setCurrentUser((BaseUser) untrustedObject); ... } } }攻击者只需一条adb命令携带预先序列化好的AdminUserisAdmin true对象即可完成无认证提权adb shell am start -n org.owasp.mastestapp/.MainActivity --es payload_b64 rO0ABXNyAChvcmcub3dhc3AubWFzdGVzdGFwcC5NYXN0Z1Rlc3QkQWRtaW5Vc2VyAAAAAAAAAMgCAAFaAAdpc0FkbWlueHIAJ29yZy5vd2FzcC5tYXN0ZXN0YXBwLk1hc3RnVGVzdCRCYXNlVXNlcgAAAAAAAABkAgABTAAIdXNlcm5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAD0V4cGxvaXRlZCBBZG1pbgE该 payload 由 PayloadGenerator.java 生成——实例化AdminUser(username Exploited Admin, isAdmin true)用ObjectOutputStream序列化后 Base64 编码。执行adb命令后再点击应用的 Start 按钮界面会显示PRIVILEGED ADMIN!因为当前用户状态已被恶意AdminUser覆盖。演示的run.sh运行 MASTG-TOOL-0110 规则后output.txt 会输出所有ObjectInputStream.readObject()的位置若存在可利用的 gadget chain此类不安全反序列化甚至可能升级为任意代码执行。JSONString 化的数据通道机密难以从内存清除Android 平台自带JSONObject与JSONArray类同时也支持 GSON、Jackson、Moshi 等第三方库。各库的核心差异在于是否用反射组装对象、是否支持注解、能否构建不可变对象、内存占用大小。原文档的 GSON 示例展示了最简洁的序列化/反序列化写法class BagOfPrimitives { private int value1 1; private String value2 abc; private transient int value3 3; BagOfPrimitives() { // no-args constructor } } // Serialization BagOfPrimitives obj new BagOfPrimitives(); Gson gson new Gson(); String json gson.toJson(obj); // json is {value1:1,value2:abc}注意示例中的transient关键字value3被排除在序列化之外这是 JSON/序列化实践中排除敏感字段如临时密码的通用手段。关键安全特性JSON 表示几乎都是 String 化的因此不可变。这意味着任何存入 JSON 的机密Secret都更难从内存中抹除——攻击者可以从内存转储memory dump中恢复这些字符串。JSON 数据可以存放在任意位置如 NoSQL 数据库或文件但凡是含有机密的 JSON 都必须加密或 HMAC 保护详见本仓库的 Android 数据存储测试 章节。XML解析器选型与 XXE 攻击面Android 内置XmlPullParser接口提供易于维护的 XML 解析其两个实现为KXmlParser和ExpatPullParser此外还可使用 Java 运行时自带的SAX解析器。与 JSON 类似XML 主要基于 String 工作String 型机密同样难以从内存中清除含有机密或不可篡改信息的 XML 需要额外的保护如加密/HMAC。XML 真正的危险在于 XML 外部实体XXE攻击恶意 XML 可能读取应用仍可访问的外部数据源造成信息泄露或 SSRF。防护要点包括禁用外部实体解析、使用安全解析器配置详见 OWASP XXE 防护手册。反序列化安全测试应同时检查XML 数据的来源是否可信、解析器是否开启了不安全的 DTD/外部实体选项。ORM面向数据库的对象映射安全取决于库的选择与加密对象-关系映射ORM库直接提供对象 ↔ 数据库的存储与实例化能力。基于 SQLite 的库包括OrmLiteSugarORMGreenDAOActiveAndroid而 Realm 使用自研数据库引擎存储类内容。ORM 能提供的保护强度主要取决于数据库本身是否加密。SQLite 默认不加密若应用依赖 ORM 存储机密数据必须引入 SQLite 加密扩展或数据库级加密方案否则数据库文件一旦被提取如通过备份、root 设备所有 ORM 序列化的数据都将明文暴露。完整评估请参考 Android 数据存储测试 章节。Parcelable为 Intent/Binder 而生但不适合落盘Parcelable 是用于将类实例写入/恢复自 Parcel 的接口。Parcel常被用来将类打包进Bundle随Intent在组件间传递。标准实现模板如下Android 开发者文档示例public class MyParcelable implements Parcelable { private int mData; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(mData); } public static final Parcelable.CreatorMyParcelable CREATOR new Parcelable.CreatorMyParcelable() { public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } public MyParcelable[] newArray(int size) { return new MyParcelable[size]; } }; private MyParcelable(Parcel in) { mData in.readInt(); } }两条明确的安全建议不要用 Parcelable 落盘持久化涉及 Parcel 与 Intent 的机制可能随 Android 版本演进而变化且Parcelable可能包含IBinder指针指向系统资源不适合跨进程/跨时间重建落盘后无法保证稳定与安全注意 IPC 边界Parcel 数据经 Binder 在进程间传递来自其他应用的Intentextra 属于不可信输入。从 MASTG-KNOW-0020 可以确认Binder 框架采用客户端-服务器模型调用方的参数被 marshal 成 parcel 后发给持有线程池的 Binder 服务器Intent正是构建在 Binder 之上的异步通信框架。因此对接收到的Bundle/Parcel内容必须校验来源与类型。Protocol Buffers高效的二进制协议但不含机密保护Protocol Buffers 是 Google 推出的平台无关、语言中立的二进制序列化机制适用于高性能结构化数据交换。历史上有过相关漏洞如 CVE-2015-5237。明确结论Protocol Buffers 不提供任何机密性保护——没有内置加密。传输或存储 Protobuf 数据时机密性必须由上层方案TLS、磁盘加密、字段级加密等承担完整性则需要额外的 HMAC/签名机制。六大方案安全要点速查序列化方案典型用途内存特性机密保护主要攻击面Java Serializable.ser本地存储二进制、可控性一般需自行加密/HMACObjectInputStream.readObject()反序列化攻击、gadget chainJSONJSONObject/GSON/Jackson/Moshi文件、NoSQL、网络String 化、不可变机密难清除需自行加密/HMAC解析器差异、不可变字符串残留机密XMLXmlPullParser/KXmlParser/ExpatPullParser/SAX文件、数据库、配置String 化、不可变需自行加密/HMACXXE 外部实体攻击ORMOrmLite/SugarORM/GreenDAO/ActiveAndroid/RealmSQLite/自有库持久化取决于底层库取决于数据库是否加密明文数据库文件泄露ParcelableIntent/Bundle进程内与 IPC 传递二进制、含IBinder指针不适合持久化跨版本兼容、不可信来源数据Protocol Buffers高性能结构化数据紧凑二进制无内置加密上层缺少加密/HMAC 时的机密泄露从知识到实践用 MASTG 体系完成反序列化安全测试测试用例MASTG-TEST-0337MASTG-TEST-0337 是知识条目 MASTG-KNOW-0021 的配套测试对应弱点 MASWE-0050不可信数据的对象反序列化引用。其核心思路与上文各方案的安全边界完全一致Android 应用可能通过Intentextras、Bundle、IPC payload、文件或网络响应重建对象若未限制允许的类或未在反序列化前校验输入就可能引入非预期的应用行为或不安全的状态变更。测试步骤使用 MASTG-TECH-0013 对应用进行逆向工程使用 MASTG-TECH-0014 检索相关 API如ObjectInputStream.readObject()、XMLDecoder等。判定标准若应用对来自不可信源例如任何其他应用发来的Intentextras的数据进行反序列化且没有适当的校验或类型过滤测试即失败。静态检测实践在源码扫描阶段可以直接复用本仓库的规则文件# 使用 MASTG-TOOL-0110semgrep运行反序列化规则 semgrep --config rules/mastg-android-object-deserialization.yml path/to/app/src规则命中后输出会列出所有ObjectInputStream.readObject()调用位置参考 MASTG-DEMO-0100 的 output.txt随后对照上文输入源 类型过滤两条主线人工确认风险等级。加固建议清单结合 MASTG-KNOW-0021 与演示用例落地到代码层面的防护措施包括反序列化前做类型白名单过滤自定义ObjectInputStream子类重写resolveClass()只允许预期的类集合阻断 gadget chain敏感数据分离机密数据不要塞进序列化对象改用 Android Keystore 等专用安全存储数据完整性与机密性对落盘/传输的序列化数据JSON、XML、.ser、Protobuf统一加密 HMAC密钥存放于 KeystoreXML 解析器禁用外部实体关闭 DTD、外部实体解析防 XXE审视数据源所有来自外部应用Intent/Bundle/IPC 的数据一律视为不可信先校验再反序列化避免 Parcelable 持久化进程内传递可用落盘持久化改用上述安全方案之一。总结对象序列化是 Android 应用数据传输与持久化的基础设施也是攻击者最常利用的入口之一。MASTG 知识条目 MASTG-KNOW-0021 给出的核心判断可以概括为三句话序列化格式本身不是安全机制机密数据的保护加密/HMAC必须在方案之外额外实现反序列化不可信输入必须经过类型过滤与校验。配合本仓库的 静态分析规则、测试用例 MASTG-TEST-0337 与 漏洞演示 MASTG-DEMO-0100开发者与安全测试人员可以获得从选型评估到自动化检测再到加固修复的完整闭环。赞分享文档教程网络安全【免费下载链接】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点击查看免费下载相关推荐Hutool序列化对象序列化与反序列化Hutool序列化对象序列化与反序列化 引言为什么需要序列化 在现代分布式系统和微服务架构中对象序列化Serialization与反序列化Dese后端开发工具Android 对象反序列化漏洞检测实战OWASP MASTG MASTG-DEMO-0100 与 semgrep 静态分析Android 对象反序列化漏洞检测实战OWASP MASTG MASTG DEMO 0100 与 semgrep 静态分析 本篇技术指南围绕 OWASP 移文档教程网络安全如何在RedwoodJS中掌握对象序列化与反序列化完整指南如何在RedwoodJS中掌握对象序列化与反序列化完整指南 RedwoodJS作为现代全栈框架提供了强大的对象序列化与反序列化机制帮助开发者在API调用、后端前端Web框架开发工具上一篇5分钟快速上手Mirai Console Loader安装与配置终极教程下一篇InsightFace性能瓶颈分析CPU与GPU资源占用优化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考