サイト内の現在位置

MobSFを用いたiOSアプリのソースコード解析

NECセキュリティブログ

2022年10月21日

NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの岩川です。今回のブログでは、MobSF(Mobile-Security-Framework-MobSF) new window[1]を用いたiOSアプリのセキュリティ診断について紹介します。MobSFを使って複数のiOSアプリ(OSS)のソースコードを解析してどのような問題が多く検出されるかを見ていきます。また、MobSFを用いた解析の自動化についても触れたいと思います。

MobSF(Mobile-Security-Framework-MobSF)とは

MobSFは、モバイルアプリケーション(Android/iOS/Windows)の静的解析と動的解析ができるフレームワークです。今回はiOSアプリの静的解析に焦点を当てます。Androidアプリの解析については、こちらの記事 new window[2], new window[3]が参考になります。

MobSFを用いたiOSアプリの解析方法

MobSFはDocker Hub new window[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)

図1. MobSFのトップページ

MobSFが起動できたので次に、MobSFの診断対象のiOSアプリを用意します。本節ではDVIA-v2 new window[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」ボタンを押下することで結果を確認できます。

図2. 解析の実行画面

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

図3. レポートの例

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

図4. 検出した問題箇所の表示例

このようにMobSFはアプリの問題箇所を検出するのに活用できます。

MobSFで多く検出される問題

続いて、MobSFを使って複数のiOSアプリのソースコード診断を行い、どのような問題が多く検出されているか見ていきます。また、多く検出された問題について簡単に解説します。診断対象はOpen-Source iOS Apps new window[6]に掲載されているOSSのiOSアプリを使用します。
今回は、910個のiOSアプリを解析して検出された問題の種類と数をまとめます。以降に記載するグラフについては、縦軸が検出した数、横軸が問題の種類(項目のid)です。各idに対応する詳細情報はswift_rules.yaml new window[7]、objective_c_rules.yaml new window[8]から得ることができます。

まずは、severity(重要度)がhighに分類されている問題を見ていきます。
図5のグラフから、ios_hardcoded_info、ios_banned_api、ios_md5_collisionが多く検出された上位3つの項目となります。

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

次に、severity(重要度)がwarningに分類されている問題を見ていきます。
図6のグラフから、ios_uiwebview_safari_view、ios_uipaste_sec、ios_webview_disable_jsが多く検出された上位3つの項目となります。

  1. ios_uiwebview_safari_view
    ios_uiwebview_safari_viewはUIWebView/SFSafariViewControllerの使用を検出しています。MobSFではUIWebView/SFSafariViewControllerの代わりに、WKWebViewを使用することを推奨しています。
  2. ios_uipasete_sec
    UIPasteboardの使用を検出しています。Pasteboardで他のアプリとデータを共有できるためOWASP MSTG new window[11]には、機微情報を扱う際の対策が記載されています。
  3. ios_webview_disable_js
    WebViewにおいてJavaScriptが無効となっていないことを検出しています。不要な場合は、JavaScriptは無効にすることが推奨されます。
図6. iOSアプリを解析して検出された問題の種類と数(severity=warning)

最後にseverity(重要度)がinfoに分類されている問題を見ていきます。
図7のグラフから、ios_swift_log、ios_app_logging、ios_core_dataが多く検出された上位3つの項目となります。

  1. ios_swift_log
    ログ出力関数を検出しています。ログ出力関数を使ってログに機微情報を出力してはいけません。
  2. ios_app_logging
    ログ出力関数を検出しています。ログ出力関数を使ってログに機微情報を出力してはいけません。開発言語がSwiftとObjective-Cで項目が分かれていますが、項目ios_swift_logと同様の項目です。
  3. ios_core_data
    CoreDataデータベースの使用を検出しています。CoreDataデータベースはデフォルトでは暗号化されないため機微情報を格納する場合は、暗号化の対応が必要となります。
図7. iOSアプリを解析して検出された問題の種類と数(severity=info)

解析の自動化

ここまでMobSFを使ったiOSアプリの解析方法とその解析結果について見てきました。この節では、解析の自動化についても触れたいと思います。

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

図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を活用して定期的に診断することで問題の早期検出にも活用できます。

参考

執筆者プロフィール

岩川 健人(いわかわ けんと)
セキュリティ技術センター リスクハンティング・アナリシスグループ

高性能計算(HPC)分野のソフトウェア開発業務を経て、現在はペネトレーションテスト、脆弱性診断などに従事。
SANS SEC575 メダル保持。
CISSP/情報処理安全確保支援士(RISS) /情報処理技術者試験(NW,DB,ES)/GIAC(GREM,GMOB)/AWS認定(SAA,SCS)を保持。

執筆者の他の記事を読む

アクセスランキング