web-dev-qa-db-ja.com

iOS / Androidペンテスト

この質問はあいまいかもしれません。それは、どこから始めればよいかわからないためです。

ネットワーク、システム、ウィンドウなどのOSに焦点を当てたペンテストに関する本やコースはたくさんありますが、iOS/Androidなどのモバイルプラットフォームでは何も見つかりませんでした。

私はモバイルプラットフォームをテストし、保護する方法について学ぶことに非常に興味があります。リアルタイムのコンテンツ(場所、電話の状態、電話など)は貴重な情報であり、非常に興味深いものです。

私の理解では、ハードウェア/コンポーネントのため、携帯電話を扱う場合の侵入方法は異なります。

どのように、どこで始めて、モバイルペンテストの将来の職業を作ることができますか?

13
Rick Rhodes

標準SDKの一部であるエミュレーターとシミュレーターから始めます。他の環境よりも特定の環境を好む場合は、これらのプラットフォームのペンテストの信頼できるフレームワークに引き寄せられます。

たとえば、iOSアプリでは、Xcodeでコードをビルドした後、常にiOSシミュレーターから始めます。 Mac OS XシステムのHTTPおよびSSL/TLSプロキシをBurp Suite Professionalを実行するlocalhostに設定しました。次に、アプリを起動し、コマンドラインのdtrussツールにあるXcode DTrace機能を利用します。私は、smartphonesdumbappsツールでplistファイルを見る傾向があります。

Androidアプリでも同様です。最近では、IntelliJ IDEAとEclipseの間を行き来していますが、どちらも非常に使いやすいAndroid SDK統合ポイント。Eclipseの場合、それはADTです。ADTを介してエミュレーターを起動するのが好きです。DDMSを使用してファイルシステムやメモリとやり取りしたいので、主にデバッグに役立ちます。ソフトウェアトレースに関してはしかし、私はadb Shellにホップして、関心のあるプロセスと同時logcatを追跡する傾向があります。プロキシ処理では、通常、DNSブラックホールを使用して、エミュレータの-dns-を使用するBurp Suite Professionalへの透過プロキシを作成します。サーバーフラグ。ADTのマニフェストを確認すること、特に権限とインテントを確認することは有用です。

ビルド可能なソースがない場合、この変更の多くは変わります。さらに悪いことに、自己変更またはセルフチェックコードを備えたアプリをターゲットにしている可能性があります。これらの状況では、アプリの分解と逆コンパイルを含むアプローチが必要になります。 iOSの場合、class-dump-z、otool、otx、およびi386codedumpツールは、IDA Proとともに安全策です。 Androidアプリのデコンパイルに関する多くの情報を見つけることができますが、ARMデバッガとIDA Proは、自己投資に大きく投資しているアプリに役立ちますコード保護の変更またはセルフチェック。Androidプラットフォームには、マルウェアとマルウェアを取り巻くツールに関する多くの情報があり、この種の問題に関連しています。たとえば、モバイルマルウェアがあります。メーリングリスト。

その他の優れたリソースのいくつかは、実際の作業と組み合わせた開発者用ドキュメントです。 PluralsightとRaywenderlichは、これらのプラットフォームをカバーする優れたチュートリアルをいくつか持っています-私はすべての資料を読みました。 AndroidとiOSに関するSyngressとOReillyの本はたくさんあります。それらの多くは、セキュリティとフォレンジックのトピックをかなり深くカバーしています。WroxPressのCocoa Application Securityに関する本もあり、日付は付けられますが、一見の価値があります。基本言語(Obj-CおよびJava)の基本を扱っているほとんどの本は役に立ちますが、モバイルアプリの言語と概念がどこに収束するかを理解するのも良いでしょう(PhoneGap、MonoTouchなど)。

**更新2012年3月26日**

私は似たようなツールを使用する傾向がありますが、iOSシミュレーターアプリのDTrace-Toolkitとiprofiler/Instrumentsにさらに分岐しました。私はジェイルブレイクされたiPad 2でcycriptを使用してより多くの作業を行う傾向があります。 Androidの場合、インテントの起動に非常に役立つアクティビティモニターについて言及するのを忘れたと思います。

ランタイムの多くは、ランタイムObj-CまたはJava/Smaliを使用して表示/分析/変更できるため、これらの言語とターゲットデバイスのプラットフォーム固有の知識は必須ではありません。

ときどき、別の形式(例:AIR for iOS/Android、HTML5、Titanium、NDKなど)のアプリをペンテストして、ネイティブアプリとしてコンパイルするように求められます。この状況では、バイナリ分析、静的分析、および動的分析の組み合わせを使用して、すべてのコンポーネントを(元の開発者と同じように)構築するか、リバースエンジニアリングすることをお勧めします。これには、Flash Professionalまたは別のIDE /ビルドツールの使用が必要になる場合があります。

11
atdre

システムを攻撃する最初のステップは、その攻撃面を理解することです。とはいえ、モバイルデバイスは本当にそれほど違うのでしょうか。エクスプロイトは モバイルプラットフォーム用のアプリ を含むすべてのソフトウェアプラットフォーム用に記述されています。最も一般的なエクスプロイトは、ディレクトリトラバーサル、その後のバッファオーバーフローです。

あなたはすでに何が行われたかを研究すべきです。エクスプロイトコードの読み取り、エクスプロイトコードの書き込み。

4
rook

私があなただったら、プラットフォームに関連する脅威のシナリオを定義することから始めて、そこから、各シナリオに最も関連する方法論、ツール、手法、および一般的なアプローチを特定することができます。

現実は、espengraで言及されているように、攻撃表面の各側面とそれをさまざまなテストに分解するために必要な攻撃ベクトルを理解するために、さまざまなアプローチを使用できます。このテストや他のタイプのテストに対する「すべてを統括する単一のテスト」アプローチはありません。

デバイスに対して攻撃ツリーを作成することから始めます(これまでにその用語を聞いたことがない場合は、Google Schneierと攻撃ツリー)。これを処理するには、まともなマインドマッピングツールが最適です。ツリーを作成したら、攻撃をグループに絞り込み、主要な各ブランチに対する主要なテストアプローチを定義できます。

1
JabawokJayUK