Japan
サイト内の現在位置
MobSFを用いたiOSアプリのソースコード解析
NECセキュリティブログ2022年10月21日
NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの岩川です。今回のブログでは、MobSF(Mobile-Security-Framework-MobSF) [1]を用いたiOSアプリのセキュリティ診断について紹介します。MobSFを使って複数のiOSアプリ(OSS)のソースコードを解析してどのような問題が多く検出されるかを見ていきます。また、MobSFを用いた解析の自動化についても触れたいと思います。
MobSF(Mobile-Security-Framework-MobSF)とは
MobSFを用いたiOSアプリの解析方法
MobSFはDocker Hub [4]においてコンテナイメージが公開されています。そのイメージを利用して以下のコマンドを実行してセットアップを行います。
$ docker pull opensecurity/mobile-security-framework-mobsf
$ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Mobile Security Framework v3.5.2 Beta
しばらくするとMobSFが起動するので、Webブラウザでhttp://localhost:8000にアクセスします。以下の画面が表示されます(図1)

MobSFが起動できたので次に、MobSFの診断対象のiOSアプリを用意します。本節ではDVIA-v2 [5]を使用します。DVIA-v2は学習用途として意図的に脆弱性を含んだアプリです。
DVIA-v2のソースコードをダウンロードしてzipファイルに圧縮します。
$ git clone https://github.com/prateek147/DVIA-v2
$ cd DVIA-v2
$ zip -r DVIA-v2.zip DVIA-v2
作成したzipファイルをMobSFにアップロードします。先程Webブラウザで開いた画面(図1)において「Upload & Analyze」を押下した後にzipファイルを指定することでアップロードできます。解析が終了すると「Recent Scan」メニューから対象アプリの「Static Report」ボタンを押下することで結果を確認できます。

レポートは図3のように表示されます。「CUSTOM URL SCHEMES」、「APPLICATION PERMISSIONS」、「APP TRANSPORT SECURITY」など様々な解析の結果が表示されますが、今回は「CODE ANALYSIS」に焦点を当てます。

図3のレポートでは、No.1の問題として「MD5 is a weak hash known to have hash collisions.」が検出されています。FILES列に記載されているリンクをクリックすると図4のように問題の箇所をハイライトしたソースコードが表示されます。

このようにMobSFはアプリの問題箇所を検出するのに活用できます。
MobSFで多く検出される問題
まずは、severity(重要度)がhighに分類されている問題を見ていきます。
図5のグラフから、ios_hardcoded_info、ios_banned_api、ios_md5_collisionが多く検出された上位3つの項目となります。
-
ios_hardcoded_info
ユーザ名、パスワードのような機微情報がソースに直接埋め込まれている可能性のある個所を検出しています。実際に機微情報が埋め込まれていなくてもパターンにマッチしたものは検出されるため数が多くなったと考えられます。具体的には、変数名にpassword,pass,username,secret,keyのいずれかの単語が含まれる変数への代入文が検出されています。 -
ios_bannded_api
strcat、strcpyなど、非推奨となっている関数の使用を検出しています。Secure Coding Guide[9]に記載されている代替関数を使用する方法が対策として挙げられています。
-
ios_md5_collision
ハッシュ関数MD5の使用を検出しています。MD5は危殆化しているため(*1)使用は推奨されません。
- *1: 短時間で同一のハッシュ値となるデータのペアを見つける攻撃が発見されており強衝突耐性に問題があります。
[10]

次に、severity(重要度)がwarningに分類されている問題を見ていきます。
図6のグラフから、ios_uiwebview_safari_view、ios_uipaste_sec、ios_webview_disable_jsが多く検出された上位3つの項目となります。
-
ios_uiwebview_safari_view
ios_uiwebview_safari_viewはUIWebView/SFSafariViewControllerの使用を検出しています。MobSFではUIWebView/SFSafariViewControllerの代わりに、WKWebViewを使用することを推奨しています。 -
ios_uipasete_sec
UIPasteboardの使用を検出しています。Pasteboardで他のアプリとデータを共有できるためOWASP MSTG[11]には、機微情報を扱う際の対策が記載されています。
-
ios_webview_disable_js
WebViewにおいてJavaScriptが無効となっていないことを検出しています。不要な場合は、JavaScriptは無効にすることが推奨されます。

