Skip to content

Security: cedendahlkim/SafeADBManager

Security

SECURITY.md

Säkerhetsdokumentation - SafeADBManager

⚠️ Säkerhetsvarningar för MVP

Detta är en MVP (Minimum Viable Product) och innehåller flera säkerhetsbrister som MÅSTE åtgärdas innan production-användning.

Kritiska säkerhetsbrister i MVP:

1. Lösenordshantering ❌

Problem: Lösenord sparas i plaintext i SQLite-databasen.

Risk: Om databasen komprometteras kan alla lösenord läsas direkt.

Åtgärd:

# Implementera bcrypt
import bcrypt

# Hash password
hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())

# Verify password
bcrypt.checkpw(password.encode('utf-8'), hashed)

2. Electron Security ❌

Problem: nodeIntegration: true och contextIsolation: false

Risk: XSS-attacker kan köra arbitrary Node.js-kod.

Åtgärd:

// electron-app/src/main.js
webPreferences: {
  contextIsolation: true,
  nodeIntegration: false,
  preload: path.join(__dirname, 'preload.js')
}

// Använd IPC för kommunikation mellan main och renderer

3. JWT Secret ❌

Problem: Hårdkodad JWT secret i källkoden.

Risk: Tokens kan förfalskas om secret läcker.

Åtgärd:

# Använd environment variable
SECRET_KEY = os.getenv("JWT_SECRET")
if not SECRET_KEY:
    raise ValueError("JWT_SECRET environment variable must be set")

4. CORS ❌

Problem: Tillåter alla origins i dev mode.

Risk: Cross-origin requests från skadliga sidor.

Åtgärd:

# Begränsa CORS till specifika origins
allow_origins=["http://localhost:5173"] if DEBUG else []

5. Input Validation ❌

Problem: Begränsad validering av user input.

Risk: Command injection, SQL injection.

Åtgärd:

# Validera och sanitize all input
from pydantic import validator

class CommandRequest(BaseModel):
    command: str
    
    @validator('command')
    def validate_command(cls, v):
        # Whitelist tillåtna kommandon
        allowed = ['getprop', 'pm', 'dumpsys']
        if not any(v.startswith(cmd) for cmd in allowed):
            raise ValueError('Command not allowed')
        return v

🔐 Säkerhetsrekommendationer för Production

Autentisering & Auktorisering

  1. Implementera bcrypt för lösenord

    • Använd bcrypt.hashpw() med salt rounds >= 12
    • Lagra endast hashade lösenord
  2. JWT Token Management

    • Använd stark secret key (256-bit random)
    • Implementera token refresh
    • Implementera token revocation/blacklist
    • Sätt kort expiration time (15-30 min)
  3. 2FA (Two-Factor Authentication)

    • TOTP (Time-based One-Time Password)
    • SMS eller email backup codes
  4. Rate Limiting

    • Begränsa login-försök (5 per 15 min)
    • API rate limiting per user/IP
    • Använd slowloris-skydd

Kryptering

  1. TLS/HTTPS

    • Kör API över HTTPS i production
    • Använd Let's Encrypt för certifikat
    • Tvinga HTTPS redirect
  2. Kryptering i vila

    • Kryptera SQLite-databas (SQLCipher)
    • Kryptera backup-filer med AES-256
    • Säker key storage (HSM eller KMS)
  3. Kryptering i transit

    • TLS 1.3
    • Strong cipher suites
    • Certificate pinning i Electron

Input Validation

  1. Command Injection Prevention

    # Använd whitelist för kommandon
    ALLOWED_COMMANDS = ['getprop', 'pm list', 'dumpsys']
    
    # Escape shell characters
    import shlex
    safe_cmd = shlex.quote(user_input)
  2. SQL Injection Prevention

    • Använd SQLAlchemy ORM (inte raw SQL)
    • Parametriserade queries
    • Input validation med Pydantic
  3. Path Traversal Prevention

    import os
    def safe_path(base_dir, user_path):
        abs_path = os.path.abspath(os.path.join(base_dir, user_path))
        if not abs_path.startswith(base_dir):
            raise ValueError("Path traversal detected")
        return abs_path

Audit & Logging

  1. Comprehensive Audit Logging

    • Logga alla autentiseringsförsök
    • Logga alla kommandoexekveringar
    • Logga alla file access
    • Inkludera IP, timestamp, user, action
  2. Log Protection

    • Kryptera logs med rotation keys
    • Immutable logs (append-only)
    • Offsite backup av logs
  3. SIEM Integration

    • Exportera logs till SIEM (Splunk, ELK)
    • Real-time alerting på suspicious activity
    • Automated incident response

Network Security

  1. Firewall

    • Blockera alla inkommande utom API port
    • Whitelist IP-adresser om möjligt
  2. API Security

    • API key rotation
    • Request signing
    • Timestamp validation (replay attack prevention)

Electron-specifik Säkerhet

  1. Context Isolation

    contextIsolation: true,
    nodeIntegration: false,
    sandbox: true
  2. Content Security Policy

    session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
      callback({
        responseHeaders: {
          ...details.responseHeaders,
          'Content-Security-Policy': ["default-src 'self'"]
        }
      })
    })
  3. Disable Remote Module

    enableRemoteModule: false

🔍 Security Checklist

Pre-Production

  • Bcrypt-hashade lösenord
  • JWT secret från environment variable
  • HTTPS aktiverat
  • CORS begränsat till specifika origins
  • Input validation på alla endpoints
  • SQL injection-skydd (SQLAlchemy)
  • Command injection-skydd
  • Path traversal-skydd
  • Rate limiting implementerat
  • Electron context isolation aktiverat
  • CSP (Content Security Policy) konfigurerat
  • Audit logging komplett
  • Log encryption aktiverat

Deployment

  • Säkra environment variables
  • Database backup-strategi
  • Incident response plan
  • Security monitoring aktiverat
  • Penetration testing genomfört
  • Code review genomfört
  • Dependency audit (npm audit, safety)

Ongoing

  • Regular security updates
  • Dependency vulnerability scanning
  • Log review (veckovis)
  • Access review (månadsvis)
  • Penetration testing (årligen)

🚨 Incident Response

Om säkerhetsincident upptäcks:

  1. Isolera systemet

    • Stäng av nätverksåtkomst
    • Stoppa alla tjänster
  2. Bevara bevis

    • Ta backup av logs
    • Ta disk image
    • Dokumentera allt
  3. Analysera

    • Identifiera attack vector
    • Identifiera komprometterad data
    • Identifiera affected users
  4. Åtgärda

    • Patcha sårbarheter
    • Rotera alla secrets/keys
    • Återställ från backup
  5. Kommunicera

    • Informera affected users
    • Rapportera till myndigheter (om required)
    • Publicera post-mortem

📞 Security Contacts

För säkerhetsrapporter, kontakta:

Responsible Disclosure Policy: Vi följer 90-dagars disclosure policy. Rapportera sårbarheter privat först.

📚 Referenser


Senast uppdaterad: 2024-10-17

There aren't any published security advisories