この記事の内容
実際に
Androidアプリケーションセキュリティ — 開発者の ための Androidアプリ保護
悪意ある 攻撃から Androidアプリを 守る 方法
Androidアプリケーションセキュリティとは?
Androidアプリケーションセキュリティとは、
Androidアプリのセキュリティが重要な理由
Androidは
攻撃者は、
開発者が
デバイス上での
不正行為 (ODF):モバイルマルウェアは、 被害者の 端末から 直接、 不正行為を 実行できるようになっています。 ODFは モバイル攻撃の 大きな 転換点と なる もので、 ビジネスアカウントや コミュニケーションツールを 標的に する 可能性が あります。 電話の
転送:マルウェアは、 銀行に かけた 電話を 攻撃者が 管理する 別の 番号に 転送できます。 通話画面には 正規の 電話番号が 表示される ため、 被害者は 転送に 気づきません。 通知からの
直接 返信の 悪用:FluBotスパイウェア、 Medusa、 Sharkbotは、 Androidの 通知から 直接 返信する 機能を 悪用して 不正な 取引に 署名したり、 プッシュ通知を 変更したり、 マルウェアを 拡散させたりします。 この 機能を 使った プッシュメッセージに よる フィッシングで、 ワームのように 被害者の 連絡先へ マルウェアを 広げる こともできます。 ドメイン生成アルゴリズム:Sharkbotは、
ドメイン生成アルゴリズム (DGA)を 使って 新しい ドメイン名と IPアドレスを 絶えず 作成し、 コマンド&コントロールサーバーの 検知を 回避します。 その ため、 セキュリティチームが マルウェアを 検知して ブロックするのは 困難です。 アプリストアの
検知回避:犯罪者は、 Appleの ベータテストプラットフォームTestFlightや Google Playの セキュリティ審査プロセスを 悪用したり、 開発者に 報酬を 支払って アプリに 悪意の ある SDKを 組み込ませたりする ことで、 アプリストアの 検知を 回避する 方法を 見つけています。 開発手法の
高度 化:Xenomorphなどの Androidトロイの 木馬は、 今や 高度な アップデート機能を 備えて 開発されています。 今後、 さらに 多くの モバイルマルウェアファミリーが アップデートプロセスを 改善し、 侵害した 端末に 高度な 機能や 新しい 機能を 追加していくでしょう。
Androidのセキュリティ機能
攻撃者の
アプリケーションサンドボックス:アプリは
サンドボックス環境で 実行され、 ユーザーデータや システムリソースへの 不正な アクセスを 防ぎます。 権限:Androidプラットフォームには、
アプリが アクセスできる データや リソースを ユーザーが 制御できる 権限システムが 備わっています。 SELinux:Androidは
Security-Enhanced Linux (SELinux)を 使用して 強制アクセス制御ポリシーを 適用し、 悪意の ある アプリから システムを 保護します。 コード署名:Androidでは、
すべての アプリに デジタル証明書に よる 署名が 必要です。 これに より、 アプリが 信頼できる 提供元から 入手された ものであり、 改ざんされていない ことを 確認できます。 Google Play Protect:Google Play Protectは、
Google Play上の アプリを スキャンして マルウェアなどの セキュリティ脅威を 検出する、 組み込みの セキュリティ機能です。 実行時の
権限:Android 6.0 (Marshmallow) 以降では、 インストール時ではなく 実行時に、 特定の データや リソースへの アクセス権を アプリに 付与する 必要が あります。 ネットワークセキュリティ構成:Androidでは、
SSL/TLS証明書の ピンニングなどの セキュリティ設定を 含め、 アプリの ネットワークセキュリティを 開発者が 構成できます。 セキュアな
IPC:Androidの プロセス間通信 (IPC) 機構に より、 同じ 端末上で 動作する アプリや サービス間の 通信を 安全に 行えます。 Verified Boot:Android端末には、
端末の ソフトウェアの 完全性を 確認し、 不正な 改変を 防ぐ Verified Bootプロセスが 備わっています。 ハードウェアセキュリティ:Android端末には、
機密データを 保護する ため、 Trusted Execution Environment (TEE) や ハードウェアで 保護された 鍵ストレージなどの ハードウェアセキュリティ機能が 備わっています。
プロの
Android開発で使われる言語とセキュリティ上の課題
Androidでは、
Kotlin
Kotlinは
Kotlinの
Java
Javaは、
Javaに
C++
C++は、
C++に
Snyk CodeはKotlin、
Androidアプリケーションセキュリティのベストプラクティス
Androidの
Androidの
安全な
通信を 徹底する:アプリと サーバー間の データ通信を 暗号化する ため、 HTTPSなどの 安全な プロトコルを 使用しましょう。 また、 証明書の ピンニングを 実装し、 既知の 公開鍵と サーバーの 証明書を 照合する ことで、 信頼できる サーバーとのみ通信するようにします。 適切な
権限を 付与する :アプリが 正常に 動作する ために 必要な 権限だけを 要求し、 それ以外は 要求しないようにしましょう。 不要な 権限を 要求すると、 ユーザーに アクセスを 拒否されたり、 さらに Google Playから アプリが 削除されたりする 可能性が あります。 また、 特定の 機能を ユーザーが 使おうとした ときなど、 必要な タイミングでのみ 権限を 要求しましょう。 データを
安全に 保管する :アプリが ローカルに 保存する 機密データは、 暗号化して 保護しましょう。 また、 不正な アクセスが できない 安全な 場所に 保管する 必要が あります。 たとえば、 SDカードなどの 外部ストレージには データを 保存しないでください。 ほかの アプリや ユーザーが 簡単に アクセスできる ためです。 サービスと
依存関係を 最新の 状態に 保つ:既知の セキュリティ 問題や バグの 影響を 受けないよう、 アプリの 依存関係や ライブラリを 定期的に 更新しましょう。 また、 新たな セキュリティ脅威に 関する 情報を 常に 把握し、 できるだけ早く アプリに パッチを 適用してください。 攻撃対象領域を 最小限に 抑える ため、 使用していない 依存関係や 古い 依存関係も 削除しましょう。
Androidアプリケーションセキュリティチェックリスト
Androidアプリの
セキュリティと
権限管理が 重要:開発プロセス全体を 通じて、 セキュリティを 最優先事項と する 必要が あります。 プロジェクトの 開始時に 潜在的な セキュリティリスクや 脅威を 特定し、 それに 応じた セキュリティプロトコルを 確立しましょう。 ユーザー権限の 管理に ついても 検討し、 アプリが アクセスする データを ユーザーが 明確に 理解できるようにしてください。 モバイルアプリと
バックエンド間の 通信:モバイルアプリと バックエンド間の 通信は 安全である 必要が あり、 双方で 強固な セキュリティ対策を 実施しましょう。 アプリと バックエンド間の すべての データ通信を 暗号化し、 HTTPSなどの 安全な プロトコルを 使用してください。 また、 証明書の ピンニングを 実装して、 アプリが 信頼できる サーバーとのみ通信するようにします。 モバイル特有の
脅威シナリオ:モバイルアプリは 危険な 環境で 動作する ため、 機密データが 危険に さらされる おそれが あります。 モバイル端末に 保存する 重要な セキュリティデータの 量を 検討し、 ローカルに 保存する 機密データを 暗号化して 保護しましょう。 また、 盗み見などの 潜在的な 脅威にも 注意し、 適切な 対策を 講じてください。 Android OSで
利用できる セキュリティ機能を すべて 活用する:Androidには、 安全な ストレージや 鍵管理、 サンドボックス化など、 さまざまな セキュリティ機能が 用意されています。 これらの 機能を 活用して、 アプリの セキュリティを 強化しましょう。 アプリに
必要な 権限を 検討する:開発者は アプリに 必要な 権限を 慎重に 検討し、 必要最小限の 権限のみを 要求する 必要が あります。 必要な 権限を 扱えるよう アプリを 設計するには、 早い 段階で 計画を 立てることが 重要です。 また、 アプリが どの データに アクセスするのか、 なぜ その アクセスが 必要なのかを ユーザーに 明確に 伝えましょう。 自動化を
活用して サービスと 依存関係を 最新の 状態に 保つ:開発者は、 自動化ツールを 使って アプリの 依存関係や ライブラリを 管理しましょう。 これに より、 アプリを 常に 最新の 状態に 保ち、 既知の セキュリティ 問題や バグに 対して 脆弱な 状態に なるのを 防げます。 サポートする
OSの バージョンを 明確に する:開発者は、 アプリが サポートする Androidの バージョンを 明確に する 必要が あります。 多くの バージョンを サポートするのは 困難な ため、 ユーザーへの 対応や デバイスの カバー範囲と セキュリティの バランスを 取りましょう。 また、 ユーザーには アプリを 最新バージョンに 更新し、 最も 安全な バージョンを 利用する よう促しましょう。 テストが
重要:潜在的な セキュリティリスクや 脅威を 検出するには、 テストが 欠かせません。 開発者は、 侵入検知や その 他の ホワイトハッキング手法を 使って アプリの セキュリティを テストしましょう。 また、 アプリの 安全性を 確保する ため、 すべての セキュリティテストと 評価の プロセスに モバイルアプリを 含めてください。
Androidアプリケーションのセキュリティツール
潜在的な
SAST
(静的アプリケーションセキュリティテスト):コードを 実行せずに、 アプリケーションの ソースコードや バイナリを 分析する セキュリティテストの 一種です。 SASTツールは、 パターンマッチング、 制御フロー分析、 データフロー分析などの 手法を 使い、 開発の 早い 段階で 脆弱性を 特定します。 SCA
(ソフトウェア構成分析):SCAツールは、 アプリケーションの オープンソースおよびサードパーティ製の 依存関係を 分析し、 セキュリティ上の 脆弱性や ライセンスコンプライアンスの 問題を 特定します。 コードを スキャンして 既知の 脆弱性を 検出し、 新たな 脆弱性を 監視するとともに、 その 修正方法を 提案します。 ファジング:無効な
データ、 予期しない データ、 または ランダムな データを アプリケーションに 入力し、 バグや 脆弱性を 検出する テスト手法です。 ファジングツールは 大量の テストデータを 生成し、 アプリケーションの 入力検証に 潜む 潜在的な 脆弱性を 特定します。 DAST
(動的アプリケーションセキュリティテスト):アプリケーションの 実行中に 分析を 行い、 潜在的な 脆弱性を 特定する セキュリティテストの 一種です。 DASTツールは 攻撃を シミュレートし、 アプリケーションの 応答を 分析して、 インジェクションの 欠陥、 クロスサイトスクリプティング (XSS)、 認証の 問題などの 脆弱性を 特定します。 IAST
(対話型アプリケーションセキュリティテスト):IASTツールは SASTと DASTの 要素を 組み合わせ、 アプリケーションの 実行中に 潜在的な セキュリティ脆弱性に 関する リアルタイムの フィードバックを 提供します。 SQLインジェクション、 クロスサイトスクリプティング、 バッファオーバーフローなどの 脆弱性を 検出します。 監視と
検知: これらの ツールは、 本番環境の アプリケーションを 継続的に 監視し、 潜在的な セキュリティインシデントを 特定します。 ログ、 ネットワークトラフィック、 システムイベントを 監視して、 異常や 潜在的な セキュリティ脅威を 検出します。 また、 インシデント発生時に セキュリティチームへ アラートや 通知を 送信し、 迅速な 対応を 可能に します。
Snykで実現するAndroidアプリケーションのセキュリティ
Snykは、
Snyk Codeの
Snyk Open Sourceの
モバイルアプリは
Snyk Containerは
Snykの