この文書は2017年以降更新されていません

iOS アプリケーションのセキュリティテストに関するチートシート

OWASP 作成
ジャンプ先: 移動検索

ドラフト版チートシート – 編集中

はじめに

このチートシートは、iOS アプリケーションをテストする際に行う作業のチェックリストです。

モバイルアプリケーションを評価するときには、クライアントソフトウェア、通信チャネル、サーバー側インフラストラクチャという複数の領域を考慮する必要があります。

iOS アプリケーションをテストするには、通常、ジェイルブレイクしたデバイス (インストールできるソフトウェアについての制約がないデバイス) が必要になります。

2-18-2013 4-47-36 AM.png

情報収集

  • アプリケーションの動作を観察する
  • アプリケーションのデータの状態 (保存、転送中、または表示中) と機密度を判断する
  • アクセス方法を識別する
  • 使用されているフレームワークを識別する
  • 使用されているサーバー側の 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://www.portswigger.net/burp/

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 プロセスメモリをディスクにダンプしたり、特定のバイト列を検索したりできるツール

関連資料

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)

Assessment Cheat Sheets (Breaker)

Mobile Cheat Sheets

OpSec Cheat Sheets (Defender)

Draft Cheat Sheets