NECサイバーセキュリティ戦略本部の川北です。10月は米国と欧州のサイバーセキュリティ月間[1, 2]で、米国の第1週目のテーマは「#BeCyberSmart」です。昨今、個人・組織の多種多様な情報がスマートフォンをはじめとするインターネットに接続されたプラットフォームに保管されており、ふとしたことでそうした情報が悪用される可能性を意識しなければなりません。本稿では、スマートフォンからの情報流出を手軽に調査する方法について取り上げます。
1. はじめに
アメリカ合衆国国土安全保障省(DHS)は#BeCyberSmartの実践において意識を高めるべき事項の1つとして、アプリのセキュリティを挙げています。[3]
スマートフォン等にダウンロードしたアプリが、必要以上の権限を求める、さらに、使用していない間もバックグラウンドでプライバシーの侵害につながる動作をする場合があります。特に信頼できないソースからダウンロードしたアプリではこうしたことが起こりがちです。わが国の警視庁もスマートフォンの利用者向けに注意喚起をしています。[4]
スマートフォンのアプリが個人情報を送信していないか、ツールを使って調査してみましょう。
2. プライバシー調査ツールSolitude
Solitude[5]はスマートフォン等で動作するアプリのネットワークトラフィックを調査するツールです。今年開催されたBlack Hat USA 2021やDEF CON 29で発表され、githubにてソースコードが公開されています。
SolitudeはDockerコンテナ内にOpenVPNサーバーを実行し、HTTP(s)トラフィックをmitmproxy[6]に転送します。そして、事前に定義したルールに従ってトラフィックを検査し、合致するものを見つける仕組みです。ルールには自分のメールアドレスや電話番号等の値をあらかじめ記載しておきます。位置情報やMACアドレスといったしばしば個人情報の無断送信で用いられる項目はわざわざルールを指定しなくても検査してくれます。
Solitudeの特色は、OpenVPNとmitmproxyを組み合わせた本格的な調査環境を手軽に構築できることと、ルールに指定した値がBase64やハッシュ値に変化していても抽出できることです。
3. セットアップ
プライベートネットワーク上にスマートフォンとUbuntu Desktop 20.04 LTSの稼働しているPCを用意します。PCは仮想マシンでもかまいませんが、スマートフォンは後述する制限からiPhoneをお勧めします。筆者はiPhone7 (iOS 14.7.1)で評価しました。
そこへ以下の手順でSolitudeをインストールします。スマートフォンはiPhoneを用いた場合の手順のみ示します。
PC側のセットアップ
(1) dockerおよびdocker-composeをインストールします。docker-composeはaptから導入できるパッケージだと古いバージョンなので、公式サイト[7]に記載されている手順でなるべく新しいバージョンを導入しましょう。Solitudeに含まれるcomposeファイルは新しいバージョンを要求します。
(2) 以下のコマンドを実行します。
$ cd Solitude
$ docker-compose -f docker-compose-prod.yml build
$ docker-compose -f docker-compose-prod.yml up
(3) configsディレクトリのmyrules.jsonを開き、検査したいメールアドレスや電話番号を記入して保存します。
(4) http://localhost:5000 をウェブブラウザで開きます。
(5) OpenVPNの初期設定が自動的に行われるのでしばらく待ちます。
(6) PCのIPアドレスを入力し、Closeボタンを押します。このIPアドレスはスマートフォンから到達可能でなければなりません。
(7) “Start TCP” ボタンを押し、Nextボタンを押します。
(8) OpenVPNの接続設定が書かれた“TCP config”ファイルをダウンロードし、SDカード等でスマートフォンに転送します。そして、Nextボタンを押します。
(9) スマートフォン側での作業を促されます。ここで右上の×ボタンを押して、ウィザードを閉じます。
スマートフォン側のセットアップ
(1) App StoreからスマートフォンにOpenVPNをインストールします。
(2) 先ほどPCから転送した接続設定ファイルをOpenVPNで開き、VPN接続を開始します。
(3) スマートフォンから http://mitm.itにアクセス(VPN接続できていれば、アクセス先はプライベートネットワーク内のSolitudeをインストールしたPCとなる)し、ルート証明書をダウンロードします。
(4) [設定]→[一般]→[プロファイル]からmitmproxyの構成プロファイルを有効化します。
(5) [設定]→[一般]→[情報]→[証明書信頼設定]から、mitmproxyのルート証明書を全面的に信頼するよう設定します。
(6) スマートフォンのウェブブラウザをいったん終了して、起動しなおします。
Android 7以降のOSでは、(デフォルトの設定では)アプリがシステムの提供する証明書のみを信頼し、ユーザーが追加した証明機関を信頼しない制限[8]があります。これを回避するためには、古いバージョンのAndroidを使う、端末をroot化する、Androidエミュレーターを使う、あるいは、api-mitm[9]等のツールで個々のアプリに設定を追加するといった手段があります。執筆時点のiOS(iPhone)にはこのような制限がありません。
4. 実験
VPNを有効にしたスマートフォン上で悪意あるアプリを動作させます。
ここでは悪意あるアプリの代わりにiPhoneにプリインストールされている正規の「探す」アプリを起動しました。すると、以下のようにスマートフォンの位置情報がトラフィック上に現れたことがPCのブラウザに表示され、詳細なログも確認できます。
なお、有効な証明書を限定する「証明書ピンニング」を行なっているアプリに対しては、httpsトラフィックを分析できない制限があります。Solitudeの仕組み上、httpsのトラフィックをmitmproxyに通すと、証明書がmitmproxy発行のものにすり替えられます。この中間者攻撃によって、暗号化されたトラフィックの中身を調査できるわけですが、今回のようなプライバシー分析だけでなく、逆にプライバシーの侵害においても有効な手段です。そのため、証明書のすり替えを防ぐ目的でピンニングを行なうアプリがあります。
5. まとめ
ネットワークトラフィック上にプライバシーの侵害につながる情報が流れていないか手軽に調査できるツールSolitudeの使い方をご紹介しました。また、プリインストールされている「探す」アプリが正規の動作をして、スマートフォンの位置情報が外部へ送信されたことを確認しました。同じ手順で、悪意あるアプリが外部へメールアドレスや電話番号等の個人情報を送信する様子を捉えることもできます。
しばしば、個人情報を無断で外部へ送信する悪意あるスマートフォンアプリが見つかったという報道を目にしますが、どこか遠い世界の他人事のように感じてしまいがちです。実際にどのような情報が流出しているのかを自らの手で分析することで身近に脅威を感じられ、セキュリティ意識の向上につながるかもしれません。
参考文献
[1] “Cybersecurity Awareness Month - Stay Safe Online”:
https://staysafeonline.org/cybersecurity-awareness-month/
[2] “ECSM”:
https://cybersecuritymonth.eu/
[3] “Be Cyber Smart | Homeland Security”:
https://www.dhs.gov/be-cyber-smart
[4] 「スマートフォンを利用している方へ 警視庁」:
https://www.keishicho.metro.tokyo.lg.jp/kurashi/cyber/security/cyber414.html
[5] “nccgroup/Solitude: Solitude is a privacy analysis tool that enables anyone to conduct their own privacy investigations. Whether a curious novice or a more advanced researcher, Solitude makes the process of evaluating user privacy within an app accessible for everyone.”:
https://github.com/nccgroup/solitude
[6] “mitmproxy - an interactive HTTPS proxy”:
https://mitmproxy.org/
[7] “Install Docker Compose | Docker Documentation”:
https://docs.docker.com/compose/install/
[8] “Android 7.0 for Developers”:
https://developer.android.com/about/versions/nougat/android-7.0?hl=ja#default_trusted_ca
[9] “shroudedcode/apk-mitm: A CLI application that automatically prepares Android APK files for HTTPS inspection”:
https://github.com/shroudedcode/apk-mitm
執筆者プロフィール
川北 将(かわきた まさる)
セキュリティ技術センター(インテリジェンスチーム・デジタルシャドウ活用チーム)
・セキュアシステム研究所
脅威インテリジェンス分析の研究開発に従事。
SECCON CTF国際大会の決勝戦に参加した過去も。
情報処理安全確保支援士(2021年10月現在)、システム監査技術者
人生の楽しみはうまい酒とモツ煮込み。