jailbreak

今回は「脱獄したiPhoneで脆弱性診断を試してみよう!(前半)」の続きからになります。前回では脆弱性診断ツールのローカルプロキシの設定を中心に解説しましたが、今回はiPhone端末側の準備を中心に解説したいと思います。

まず、脱獄したiPhoneが必要になりますが、脱獄とはiOSのセキュリティモデルから抜け出すことを指します。 下の図はiOSセキュリティモデルを表した図になりますが、読み取り専用のROMから複数の階層を経てOSが起動するプロセスを表しています。各階層へ進むにはAppleが署名したコードを検証して進むことができるため、ブートプロセスを改ざんして起動させることできなくなっています。ブートの途中で検証に失敗したり読み込みができない場合はDFU(Device Farmware Upgrade)モードやリカバリーモードになります。DFUモードはBoot ROMからLLBがロードできないか、署名を検証できない時に呼び出されます。

iOS Security Model

またOSが起動し、アプリケーションが起動する時もOSはアプリケーションがAppleによって署名されたか検証します。署名されていないアプリケーションをインストールすることができません。 ブートプロセスからアプリケーションを読み込むまですべて検証が成功しないとアプリケーション起動しない仕組みになっています。
その他にも、iOSのアップグレード・ダウングレードなども制限がかかったり、顔認証や指紋認証のデータを保護するセキュリティプロセッサー、Secure Enclave(セキュアエンクレーブ)で保護していたり、アプリケーションが分離され他のアプリからアクセスできないようにそれぞれのアプリが独立して厳しく制限されています。
脱獄はこのiOSのセキュリティモデルから抜け出して突破することを意味します。

本来であれば、Appleから署名されていないアプリケーションはインストールできませんが、脱獄アプリで簡単に制限を回避でき、あらゆるツールをiPhone内にインストールすることができます。
脱獄方法はiOSのバージョンや機種によって異なり、脱獄アプリもインターネット上に様々なものが公開されています。
脱獄するとAppleのサポートや保証は受けれなくなります。データも脱獄する時に失うこともありますので、完全にテストとして割り切れるiPhoneで試してみてください。
脱獄の手順やサポートするアプリは多くあり、環境により異なりますのでこの記事では割愛させていただきます。
インターネットで脱獄、Jailbreakとか今回利用した脱獄アプリcheckra1nのキーワードで検索するといろいろ探せると思います。

ここからは脱獄できたiPhoneを利用して脆弱性診断を進めるながれで解説します。今回のiPhoneはモデルは6sで最新のiOS13.5.1(2020年6月末現在)をアップデートした後に脱獄しました。

Cydia Icon まず、脱獄アプリから直接インストールされるCydiaというアプリはいろいろ役に立つアプリを提供してくれます。これをインストールしてiPhone内の環境を診断がし易い環境にしていきます。

Cydiaを起動すると下の画面のようにアプリケーションを検索してインストールすることができます。OpenSSHと検索するとSSHサーバをインストールすることができ、SSHログインすることも可能になります。

Sydia Search Sydia Application

下の画面のようにPCからiPhoneへSSHログインすることができ、初期パスワードはalpineになります。
iPhone SSH

あとはLinuxと同じように扱っていただければ何でもインストールすることができます。
例えば、apt-get install tcpdumpとして実行していただければ、tcpdumpがインストールできます。足りないライブラリーや依存するアプリケーションがあればそれを先にインストールしてあげてください。tcpdumpをインストールすれば通信をキャプチャしてpcapファイルとして保存することもできますので、そのキャプチャしたファイルをscpなどでダウンロードすれば、PC上でパケットを分析することも可能になります。

前回、ローカルプロキシーでWeb通信をインターセプトする際に証明書のピニングについて触れましたが、証明書のピニングについて簡単に解説します。
HTTPSをローカルプロキシーでインターセプトする時にBurp Suiteで登録されているCA証明書を用いて、サーバから受けとったレスポンスを署名してクライアントに転送しますが、その証明書が信頼されていない場合、端末側で証明書をインストールして信頼する必要があります。途中で通信が盗聴できないように、中間者攻撃の対策をとるアプリケーションもでてきます。その1つが証明書のピニングです。ピニング対策をとると特定のサーバで署名したレスポンスしか受け付けないようになります。間に入って署名されたレスポンスを受信しません。

それを回避するために役立つのが、SSL Kill Switch 2になります。
SSL Kill Switch 2をインストールするには以下のアプリケーションが必要になりますので、SSHをインストールしたようにCydiaからインストールします。

  • Debian Packager
  • Cydia Substrate
  • PreferenceLoader
インストールした後は以下の画面からSSL Kill Switchを有効、無効にすることができます。
SSL Kill Switch

このように準備ができましたら、あとは検査したいアプリを開いてローカルプロキシを介してアクセスするだけになります。
アプリケーションのメニューを開いたり、何かアクションを起こすとWebリクエストが発生したりすることがわかります。 ここで記録されたリクエストの内容を変えてリクエストを再送して様々な検査を実施しますが、許可されていないサイト行うと不正アクセスになります。そのため、検証用のWebサイトなどを利用して実施してください。

うまく行くと、httpsのリクエストやレスポンスの内容が確認できます。
Local Proxy Log

今回、インストールしてみた接触確認アプリが本当にプライバシーを守られているのかどの気になる方が多いようですので、個人的にどのようなリクエストをやりとりしているのか確認してみました。(アプリからの操作だけでツールからリクエストを改ざんしたり、直接サーバにアクセスするようなことは行なっておりません。)
ローカルプロキシで記録された内容を見ると端末を識別できるような情報は出力していなく、iOSのバージョン情報、端末の種類、キャリアなどの情報が送信されてましたが、これはアクセス統計をとる目的だと思います。また同意する時に、IDやシークレットが発行されてましたが、推測が難しくこのIDが仮に流出してもユーザーを特定することはできないと思います。アプリの仕組みとしては何か個人情報や位置情報が吸い取られるようなことはないです。
ご安心して利用できます。
この短期間で開発者の方はいろいろプレッシャーがあったと思いますが無事リリースできたのはすばらしいですね。また接続先からクラウドでさくっと作った感じですね。

 

関連リンク