はじめに
本稿は、主にスマートフォンにインストールされたアプリケーション(以下、スマホアプリ)から発生する通信に対してWebアプリケーション診断を後述する特定条件下において行う、という目的を達成するために書かれた文章です。
弊社の取り組みと併せ、うまく条件がマッチした方にとっては嬉しい内容かもしれませんのでご紹介します。
診断における特定条件
今回の特定条件とは、次の3つの条件をすべて満たした状態を指します。
- 診断対象の通信がOS標準のプロキシ設定を無視する
- スマートフォン端末の管理者権限を取得することが出来ない
- 診断端末では直接パケット操作を行わない
各条件について、詳しく見ていきます。
1. 診断対象の通信がOS標準のプロキシ設定を無視する
これは、独自の実装により通信を確立している場合や、特定の開発フレームワークによるデフォルトの挙動により、発生しうる条件です。 診断を行うためには欠かせない「通信の可視化」において、事前に把握しておきたい挙動の一つです。
2. スマートフォン端末の管理者権限を取得することが出来ない
弊社の場合、診断に利用する端末は管理者権限を取得しているケースがほとんどです。この場合、スマートフォン端末の管理者権限を利用したパケット操作が直接行えます。
しかし、診断の契約や利用するデバイスの制約上、「スマートフォン端末の管理者権限を取得することが出来ない」という本条件が課せられることがあります。
3. 診断端末では直接パケット操作を行わない
本条件は「診断端末のプラットフォームに依存しない」とも言えますので、1つのメリットにもなり得ます。
作業内容
端末一覧
端末名称 | 解説 |
---|---|
スマートフォン端末 | 診断対象スマホアプリがインストールされた端末。 |
診断端末 | スマートフォン端末が接続しているネットワークのゲートウェイとなる端末。 |
Linux端末 | 診断端末と同一ネットワークに属したLinuxがインストールされた端末。診断対象のWebアプリケーションに対してリクエストの送出を担当。 |
ネットワーク構成図
前準備
スマートフォン端末
を診断端末
が提供するネットワークLAN
に接続する
WireGuardサーバの環境構築
-
Linux端末
にWireGuardをインストールするcurl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh chmod +x wireguard-install.sh sudo ./wireguard-install.sh
-
続けてWireGuardを次の内容でセットアップし、利用可能な状態にする
IPv4 or IPv6 public address:
スマートフォン端末
から見た診断端末
のIPアドレスを指定する- 例)192.168.1.1
Public interface:
Linux端末
が、診断対象Webアプリケーションサーバへ接続しているインターフェースを指定- 例)
10.0.2.15
のIPアドレスを持つインターフェース
- 例)
WireGuard interface name:
Server WireGuard IPv4:
Server WireGuard IPv6:
Server WireGuard port [1-65535]:
First DNS resolver to use for the clients:
Second DNS resolver to use for the clients (optional):
Allowed IPs list for generated clients (leave default to route everything):
- いずれも初期値のまま
Client name:
- WireGuardへ接続する端末が認識できる名前(ホスト名など)
Client WireGuard IPv4:
Client WireGuard IPv6:
- いずれも初期値のまま
-
診断端末
からLinux端末
上でWireGuardが待ち受けているUDPポートへ転送する- 例)Linuxであれば、
socat
コマンドなどを利用する - 注)Windows標準の
netsh
コマンドは、UDPパケットの転送が出来ないため利用ができない
- 例)Linuxであれば、
WireGuardアプリの導入と接続
スマートフォン端末
にWireGuardアプリをインストールする- 続けてWireGuardアプリを立ち上げ、以下の手順に沿って接続を確立する
- 画面下部にある
+
アイコンをタップする
QRコードをスキャン
を選択する
- 「WireGuardサーバの環境構築」手順2を完了した際、
Linux端末
のコンソール上に表示されたQRコードをスキャンする - 任意のトンネル名を入力し、トンネルを作成する
- 作成したトンネル横のトグルボタンをタップし接続する
- 画面下部にある
※「QRコード」は株式会社デンソーウェーブの登録商標です。
任意のパケット操作
-
Linux端末
を使って、「いい感じ」にパケット操作を行うsudo iptables -t nat -A PREROUTING -i wg0 -p tcp --dport 443 -j REDIRECT --to-port 18080 socat TCP4-LISTEN:18080,fork,reuseaddr TCP4:10.0.2.2:18080
おわりに
今回は、特定条件に限定されているものの、スマホアプリを使った弊社のWebアプリケーション診断において実際に利用している手順の一部をご紹介しました。
実際の手順では、診断作業による各種インシデントを防ぐためにさらなる対策を導入しているのですが、本質的な作業ではないため今回は割愛しています。
弊社では、診断作業を滞りなく行うことはもちろん、診断作業による各種インシデントを事前に防ぐことも重要だと考えています。このような対策の積み重ねが、さらなる「診断品質の向上」と「お客様からの信頼獲得」に繋がるということを信じて、今後も大切にしてきたい観点の1つです。