この文書は2017年以降更新されていません
iOS アプリケーションのセキュリティテストに関するチートシート
OWASP 作成
ドラフト版チートシート – 編集中
はじめに
このチートシートは、iOS アプリケーションをテストする際に行う作業のチェックリストです。
モバイルアプリケーションを評価するときには、クライアントソフトウェア、通信チャネル、サーバー側インフラストラクチャという複数の領域を考慮する必要があります。
iOS アプリケーションをテストするには、通常、ジェイルブレイクしたデバイス (インストールできるソフトウェアについての制約がないデバイス) が必要になります。
情報収集
- アプリケーションの動作を観察する
- アプリケーションのデータの状態 (保存、転送中、または表示中) と機密度を判断する
- アクセス方法を識別する
- 使用されているフレームワークを識別する
- 使用されているサーバー側の API を特定する
- 使用されているプロトコルを識別する
- アプリケーションと連携する他のアプリケーションやサービスを識別する
- App Store のバイナリを復号化する。.ipa は、実行時にカーネルの mach loader によって復号されます。Cydia から、Crackulous、AppCrack、Clutch という複数のアプリケーションが入手できます。また、GDB も使用できます。LC_ENCRYPTION_INFO の "cryptid" フィールドで、アプリケーションが暗号化されているかどうかを識別できます。otool を使って otool –l <アプリ名> | grep –A 4 LC_ENCRYPTION_INFO とすることで確認できます。
- アプリケーションがコンパイルされた対象のアーキテクチャを識別する。otool –f <アプリ名> または lipo -info <アプリ>。
- アプリケーションや動的ロードライブラリからどの関数、クラス、およびメソッドが参照されているかについて情報を収集する。nm <アプリ名> を使用
- 動的ライブラリの依存関係のリストを作成する。otool –L <アプリ名> を使用
- アプリケーションのロードコマンドをダンプする。otool –l <アプリ名> を使用
- コンパイルされたアプリケーションからランタイム情報をダンプする。プログラムにコンパイルされた各クラスとそれに関連するメソッド、インスタンス変数、およびプロパティを特定する。class-dump-z <アプリ名> を使用。それを 1 つの .h ファイルにまとめ、後からメソッドスウィズル用のフックを作成したり、単にアプリのメソッドを読み取りやすくしたりするために使用できます。
- アプリケーション固有の資格情報とパスワードがキーチェーンに格納されている場合は、dump_keychain を使用してキーチェーンをダンプし、資格情報とパスワードを明らかにする。
実装されているセキュリティ機能を識別する。
- PIE (Position Independent Executable: 位置独立実行形式) の位置特定: "–fPIE –pie" フラグを使用して PIE なしでコンパイルされたアプリは、実行ファイルを固定のアドレスにロードします。これを確認するには、コマンド otool –hv <アプリ名> を使用します (otool は、ipa を解凍して取り出したアプリバイナリに対して実行する必要があります。ipa に対して直接実行しないでください)
- スタックスマッシング攻撃に対する防御: –fstack-protector-all compiler フラグを指定してコンパイルされたアプリでは、スタック上に保存されるベースポインター、命令ポインター、および関数の引数を保護するために、一緒に "カナリア" が配置されます。関数のリターン時に、このカナリアが上書きされたかどうかの検証が行われます。これを確認するには、otool –I –v <アプリ名> | grep stack を使用します。アプリケーションがスタックスマッシング防御付きでコンパイルされた場合は、2 つの未定義のシンボル "___stack_chk_fail" と "___stack_chk_guard" が存在します。
アプリケーショントラフィックの分析
- エラーメッセージの分析
- キャッシュ可能情報の分析
- トランスポート層セキュリティ (TLS バージョン、NSURLRequest オブジェクト)
- XML プロセッサへの攻撃
- SQL インジェクション
- プライバシー問題 (機密情報の漏えい)
- 不適切なセッション操作
- 信頼できない入力に基づく判断
- 暗号化処理の間違った使い方
- アンマネージコード
- URL スキーム
- プッシュ通知
- 認証
- 認可
- セッション管理
- データストレージ
- データ検証 (入力、出力)
- トランスポート層の保護: 証明書が検証されているか。アプリケーションが証明書のピン留めを実装しているか
- DoS (サービス運用妨害)
- ビジネスロジック
- UDID または MAC ID の使用方法 (プライバシーの問題)
ランタイム分析
- アプリケーションを逆アセンブルする (gdb)
- ファイル システムの操作を分析する
- class-dump-z で生成した .h ファイルを使用して、注意を引くいくつかのメソッドのメソッドスウィズル (メソッド入れ換え) 用フックを作成し、データの流れを調べるか、"盗聴" アプリを作成する。
- デバッガー (gdb) を使用してアプリケーションを分析する: メモリ内のオブジェクトの調査、関数とメソッドの呼び出し。実行時の変数とメソッドの差し替え。
- CFStream と NSStream を調査する
- プロトコルハンドラーを調査する (application:openURL - URL リクエストのインスタンスを作成したソースアプリケーションを検証) 例: 悪意のある iframe を使用して、アプリケーションの既定のランディングページの再構成を試みる。
- バッファオーバーフローとメモリ破損
- クライアント側インジェクション
- 実行時インジェクション
- ソースコードにアクセスできるならば、Xcode で様々なスキームでビルドしたバイナリでメモリをテストする
安全でないデータストレージ
- ログファイルを調査する (デバイスを開発環境に接続し、Xcode Organizer を使用してログを取得)
- アプリケーションフォルダー (var/mobile/Applications)、キャッシュ、バックアップ (iTunes) における安全でないデータストレージ
- 独自に作成されたファイルを調査する
- SQLlite データベースを分析する
- プロパティリストファイルを調査する
- ファイルキャッシュを調査する
- キーボードキャッシュへの安全でないデータストレージ
- Cookies.binarycookies を調査する
- iOS キーチェーン (/private/var/Keychains/keychain-2.db) を分析する: いつアクセスでき、どのような情報が含まれているか。キーチェーンに格納されたデータにアクセスできるのは、攻撃者がデバイスに物理的にアクセスできる場合に限られます。
- スナップショットに機密情報がないかどうかを確認する
- ファイルとキーチェーンエントリーのデータ保護を監査する (キーチェーンアイテムがアプリケーションからいつ読み取り可能であることが必要かを調べるには、データ保護のアクセシビリティ定数を確認します)
ツール
ツール | リンク | 説明 |
---|---|---|
Mallory proxy | http://intrepidusgroup.com/insight/mallory/ | バイナリプロトコル用のプロキシ |
Charles/Burp proxy | http://www.charlesproxy.com/ ; | HTTP と HTTPS 用のプロキシ |
OpenSSH | http://www.openssh.com/ | iPhone に SSH 経由でリモート接続 |
Sqlite3 | http://www.sqlite.org/ | Sqlite データベースクライアント |
GNU Debugger | http://www.gnu.org/software/gdb/ | 実行時分析とリバースエンジニアリング |
Syslogd | https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/syslogd.8.html | iPhone ログを表示 |
Tcpdump | http://www.tcpdump.org/ | ネットワークトラフィックをキャプチャ |
Otool | http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/otool.1.html | Odcctools: otool – オブジェクトファイルの表示ツール |
Cycript | http://www.cycript.org/ | Objective-C クラスと連携するように設計された言語 |
SSL Kill switch | https://github.com/iSECPartners/ios-ssl-kill-switch | SSL 証明書の検証を無効にするブラックボックスツール。NSURL の証明書のピン留めを含む |
Plutil | http://scw.us/iPhone/plutil/ | Plist ファイルを表示 |
nm | 関数とメソッドの名前やロードアドレスが格納されているシンボルテーブルを表示する分析ツール。 | |
sysctl | https://developer.apple.com/library/mac/#documentation/Darwin/Reference /ManPages/man8/sysctl.8.html | カーネルの状態変数の読み取りや変更を行うためのユーティリティ |
dump_keychain | https://github.com/emonti/iOS_app_re_tools | キーチェーンをダンプするためのユーティリティ |
Filemon | http://www.newosxbook.com/files/filemon.iOS | iOS ファイルシステムをリアルタイムに監視 |
FileDP | http://www.securitylearn.net/2012/10/18/extracting-data-protection-class-from-files-on-ios/ | ファイルのデータ保護を監査 |
BinaryCookieReader | http://securitylearn.net/wp-content/uploads/tools/iOS/BinaryCookieReader.py | cookies.binarycookies ファイルを読み取る |
lsof ARM Binary | https://github.com/u35tpus/iosrep/tree/master/lsof | オープンされている全ファイルとそれらをオープンしたプロセスの一覧 |
lsock ARM Binary | http://www.newosxbook.com/index.php?page=downloads | ソケットの接続を監視 |
PonyDebugger Injected | https://github.com/dtrukr/PonyDebuggerInjected | Cycript を介したインジェクションにより、リモートデバッグが可能 |
Weak Class Dump | https://raw.github.com/limneos/weak_classdump/master/weak_classdump.cy | Cycript を介したインジェクションにより、クラスダンプを実行 (バイナリの暗号を解除できないときのため) |
TrustME | https://github.com/intrepidusgroup/trustme | SSL 証明書の検証を無効にする下位レベルのツール。証明書のピン留めを含む (NSURL を除くすべてが対象) |
Mac Robber | http://www.sleuthkit.org/mac-robber/download.php | ファイルシステムをイメージ化し、タイムラインを生成するための C コード、フォレンジックツール |
USBMux Proxy | https://github.com/st3fan/usbmux-proxy | ローカル TCP ポートを USB 経由で iPhone または iPod Touch デバイスに接続するためのコマンドラインツール |
iFunBox | http://www.i-funbox.com/ | ファイルシステムへのアクセス (ジェイルブレイク不要)、USBMux トンネラー、ipa インストーラー |
iNalyzer | https://appsec-labs.com/iNalyzer/ | iOS 侵入テストフレームワーク |
removePIE | https://github.com/peterfillmore/removePIE | アプリケーションの ASLR を無効化 |
snoop-it | https://code.google.com/p/snoop-it/ | iOS アプリのセキュリティ評価と動的分析を支援するツール。Objective-C クラスとメソッドのランタイムビューや、それらの値を変更するオプションを含む |
Idb | https://github.com/dmayer/idb | iOS の侵入テストや調査でよく使用される一部のタスクを簡易化する GUI (およびコマンドライン) ツール。 |
Damn Vulnerable iOS Application | http://damnvulnerableiosapp.com/ | iOS アプリケーションの評価スキルを習得するための、意図的に脆弱な iOS アプリケーション |
introspy | https://github.com/iSECPartners/Introspy-iOS | セキュリティ ベースの iOS API のフッキングとその出力のロギングに焦点を合わせた、セキュリティ分析のためのセキュリティプロファイリングツール |
MEMSCAN | https://github.com/hexploitable/memscan | 簡単に iOS プロセスメモリをディスクにダンプしたり、特定のバイト列を検索したりできるツール |
関連資料
- http://www.slideshare.net/jasonhaddix/pentesting-ios-applications
- https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Security_Testing_Guide
- http://pen-testing.sans.org/blog/pen-testing/2011/10/13/mobile-application-assessments-attack-vectors-and-arsenal-inventory#
- http://www.securitylearn.net/2012/09/07/penetration-testing-of-iphone-applications-part-3/
- Jonathan Zdziarski 著 『Hacking and securing iOS applications』(第 6、7、8 章)
- http://www.mdsec.co.uk/research/iOS_Application_Insecurity_wp_v1.0_final.pdf
Authors and Primary Editors
Oana Cornea - oanacornea123[at]gmail.com
Jason Haddix - jason.haddix[at]hp.com
Other Cheatsheets
OWASP Cheat Sheets Project Homepage
Developer Cheat Sheets (Builder)
- Authentication Cheat Sheet (Spanish)
- Choosing and Using Security Questions Cheat Sheet
- Clickjacking Defense Cheat Sheet
- C-Based Toolchain Hardening Cheat Sheet
- Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet
- Cryptographic Storage Cheat Sheet
- DOM based XSS Prevention Cheat Sheet
- Forgot Password Cheat Sheet
- HTML5 Security Cheat Sheet
- Input Validation Cheat Sheet
- JAAS Cheat Sheet
- Logging Cheat Sheet
- .NET Security Cheat Sheet
- OWASP Top Ten Cheat Sheet
- Password Storage Cheat Sheet
- Pinning Cheat Sheet
- Query Parameterization Cheat Sheet
- Ruby on Rails Cheatsheet
- REST Security Cheat Sheet
- Session Management Cheat Sheet
- SAML Security Cheat Sheet
- SQL Injection Prevention Cheat Sheet
- Transaction Authorization Cheat Sheet
- Transport Layer Protection Cheat Sheet
- Unvalidated Redirects and Forwards Cheat Sheet
- User Privacy Protection Cheat Sheet
- Web Service Security Cheat Sheet
- XSS (Cross Site Scripting) Prevention Cheat Sheet
Assessment Cheat Sheets (Breaker)
- Attack Surface Analysis Cheat Sheet
- XSS Filter Evasion Cheat Sheet
- REST Assessment Cheat Sheet
- Web Application Security Testing Cheat Sheet
Mobile Cheat Sheets
OpSec Cheat Sheets (Defender)
Draft Cheat Sheets
- Access Control Cheat Sheet
- Application Security Architecture Cheat Sheet
- Business Logic Security Cheat Sheet
- PHP Security Cheat Sheet
- Secure Coding Cheat Sheet
- Secure SDLC Cheat Sheet
- Threat Modeling Cheat Sheet
- Grails Secure Code Review Cheat Sheet
- IOS Application Security Testing Cheat Sheet
- Key Management Cheat Sheet
- Insecure Direct Object Reference Prevention Cheat Sheet
- Content Security Policy Cheat Sheet