MASTG-TEST-0087 フリーなセキュリティ機能が有効であることの確認 (Make Sure That Free Security Features Are Activated)

概要

静的解析

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, Position Independent Executable): pic true フラグによって示されます。

    • 使用する言語に関係なく、すべてのアプリに適用されます。

    • メインの実行可能ファイル (MH_EXECUTE) にのみ適用され、動的ライブラリ (MH_DYLIB) には適用されません。

  • スタックカナリア (Stack Canary): canary true フラグによって示されます。

    • Objective-C コードを含むアプリに適用されます。

    • 純粋な Swift アプリには必要ありません (Swift は設計上メモリセーフです)。

    • C/C++ コードを含むアプリでは特に重要です。アプリはメモリやポインタへの直接アクセスを提供して、バッファオーバーフローに対してより脆弱になるためです。

  • 自動参照カウント (ARC, Automatic Reference Counting): objc_autoreleaseobjc_retainAutorelease などのシンボルによって示されます。

    • Objective-C コードを含むバイナリにとって重要です。

    • 純粋に Swift で書かれたバイナリでは、ARC はデフォルトで有効になります。

    • ARC は Objective-C と Swift に固有のメモリ管理機能なので、純粋に C/C++ で記述されたバイナリには関係ありません。

動的解析

これらのチェックは 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
...

Last updated

Was this helpful?