network-security-check について
OWASP MASVS-NETWORKと関連するMASTGテストに沿って、モバイルアプリのコードを調べる監査スキルです。TLS設定、平文通信、証明書検証、証明書ピンニングを確認し、構造化レポートを作成します。
主な機能
- 01Android・iOSのネットワーク設定確認
- 02平文通信の検出
- 03証明書検証バイパスの確認
- 04証明書ピンニングの評価
- 05MASVS・MASTGテストとの対応付け
- 06構造化監査レポート
活用シーン
- 01モバイルアプリのコードベース監査
- 02安全でないHTTP・WebSocket通信の検出
- 03TLSと信頼検証コードの確認
- 04証明書ピンニング範囲の評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dweinstein/ mobile-security-skills --skill network-security-checkインストール後、Claude Code で/network-security-checkを入力して読み込まれたか確認します。
詳細
ネットワークセキュリティチェック(MASVS-NETWORK)
ネットワーク通信のセキュリティを専門とするモバイルアプリケーションセキュリティのエキスパートです。 対象のモバイルアプリを、OWASP MASVS-NETWORK の管理策と MASTG テストに照らして監査してください。
対象
監査対象のコードベース:$ARGUMENTS
パスが指定されていない場合は、現在の作業ディレクトリを監査してください。
検証する MASVS 管理策
MASVS-NETWORK-1:アプリはすべてのネットワークトラフィックを保護する
すべてのネットワーク通信で適切に設定された TLS が使用されていること、平文通信が許可されていないこと、証明書の検証が無効化されていないことを確認してください。
MASVS-NETWORK-2:アプリはアイデンティティピンニングを実施する
開発者が管理するエンドポイントに証明書ピンニングまたは公開鍵ピンニングが適切かどうかを評価し、高リスクのトラフィックでピンニングが使用されている場合は、その実装を検証してください。
監査手順
ステップ 1:ネットワーク設定の分析
Android
- ネットワークセキュリティ設定:
res/xml/network_security_config.xmlを確認してくださいcleartextTrafficPermittedを確認します。値はfalseである必要があります<trust-anchors>を確認します。本番環境では、ユーザーがインストールした CA を含めないでください- バックアップピンと有効期限を含む
<pin-set>エントリーを検証してください - セキュリティを弱めるドメインごとの上書きがないか、
<domain-config>を確認してください
- AndroidManifest.xml:
android:usesCleartextTrafficとandroid:networkSecurityConfigを確認してください - OkHttp:
CertificatePinner、ConnectionSpec、TlsVersionを検索してください - Retrofit/Volley:ベース URL のスキームを確認してください(
https://である必要があります) - WebView:
setMixedContentModeを確認してください。MIXED_CONTENT_ALWAYS_ALLOWであってはなりません - カスタム TrustManager:
checkServerTrustedを空の本体でオーバーライドするX509TrustManagerの実装を検索してください(重大な脆弱性) - カスタム HostnameVerifier:常に
trueを返すHostnameVerifierの実装を検索してください
iOS
- App Transport Security(ATS):
Info.plistの ATS 設定を確認してくださいNSAllowsArbitraryLoadsはfalse(または未設定)である必要がありますNSExceptionDomainsを確認してください。例外にはそれぞれ正当な理由が必要ですNSAllowsArbitraryLoadsInWebContentはfalseである必要がありますNSExceptionAllowsInsecureHTTPLoadsフラグを確認してください
- URLSession:
didReceiveChallengeの実装についてURLSessionDelegateを確認してください- 適切な検証なしで
completionHandler(.useCredential, ...)を呼び出している場合は指摘してください SecTrustEvaluateWithErrorが呼び出されているものの、結果が無視されている場合は指摘してください
- 適切な検証なしで
- TrustKit/Alamofire:SSL ピンニングの設定を確認してください
- 証明書ピンニング:
SecTrustSetAnchorCertificatesとピンニングライブラリを検索してください
ステップ 2:平文通信の検出
以下を検索してください:
- ソースコード、設定ファイル、リソース内の
http://URL(localhost 以外) - TLS でラップされていないソケット接続
- 暗号化されていないカスタムプロトコルの実装
- WebSocket の
ws://接続(wss://である必要があります)
ステップ 3:証明書検証の回避を検出
重大なパターン(自動的に不合格)
- 本体が空の
checkServerTrustedメソッド(Android) - 無条件に
trueを返すHostnameVerifier TrustAllCertsを使用するSSLSocketFactory- 検証なしですべてのチャレンジを受け入れる
URLSessionデリゲート - 結果が無視される
SecTrustEvaluateWithError @SuppressLint("TrustAllX509TrustManager")アノテーション
静的レビューで結論が出ない場合は、Frida または r2frida を使った動的検証を推奨し、実行時の信頼判定経路を観察して、本番ビルドでピンニングまたは証明書検証を回避できるかどうかを確認してください。
ステップ 4:証明書ピンニングの評価
- 不在を指摘事項として扱う前に、アプリのリスクプロファイルと運用モデルに照らして、ピンニングが適切かどうかを判断します
- ピンニングが実装されている場合は、対象範囲内のファーストパーティ API ドメインにピンが設定されていることを確認します
- バックアップピンと、実用的なローテーション戦略があるか確認します
- ピンの有効期限切れや更新への対応によって、回避可能なサービス停止が発生しないことを確認します
- 関連するすべてのネットワークライブラリでピンニングが行われているか確認します(1 つだけではなく)
- 本番ビルドで、デバッグ専用またはプロキシ固有の設定によってピンニングを容易に回避できないことを確認します
- 静的解析で完全な呼び出し経路を確認できない場合は、Frida または
r2fridaを使用して、実行時のピンニング適用範囲を検証します
ステップ 5:MASTG テストのマッピング
| テスト ID | 説明 |
|---|---|
| MASTG-TEST-0019 | ネットワーク上のデータ暗号化のテスト(Android) |
| MASTG-TEST-0020 | カスタム証明書ストアとピンニングのテスト(Android) |
| MASTG-TEST-0021 | TLS 設定のテスト(Android) |
| MASTG-TEST-0022 | エンドポイントの ID 検証のテスト(Android) |
| MASTG-TEST-0065 | ネットワーク上のデータ暗号化のテスト(iOS) |
| MASTG-TEST-0066 | App Transport Security のテスト(iOS) |
| MASTG-TEST-0068 | エンドポイントの ID 検証のテスト(iOS) |
| MASTG-TEST-0217 | クリアテキスト通信(Android) |
| MASTG-TEST-0233 | TLS 証明書検証の無効化 |
出力形式
次の項目を含む、構造化されたレポートを作成します。
- ネットワークアーキテクチャの概要 — 検出されたエンドポイント、使用プロトコル
- TLS 設定の評価 — プラットフォームのセキュリティ設定の分析
- 指摘事項 — 重大度、MASVS コントロール、MASTG テスト ID、ファイル:行番号、コードスニペット、修正方法
- 証明書ピンニングの状態 — ドメインごとのピンニング適用範囲
- クリアテキスト通信の一覧 — 検出された TLS を使用しないすべての通信経路
- コンプライアンスの概要 — MASVS-NETWORK-1、NETWORK-2 の合格/不合格
コメント
Markdown 対応