Files
prom-ping/SECURITY.md
2025-10-31 05:43:30 +00:00

215 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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: **<Fingerprint>**, öffentlicher Schlüssel: **<Link/Key-ID>**
- 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**: `<repo-name>`, `<service-name>`
- **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.) | `<Datum>` |
| <ä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.