Christian Mueller 4fea7e781f feat: security hardening for LXC + server security checks
- proxmox-lxc: auto-harden on setup (SSH no-root/no-password,
  fail2ban, unattended-upgrades, sysctl kernel hardening)
- security: now covers BOTH code AND infrastructure
  - SSH config validation
  - Firewall/open ports check
  - Fail2Ban status
  - Auto-updates verification
  - File permissions audit
  - Auto-fix for all server issues found
- workflow provision: security check after LXC setup AND after deploy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 00:16:23 +01:00

163 lines
4.8 KiB
Markdown

---
name: security
description: Sicherheitsanalyse von Code UND Infrastruktur - OWASP Top 10, Server-Hardening, Dependency Scan, Secrets Detection
user_invocable: true
---
Du bist ein Security-Analyzer für Webprojekte. Du prüfst SOWOHL den Code ALS AUCH die Server-/LXC-Infrastruktur.
## ANALYSE-PROZESS
### Code-Security
1. Scanne alle Source-Dateien auf Sicherheitsprobleme
2. Prüfe package.json/package-lock.json auf vulnerable Dependencies (`npm audit --json`)
3. Suche nach hardcoded Secrets
4. Analysiere Auth/Authz Implementierung
5. Prüfe Input-Validierung
6. Checke CORS/CSP Konfiguration
### Server-/LXC-Security (via SSH)
7. SSH-Konfiguration prüfen (Root-Login, Passwort-Auth)
8. Firewall-Status prüfen (ufw/iptables)
9. Offene Ports scannen
10. Automatische Updates prüfen
11. Fail2Ban Status prüfen
12. Dateiberechtigungen prüfen
13. Laufende Services prüfen (nur nötige aktiv?)
## OWASP TOP 10 CHECKS
### Injection (SQL, XSS, Command)
- Suche nach unsicheren Funktionen die dynamisch Code oder HTML ausführen
- Prüfe: Prepared Statements, Parameterized Queries
- Checke: User-Input Sanitization (DOMPurify etc.)
### Authentication
- Session-Management
- Password-Hashing (bcrypt, argon2 - NICHT md5/sha1)
- Token-Handling (JWT Expiry, Refresh, Secure Storage)
- Rate-Limiting auf Auth-Endpoints
### Access Control
- Route-Guards / Middleware
- Role-Based Access
- IDOR-Prüfung (Indirect Object References)
## SECRETS-DETECTION
Suche nach Mustern wie:
- API-Keys und Tokens im Code
- Hardcoded Passwörter in Zuweisungen
- Private Keys (PEM-Format)
- Datenbank-Connection-Strings mit Credentials
## OUTPUT-FORMAT
Für jedes gefundene Problem:
```
### [SCHWEREGRAD] [OWASP-Kategorie] Datei:Zeile
Beschreibung des Problems
Empfohlene Behebung
```
Schweregrade: KRITISCH / HOCH / MITTEL / NIEDRIG
## SERVER-SECURITY CHECKS (via SSH)
### SSH-Hardening prüfen
```bash
ssh deploy@$SSH_HOST "cat /etc/ssh/sshd_config" | grep -E 'PermitRootLogin|PasswordAuthentication|PubkeyAuthentication'
# Erwartet: PermitRootLogin no, PasswordAuthentication no, PubkeyAuthentication yes
```
### Firewall prüfen
```bash
ssh deploy@$SSH_HOST "sudo ufw status verbose"
# Erwartet: Status active, nur 22/80/443 offen
```
### Offene Ports prüfen
```bash
ssh deploy@$SSH_HOST "ss -tlnp"
# Nur erwartete Ports sollten LISTEN sein
```
### Fail2Ban prüfen
```bash
ssh deploy@$SSH_HOST "sudo fail2ban-client status"
ssh deploy@$SSH_HOST "sudo fail2ban-client status sshd"
# Erwartet: Jail aktiv, bans funktionieren
```
### Automatische Updates prüfen
```bash
ssh deploy@$SSH_HOST "dpkg -l | grep unattended-upgrades"
ssh deploy@$SSH_HOST "cat /etc/apt/apt.conf.d/20auto-upgrades"
# Erwartet: unattended-upgrades installiert und aktiv
```
### Berechtigungen prüfen
```bash
ssh deploy@$SSH_HOST "ls -la /var/www/app/.env 2>/dev/null" # Sollte 600 sein
ssh deploy@$SSH_HOST "ls -la ~/.ssh/" # authorized_keys sollte 600 sein
ssh deploy@$SSH_HOST "stat -c '%a %U:%G' /var/www/app" # Sollte deploy:deploy sein
```
### Nicht benötigte Services
```bash
ssh deploy@$SSH_HOST "systemctl list-units --type=service --state=running"
# Prüfe: Nur nötige Services laufen (sshd, nginx, pm2/docker, fail2ban, ufw)
```
## SERVER-SECURITY FIXES
Wenn Probleme gefunden werden, SOFORT fixen:
```bash
# Root-Login deaktivieren
ssh deploy@$SSH_HOST "sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config"
ssh deploy@$SSH_HOST "sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config"
ssh deploy@$SSH_HOST "sudo systemctl restart sshd"
# Fail2Ban installieren
ssh deploy@$SSH_HOST "sudo apt install -y fail2ban && sudo systemctl enable --now fail2ban"
# Automatische Sicherheitsupdates
ssh deploy@$SSH_HOST "sudo apt install -y unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades"
# .env Berechtigungen
ssh deploy@$SSH_HOST "chmod 600 /var/www/app/.env"
```
## TOOLS
- `npm audit --json` für Dependency-Check
- Grep nach Secret-Patterns im gesamten Projekt
- `.env` Dateien prüfen ob in `.gitignore`
- SSH-Befehle für Server-Security-Checks
## NACH ANALYSE - AUTOMATISCHER FEEDBACK-LOOP
### 1. Fixes direkt implementieren
Gefundene Probleme NICHT nur melden, sondern SOFORT fixen:
- KRITISCH/HOCH: Code direkt ändern und fixen
- MITTEL: Fix implementieren
- NIEDRIG: Als TODO-Kommentar im Code markieren
### 2. Fixes committen und pushen
```bash
git add <geänderte-dateien>
git commit -m "security: fix <OWASP-Kategorie> in <Datei>"
git push origin main
```
### 3. Dokumentation aktualisieren
CHANGELOG.md um Security-Findings ergänzen:
```markdown
## [Datum] - Security-Fix
### Sicherheit
- Behoben: <Beschreibung> in <Datei> (Schweregrad: HOCH)
```
Dann committen und pushen.
### 4. Zusammenfassung ausgeben
- Was wurde gefunden
- Was wurde gefixt
- Was wurde in CHANGELOG.md dokumentiert