# SECURITY.md ## Inhalt - [Kontakt & Meldung von Schwachstellen](#kontakt--meldung-von-schwachstellen) - [Geltungsbereich](#geltungsbereich) - [Unterstützte Versionen](#unterstützte-versionen) - [Transport- & Netzwerksicherheit (TLS)](#transport--netzwerksicherheit-tls) - [Secret-Management (Docker-Secrets, Vault, .env)](#secret-management-docker-secrets-vault-env) - [Container- & Orchestrierungs-Sicherheit](#container--orchestrierungs-sicherheit) - [Sicheres Hosting & Infrastruktur-Hardening](#sicheres-hosting--infrastruktur-hardening) - [Supply-Chain, Abhängigkeiten & SBOM](#supply-chain-abhängigkeiten--sbom) - [CI/CD- & Releasemanagement-Sicherheit](#cicd--releasemanagement-sicherheit) - [Anwendungs-Hardening (Headers, CORS, CSP)](#anwendungs-hardening-headers-cors-csp) - [Daten- & Protokollierungsrichtlinien](#daten--protokollierungsrichtlinien) - [Sicherheits-Tests](#sicherheits-tests) - [Vorfallreaktion & Backups](#vorfallreaktion--backups) - [Bedrohungsmodell (kurz)](#bedrohungsmodell-kurz) --- ## Kontakt & Meldung von Schwachstellen Wenn Sie eine Schwachstelle gefunden haben, melden Sie diese **vertraulich**: - E-Mail: **security@patchping.org** - Optional PGP: ****, öffentlicher Schlüssel: **** - Reaktionsziel: Erstbestätigung innerhalb von **3 Werktagen**, Status-Update innerhalb von **7 Tagen**. - Bitte nutzen Sie **Responsible Disclosure**: Keine öffentliche Offenlegung, keine Datenveränderung, keine Dienstunterbrechung. Testen Sie nur Systeme im Geltungsbereich. **Außerhalb des Geltungsbereichs**: Social Engineering, physischer Zugriff, DDoS/Stress-Tests ohne ausdrückliche schriftliche Genehmigung. --- ## Geltungsbereich - **Repos / Services**: ``, `` - **Umgebungen**: Dev, Staging, Production - **Abhängigkeiten**: Alle in `package.json`/`go.mod`/`requirements.txt` etc. - **Nicht umfasst**: Drittanbieter-Dienste außerhalb unserer Kontrolle, persönliche Forks. --- ## Unterstützte Versionen | Version | Status | Sicherheitsfixes bis | |--------:|---------------|----------------------| | `main` | aktiv | laufend | | `vX.Y` | LTS (12 Mon.) | `` | | <älter> | EOL | – | > Sicherheitsupdates erhalten ausschließlich **unterstützte** Linien. --- ## Transport & Netzwerksicherheit (TLS) - **Anforderung**: TLS **1.2+** (bevorzugt **TLS 1.3**). - **Zertifikate**: Aus vertrauenswürdigem CA-Store, **OCSP-Stapling** aktivieren, **HSTS** mit Preload für Public Sites (nach sorgfältiger Prüfung). - **Cipher**: Moderne Profile (z. B. Mozilla „intermediate“ oder „modern“). Kein `TLS_RSA_*`, keine Null-/Export-Cipher. - **Perfect Forward Secrecy** (ECDHE) verpflichtend. - **In-Cluster** (Service-zu-Service): mTLS (z. B. mit Service Mesh oder Sidecars). **Beispiel NGINX (vereinfacht)**: ```nginx ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers HIGH:!aNULL:!MD5:!3DES; ssl_session_cache shared:SSL:10m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; ``` --- ## Secret-Management (Docker-Secrets, Vault, .env) - **Do not**: Secrets in Git, Images, Layern oder in `ENV` persistieren. - **Do**: - **Docker Swarm/Kubernetes/Compose Secrets** oder **Vault / Cloud Secret Manager** verwenden. - Rotations-Policy, minimale TTLs, Least Privilege. - Im Code nur **über Files/Runtime** einlesen (`/run/secrets/...` o. ä.). **Docker Compose (Beispiel)**: ```yaml services: app: image: your/app:latest secrets: - db_password environment: DB_PASSWORD_FILE: /run/secrets/db_password secrets: db_password: file: ./secrets/db_password.txt # nicht ins Repo committen ``` **Im Code (Pseudocode)**: ```python import os, pathlib def read_secret(path_or_envfile): p = os.getenv("DB_PASSWORD_FILE", path_or_envfile) return pathlib.Path(p).read_text(encoding="utf-8").strip() ``` > Für lokale Entwicklung: `.env.example` bereitstellen, `.env` in `.gitignore`. --- ## Container & Orchestrierungs-Sicherheit - **Images**: Minimal-Basis (distroless/alpine), keine Paketmanager/Compiler in Runtime-Images; **immutable Tags + Digests** pinnen. - **User**: Container **nicht als root** (`USER 10001:10001`). - **FS**: `readOnlyRootFilesystem`, nur benötigte Volumes. - **Capabilities**: Drop all; selektiv erlauben (`NET_BIND_SERVICE` etc.). - **Seccomp/AppArmor**: Restriktive Profile aktivieren. - **Netzwerk**: Default-Deny zwischen Pods/Services, nur benötigte Egress/DNS. - **Runtime**: Health/Readiness, Ressourcengrenzen (`requests/limits`), Image-Signing (z. B. cosign). **Dockerfile (Skizze)**: ```dockerfile FROM gcr.io/distroless/python3 WORKDIR /app COPY app/ /app USER 10001:10001 CMD ["python", "main.py"] ``` --- ## Sicheres Hosting & Infrastruktur-Hardening - **Zugriff**: MFA/2FA überall, **FIDO2** bevorzugt; keine Passwort-SSH-Logins, nur Keys; kurzlebige Zugangstokens (OIDC). - **Patchen**: OS & Middleware regelmäßig, automatische Sicherheitsupdates wo möglich. - **Firewalls/WAF**: Eingehend/ausgehend minimal; Rate Limiting. - **Logs**: Zentral sammeln (tamper-evident), Zeit/NTP synchronisieren. - **Backups**: Verschlüsselt (at rest & in transit), Restore-Tests (mind. quartalsweise). - **DNS/Email**: DNSSEC wo möglich; SPF, DKIM, DMARC „quarantine/reject“. - **Cloud**: Least Privilege IAM, getrennte Accounts/Projekte pro Umgebung, Security Groups knauserig. --- ## Supply-Chain, Abhängigkeiten & SBOM - **Pinning**: Exakte Versionen (oder Range + Lockfiles). - **Automatische Updates**: Renovate/Dependabot mit Review. - **Scanning**: SCA (Dependencies), Image-Scanner (Trivy/Grype), OS-Patches. - **SBOM**: Erzeugen (CycloneDX oder SPDX) und dem Release beilegen. - **Verifikation**: Signierte Artefakte (Sigstore/cosign); Registry-Policies (nur signiert zulassen). --- ## CI/CD & Releasemanagement-Sicherheit - **Branch Protection**: Reviews, status checks, signierte Commits/Tags. - **Secrets im CI**: Nur benötigte Variablen, maskiert; **keine** Secrets in Job-Logs; OIDC-Föderation statt dauerhafter Cloud-Keys. - **Isolierung**: Untrusted PRs in isolierten Workflows ohne Secrets; Dependency Caching mit Prüfsummen. - **Artefakte**: Prüfsummen/Signaturen veröffentlichen; Provenance (SLSA-Gedanken). - **Checks**: SAST, IaC-Scan (Terraform/K8s), Container-Scan als Pflicht vor Release. --- ## Anwendungs-Hardening (Headers, CORS, CSP) - **Security Headers** (Beispiele): - `Content-Security-Policy: default-src 'self'` (feinjustieren) - `X-Content-Type-Options: nosniff` - `X-Frame-Options: DENY` (oder `SAMEORIGIN` falls nötig) - `Referrer-Policy: no-referrer` - `Permissions-Policy: camera=(), geolocation=()` - **CORS**: Nur notwendige Origins/Methoden/Headers; keine `*` für Credentials. - **AuthN/Z**: Rate Limits, Lockouts, MFA-Optionen; sichere Session-Cookies (`Secure`, `HttpOnly`, `SameSite=Strict`). - **Crypto**: Bewährte Bibliotheken, aktuelle Algorithmen, kein Eigenbau. --- ## Daten & Protokollierungsrichtlinien - **Klassifizierung**: Öffentliche / Intern / Vertraulich / Geheim. - **PII**: Data Minimization; Verschlüsselung at rest (z. B. AES-256), Feld-Level-Encryption bei Bedarf. - **Logs**: Keine Secrets/PII; Rotations- & Aufbewahrungsfristen; Zugriff nur für Befugte. - **DSGVO**: Rechtsgrundlage dokumentieren, Betroffenenrechte, Auftragsverarbeiterverträge. --- ## Sicherheits-Tests - **SAST**: Bei jedem Commit/PR. - **DAST**: Gegen Staging mit Test-Accounts. - **IaC/Cloud**: Terraform/K8s/Cloud Config Scanner. - **Dependency/Container**: bei jedem Build. - **Penetrationstests/Bug Bounty**: Mind. jährlich bzw. vor großen Releases; Scope wie oben. --- ## Vorfallreaktion & Backups - **Runbooks**: Erkennung → Eindämmung → Beseitigung → Wiederherstellung → Lessons Learned. - **Kommunikation**: Interne Kanäle, Eskalationsmatrix, rechtliche Meldepflichten (z. B. 72-Stunden-Fenster beachten). - **Backups**: 3-2-1-Regel, regelmäßige Restore-Drills, KMS-geschützt. --- ## Bedrohungsmodell (kurz) - **Angriffsflächen**: Öffentliche HTTP(S)-Endpunkte, CI/CD, Artefakt-Registry, Admin-Backends, Supply-Chain. - **Gegner**: Opportunistische Angreifer, Botnets, gezielte Kompromittierung von Zugangsdaten. - **Kontrollen (Auszug)**: MFA, mTLS, Least Privilege, Code-& Dependency-Scans, signierte Builds, Netzwerk-Policies, Monitoring/Alerting. --- ### Änderungshistorie - `30.01.2025` – Initiale Version.