Skip to main content
Glama
ako2345

Android Security Analyzer

by ako2345

Android Security Analyzer

MCP-Server für die statische Sicherheitsanalyse von Android-Anwendungsquellcode. Läuft auf Cloudflare Workers als Remote-MCP-Server über Streamable HTTP.

Funktionsweise

Analysiert die Quelldateien von Android-Projekten — ohne das Projekt zu bauen — und liefert einen strukturierten Sicherheitsbericht. Die Analyse umfasst:

  • Manifest-Analyse — exportierte Komponenten, gefährliche Berechtigungen, Klartext-Datenverkehr, Debug-Flags, Backup-Einstellungen, SDK-Versionen

  • Gradle-/Build-Konfiguration — Fehlkonfigurationen bei Release-Builds, veraltete SDKs, verdächtige Abhängigkeiten, hartkodierte Geheimnisse

  • Quellcode (Java/Kotlin) — unsichere WebView, SSL/TLS-Bypass, schwache Kryptografie, SQL-Injection-Muster, Prozessausführung, unsichere Dateispeicherung, PendingIntent-Probleme

  • XML-Konfiguration — Schwachstellen in der Netzwerksicherheitskonfiguration, zu weit gefasste Dateiprovider-Pfade

  • Secret-Scanning — API-Schlüssel, Tokens, Passwörter, private Schlüssel, Cloud-Zugangsdaten, Zeichenketten mit hoher Entropie

Die gesamte Analyse ist regex-/musterbasiert und läuft nativ in der Workers-Runtime – ganz ohne externe Tools, Java oder Android SDK.

Related MCP server: APK Security Guard MCP Suite

Architektur

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

Wichtige Entwurfsentscheidungen:

  • Zustandslos — keine Sitzungen, keine Durable Objects

  • Minimale MCP-JSON-RPC-2.0-Implementierung (keine umfangreichen SDK-Abhängigkeiten)

  • Datengetriebene Regel-Engine mit erweiterbarem Regelregister

  • Unabhängige Analyzer mit einheitlichem Finding-Typ

  • Schlankes XML-Parsing über fast-xml-parser

  • Eingabevalidierung über zod

  • Bundle-Größe: ~66 KB gzip-komprimiert

MCP-Tools

Tool

Beschreibung

analyze_android_project

Vollständige Sicherheitsanalyse von Projektdateien

list_android_security_checks

Alle implementierten Sicherheitsregeln auflisten

explain_finding

Detaillierte Erklärung einer bestimmten Regel

health

Serverstatus und Statistiken der Regel-Engine

Installation

Gehosteter Server (empfohlen für Cline / MCP-Clients): keine lokale Installation erforderlich. Der Server läuft unter:

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

Fügen Sie diese URL zur Konfiguration Ihres MCP-Clients hinzu (siehe Verbindung zu einem MCP-Client herstellen weiter unten).

Lokale Entwicklung:

npm install

Entwicklung

npm run dev

Dadurch wird ein lokaler Wrangler-Entwicklungsserver gestartet. Der MCP-Endpoint ist unter http://localhost:8787/mcp verfügbar.

Deployment

npm run deploy

Stellt auf Cloudflare Workers bereit. Erfordert eine wrangler-Authentifizierung (npx wrangler login).

Testen

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

Lokale MCP-Tests

Verbindung initialisieren

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

Verfügbare Tools auflisten

Unix:

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

Windows (PowerShell): Die Antwort ist in result.tools; um die Liste als JSON zu erhalten, verwenden Sie die Ausgabe der Rohantwort:

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

Oder über das Objekt: (Invoke-RestMethod ...).result.tools | ConvertTo-Json -Depth 5

Health-Check

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

Analyse ausführen (minimales Beispiel)

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

Verbindung zu einem MCP-Client herstellen

Fügen Sie Folgendes zu Ihrer MCP-Client-Konfiguration hinzu:

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

Für Produktionsumgebung (gehostet):

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

Sicherheitsregeln

Der implementierte Analyzer enthält 53 Sicherheitsregeln aus 5 Kategorien:

Kategorie

Präfix

Regeln

Beispiele

Manifest

MAN-*

17

Debug-Flags, allowBackup, exportierte Komponenten

Gradle

GRD-*

9

Release-Konfiguration, SDK-Versionen, Abhängigkeiten

Quellcode im (Java/Kotlin)

SRC-*

17

WebView-interaktion, SSL/TLS, Krypto, Injection, Dateispeicherung

XML-Konfiguration

XML-*

4

Netzwerksicherheitskonfiguration, Dateiprovider-Pfade

Secret

SEC-*

7

API-Schlüssel, Tokens, Passwörter, Cloud-Anmeldedaten

Jeder Befund enthält:

  • Stabile Regel-ID

  • Schweregrad (kritisch/hoch/mittel/niedrig/info) und Konfidenz (hoch/mittel/niedrig)

  • Dateipfad und Zeilennummer (falls bestimmbar)

  • Beweis-Snippet

  • CWE- und OWASP-Mobile-Top-10-Zuordnung

  • Konkrete Handlungsempfehlung

Bewertung

Der Risikowert (0-100) wird aus den Schweregraden der Findings berechnet:

  • Kritisch: 9 Punkte

  • Hoch: 6 Punkte

  • Mittel: 3 Punkte

  • Niedrig: 1 Punkt

  • Info: 0 Punkte

Die Rohsumme wird gegenüber einem erwarteten Maximum von 50 Punkten normalisiert.

Einschränkungen

  • Kein SAST-Ersatz — heuristische Muster-/Regex-Analyse, keine vollständige AST-/Datenflussanalyse

  • Kein Build erforderlich — auszüge analysieren, Build-Zeit-Transformationen nicht sichtbar

  • Falschpositive möglich — insbesondere beim Secret-Scanning und bei einigen Codesmustern

  • Workers-Limits — 128 MB Arbeitsspeicher, CPU-Limits, kein Dateisystemzugriff

  • Keine APK-/AAB-Analyse — nur Quellcode, keine Interprozedurale Analyse

  • Keine interprozedurale Analyse — Muster pro Datei abgeglichen, nicht über Aufrufgraphen

Muss

Projektstruktur

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

Neue Regeln hinzufügen

  1. Definieren Sie die Regel in der entsprechenden Datei unter src/rules/

  2. Fügen Sie die Erkennungslogik mit dem passenden Analyzer unter src/analyzers/ hinzu.

  3. Falls nötig, ergänzen Sie die CWE-Zuordnung in src/mappings/cwe.ts

  4. Fügen Sie einen Testfall an.

  5. Die Regel wird automatisch über src/core/registry.ts registriert.

Lizenz

MIT

Hinweis: Bei der Manifest-Kategorie empfehle ich die englischen Begriffe wie „exported components“ beizubehalten? Hmm, wait: The user wants German, and it's already translated in the table. Good.

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