ifuseを使ってiOSアプリのDocumentsフォルダへアクセス可能かどうかを確認する

iOSアプリの脆弱性に関して調査する機会があり、ifuseを使用してiOSアプリのDocumentsフォルダアクセスの可否について検証を行う方法を書いていきます。

1. ifuseをダウンロード

ifuseはiOSのデバイスコンテンツにアクセスするためのソフトウェアです。 まずはこちらからcloneまたは、ZIPダウンロードしましょう。

github.com

私はzipでダウンロードしてきました。ダウンロードしてきた場合、ifuse-master.zipを展開します。ifuse-masterというフォルダが出来ます。ifuseをインストールする前に次に必要なソフトウェアを別途インストールしていきます。

2. 必要なソフトウェアのインストール

以下を全てbrew installでインストールします。

  • usbmuxd
  • make
  • automake
  • autoconf
  • libtool
  • pkg-config
  • gcc

3. ifuseをコンパイルする

「1.」で展開したifuse-masterディレクトリへ移動し、以下を実行します。

❯❯❯ cd ~/ifuse-master
❯❯❯ ./autogen.sh
❯❯❯ ./configure
❯❯❯ make
❯❯❯ sudo make install

これでifuseを実行することが出来ます。

4. iPhoneのマウントを行う

マウントを行う先のディレクトリを作成して、どのユーザーからでも自由にアクセス出来るようにしておきます。

❯❯❯ mkdir usr/mnt
❯❯❯ chmod 777 usr/mnt
❯❯❯ ifuse usr/mnt/
# マウントを行うと以下のようにディレクトリが見えます
❯❯❯ ls -l usr/mnt/
drwxr-xr-x   3 xxxxxx  staff   96  6 15 18:37 AirFair
drwxr-xr-x   7 xxxxxx  staff  224  8 15 15:20 Books
drwxr-xr-x  10 xxxxxx  staff  320  8  4 19:39 CloudAssets
drwxr-xr-x   6 xxxxxx  staff  192  7 14 16:36 DCIM
...以下略

今回の目的はインストールされているアプリのファイルが見えるかどうかを検証するのでインストールされているAppIDの確認を行います。以下のコマンドを打つことでAppIDの確認が出来ます。

❯❯❯ ideviceinstaller -l

これでAppIDがわかったので以下でアプリファイルのアクセスが可能かを確認していきます。

❯❯❯ ifuse --container <AppID> usr/mnt/
ERROR: InstallationLookupFailed
The App '<AppID>' is either not present on the device, or the 'UIFileSharingEnabled' key is not set in its Info.plist. Starting with iOS 8.3 this key is mandatory to allow access to an app's Documents folder.

大体のアプリがこのようにアプリ内のファイルアクセスは不可としています。 今回の検証対象のアプリは問題なかった事がわかりました。 最後にアンマウントして終了です。

❯❯❯ umount usr/mnt/

つまづいた点

ifuse <moutpoint>でマウントしようとした際、iDeviceInstaller gives Could not connect to lockdownd. Exitingというエラーが起きてマウントが不可な現象が起きました。調べたところlibimobiledeviceのVersion違いからくるエラーで、以下を参考に関連するソフトウェアをリインストールすることで解消出来ました。

www.bountysource.com

まとめ

ifuseを使うことで対象のアプリのDocumentsフォルダアクセスの可否を確認することが出来ました。何個かメジャーなアプリも入っていたので数個確認したところ、どれもアクセス不可でした。iOSではUIFileSharingEnabledの設定値は必須ですが、フォルダへのアクセスが可能としている場合、CookieやCacheの情報など晒されたくないファイルが見えてしまう可能性があり、この場合はアプリの脆弱性に繋がるのでリリース時のInfo.plistには重々気をつけて下さい。