mcpField
A
Android Security Analyzer

Android Security Analyzer

リモート
github.com/ako2345セキュリティ333 週間前に更新
リポジトリ

Android Security Analyzer について

Android Security Analyzerは、ビルドせずにAndroidソースコードを静的解析するCloudflare Workers上のリモートMCPサーバーです。パターンベースのルールで構造化された検出結果を返し、開発やセキュリティレビューに利用できます。

主な機能

  1. 01Manifest、Gradle、Java/Kotlin、XMLの解析
  2. 02キー、トークン、パスワードのスキャン
  3. 03重要度と推奨対応を含む検出結果
  4. 04セキュリティチェック一覧と検出内容の説明
  5. 05ビルドやAndroid SDKが不要

活用シーン

  1. 01ビルド前のAndroidソース設定の確認
  2. 02WebView、TLS、ストレージのリスク調査
  3. 03ソース内の認証情報や秘密情報の検出

MCP 対応

Streamable HTTP経由で、プロジェクト解析、チェック項目一覧、検出内容の説明、ヘルスチェック用のMCPツールを提供します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://android-security-analyzer.ako-labs.workers.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

4
パラメーター型必須説明
filesarrayはい分析するプロジェクトファイルの配列
optionsobjectいいえ分析オプション
options.maxFileSizeKbnumberいいえ処理するファイルの最大サイズ(KB、デフォルト:512)
options.enableSecretScanbooleanいいえシークレット/認証情報のスキャンを有効にします(デフォルト:true)
options.includeInfoLevelbooleanいいえ情報レベルの検出事項を含めます(デフォルト:true)
projectNamestringはい分析対象の Android プロジェクト名

詳細

Android Security Analyzer

Android アプリケーションのソースコードを静的セキュリティ分析する MCP サーバーです。Cloudflare Workers 上で、Streamable HTTP を介したリモート MCP サーバーとして動作します。

機能

Android プロジェクトのソースファイルをプロジェクトをビルドせずに分析し、構造化されたセキュリティレポートを返します。分析対象は次のとおりです。

  • マニフェスト分析 — エクスポートされたコンポーネント、危険な権限、クリアテキスト通信、デバッグフラグ、バックアップ設定、SDK バージョン
  • Gradle/ビルド設定 — リリースビルドの設定ミス、古い SDK、疑わしい依存関係、ハードコードされたシークレット
  • ソースコード(Java/Kotlin) — 安全でない WebView、SSL/TLS のバイパス、脆弱な暗号化、SQL インジェクションのパターン、プロセス実行、安全でないファイル保存、PendingIntent の問題
  • XML 設定 — ネットワークセキュリティ設定の弱点、範囲が広すぎるファイルプロバイダーのパス
  • シークレットスキャン — API キー、トークン、パスワード、秘密鍵、クラウド認証情報、高エントロピー文字列

すべての分析は正規表現/パターンベースで、外部ツール、Java、Android SDK を必要とせず、Workers ランタイム上でネイティブに実行されます。

アーキテクチャ

POST /mcp ──► McpServer (JSON-RPC 2.0) ──► Tool Router
                                              │
              ┌───────────────────────────────┘
              ▼
         Orchestrator
              │
    ┌─────────┼─────────┬─────────────┬──────────────┐
    ▼         ▼         ▼             ▼              ▼
 Manifest  Gradle   Source Code   XML Config    Secret
 Analyzer  Analyzer  Analyzer     Analyzer     Scanner
    │         │         │             │              │
    └─────────┴─────────┴─────────────┴──────────────┘
              │
              ▼
     Scoring + Deduplication ──► AnalysisReport

主な設計上の決定事項:

  • ステートレス — セッションなし、Durable Objects なし
  • 最小限の MCP JSON-RPC 2.0 実装(重量級 SDK への依存なし)
  • 拡張可能なルールレジストリを備えたデータ駆動型ルールエンジン
  • 統一された Finding 型を持つ独立したアナライザー
  • fast-xml-parser による軽量な XML 解析
  • zod による入力検証
  • バンドルサイズ:約 66KB(gzip 圧縮時)

MCP ツール

ツール説明
analyze_android_projectプロジェクトファイルの包括的なセキュリティ分析
list_android_security_checks実装済みのセキュリティルールをすべて一覧表示
explain_finding特定のルールの詳細な説明
healthサーバーのステータスとルールエンジンの統計情報

インストール

ホスト型サーバー(Cline/MCP クライアントに推奨): ローカルへのインストールは不要です。サーバーは次の場所で稼働しています。

https://android-security-analyzer.ako-labs.workers.dev/mcp

この URL を MCP クライアントの設定に追加してください(下記の「MCP クライアントから接続する」を参照)。

ローカル開発:

npm install

開発

npm run dev

ローカルの Wrangler 開発サーバーが起動します。MCP エンドポイントは http://localhost:8787/mcp で利用できます。

デプロイ

npm run deploy

Cloudflare Workers にデプロイします。wrangler の認証が必要です(npx wrangler login)。

テスト

npm test              # Run all tests
npm run test:watch    # Watch mode
npm run typecheck     # TypeScript type checking

ローカルでの MCP テスト

接続を初期化する

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Windows(PowerShell):

