1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MobSF(Mobile Security Framework)でFlutter製APKのセキュリティ改善

Last updated at Posted at 2025-10-30

機能作成に慣れてきたところで

私は業務以外の開発に関して、2025年はFlutterに最も時間を充てて進めています。
年間を通して継続的に開発ができているので、機能作成に関しては、ある程度できるようになりました。

来年から本格的に進めるつもりでしたが、先月から機能作成以外の学習を進めています。

  • Flutterコード自体リファクタリング
  • パフォーマンス改善
  • セキュリティ強化

中でも、セキュリティ強化に関して注力したいと思っています。

セキュリティ強化に関して、
解析手法に応じてツール・ライブラリがいくつかありますが、今回は、apkファイルの「静的解析」をやってみた話を記載していきます。

読み進めていただく前に

「apk解析」という記載にもある通り、初学者向けの内容とはなっていません。
ですが、タイトルから興味ありそうと思われた場合は、ざっくりでも読んでもらえたらうれしいです!

この記事では、以下に関する話は特にしてませんので、ご了承ください。

  • Dockerコンテナの使い方
  • Flutterの基本的な話
  • FlutterプロジェクトにおけるAndroidアプリケーションの作成方法

どんなアプリケーションを作っているの?

ちなみに作成しているアプリケーションですが、Starbucksアプリのcloneです。

以下サイトで各機能のスクリーンショット集が確認出来ます。(2023年7月版なので、現在とUIが異なるものもあります)

開発内容

基本的なアプリ機能の作成を含め、以下の技術も利用して開発を進めています。

機能 利用技術
店舗検索 GoogleMap APIの利用
サインアップ メール送信機能とApp Linkを用いたアプリ起動
サインイン メールアドレス認証と、Googleアカウント認証(実際のアプリにはない)
モバイルオーダー注文 FCM(Firebase Cloud Messaging)を用いた通知機能

技術スタック

以下の通りです。また普段Androidを使っている関係でAndroidに重きを置いて進めています。

  • OS:Android
  • FW:Flutter
  • DB:Supabase
  • Cloud Service:Google Cloud・Firebase

以前やってみた解析(apktool)

「解析」という括りで言いますと、以前apkファイルの解析入門ということで、apktoolによる解析を少しだけやってみました。

このときは、難読化や暗号化をしないと、環境変数情報の情報が読み取れてしまうことを実感できました。

やってみた後、もう少し本格的に進めたいと感じました。

解析は許可されたapkで
実際に解析する場合、何でもかんでも勝手に解析してOKではありません。

基本的には、以下のどちらかの場合に限り解析が可能です。後者であれば何かを心配する必要がないので、心置きなく解析できます。

  • 解析許可が明示されているアプリ
  • 自分自身で作成したアプリ

MobSF(Mobile Security Framework)とは

About
Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis.

主な解析項目

apkファイルから、以下の項目に関する解析を行ってくれます。以下に記載した項目は代表的なもので、これら以外にも解析項目はあります。

チェック項目 内容
APPLICATION PERMISSIONS アプリが要求する権限の一覧を表示。カメラ、位置情報、ストレージなどの権限とその危険度レベルを確認できる
ANDROID API アプリが使用しているAndroid APIの一覧を表示。非推奨APIや潜在的なセキュリティリスクのあるAPI呼び出しを検出する
BROWSABLE ACTIVITIES ディープリンクやURLスキームで起動可能なActivityを表示。外部アプリからの不正な呼び出しリスクを確認できる
NETWORK SECURITY ネットワーク通信の設定を分析。HTTP通信の使用、証明書検証の有無、SSL/TLSの設定などセキュリティ上の問題を検出する
MANIFEST ANALYSIS AndroidManifest.xmlの詳細な解析結果を表示。コンポーネントの公開設定やセキュリティ設定の不備を検出する
CODE ANALYSIS ソースコードの静的解析結果を表示。ハードコードされた機密情報、脆弱性のあるコードパターン、セキュリティベストプラクティス違反を検出する

ライブラリを少し見てみよう

pyproject.tomlxxx.htmlを確認すると分かるのですが、この解析ライブラリはDjangoで動いています。

詳しくは記載しませんが、以下のファイル(などで)でAndroidの解析をしているようです。

とりあえず解析をやってみよう

Githubのリポジトリにある通りですが、Dockerコンテナを用意する形で解析可能です。
以下、ドキュメントから引用したコマンドです。

docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

# Default username and password: mobsf/mobsf

ログイン

Default username and password: mobsf/mobsf

この通り入力します。

APKファイルのアップロードと解析

ステップ1: ログイン後の画面

