Androidアプリのペンテスト用にすべてのトラフィックをキャプチャしたいのですが、どうすればよいですか?
これが私がすでに試したことです:
アプリをエミュレータにインストールし、http-proxy
ローカルポートを指しています。ローカルポートでZAPが実行されていました。ブラウザからのトラフィックを傍受できますが、アプリからのトラフィックは傍受できません。
まあ、私のアプリはhttpsを使用しているかもしれませんし、私は証明書の問題があったと思いました。そこで、OWASP ZAPの証明書をエクスポートし、AndroidエミュレーターでPush
edしました。もちろん、Android> = ICSバージョンの証明書名はOpenSSLを使用してハッシュ化されているため、いくつかの手順 こちら を実行したところ、デバイスでZAPの証明書を取得できましたが、トラフィックを傍受できません。
私の次の考えは、このアプリが破損している可能性があることでした。そこで、アプリストアからFacebook、Pocket、Guardian(ニュース)アプリをエミュレーターにインストールし、それらのトラフィックを傍受してみました。 Guardianからのトラフィックを傍受できますが、PocketとFacebookはインターネットに接続できません(私のアプリも同様です)。ただし、エミュレータのブラウザからインターネットをブラウザできます。
正直なところ、私は私の知恵の終わりにいます。なぜこれが起こっているのか分かりません。筆記テストはこれまであまり行ったことがないので、経験がないと思います。誰でもこの貧しい魂を助けることができますか?
(もちろん、Wiresharkはいつでも使用できますが、ZAPまたはBurpのように要求と応答をMiTMすることはできません。)
編集:
狂人のように「グーグルing」した後、私はようやくAndroidはグローバルプロキシ(ブラウザとアプリの両方で機能します)をサポートしていません。詳細を確認できます- ここ 。
SSLピン接続を使用しているため、Facebookトラフィックを傍受できません。
Androidアプリケーションのペンテストでは、4つの異なるシナリオに遭遇する可能性があります。以下に簡潔にリストします。より詳細な記事はここにあります>> My Blog 記事には、あなたが参照できるビデオも含まれています。
これは、最も単純なAndroidアプリケーションです。ゲームがその例です。トラフィックの多くはhttpを通過します。トラフィックを傍受するには、デバイスのwifiプロキシ設定を指定するだけです/ Burp/Zapプロキシが実行されているラップトップのエミュレータ。
Instagramなどのアプリケーションは、HTTPSを使用してサーバーと通信しますが、デバイスの信頼できる認証情報に依存しています。このトラフィックを傍受するには、Settings > Security > Trusted credentials
から同じものを開くことで、プロキシ証明書をデバイスの信頼できる認証情報に追加できます。
特定のアプリケーションでは、信頼された資格情報が危険にさらされた場合でもアプリケーションが安全であることを保証するためにSSLピン接続を使用する場合があります。 Cydia基板モジュールAndroid Trust KillerまたはXposedモジュールJustTrustMeを使用して、SSLピン制御をバイパスできます。
Facebook Androidアプリケーションはpwn資格情報ストアを使用しているため、通常はトラフィックを傍受できません。これを回避するには、アプリケーションを逆アセンブルしてsmaliコードを作成する必要があります。証明書を必要に応じて追加してくださいコードにフォーマットし、再コンパイルし、署名し、再度インストールします。プロセスの詳細はこちら>> DewHurst Securityによるブログ 。
これが私がとるべきステップです。手順6が最も直接的な答えですが、他の手順を実行することをお勧めします。この回答は他の回答と似ていますが、多くのステップで単純です。
1)プロキシを構成する-Burp Suiteをトランスペアレントモードで構成し、アプリケーションが使用するポート(443など)をすべてのインターフェースでリッスンします。
2)Install Certificate Authority-デスクトップに証明書をエクスポートしてからadb Push file.der /sdcard/<file>.cer
(.derを.cerに名前変更したことに注意してください)Settings -> Security -> Install from Device Storage
と証明書をインストールします。
3)システムプロキシ-Androidプロキシ設定(wifiセットアップ)で)トラフィックをプロキシしてみてください。スイッチアダプターオンとオフ(機内モードを1秒間オンにする)は、これが機能しない場合に役立つことがあります。
4)証明書の問題をデバッグする-SSL/TLSの問題についてBurp Suiteの[アラート]タブを確認します。アプリケーションがハードコードされた証明書、証明書のピン留め、または公開キーのピン留めを使用してCAを使用できないようにしている可能性があります。プロキシオプションタブでSSLパススルーを有効にして、ターゲットドメインの一部またはすべてに問題があるかどうかを確認できます。証明書のピン留めが問題になる場合は、証明書のピン留め保護をバイパスする必要があります。
5)Spoof DNS-/etc/dnsspoof.confを設定して、ドメインのエントリおよび/またはワイルドカードエントリを含めます(以下の例):
192.168.1.101 example.com
192.168.1.101 *.com
DNSサーバーを制御するホストに設定し、次のコマンドを実行します(dnsspoofはすでにKaliにインストールされています)。
dnsspoof -i eth0 -f /etc/dnsspoof.conf Host 192.168.1.201
アプリケーションがシステムプロキシ設定またはDNSに準拠していない場合は、Wiresharkを使用して動作を観察し、洞察を得てから続行することをお勧めします。アプリケーションが非HTTPプロトコルを使用している可能性があります。
6)デバッグネットワークトラフィック-Genymotionなどのエミュレータでアプリケーションを実行し、できればブリッジモードで実行してから、メインインターフェイスでリッスンし、ディスプレイフィルタを使用します端末のみip.addr eq 192.168.1.201
。
7)アプリケーションの逆コンパイル-dex2jarを使用してアプリケーションを逆コンパイルし、洞察のためにネットワークトラフィックを生成するコードを確認します。
d2j-dex2jar.bat "/path/to/the.apk" -o "/path/to/the/new.jar"
JD-GUIでjarファイルを開きます。
8)[〜#〜] mitm [〜#〜]-ettercapなどのツールを使用してトラフィックの真ん中にいる人。 https://github.com/summitt/Burp-Non-HTTP-Extension または他の一般的なTCPプロキシを使用することを検討してください(ここに私が好きなものがあります: dummyproxy.py )トラフィックの中間者に送信しますが、これはTLSなどの暗号化をバイパスしません。
mitmproxy を使用してみてください。 HTTPトラフィックとHTTPSトラフィックの両方をトレースできます。リクエストとレスポンスを表示したり、キャプチャ/編集したりできます。
Androidアプリを確実にインターセプトする方法はいくつかあります。Android SDKエミュレータの--tcpdumpおよび--http-proxyコマンドラインディレクティブの使用を禁止します。 Eclipseエミュレータ設定でもアクセスできます)。
すべてのモバイルアプリの私のお気に入りは、 DNSブラックホール を利用することです。これは、Android SDKエミュレータでさらに自動化できます:
emulator -dns-server 192.168.0.2 -avd <avdname>
HTTP/TLSなどのトラフィックは、DNSワイルドカードホストでBurpを(おそらくルートとして)実行することで簡単に傍受できますが、非表示モードで適切なポート(通常は80および443)をリッスンするようにBurpを構成する必要があります。さらに、特定の証明書固定チェックは configuring Burp によってバイパスされ、トップレベルドメイン(* .google.comなど)のワイルドカードを使用してホスト名ごとのCA署名付き証明書を実行できます。
Burpは サーバーの応答をキャプチャする に設定することもできます。これはトラブルシューティング時に非常に役立ちます。
ファイルハンドラーとネットワークプロトコルハンドラーを同時に確認したい場合は、ADBを介してstraceツールを利用することをお勧めします。 straceはAndroid SDKエミュレータに含まれており、ADBまたはその他の方法でデバイスにコピーできます。
私は最近、ネイティブプロキシをサポートしていないアプリケーションをテストしました。開発者は意図的にそれをしなかったので、後で修正しました。
物理的な電話を使用したため、設定は少し異なります。ラボで同様のことを行うのはかなり簡単です。ただし、これをホストOSとして使用していない場合は、Linuxを実行する追加のVM-guestが必要になる場合があります。
トラフィックをインターセプトするために行ったのは、宛先NATポート80および443のすべてのトラフィックを攻撃プロキシに送ることでした。セットアップでは、電話が接続するワイヤレスアクセスポイントを使用します。
この設定は、プロキシ設定を構成したかどうかに関係なく機能します。
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m multiport --dports 80,443 -j DNAT --to attack-proxy-ip:8080
これで、電話をワイヤレスアクセスポイントに接続すると、すべてのWebトラフィックが攻撃プロキシにリダイレクトされます。
ノート:
Burpを使用したため、透過プロキシサポートを有効にする必要がありました。 Burpでは「サポートされている見えないプロキシ」と呼ばれています。
これは私が私のAndroid電話のすべてのトラフィックをキャプチャする方法です。
1)私は根付きましたAndroid電話。
2)インストールFS証明書インストーラー、それから私は自分の電話にげっぷ証明書をインポートしました。
3)電話とラップトップを同じWiFiネットワークに接続します。
4)私のラップトップにあるバープスイートが私のAndroid電話を経由して来るすべてのトラフィックをリッスンするように、電話のプロキシを設定します。