(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' -UseBasicParsing).Content
利用可能なツールを一覧表示する

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Windows(PowerShell):結果は result.tools に返されます。リストを JSON として表示するには、生の応答を使用してください。

(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' -UseBasicParsing).Content

またはオブジェクト経由で表示します:(Invoke-RestMethod ...).result.tools | ConvertTo-Json -Depth 5

ヘルス状態を確認する

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health","arguments":{}}}'

Windows(PowerShell):

(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health","arguments":{}}}' -UseBasicParsing).Content
分析を実行する(最小限の例)

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "analyze_android_project",
      "arguments": {
        "projectName": "TestApp",
        "files": [
          {
            "path": "app/src/main/AndroidManifest.xml",
            "content": "<manifest><application android:debuggable=\"true\" android:allowBackup=\"true\"></application></manifest>"
          }
        ]
      }
    }
  }'

Windows(PowerShell):

$body = @{
  jsonrpc = "2.0"
  id = 4
  method = "tools/call"
  params = @{
    name = "analyze_android_project"
    arguments = @{
      projectName = "TestApp"
      files = @(
        @{
          path = "app/src/main/AndroidManifest.xml"
          content = "<manifest><application android:debuggable=`"true`" android:allowBackup=`"true`"></application></manifest>"
        }
      )
    }
  }
} | ConvertTo-Json -Depth 10
(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body $body -UseBasicParsing).Content
MCP クライアントから接続する

MCP クライアントの設定に追加します。

{
  "mcpServers": {
    "android-security-analyzer": {
      "url": "http://localhost:8787/mcp"
    }
  }
}

本番環境(ホスト型)の場合:

{
  "mcpServers": {
    "android-security-analyzer": {
      "url": "https://android-security-analyzer.ako-labs.workers.dev/mcp"
    }
  }
}

セキュリティルール

このアナライザーは、5 つのカテゴリにわたる 53 のセキュリティルールを実装しています。

カテゴリプレフィックスルール数例
マニフェストMAN-*17debuggable、allowBackup、エクスポートされたコンポーネント、権限
GradleGRD-*9リリース設定、SDK バージョン、依存関係、シークレット
ソースSRC-*17WebView、SSL/TLS、暗号化、インジェクション、ファイル保存
XML 設定XML-*4ネットワークセキュリティ設定、ファイルプロバイダーのパス
シークレットSEC-*7API キー、トークン、パスワード、クラウド認証情報

各検出結果には次の情報が含まれます。

  • 安定したルール ID
  • 重大度(critical/high/medium/low/info)と確信度(high/medium/low)
  • ファイルパスと行番号(特定可能な場合)
  • 証拠となるスニペット
  • CWE および OWASP Mobile Top 10 との対応付け
  • 実行可能な推奨事項

スコアリング

リスクスコア(0~100)は、検出項目の重大度から算出されます。

  • 重大:9ポイント
  • 高:6ポイント
  • 中:3ポイント
  • 低:1ポイント
  • 情報:0ポイント

合計値は、最大値の想定を50ポイントとして正規化されます。

制限事項

  • SAST の代替にはなりません — パターン/正規表現ベースのヒューリスティックを使用しており、AST/データフローの完全な分析は行いません
  • ビルドは不要です — 生のソースを分析するため、ビルド時の変換は検出できません
  • 誤検出の可能性があります — 特にシークレットのスキャンや一部のコードパターンで発生します
  • Workers の制約 — メモリ上限は128MB、CPU時間に制限があり、ファイルシステムにはアクセスできません
  • APK/AAB の分析には対応していません — ソースコードのみが対象です
  • プロシージャ間分析には対応していません — パターンはコールグラフ全体ではなく、ファイル単位で照合されます

プロジェクト構成

src/
├── index.ts                          # Worker entry point
├── server/
│   ├── mcp.ts                        # MCP JSON-RPC 2.0 handler
│   └── tools/                        # MCP tool implementations
│       ├── analyzeAndroidProject.ts
│       ├── listAndroidSecurityChecks.ts
│       ├── explainFinding.ts
│       └── health.ts
├── core/
│   ├── types.ts                      # TypeScript types & Zod schemas
│   ├── scoring.ts                    # Risk score computation
│   ├── registry.ts                   # Rule registry
│   └── orchestrator.ts              # Analysis orchestrator
├── analyzers/
│   ├── manifestAnalyzer.ts
│   ├── gradleAnalyzer.ts
│   ├── sourceAnalyzer.ts
│   ├── xmlConfigAnalyzer.ts
│   └── secretScanner.ts
├── parsers/
│   ├── xml.ts                        # XML parser wrapper
│   ├── gradle.ts                     # Gradle file parser
│   ├── source.ts                     # Source code pattern matcher
│   └── files.ts                      # File classifier
├── rules/
│   ├── manifestRules.ts
│   ├── gradleRules.ts
│   ├── sourceRules.ts
│   ├── xmlRules.ts
│   └── secretRules.ts
├── mappings/
│   ├── cwe.ts                        # CWE descriptions
│   └── owaspMobile.ts               # OWASP Mobile Top 10
└── utils/
    ├── lines.ts                      # Line number utilities
    ├── paths.ts                      # Path classification
    └── text.ts                       # Text utilities
test/
├── fixtures/                         # Sample Android project files
├── unit/                             # Unit tests per module
└── integration/                      # Full analysis integration tests

新しいルールの追加

  1. src/rules/ 配下の適切なファイルにルールを定義します
  2. src/analyzers/ 配下の対応するアナライザーに検出ロジックを追加します
  3. 必要に応じて、src/mappings/cwe.ts に CWE マッピングを追加します
  4. テストケースを追加します
  5. ルールは src/core/registry.ts を通じて自動的に登録されます

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。