プロキシを使って Firefox OS トラフィックを傍受する

デバッグとセキュリティテスト記事のこの部分では、プロキシツールを使ったFirefox OS トラフィックの傍受を見ます、それには プロキシの SSL 証明書をホワイトリストにしてFirefox OS が誰かが傍受しているのを記にしなくするのと、HTTPS通信の再カプセル化が含まれます。B2G デスクトップを使う場合、チュートリアルの最初にある、Marionette JavaScriptデバッグシェルのインストール・アタッチの方法の部分は、 Debugging and security testing with Firefox OSで説明されています。

HTML と JavaScript だけのアプリで作業している時、Web上でデータ転送する API を含む、本当に面白い作品がたくさん見つかるでしょう。このことは、それらのアプリが実行するHTTPリクエストを観察する事がしばしば役立つことを意味します。BurpZAP といったプロキシーツールには、そんなトラフィックを観測するのに役立つ機能があります。これらはクライアントがどうやって自分自身を調節するのかについてや、TLS終端などをインストールするルート証明書などの情報を含んだマニフェストを提供しています。

アプリマネージャ の 'Firefox OS の main プロセスのデバッグ' 機能に関連して、スクラッチパッドで いくつかのコードを 実行して、プロキシーのルート証明書をあなたの端末にインストールできます。

Firefox OS の mainプロセスをデバッグする

それでどうやって Firefox の mainプロセスをデバッグするのでしょう? Firefox Simulator か実端末のどちらでも、プロファイルにいくつかの設定を入れる事で認定アプリをアプリマネージャ経由でデバッグできます。 まず次のステップに従い、次にプラウザを再起動する前に about:config 内のdevtools.chrome.enabled 設定を true にします。

次に、アプリマネージャを使って端末・simulator に接続し、そして端末画面に "DEBUG MAIN PROCESS" ボタンが見えます; それをクリックすると JSMs のデバッグと、スクラッチパッドないでの権限つき JavaScript 実行ができるようになります。

: mainプロセスで何を実行するかについては注意して下さい: たまたま端末を破壊してしまう可能性があります!

ZAPを導入する

まずは、ZAP を使ってプロセスを使い続けましょう。ZAP は、簡単にデバッグするためにHTTPS通信を妨害して再暗号化する防御プロキシーです。ZAP ホームページ の大きな青いボタンをクリックしてダウンロードします。他のプロキシーを使用する事を選んだ場合、このアプローチは両方とも動作するはずなので、どうぞ併用して下さい。

ZAP 証明書

いま、どのプロキシを使っていても、その証明書を owasp_zap_root_ca.cer といったファイルにエクスポートします(メニューでは Tools > Options > Dynamic SSL Certificates > Save)。ZAP が初回起動した時、1年間有効な証明書を生成します。ダイナミック SSL 証明書のセクションから、新しい証明書を生成することもできます。

ローカルプロキシ

B2G デスクトップを使っている場合、必ず ZAP が localhost ではなく、代わりに属性 IP アドレス (イーサーネットかWi-Fi) をリッスンしているのを確かめる必要があります。これは B2G デスクトップの localhost はデスクトップコンピュータではなく、b2g バイナリ自身を指しているためです。例えば、次のIP アドレスを使うでしょう: 10.264.1.5.

実機で作業している時、必ず電話機とコンピュータが同一ネットワーク/VLANに接続していて、お互い通信できるようにしておきます (疑う場合、片方の端末の IP からもう一方をpingしてみて下さい)。

端末をプロキシに接続する

次に色々な方法でプロキシと接続できます:

端末からデフォルト設定を取り出したり、それらを変更して関連するプロキシ設定を追加したり、戻したりできます。

あるいは、ツール構成して proxy HTTP and HTTPS transparently にあわせて、端末がプロキシを指すように iptables をセットアップできます。例えば HTTPS トラフィックがプロキシツールを通過するようには:

adb shell iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 192.168.0.14:8443

そして、完了後にリセットするには:

adb shell iptables -t nat -F

LANのプロキシをセットアップする

この種の活動が大変だと思う場合、ずっと便利な方法があります; 全てのトラフィックがデフォルトでプロキシを通るテストの LAN をセットアップすることです。この方法で、接続する無線LANを変更するだけで、プロキシのオンオフができます。

raspberry pi を使ってビルドしていて、手順はこれらと同様ですiptables ルールを次のように変更しました:

