文档教程网络安全【免费下载链接】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-TEST-0331系统讲解如何在 iOS 应用中静态检测已弃用的UIWebView组件。文章将首先说明为什么UIWebView自 iOS 12 起被 Apple 弃用、它与WKWebView在安全模型上的本质差异然后给出可复现的二进制静态分析步骤解包 IPA → radare2 检索符号与交叉引用并结合仓库中的知识条目、最佳实践与失败 Demo 源码帮助读者掌握发现即修复的完整取证与迁移能力。测试用例概览MASTG-TEST-0331该测试用例定义于 MASTG-TEST-0331.md属于 iOS 平台、静态代码分析类型用于验证应用是否仍在使用已弃用的UIWebViewAPI。其元数据与关联如下平台iOS类型静态、代码分析type: [static, code]可用版本MASTG 2.0 起available_since: 2.0弃用版本MASTG 12.0 起deprecated_since: 12.0关联 MASWEMASWE-0035iOS 平台交互相关的弱点枚举关联最佳实践MASTG-BEST-0032关联知识条目MASTG-KNOW-0076测试目标测试的核心目标在应用二进制中查找对UIWebView的引用。UIWebView是自 iOS 12.0 起被 Apple 弃用的组件其继任者是WKWebView。使用UIWebView存在安全与性能双重风险它不允许完全禁用 JavaScript、缺乏进程隔离而WKWebView提供、且不支持 Content Security PolicyCSP等现代 Web 安全特性。测试步骤三步走使用 MASTG-TECH-0058Exploring the App Package 从应用包IPA中提取相关二进制。使用 MASTG-TECH-0066Static Analysis on iOS 在应用二进制中检索相关 API 引用。观察输出应得到应用中所有UIWebView使用位置的列表只要发现任何UIWebView使用测试即判失败fail。为什么 UIWebView 必须被淘汰安全模型对比知识条目 MASTG-KNOW-0076 对 iOS WebView 家族做了完整梳理。iOS 应用中嵌入 Web 内容主要有三种方式组件引入版本JavaScript 可禁用进程隔离现代 Web 安全特性WKWebViewiOS 8✅ 可通过javaScriptEnabled完全禁用✅ 进程外渲染✅ 支持 CSP 等SFSafariViewControlleriOS 9❌ 无法禁用——UIWebView已弃用早期❌ 无法禁用❌ 无❌ 不支持UIWebView 的三个致命安全短板JavaScript 无法完全禁用UIWebView中 JavaScript 默认开启且无法关闭一旦渲染不可信内容注入的脚本可直接执行为脚本注入攻击敞开大门。缺乏进程隔离UIWebView与主应用进程共享地址空间Web 内容中的内存破坏漏洞memory corruption bugs会直接影响主应用进程而WKWebView采用进程外out-of-process渲染隔离了 Web 内容崩溃对主进程的冲击。不支持现代 Web 安全特性UIWebView不支持 Content Security PolicyCSP等现代 Web 安全机制削弱了对 Web 内容的整体防护能力。WKWebView 的替代安全能力作为官方推荐的替代方案WKWebView提供javaScriptEnabled属性默认开启但可完全禁用缓解脚本注入攻击javaScriptCanOpenWindowsAutomatically属性可阻止 JavaScript 自动打开新窗口如弹窗进程外渲染内存破坏漏洞不会影响主应用进程。此外WKWebView与UIWebView都支持 JavaScript BridgeWebView 与原生代码的通信桥但这本身也是攻击面——任何暴露给 WebView JavaScript 引擎的原生功能同样对 WebView 中运行的恶意 JavaScript 可用。相关细节可参考 MASTG-KNOW-0076 的 WebView-Native Bridges 一节。前置知识WebView 在 iOS 中的角色定位理解UIWebView的检测需先建立 iOS WebView 的整体认知依据 MASTG-KNOW-0076WebView 是应用内嵌浏览器组件用于在应用 UI 中直接展示交互式 Web 内容iOS WebView 执行 JavaScript 并渲染 HTML因此渲染不可信内容时可能执行注入脚本。SFSafariViewController用于提供通用 Web 浏览体验具有只读地址栏带安全指示器、ActionShare按钮、Done 按钮、前进/后退与Safari按钮等特征布局。它无法禁用 JavaScript、与 Safari 共享 Cookie 与网站数据且应用无法访问用户的 AutoFill 数据、浏览历史或网站数据。根据 App Store Review Guidelines它不得被其他视图或图层隐藏或遮挡。此类 WebView 通常可被快速识别故不在静态/动态分析范围之内。WebView 网络层安全iOS WebView 底层引擎是 WebKit与 Safari 相同因此同样受 App Transport SecurityATS与混合内容Mixed Content策略约束开发者可为 WebView 单独配置 ATS例如 Info.plist 中的NSAllowsArbitraryLoadsInWebContent配置不当会引入安全问题。在WKWebView中WebKit 自身会默认拦截 HTTPS 页面加载的 HTTP 活动混合内容即使放宽 ATS 也无法关闭该防护hasOnlySecureContentAPI 可用于页面加载完成后判断最终是否只加载了安全资源仅具信息性非预防性。实操从 IPA 到二进制的静态检测全流程第一步提取应用包并定位主二进制依据 MASTG-TECH-0058首先获取目标应用的 IPA 包然后使用标准 ZIP 工具解压unzip iGoat-Swift.ipa解压后在Payload目录下可找到 Application Bundle.app。以仓库中的失败 Demo MASTG-DEMO-0094 为例其主二进制为./Payload/MASTestApp.app/MASTestApp。Bundle 中值得关注的关键项包括Info.plist应用配置信息Bundle ID、版本号、显示名称等_CodeSignature/对 Bundle 内所有文件的签名 plistFrameworks/应用的原生库.dylib 或 .frameworkPlugIns/可能包含应用扩展.appex主二进制与 Bundle 同名不含 .app 后缀包含应用代码。第二步用 radare2 检索 UIWebView 引用依据 MASTG-TECH-0066对 iOS 二进制进行静态分析的首选工具是 radare2r2。iOS 应用二进制只能反汇编无 Java 式反编译器因此需借助符号、字符串与交叉引用分析。使用 MASTG-TOOL-0073radare2 打开二进制并运行检测脚本-i选项执行 r2 脚本r2 -i uiwebview.r2 ./Payload/MASTestApp.app/MASTestApp仓库中的检测脚本 uiwebview.r2 展示了三个关键检索命令# 1. 列出二进制中所有与 UIWebView 相关的符号/标志 f~UIWebView # 2. 列出指向 UIWebView 类的所有交叉引用 axt 0x100010108 # 3. 反汇编包含交叉引用的代码片段 pd 10 0x100004514命令要点依据 MASTG-TECH-0066f~用于过滤 flags标志可检索动态解析的符号——这类符号不会出现在afl函数列表中例如该技术文档中canEvaluatePolicy的示例UIWebView正属于此类通过动态解析引用的类符号axt addr查找指向给定地址的交叉引用为临时 seek 语法也可直接axt 0x100010108pd N addr从指定地址开始反汇编 N 条指令用于查看调用上下文若需查看函数列表可用afl并配合~过滤如afl~UIWebView用afl,输出 CSV 便于表格化分析。第三步解读输出并判定仓库中 output.txt 给出了真实运行结果List all uses of the UIWebView class: 0x100010108 8 reloc.UIWebView List all xrefs to the UIWebView class: sym.MASTestApp.MastgTest.mastg.completion__1 0x100004514 [DATA:r--] ldr x0, reloc.UIWebView Code snippet that contains the xref to UIWebView: │ 0x100004514 ldr x0, [x8, 0x108] ; [0x100010108:4]231 │ ; reloc.UIWebView ; void *arg0 │ 0x100004518 bl sym.imp.objc_allocWithZone ; void *objc_allocWithZone(void *arg0) │ 0x10000451c adrp x26, sym.__METACLASS_DATA__TtC10MASTestAppP33_9471609302C95FC8EC1D59DD4CF2A2DB19ResourceBundleClass ; 0x100010000 │ 0x100004520 ldr x1, [x26, 0x90] ; [0x100010090:4]0xb0d9 ; reloc.fixup.init │ 0x100004524 bl sym.imp.objc_msgSend ; void *objc_msgSend(void *instance, char *selector) │ 0x100004528 mov x21, x0 │ 0x10000452c adrp x8, sym.imp.swift_deallocObject ; 0x10000a000 │ 0x100004530 add x8, x8, 0xc90 ; 0x10000ac90 ; https://owasp.org解读要点f~UIWebView命中了reloc.UIWebView重定位符号说明二进制确实引用了UIWebView类axt 0x100010108显示sym.MASTestApp.MastgTest.mastg.completion__1函数在地址0x100004514处通过ldr x0, reloc.UIWebView加载该类引用反汇编片段进一步揭示调用链objc_allocWithZone分配实例 →objc_msgSend发送初始化消息 → 构造https://owasp.org的 URL —— 与 Demo 源码行为完全吻合。判定规则测试用例 MASTG-TEST-0331 的 Evaluation 规则只要在应用中发现任何UIWebView的使用测试即判失败fail。对应地MASTG-DEMO-0094 被标记为kind: fail其输出明确包含从sym.MASTestApp.MastgTest.mastg.completion__1函数对UIWebView的引用因此测试失败。仓库中的失败样本源码剖析为了让你完整理解检测目标在源码层面的形态MastgTest.swift 展示了该 Demo 的核心代码import SwiftUI import UIKit import WebKit struct MastgTest { inline(never) _optimize(none) public static func mastgTest(completion: escaping (String) - Void) { DispatchQueue.main.async { // Build the alert completion(Showing WebView for 2s...) // 1. Create the WebView DispatchQueue.main.asyncAfter(deadline: .now() 1){ let webView UIWebView() webView.loadRequest(URLRequest(url: URL(string: https://owasp.org)!)) ... } } } ... }该样本的审计价值在于直接实例化UIWebView()并通过loadRequest(URLRequest(url:))加载远程 URL——这是 MASTG-TEST-0331 检测的最典型模式inline(never) _optimize(none)编译注解确保该函数不被内联优化使二进制中保留清晰的符号与调用痕迹便于逆向验证样本加载的是 HTTPS 页面https://owasp.org说明UIWebView弃用检测与网络内容本身无关——即使加载安全的 HTTPS 内容使用已弃用且无进程隔离的组件仍属安全缺陷。提示该文件同时import WebKit与UIKit若将UIWebView()替换为WKWebView()即可在保持整体结构不变的情况下完成迁移。修复指引迁移到 WKWebViewMASTG-BEST-0032检测出UIWebView后应依据最佳实践 MASTG-BEST-0032 进行迁移Apple 于 iOS 12 弃用UIWebView改用WKWebView以获得更好的安全性与性能。迁移的核心收益进程外渲染Web 内容与主应用进程隔离降低内存破坏影响主进程的风险增强的 JavaScript 控制可完全禁用 JavaScript预防脚本注入漏洞现代 Web 安全特性支持如 Content Security PolicyCSP进一步增强 Web 内容安全。在迁移实践中可结合 MASTG-KNOW-0076 中的WKWebView配置要点注意以下安全相关的关键差异本地文件加载的目录边界iOS 通过allowingReadAccessTo参数强制按加载逐目录边界约束文件访问。loadFileURL(_:allowingReadAccessTo:)指向单文件则仅该文件可访问指向目录则目录内所有文件可访问含 Swift 示例代码。未文档化的文件访问偏好WKWebView中allowFileAccessFromFileURLs与allowUniversalAccessFromFileURLs默认均为false且只能通过 Key-Value CodingsetValue:forKey:设置——这些是内部 WebKit 偏好非公开 API跨系统版本可能失效。注意UIWebView恰好相反这两项默认开启且无法关闭这使其在加载本地内容时存在固有安全缺陷。JavaScript Bridge 攻击面WKWebView通过add(_:name:)注册消息处理器postMessage自动将 JS 对象序列化为原生对象桥暴露的任何原生能力对 WebView 中的恶意脚本同样可用迁移时需重新审计桥的暴露面。从检测到修复的完整闭环MASTG-TEST-0331 定位问题 → MASTG-BEST-0032 提供迁移策略 → MASTG-KNOW-0076 提供 WKWebView 安全配置细节三者协同构成完整的 iOS WebView 安全治理路径。延伸阅读测试用例 MASTG-TEST-0331本文核心测试定义知识条目 MASTG-KNOW-0076WebViewsiOS WebView 类型、文件访问与桥接的完整安全知识最佳实践 MASTG-BEST-0032Migrate from UIWebView to WKWebView官方迁移建议技术条目 MASTG-TECH-0058Exploring the App PackageIPA 解包与 Bundle 结构分析技术条目 MASTG-TECH-0066Static Analysis on iOSradare2 静态分析方法论Demo MASTG-DEMO-0094包含失败样本源码、r2 脚本与真实输出工具 MASTG-TOOL-0073radare2静态分析工具详情赞分享文档教程网络安全【免费下载链接】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 MASTG iOS 实战用 radare2 定位已废弃的 UIWebViewMASTG-DEMO-0094 / MASTG-TEST-0331OWASP MASTG iOS 实战用 radare2 定位已废弃的 UIWebViewMASTG DEMO 0094 / MASTG TEST 0331文档教程网络安全OWASP MASTG 测试指南在 iOS 应用中检测被破解的对称加密算法MASTG-TEST-0210OWASP MASTG 测试指南在 iOS 应用中检测被破解的对称加密算法MASTG TEST 0210 本文基于 OWASP Mobile Applic文档教程网络安全OWASP MASTG 指南iOS WKNavigationDelegate 证书校验绕过检测MASTG-TEST-0397OWASP MASTG 指南iOS WKNavigationDelegate 证书校验绕过检测MASTG TEST 0397 iOS 中 WKWebVie文档教程网络安全上一篇HowToGraphQLtypescript-helix 教程用 Prisma Client 把 GraphQL Server 与数据库连接起来下一篇如何快速获取中国运营商IP地址库每日更新的终极指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考