Mobile 2016 OWASP Security
Overview
モバイル OWASP Mobile Top 10 セキュリティについてまとめているセクション。
M1: プラットフォームの不適切な使用(Improper Platform Usage)
このリスクは、iOSやAndroidなどのモバイルプラットフォームが提供するセキュリティ機能(キーチェーン、TouchID、パーミッションなど)を、アプリが正しく使わない、または誤って使用している場合に該当する。
tip
モバイルアプリはきっかけに過ぎず、攻撃の本体はサーバー側の脆弱性。
例えば、APIがXSSやSQLインジェクションに弱いと、モバイル経由でそれを突かれる可能性がある
具体例(M1: プラットフォームの不適切な使用)
- iOSで本来は安全な「キーチェーン」に保存すべきパスワードを、アプリのローカルストレージに保存してしまう
- Androidアプリが必要以上のパーミッションを要求する
- AndroidのIntentやServiceが外部に公開されたままになっている
攻撃手法(M1: プラットフォームの不適切な使用)
アプリが外部公開しているAPIやWebサービスに脆弱性がある場合、モバイルを経由してサーバー側の脆弱性(例:XSSやSQLインジェクション)を突かれる可能性があります。
プラットフォームの不適切な使用防止策(M1: プラットフォームの不適切な使用)
- 各プラットフォームのセキュリティガイドライン(iOS/Android公式)を遵守する
- 正しい権限の設計と利用
- APIやWebサービスの安全な実装(OWASP Web Top Ten に準拠)
よくある誤用例(M1: プラットフォームの不適切な使用)
- TouchIDなど生体認証を導入しているつもりでも、バイパスできる実装になっている
- セッション情報をローカルに暗号化せず保存する
M2: 安全でないデータストレージ(Insecure Data Storage)
これは、モバイルアプリがユーザーの機密情報(ログイン情報や個人情報など)を安全ではない方法で保存してしまっている状態を指す。
たとえば、パスワードを暗号化せずにスマホ内に保存しているといったケースがこれに該当する。
tip
モバイルデバイスが盗まれたり、悪意あるアプリやマルウェアがインストールされていると、ファイルシステムを通じてデータが簡単に抜き取られる可能性があります。
攻撃シナリオ(M2: 安全でないデータストレージ)
- 攻撃者がスマホを入手し、PCに接続
- 無料ツールを使ってアプリの保存領域を閲覧
- SQLiteファイルやログから認証情報を平文で抽出
技術的・ビジネス的影響(M2: 安全でないデータストレージ)
- 個人情報の漏えい、なりすまし、詐欺被害
- 評判の損失、外部ポリシー(例:PCI DSS)違反
- 最悪の場合、すべてのユーザーに影響が及ぶ可能性
ありがちな保存場所(M2: 安全でないデータストレージ)
- SQLiteデータベース、ログファイル、XML設定ファイル
- Cookieやキャッシュ、SDカード、クラウド同期領域
意図しない漏えいの要因(M2: 安全でないデータストレージ)
- OSやフレームワークが自動的にキャッシュする情報(画像、キー入力、ログなど)
- 広告・分析SDKが外部に送信するデータ
安全でないデータストレージ防止策(M2: 安全でないデータストレージ)
- 機密情報は暗号化+セキュアストレージ(Keystore、Keychain)を利用
- SDカードやクラウド同期ストレージへの保存を避ける
- デバッグログの出力制限
- URLキャッシュ、コピー&ペーストバッファ、HTML5ストレージ等の挙動を把握・制御
攻撃例:iGoat演習(M2: 安全でないデータストレージ)
OWASPのiGoatアプリでは、以下のような脆弱性を体験できます:
- 銀行アプリに偽ログイン → アプリの内部ファイルを探索
credentials.sqlite内にJason:pleasedontstoremebro!という平文パスワードを発見
M3: 安全でない通信(Insecure Communication)
モバイルアプリが通信の暗号化や証明書検証を正しく行っていない場合、ネットワーク上で通信内容が傍受・改ざんされるリスクが生じる。
tip
SSL/TLSを使っている「つもり」でも、設定や実装が不十分だと中間者攻撃や盗聴を許してしまうことがあります。
攻撃シナリオ(M3: 安全でない通信)
- カフェなどのフリーWi-Fiを通じた中間者攻撃(MITM)
- モバイルアプリがサーバ証明書を検証せず、偽サーバへ通信
- 暗号化されていないHTTP通信で個人情報が漏洩
技術的・ビジネス的影響(M3: 安全でない通信)
- セッションIDやパスワードの漏洩 → アカウント乗っ取り
- 管理者権限を盗まれ、全サービスに影響
- プライバシー侵害、なりすまし、企業の信用失墜
通信対象・プロトコルの例(M3: 安全でない通信)
- アプリ ⇄ サーバー(HTTPS、TCP/IP)
- アプリ ⇄ 近接機器(Bluetooth、NFC)
- モバイル間通信(SMS、Wi-Fi Direct など)
代表的な欠陥(M3: 安全でない通信)
- TLSは使っているが証明書検証を行っていない
- 弱い暗号スイートを使用(解読されやすい)
- セッションIDなどを平文で送信
- HTTPとHTTPSが混在(セッションハイジャックの原因)
安全でない通信の防止策(M3: 安全でない通信)
- すべての通信にTLS(SSL)を使用
- 自己署名証明書の禁止、証明書ピンニングの検討
- TLS証明書のチェーン検証を有効に
- 信頼できるCAによる証明書の使用
- 無効な証明書検出時は接続をブロック+UIで通知
- SMSや通知など暗号化されていないチャネルで機密情報を送らない
- 機密情報はSSL通信の中でも別途暗号化を施す
iOS向けの注意点(M3: 安全でない通信)
NSURL系のAPIでsetAllowsAnyHTTPSCertificateを使用しないSecure Transportを使った強固な通信を実装- 証明書ピンニング:バンドル内に証明書を格納し、サーバ認証時に照合
Android向けの注意点(M3: 安全でない通信)
AllowAllHostnameVerifierやALLOW_ALL_HOSTNAME_VERIFIERの削除checkServerTrustedを適切に実装し、サーバ証明書を検証
攻撃例(M3: 安全でない通信)
- アプリが無条件で証明書を受け入れてしまい、MITM攻撃で偽サーバへ接続
- 弱い暗号スイートにより通信内容が解読される
- SSL未使用のAPI通信で、ユーザー情報が平文で漏洩