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_autorelease
やobjc_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?