跳过内容

MASTG-TEST-0087:确保免费安全功能已激活

已弃用测试

此测试已**弃用**,不应再使用。**原因**:MASTG V2 中提供新版本

请查看以下涵盖此 v1 测试的 MASTG v2 测试

概述

静态分析

您可以使用 radare2 来检查二进制安全特性。

让我们以 Damn Vulnerable iOS App DVIA v1 为例。使用 radare2 打开它的主二进制文件

r2 DamnVulnerableIOSApp

并运行以下命令

[0x1000180c8]> i~pic,canary
canary   true
pic      true
[0x1000180c8]> is~release,retain
124  0x002951e0 0x1000891e0 LOCAL  FUNC 0        imp.dispatch_release
149  0x00294e80 0x100088e80 LOCAL  FUNC 0        imp.objc_autorelease
150  0x00294e8c 0x100088e8c LOCAL  FUNC 0        imp.objc_autoreleasePoolPop
151  0x00294e98 0x100088e98 LOCAL  FUNC 0        imp.objc_autoreleasePoolPush
152  0x00294ea4 0x100088ea4 LOCAL  FUNC 0        imp.objc_autoreleaseReturnValue
165  0x00294f40 0x100088f40 LOCAL  FUNC 0        imp.objc_release
167  0x00294f58 0x100088f58 LOCAL  FUNC 0        imp.objc_retainAutorelease
168  0x00294f64 0x100088f64 LOCAL  FUNC 0        imp.objc_retainAutoreleaseReturnValue
169  0x00294f70 0x100088f70 LOCAL  FUNC 0        imp.objc_retainAutoreleasedReturnValue

在这些示例中,所有特性均已启用

  • PIE (位置无关可执行文件):由标志 pic true 指示。

    • 适用于所有应用程序,与使用的语言无关。
    • 仅适用于主可执行文件 (MH_EXECUTE),不适用于动态库 (MH_DYLIB)。
  • 堆栈金丝雀:由标志 canary true 指示。

    • 适用于包含 Objective-C 代码的应用程序。
    • 纯 Swift 应用程序不一定需要(Swift 在设计上是内存安全的)。
    • 对于包含 C/C++ 代码的应用程序尤其重要,因为它们提供对内存和指针的直接访问,使其更容易受到缓冲区溢出的攻击。
  • ARC(自动引用计数):由诸如 objc_autoreleaseobjc_retainAutorelease 之类的符号指示。

    • 对于包含 Objective-C 代码的二进制文件很重要。
    • 对于纯 Swift 编写的二进制文件,默认启用 ARC。
    • ARC 与纯 C/C++ 编写的二进制文件无关,因为它是一种特定于 Objective-C 和 Swift 的内存管理功能。

动态分析

可以使用 objection动态执行这些检查。这是一个例子

com.yourcompany.PPClient on (iPhone: 13.2.3) [usb] # ios info binary
Name                  Type     Encrypted    PIE    ARC    Canary    Stack Exec    RootSafe
--------------------  -------  -----------  -----  -----  --------  ------------  ----------
PayPal                execute  True         True   True   True      False         False
CardinalMobile        dylib    False        False  True   True      False         False
FraudForce            dylib    False        False  True   True      False         False
...