*filter
:INPUT ACCEPT [49:3128]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [37:3924]
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [1:72]
:INPUT ACCEPT [1:72]
:OUTPUT ACCEPT [1:148]
-A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j DNAT --to-destination <proxy_host>:<http_port>
-A PREROUTING -i wlan0 -p tcp -m tcp --dport 443 -j DNAT --to-destination <proxy_host>:<https_port>
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

証明書データベースを作成する

Accepting certificates happens in settings, which are stored in profiles. Here's a short primer on Firefox profiles:

  1. Start the Firefox profile manager using the -P option on the command line, and make sure that Firefox is not using any existing Firefox sessions (-no-remote):
    • On Linux, you need to do:
      firefox -P -no-remote
    • On Mac OS X:
      /Applications/Firefox.app/Contents/MacOS/firefox -P -no-remote
  2. Now create a new profile called "zapped." Go to the certificate settings — Edit > Preferences > Advanced > Encryption > View Certificates > Import. Now select the owasp_zap_root_ca.cer file created by your proxy and tell Firefox that it should trust this CA to identify web sites (this is really only valid for this profile).
  3. Having used Firefox to create a certificate database for us, we can now use this database for our B2G profile. The name of your Firefox profile directory is a random string that ends with zapped. The location depends on your operating system; see Runtime Directories for details on where it can be found.
  4. For B2G desktop, we only need the cert8.db file, which is the profile's certificate database. Copy it over to your b2g profile directory b2g/gaia/profile/.
  5. On a device, copy the cert9.db on your device profile directory:
    $ adb shell stop b2g
    $ adb push cert9.db /data/b2g/mozilla/*.default

Note: This will overwrite the existing file.

B2Gをセットアップする

The next step is to set ZAP as the default proxy for all network communication. The proxy settings, like the certificate settings, are currently not available from the Firefox OS user interface.

B2G デスクトップでは

You need to append these custom settings to the preferences file, b2g/gaia/profile/prefs.js:

user_pref("network.proxy.backup.ftp", "10.264.1.5");
user_pref("network.proxy.backup.ftp_port", 8080);
user_pref("network.proxy.backup.socks", "10.264.1.5");
user_pref("network.proxy.backup.socks_port", 8080);
user_pref("network.proxy.backup.ssl", "10.264.1.5");
user_pref("network.proxy.backup.ssl_port", 8080);
user_pref("network.proxy.ftp", "10.264.1.5");
user_pref("network.proxy.ftp_port", 8080);
user_pref("network.proxy.http", "10.264.1.5");
user_pref("network.proxy.http_port", 8080);
user_pref("network.proxy.no_proxies_on", "");
user_pref("network.proxy.share_proxy_settings", true);
user_pref("network.proxy.socks", "10.264.1.5");
user_pref("network.proxy.socks_port", 8080);
user_pref("network.proxy.ssl", "10.264.1.5");
user_pref("network.proxy.ssl_port", 8080);
user_pref("network.proxy.type", 1);

Note: Remember to replace my IP address 10.264.1.5 with yours, and if your proxy does not listen on port 8080, make sure you change it in this file too.

At this point, you should be ready to go! Start B2G Desktop again, and try some browsing. Network traffic should appear in ZAP.

端末では

To enable this functionality on a device, you'll need to modify the prefs.js file located in your profile on the device. Connect the device to your computer which has previously been set up with the adb tools.

First, you need to know what the name of your profile directory is. You can find it like this:

adb shell ls /data/b2g/mozilla

Among the output, you'll see a directory named with a number of random numbers and letters ending with ".default". This is your profile directory. Use that name where you see "xxxxxxxx" from here on in these instructions.

Next, grab the prefs.js file so you can edit it:

adb pull /data/b2g/mozilla/xxxxxxx.default/prefs.js

Open the resulting file in your favorite text editor; at the end of the file, add the custom settings indicated in the section above and save your changes. Now all you need to do is push the changed file back to the device and restart the b2g process to pick up the changes, as follows (the B2G process should already be stopped if you followed the earlier instructions to push cert9.db):

adb push pref.js /data/b2g/mozilla/xxxxxxxx.default
adb shell start b2g

Charles Proxy

Users looking to use Charles Proxy should see this blog post: https://muffinresearch.co.uk/proxying-connections-from-ffos/

 

ドキュメントのタグと貢献者

 このページの貢献者: chrisdavidmills, hamasaki, Uemmra3
 最終更新者: chrisdavidmills,