Skip to main content
Glama
ako2345

Android Security Analyzer

by ako2345

Android Security Analyzer

MCP-сервер для статического анализа безопасности исходного кода Android-приложений. Работает на Cloudflare Workers как удалённый MCP-сервер через Streamable HTTP.

Что он делает

Анализирует исходные файлы Android-проекта — без сборки проекта — и возвращает структурированный отчёт по безопасности. Анализ охватывает:

  • Анализ манифеста — экспортированные компоненты, опасные разрешения, незашифрованный трафик, debug-флаги, настройки резервного копирования, версии SDK

  • Конфигурацию Gradle/сборки — ошибки конфигурации release-сборки, устаревшие SDK, подозрительные зависимости, захардкоженные секреты

  • Исходный код (Java/Kotlin) — небезопасный WebView, обход SSL/TLS, слабая криптография, паттерны SQL-инъекций, выполнение процессов, небезопасное хранение файлов, проблемы с PendingIntent

  • XML-конфигурацию — слабые места в network security config, слишком широкие пути file provider

  • Сканирование секретов — API-ключи, токены, пароли, приватные ключи, облачные учётные данные, строки с высокой энтропией

Весь анализ основан на регулярных выражениях/паттернах и выполняется нативно в среде Workers без внешних инструментов, Java или Android SDK.

Related MCP server: APK Security Guard MCP Suite

Архитектура

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

  • Лёгкий XML-парсинг через fast-xml-parser

  • Валидация входных данных через zod

  • Размер бандла: ~66KB gzipped

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

Это запускает локальный 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"
    }
  }
}

Правила безопасности

Анализатор реализует 53 правила безопасности в 5 категориях:

Категория

Префикс

Правил

Примеры

Manifest

MAN-*

17

debuggable, allowBackup, экспортированные компоненты, разрешения

Gradle

GRD-*

9

конфигурация release, версии SDK, зависимости, секреты

Source

SRC-*

17

WebView, SSL/TLS, криптография, инъекции, хранение файлов

XML Config

XML-*

4

network security config, пути file provider

Secret

SEC-*

7

API-ключи, токены, пароли, облачные учётные данные

Каждое найденное замечание включает:

  • Стабильный ID правила

  • Серьёзность (critical/high/medium/low/info) и уверенность (high/medium/low)

  • Путь к файлу и номер строки (когда это можно определить)

  • Фрагмент-доказательство

  • Сопоставление с CWE и OWASP Mobile Top 10

  • Практическую рекомендацию

Оценка риска

Оценка риска (0-100) вычисляется на основе серьёзности замечаний:

  • Critical: 9 баллов

  • High: 6 баллов

  • Medium: 3 балла

  • Low: 1 балл

  • Info: 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. Добавьте сопоставление CWE в src/mappings/cwe.ts при необходимости

  4. Добавьте тестовый пример

  5. Правило автоматически регистрируется через src/core/registry.ts

Лицензия

MIT

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides a one-stop automated solution for Android APK security analysis by integrating tools like JEB, JADX, APKTOOL, FlowDroid, and MobSF into unified MCP standard API interfaces.
    11
    -
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Android APK triage, providing tools to parse APK headers, list DEX classes, and decode AndroidManifest.xml using apktool or androguard backends.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local static-analysis assistant for Android malware research that manages investigation cases, exposes MCP tools via a local server, and persists evidence-backed findings without cloud dependency.
    MIT