はじめに
モバイルアプリのセキュリティ対策では、Root(Android) や Jailbreak(iOS) の検知は重要な防御手段の一つです。
Root / Jailbreak された端末では OS の制限が解除されるため、攻撃者がアプリの内部動作を簡単に解析・改ざんできるようになります。
Flutter アプリでも同様に、Root / Jailbreak 検知を実装することでセキュリティリスクを軽減できます。
1. Root / Jailbreak とは
Android の Root
Android では Root を取得すると Linux の root 権限が得られます。
可能になること:
- システムファイルの変更
- アプリの sandbox 回避
- メモリ改ざん
- アプリの Hook
代表的な Root ツール:
- Magisk
- SuperSU
iOS の Jailbreak
iOS では Jailbreak により Apple の制限が解除されます。
可能になること:
- App sandbox bypass
- 非公式アプリのインストール
- システム API へのアクセス
- アプリの Hook
代表ツール:
- Checkra1n
- unc0ver
2. Root / Jailbreak 端末のリスク
Root / Jailbreak 端末では以下の攻撃が可能になります。
| 攻撃 | 内容 |
|---|---|
| Hook 攻撃 | アプリ関数の改ざん |
| MITM 攻撃 | TLS 検証バイパス |
| ローカルデータ取得 | Token / DB |
| メモリ改ざん | 認証バイパス |
例えば:
Hook login()
↓
return true
↓
認証バイパス
そのため、多くの金融アプリや決済アプリは Root / Jailbreak を検知します。
3. Android Root 検知方法
Android ではいくつかの典型的な検知方法があります。
① su バイナリの存在
Root 端末には su コマンドが存在することが多いです。
例:
/system/bin/su
/system/xbin/su
Flutter では Platform Channel を使ってチェックできます。
② Root アプリの検出
Root 管理アプリ:
- Magisk
- SuperSU
パッケージを確認することで検知できます。
③ 書き込み可能な system
通常 Android の /system は read-only です。
Root 端末では書き込み可能になる場合があります。
④ 危険コマンドの存在
Root 端末では以下のツールが存在する場合があります。
busybox
magisk
su
4.iOS Jailbreak 検知方法
iOS では以下の方法が使われます。
① Jailbreak ファイルの存在
典型的なパス:
/Applications/Cydia.app
/bin/bash
/usr/sbin/sshd
② Sandbox 破壊の確認
通常 iOS アプリは sandbox 内でのみファイル操作できます。
Jailbreak 端末では外部ディレクトリに書き込み可能になります。
③ URL Scheme 検査
Jailbreak アプリ:
cydia://
この URL が開ける場合、Jailbreak の可能性があります。
5. Flutter での Root / Jailbreak 検知
Flutter では専用のライブラリを使用できます。
代表例:
- freerasp
- jailbreak_detection
- root_checker_plus
アプリは
- 起動停止
- 機能制限
などの対応を行います。
6. 軽量 plugin + 独自ポリシー
RootBeer は Android root 判定ライブラリとして広く知られており、iOS 側では IOSSecuritySuite が jailbreak 判定の代表格です。IOSSecuritySuite は amIJailbroken() や failed checks の取得を提供しています。
この場合は Flutter では wrapper を自作して、
- Android: RootBeer
- iOS: IOSSecuritySuite
を Platform Channel / FFI / plugin 経由でまとめる設計が堅いです。
向いているケース
- 社内アプリ
- 小規模プロダクト
- まず最低限だけ入れたい場合
注意点
iOS 側では CanOpenURL() を使う系の判定があり、LSApplicationQueriesSchemes に cydia などの scheme を追加する必要がある構成があります。
IOSSecuritySuite
Android-rootbeer
7. Root 検知の限界
重要なポイントですが、
Root 検知は完全な防御ではありません。
理由:
攻撃者は
- Frida
- Magisk Hide
- Root Cloaking
などで検知を回避できます。
例:
Hook root_check()
↓
return false
つまり
Root 検知は防御層の一つにすぎません。
8. 推奨セキュリティ対策
Root 検知と合わせて以下を実装することが重要です。
① Certificate Pinning
MITM 防止
② Secure Storage
機密データ保護
③ コード難読化
flutter build apk --obfuscate
④ サーバー側検証
クライアントを信用しない。
まとめ
Root / Jailbreak 端末ではアプリのセキュリティが大きく低下します。
主な検知方法:
| 方法 | 内容 |
|---|---|
| su バイナリ | Root コマンド |
| Root アプリ | Magisk |
| システム権限 | 書き込み可能 |
| Jailbreak ファイル | Cydia |
しかし、Root 検知は完全ではないため、
- TLS Pinning
- Secure Storage
- Server-side validation
などと組み合わせることが重要です。