機能作成に慣れてきたところで
私は業務以外の開発に関して、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.tomlやxxx.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などのファイルをドラッグ&ドロップまたは選択してアップロードできます。
ステップ2: 解析の実行
APKファイルをアップロードすると、自動的に静的解析が開始されます。
解析には数分かかる場合があります。
ステップ3: 解析結果の表示
解析が完了すると、セキュリティスコアや検出された脆弱性の詳細レポートが表示されます。
画像内の赤枠で囲った箇所にスコアが記載されています。55となっています。

このMobSFにおいて55/100は (MEDIUM RISK)という扱いのようです。
改善可能な箇所がありそうです。
結果を詳しく見ていこう
主な解析項目で記載した内容について、解析結果の画像を交えて改めて記載します。
APPLICATION PERMISSIONS
アプリが要求する権限の一覧を表示。カメラ、位置情報、ストレージなどの権限とその危険度レベルを確認できる
ANDROID API
アプリが使用しているAndroid APIの一覧を表示。非推奨APIや潜在的なセキュリティリスクのあるAPI呼び出しを検出する
BROWSABLE ACTIVITIES
ディープリンクやURLスキームで起動可能なActivityを表示。外部アプリからの不正な呼び出しリスクを確認できる
NETWORK SECURITY
ネットワーク通信の設定を分析。HTTP通信の使用、証明書検証の有無、SSL/TLSの設定などセキュリティ上の問題を検出する
MANIFEST ANALYSIS
AndroidManifest.xmlの詳細な解析結果を表示。コンポーネントの公開設定やセキュリティ設定の不備を検出する
CODE ANALYSIS
ソースコードの静的解析結果を表示。ハードコードされた機密情報、脆弱性のあるコードパターン、セキュリティベストプラクティス違反を検出する
上記で紹介した項目以外にもありますが、主に上記の分類で解析結果を表示してくれます。
結果のエクスポート
小さいので、150%に拡大して確認しましたが、囲った箇所にある通り、様々な形でセクションごとにエクスポートが可能です。解析結果全体のPDF出力も可能でした。
いくつか対応してみよう
MANIFEST ANALYSISのセクションでSEVERITYがhighの項目が2つあったので、これらから対応をしました。
※多少専門的な話になるので、おおまかに記載しています。
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.`
補足
API レベルの列の数字をクリックに表示されるページの右上に記載されていた内容ですが、確かにこれは古すぎましたね。。怒られるのも仕方ないです。
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を修正

対応後
上述した内容は、対応事項の一部です。一通り対応を終えて再度apkファイルを解析しました。
元の数値が悲惨だった訳でもないですが、以下の通りそれなりにまともなセキュリティスコアになりました。

まとめ
今回、MobSFというライブラリを用いて静的解析をやってみました。
1つずつ対応をしてスコアが上がるのは、小さな成功体験を繰り返すので、面白かったです。
今回MobSFの静的解析としては、Aランク扱いとなりましたが、他にも解析を行うライブラリがあります。またMobSFの動的解析も用意されています。(以下画像、左下の赤枠)
それらを活用して、よりスキルアップできればと思います。
ありがとうございました。
参考記事













