Security F5/F6 + Konzept-Status: DB-TLS-Startwarnung, Log-Redaction geprueft
- F5: Startwarnung, wenn der DB-Connection-String kein SslMode erzwingt (String selbst wird nie geloggt). Eure Connection enthaelt bereits SslMode -> Warnung bleibt aus. - F6: geprueft - keine Secret-Werte in Logs (nur Vorhandensein-Flags/Fehlermeldungen). - Sicherheitskonzept: Status F1-F7 dokumentiert. Build 0 Fehler, --smoke-ui ok. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f3ed63cf9d
commit
36c89a6acf
+24
@@ -138,6 +138,9 @@ internal static class Program
|
|||||||
// Quelle: Umgebungsvariable POLYTRADER_MASTER_KEY, sonst gitignorierte master.key im App-Ordner.
|
// Quelle: Umgebungsvariable POLYTRADER_MASTER_KEY, sonst gitignorierte master.key im App-Ordner.
|
||||||
ConfigureSecretProtection(AppHost.Services.GetRequiredService<TerminalLogger>());
|
ConfigureSecretProtection(AppHost.Services.GetRequiredService<TerminalLogger>());
|
||||||
|
|
||||||
|
// F5 (Sicherheit): warnen, wenn die (remote) DB-Verbindung keine TLS-Erzwingung hat.
|
||||||
|
WarnIfDbTlsNotEnforced(AppHost.Services);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Trade-Nummerierung fortsetzen: höchste bestehende TradeId serverseitig lesen
|
// Trade-Nummerierung fortsetzen: höchste bestehende TradeId serverseitig lesen
|
||||||
@@ -324,6 +327,27 @@ internal static class Program
|
|||||||
"Master-Key setzen (env POLYTRADER_MASTER_KEY oder master.key), siehe docs/sicherheit.");
|
"Master-Key setzen (env POLYTRADER_MASTER_KEY oder master.key), siehe docs/sicherheit.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// F5: Warnt, wenn der DB-Connection-String keine TLS-Erzwingung (SslMode) enthält. Der String
|
||||||
|
/// selbst wird NICHT geloggt (enthält das Passwort) – nur das Fehlen der TLS-Option.
|
||||||
|
/// </summary>
|
||||||
|
private static void WarnIfDbTlsNotEnforced(IServiceProvider services)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var config = services.GetService<Microsoft.Extensions.Configuration.IConfiguration>();
|
||||||
|
string conn = config?["Database:MySqlConnectionString"] ?? string.Empty;
|
||||||
|
if (string.IsNullOrEmpty(conn)) return;
|
||||||
|
if (conn.IndexOf("sslmode", StringComparison.OrdinalIgnoreCase) < 0)
|
||||||
|
{
|
||||||
|
services.GetRequiredService<TerminalLogger>().Warning(
|
||||||
|
"⚠️ SICHERHEIT: DB-Verbindung ohne SslMode – Transportverschlüsselung zur (remote) MySQL nicht erzwungen. " +
|
||||||
|
"Im Connection-String 'SslMode=Required' (oder VerifyFull) setzen, siehe docs/sicherheit.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { /* Warnung ist best-effort; darf den Start nie stören */ }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// F1: Verschlüsselt einmalig/idempotent evtl. vorhandene Klartext-Credentials in der DB (Alt-Bestand
|
/// F1: Verschlüsselt einmalig/idempotent evtl. vorhandene Klartext-Credentials in der DB (Alt-Bestand
|
||||||
/// wird beim Re-Save durch den EF-Converter verschlüsselt). Nur wenn ein Master-Key gesetzt ist.
|
/// wird beim Re-Save durch den EF-Converter verschlüsselt). Nur wenn ein Master-Key gesetzt ist.
|
||||||
|
|||||||
@@ -67,6 +67,19 @@ Predictalytics-Projekt, **nicht** in PolyTrader.
|
|||||||
> Die 🔴-Befunde (F1, F2) betreffen direkt die Kontrolle über die Gelder und sollten **vor** dem
|
> Die 🔴-Befunde (F1, F2) betreffen direkt die Kontrolle über die Gelder und sollten **vor** dem
|
||||||
> Live-Betrieb mit nennenswerten Beträgen behoben werden.
|
> Live-Betrieb mit nennenswerten Beträgen behoben werden.
|
||||||
|
|
||||||
|
### Status (2026-07-14)
|
||||||
|
- ✅ **F1 behoben** – AES-256-GCM at-rest (`SecretProtection` + EF-Converter), portabler Master-Key
|
||||||
|
außerhalb der DB, selbstheilende Migration. **Aktivierung im Zielland:** `POLYTRADER_MASTER_KEY`
|
||||||
|
setzen (zufälliger 32-Byte-Base64-Key, **separat sichern** – Verlust = kein Key-Zugriff mehr) +
|
||||||
|
Migration `EncryptAccountSecretsWidenColumns` anwenden.
|
||||||
|
- ✅ **F2 behoben** – toter Private-Key-als-argv-Code entfernt; Sicherheitshinweis fürs künftige Auto-Redeem.
|
||||||
|
- ✅ **F3 behoben (Code)** – Secrets aus dem Quellcode. **Offen (deinerseits): Alchemy-Key + Mullvad-Account
|
||||||
|
ROTIEREN** (lagen in der Git-History).
|
||||||
|
- ✅ **F4 behoben** – Newtonsoft.Json 11.0.2 → 13.0.4 (Vuln weg). Follow-up: übriger Threema-Lib-Stack (Sodium/EF-Sqlite) modernisieren.
|
||||||
|
- 🟡 **F5** – TLS-Startwarnung ergänzt; eure Connection enthält bereits `SslMode` (Warnung blieb aus) → ok.
|
||||||
|
- 🟢 **F6 geprüft – sauber**: keine Secret-Werte in Logs (nur Vorhandensein-Flags/Fehlermeldungen). Beibehalten.
|
||||||
|
- 🟡 **F7** – öffentliche RPC-Fallbacks: bewusst akzeptiert oder später auf authentifizierte RPCs beschränken.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Kontrollen & Richtlinien (Soll-Zustand)
|
## 5. Kontrollen & Richtlinien (Soll-Zustand)
|
||||||
|
|||||||
Reference in New Issue
Block a user