最後にseverity(重要度)がinfoに分類されている問題を見ていきます。
図7のグラフから、ios_swift_log、ios_app_logging、ios_core_dataが多く検出された上位3つの項目となります。
-
ios_swift_log
ログ出力関数を検出しています。ログ出力関数を使ってログに機微情報を出力してはいけません。 -
ios_app_logging
ログ出力関数を検出しています。ログ出力関数を使ってログに機微情報を出力してはいけません。開発言語がSwiftとObjective-Cで項目が分かれていますが、項目ios_swift_logと同様の項目です。 -
ios_core_data
CoreDataデータベースの使用を検出しています。CoreDataデータベースはデフォルトでは暗号化されないため機微情報を格納する場合は、暗号化の対応が必要となります。

解析の自動化
ここまでMobSFを使ったiOSアプリの解析方法とその解析結果について見てきました。この節では、解析の自動化についても触れたいと思います。
前節ではWebブラウザから解析対象のファイルを手動でアップロードする方法を説明しました。しかし、例えば毎晩自動的に解析対象のファイルをアップロードしてスキャンを実行したいなどといった場合にはWebブラウザでのGUIによる操作だと難しいです。そのような場合に図8に示すMobSFが用意するREST APIを使用すると自動化がしやすくなります。

API を使うと以下のようにcurlコマンドによりCUIベースでアップロード、スキャン、レポートのダウンロードが可能です。
$ curl -F "file=@${PWD}/DVIA-v2.zip" http://localhost:8000/api/v1/upload -H "Authorization:XXXXXXXXXX"
$ curl -X POST --url http://localhost:8000/api/v1/scan --data "scan_type=zip&file_name=DVIA-v2.zip&hash=b34f1467709e9f9e3b35c09744bc0588" -H "Authorization: XXXXXXXXXX"
$ curl -X POST --url http://localhost:8000/api/v1/report_json --data "hash=b34f1467709e9f9e3b35c09744bc0588" -H "Authorization: XXXXXXXXXX"
APIを用いてスキャンを実行するスクリプトを作成し、毎晩定期実行するようにすれば簡易的ではありますが自動で評価できます。毎日スキャンを実行して結果の差分を確認することで早期に問題を検出するような運用が可能となります。
さいごに
MobSFを使ったiOSアプリのソースコード静的解析について紹介しました。
実際にiOSアプリに対してソースコードの静的解析を実施すると多くの問題を検出できました。レポートに記載されているリンクから対策を参照できるので、セキュリティの向上に有用です。また、REST APIを活用して定期的に診断することで問題の早期検出にも活用できます。
参考
- [1]MobSF(Mobile-Security-Framework-MobSF)
https://github.com/MobSF/Mobile-Security-Framework-MobSF
Ajin Abraham、GPL-3.0 license - [2]モバイルアプリの脆弱性診断 ~MobSF(Mobile Security Framework)でAndroidアプリを診断してみた~
https://www.secure-iv.co.jp/blog/5153
- [3]モバイルアプリの脆弱性診断 ~MobSF(Mobile Security Framework)でAndroidアプリを診断してみた 2~
https://www.secure-iv.co.jp/blog/6317
- [4]opensecurity/mobile-security-framework-mobsf - Docker Image | Docker Hub
https://hub.docker.com/r/opensecurity/mobile-security-framework-mobsf/
- [5]
- [6]Open-Source iOS Apps
https://github.com/dkhamsing/open-source-ios-apps
- [7]
- [8]
- [9]Avoiding Buffer Overflows and Underflows
https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/BufferOverflows.html#//apple_ref/doc/uid/TP40002577-SW1
- [10]RFC 6151: Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms
https://www.rfc-editor.org/rfc/rfc6151
- [11]OWASP Mobile Security Testing Guide (MSTG)
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md#uipasteboard
執筆者プロフィール
岩川 健人(いわかわ けんと)
セキュリティ技術センター リスクハンティング・アナリシスグループ
高性能計算(HPC)分野のソフトウェア開発業務を経て、現在はペネトレーションテスト、脆弱性診断などに従事。
SANS SEC575 メダル保持。
CISSP/情報処理安全確保支援士(RISS) /情報処理技術者試験(NW,DB,ES)/GIAC(GREM,GMOB)/AWS認定(SAA,SCS)を保持。

執筆者の他の記事を読む
アクセスランキング
2025年4月6日~4月12日に読まれた記事のランキング