Android Security Analyzer について
Android Security Analyzerは、ビルドせずにAndroidソースコードを静的解析するCloudflare Workers上のリモートMCPサーバーです。パターンベースのルールで構造化された検出結果を返し、開発やセキュリティレビューに利用できます。
主な機能
- 01Manifest、Gradle、Java/Kotlin、XMLの解析
- 02キー、トークン、パスワードのスキャン
- 03重要度と推奨対応を含む検出結果
- 04セキュリティチェック一覧と検出内容の説明
- 05ビルドやAndroid SDKが不要
活用シーン
- 01ビルド前のAndroidソース設定の確認
- 02WebView、TLS、ストレージのリスク調査
- 03ソース内の認証情報や秘密情報の検出
MCP 対応
Streamable HTTP経由で、プロジェクト解析、チェック項目一覧、検出内容の説明、ヘルスチェック用のMCPツールを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://android-security-analyzer.ako-labs.workers.dev/mcpclaude mcp add --transport http ako2345-android-security-analyzer https://android-security-analyzer.ako-labs.workers.dev/mcp{"mcpServers":{"ako2345-android-security-analyzer":{"type":"http","url":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}Cursor で開く{"servers":{"ako2345-android-security-analyzer":{"type":"http","url":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"ako2345-android-security-analyzer":{"type":"http","url":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}{"mcpServers":{"ako2345-android-security-analyzer":{"serverUrl":"https://android-security-analyzer.ako-labs.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
4| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| files | array | はい | 分析するプロジェクトファイルの配列 |
| options | object | いいえ | 分析オプション |
| options.maxFileSizeKb | number | いいえ | 処理するファイルの最大サイズ(KB、デフォルト:512) |
| options.enableSecretScan | boolean | いいえ | シークレット/認証情報のスキャンを有効にします(デフォルト:true) |
| options.includeInfoLevel | boolean | いいえ | 情報レベルの検出事項を含めます(デフォルト:true) |
| projectName | string | はい | 分析対象の 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-* | 17 | debuggable、allowBackup、エクスポートされたコンポーネント、権限 |
| Gradle | GRD-* | 9 | リリース設定、SDK バージョン、依存関係、シークレット |
| ソース | SRC-* | 17 | WebView、SSL/TLS、暗号化、インジェクション、ファイル保存 |
| XML 設定 | XML-* | 4 | ネットワークセキュリティ設定、ファイルプロバイダーのパス |
| シークレット | SEC-* | 7 | API キー、トークン、パスワード、クラウド認証情報 |
各検出結果には次の情報が含まれます。
- 安定したルール 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
新しいルールの追加
src/rules/配下の適切なファイルにルールを定義しますsrc/analyzers/配下の対応するアナライザーに検出ロジックを追加します- 必要に応じて、
src/mappings/cwe.tsに CWE マッピングを追加します - テストケースを追加します
- ルールは
src/core/registry.tsを通じて自動的に登録されます
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。