ログインが完了すると、MobSFのメイン画面が表示されます。
ここからAPK、IPA、ZIPなどのファイルをドラッグ&ドロップまたは選択してアップロードできます。

MobSFメイン画面


ステップ2: 解析の実行

APKファイルをアップロードすると、自動的に静的解析が開始されます。
解析には数分かかる場合があります。

解析実行中


ステップ3: 解析結果の表示

解析が完了すると、セキュリティスコアや検出された脆弱性の詳細レポートが表示されます。
画像内の赤枠で囲った箇所にスコアが記載されています。55となっています。
image.png

このMobSFにおいて55/100 (MEDIUM RISK)という扱いのようです。
改善可能な箇所がありそうです。

image.png
Bの色がちょっと明くてちょっと眩しいですが・・・)

結果を詳しく見ていこう

主な解析項目で記載した内容について、解析結果の画像を交えて改めて記載します。

APPLICATION PERMISSIONS

アプリが要求する権限の一覧を表示。カメラ、位置情報、ストレージなどの権限とその危険度レベルを確認できる

ANDROID API

アプリが使用しているAndroid APIの一覧を表示。非推奨APIや潜在的なセキュリティリスクのあるAPI呼び出しを検出する

BROWSABLE ACTIVITIES

ディープリンクやURLスキームで起動可能なActivityを表示。外部アプリからの不正な呼び出しリスクを確認できる

NETWORK SECURITY

ネットワーク通信の設定を分析。HTTP通信の使用、証明書検証の有無、SSL/TLSの設定などセキュリティ上の問題を検出する

MANIFEST ANALYSIS

AndroidManifest.xmlの詳細な解析結果を表示。コンポーネントの公開設定やセキュリティ設定の不備を検出する

CODE ANALYSIS

ソースコードの静的解析結果を表示。ハードコードされた機密情報、脆弱性のあるコードパターン、セキュリティベストプラクティス違反を検出する

上記で紹介した項目以外にもありますが、主に上記の分類で解析結果を表示してくれます。

結果のエクスポート

image.png

小さいので、150%に拡大して確認しましたが、囲った箇所にある通り、様々な形でセクションごとにエクスポートが可能です。解析結果全体のPDF出力も可能でした。

いくつか対応してみよう

MANIFEST ANALYSISのセクションでSEVERITYがhighの項目が2つあったので、これらから対応をしました。
※多少専門的な話になるので、おおまかに記載しています。

image.png

1. 古いAndroidバージョンへの対応 (minSdk=24)

1.App can be installed on a vulnerable unpatched Android version
Android 7.0, [minSdk=24]

問題点
Android 7.0という古すぎるバージョンまでサポートしていました。

対応内容
DESCRITPTIONに記載された以下内容に沿って対応しました。

Support an Android version => 10, API 29 to receive reasonable security updates.`

android/app/build.gradleを修正
image.png

補足

API レベルの列の数字をクリックに表示されるページの右上に記載されていた内容ですが、確かにこれは古すぎましたね。。怒られるのも仕方ないです。

image.png

3. App Linkの設定不備

3.App Link assetlinks.json file not found
[android:name=com.enoconan.testingappv2.MainActivity]
[android:host=http://local.com]

これは、App Linkと呼ばれる機能に関する話です。
App Linkですが、Webサイトのリンクをクリックした時、ブラウザが開く代わりに特定のアプリが起動することを指します。皆さん一度は経験があるかと思います。

問題点
ローカル開発用のhttp://local.comというダミードメインに対して、
android:autoVerify="true"で検証を有効にしていました。DESCRITPTIONの以下記載が関係します。

App Link asset verification URL (http://local.com/.wellknown/
assetlinks.json) not found or configured incorrectl
You must verify the App
Link domain by hosting the assetlinks.json file and enabling
verification via [android:autoVerify="true"] in the Activity intentfilter.

対応内容
ローカル開発用の設定に対しては、autoVerify属性はfalseとしました。

android/app/src/main/AndroidManifest.xmlを修正
image.png

対応後

上述した内容は、対応事項の一部です。一通り対応を終えて再度apkファイルを解析しました。

元の数値が悲惨だった訳でもないですが、以下の通りそれなりにまともなセキュリティスコアになりました。
image.png

まとめ

今回、MobSFというライブラリを用いて静的解析をやってみました。
1つずつ対応をしてスコアが上がるのは、小さな成功体験を繰り返すので、面白かったです。

今回MobSFの静的解析としては、Aランク扱いとなりましたが、他にも解析を行うライブラリがあります。またMobSFの動的解析も用意されています。(以下画像、左下の赤枠)
それらを活用して、よりスキルアップできればと思います。

image.png

ありがとうございました。

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?