Document Sentinel roadmap and code quality standard
This commit is contained in:
@@ -12,6 +12,8 @@ OfficeCom Sentinel is the hardened endpoint client for Windows event correlation
|
|||||||
- setup EXE builder: `build/build-client-installer.ps1`
|
- setup EXE builder: `build/build-client-installer.ps1`
|
||||||
- update manifest builder: `build/build-release-manifest.ps1`
|
- update manifest builder: `build/build-release-manifest.ps1`
|
||||||
- release checklist: `docs/release-checklist.md`
|
- release checklist: `docs/release-checklist.md`
|
||||||
|
- product roadmap: `docs/roadmap.md`
|
||||||
|
- code quality standard: `docs/code-quality.md`
|
||||||
- internal server-side target example: `infra/postgres-target.example.json`
|
- internal server-side target example: `infra/postgres-target.example.json`
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|||||||
32
docs/code-quality.md
Normal file
32
docs/code-quality.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Code-Qualitaetsstandard
|
||||||
|
|
||||||
|
## Ziel
|
||||||
|
|
||||||
|
Der Client soll klein, pruefbar und wartbar bleiben. Kommentare sind keine
|
||||||
|
zweite Dokumentation und keine Erklaerung fuer selbsterklaerenden Code.
|
||||||
|
|
||||||
|
## Kommentarregel
|
||||||
|
|
||||||
|
- Kommentare bleiben nur bei Sicherheitsgrenzen, externen API-Eigenheiten,
|
||||||
|
nicht offensichtlichen Entscheidungen und bewusstem Fehlertoleranz-Verhalten.
|
||||||
|
- Beschreibende Kommentare direkt neben selbsterklaerenden Anweisungen werden
|
||||||
|
entfernt.
|
||||||
|
- Veraltete Kommentare werden im selben Pull Request wie die Codeaenderung
|
||||||
|
geloescht oder aktualisiert.
|
||||||
|
- Architektur- und Betriebswissen gehoert in `docs`, nicht in lange
|
||||||
|
Quellcodekommentare.
|
||||||
|
|
||||||
|
## Wiederkehrender Clean-up
|
||||||
|
|
||||||
|
Bei jeder Minor-Version wird ein kurzer Wartungsdurchlauf eingeplant:
|
||||||
|
|
||||||
|
1. Tote Konfiguration, nicht erreichbare Pfade und doppelte Hilfsfunktionen entfernen.
|
||||||
|
2. Kommentare gegen den aktuellen Code pruefen und ueberfluessige entfernen.
|
||||||
|
3. Formatierung und Benennung vereinheitlichen.
|
||||||
|
4. Release-Build und die relevanten Scan-Szenarien erneut ausfuehren.
|
||||||
|
|
||||||
|
## Sicherheitsausnahme
|
||||||
|
|
||||||
|
Kommentare, die vor einer unsicheren Aenderung schuetzen, bleiben erhalten.
|
||||||
|
Beispiele sind TLS-Kompatibilitaet, Secret-Schutz, Upload-Signaturpruefung und
|
||||||
|
deterministische Lastverteilung.
|
||||||
62
docs/roadmap.md
Normal file
62
docs/roadmap.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# OfficeCom Sentinel Roadmap
|
||||||
|
|
||||||
|
## Leitlinie
|
||||||
|
|
||||||
|
OfficeCom Sentinel soll wenige, nachvollziehbare Sicherheitssignale liefern.
|
||||||
|
NinjaOne bleibt die Quelle fuer akute Alerts. Die zentrale Plattform sammelt
|
||||||
|
Telemetrie, erstellt Wochenberichte und macht Trends je Organisation sichtbar.
|
||||||
|
|
||||||
|
## Bereits geliefert
|
||||||
|
|
||||||
|
- Endpoint-Client mit signiertem Upload und lokaler NinjaOne-Feldaktualisierung.
|
||||||
|
- N8n- und PostgreSQL-Pipeline mit organisationsbezogener Zuordnung.
|
||||||
|
- Interne Uebersicht, Empfaengerverwaltung und woechentliche HTML-Berichte.
|
||||||
|
- Gestaffelte taegliche Uploads sowie Burst-Pruefung.
|
||||||
|
- Version 1.4.0: Fehlanmeldungen werden in 15-Minuten-Fenstern korreliert.
|
||||||
|
Einzelne Tippfehler erzeugen keinen Alarm; Anmelde-Bursts und Password
|
||||||
|
Spraying werden weiterhin als Warnung oder kritisch bewertet.
|
||||||
|
|
||||||
|
## Naechste Minor-Version: 1.5
|
||||||
|
|
||||||
|
### Ransomware-Frueherkennung
|
||||||
|
|
||||||
|
- Beobachtung ungewoehnlicher Serien von Dateioperationen in kurzen Zeitfenstern.
|
||||||
|
- Erkennung von Schattenkopie- und Recovery-Manipulationen, soweit sie in
|
||||||
|
Windows-Ereignissen oder Prozessdaten sichtbar sind.
|
||||||
|
- Erkennung typischer Verschluesselungs- und Loeschwerkzeuge ueber
|
||||||
|
Prozessnamen, Kommandozeilen und auffaellige Folgeereignisse.
|
||||||
|
- Stufenmodell: Hinweis bei schwachen Einzelindikatoren, Warnung bei einer
|
||||||
|
Korrelation, kritisch nur bei mehreren voneinander unabhaengigen Indikatoren.
|
||||||
|
- NinjaOne liefert die zeitnahe Alarmierung; die zentrale Plattform dokumentiert
|
||||||
|
Verlauf und Organisationstrend.
|
||||||
|
|
||||||
|
### Erkennungsqualitaet
|
||||||
|
|
||||||
|
- Konfigurierbare Ausnahmen fuer bekannte Servicekonten, Scanner und Monitoring.
|
||||||
|
- Einheitliches Risiko-Scoring fuer Login-, Prozess- und Ransomware-Signale.
|
||||||
|
- Begruendung je Bewertung im JSON-Report, damit Alerts nachvollziehbar bleiben.
|
||||||
|
|
||||||
|
## Folgende Minor-Versionen
|
||||||
|
|
||||||
|
### 1.6: Zusaetzliche Sensoren
|
||||||
|
|
||||||
|
- Neue lokale Administratoren und auffaellige Gruppenmitgliedschaften.
|
||||||
|
- Remote-Zugriffsmuster wie RDP- und SMB-Fehlanmeldungen mit Quellkorrelation.
|
||||||
|
- Sicherheitsrelevante Aenderungen an Diensten, geplanten Aufgaben und
|
||||||
|
Autostart-Mechanismen.
|
||||||
|
- Optionaler Import von G DATA-/MXDR-relevanten lokalen Ereignissen, wenn die
|
||||||
|
vorhandene Installation diese verlaesslich bereitstellt.
|
||||||
|
|
||||||
|
### 1.7: Betrieb und Auswertung
|
||||||
|
|
||||||
|
- Datenqualitaetspruefung fuer fehlende Organisationen und veraltete Clients.
|
||||||
|
- Sensor- und Client-Gesundheit in der internen Uebersicht.
|
||||||
|
- Berichtsvorlagen je Empfaengergruppe und nachvollziehbare Versandhistorie.
|
||||||
|
|
||||||
|
## Qualitaet In Jedem Release
|
||||||
|
|
||||||
|
- Keine neue Erkennung ohne Beispielereignisse und Regressionstest.
|
||||||
|
- Sicherheitsentscheidungen bleiben im Client lokal nachvollziehbar.
|
||||||
|
- Keine internen Zugangsdaten, Datenbankadressen oder Secrets im Clientpaket.
|
||||||
|
- Vor jeder Minor-Version: Code-Clean-up, Abhaengigkeiten pruefen, tote Pfade
|
||||||
|
entfernen und die Dokumentation aktualisieren.
|
||||||
@@ -15,7 +15,6 @@ table { width:100%; border-collapse:collapse; font-family:'Roboto',sans-serif; f
|
|||||||
@media (max-width:850px) { .recipient-form { grid-template-columns:1fr; }.rule-actions { min-width:220px; } }
|
@media (max-width:850px) { .recipient-form { grid-template-columns:1fr; }.rule-actions { min-width:220px; } }
|
||||||
@media (max-width:850px) { .metrics { grid-template-columns:repeat(2,1fr); }.metrics article:last-child { grid-column:span 2; }.masthead { height:auto; min-height:70px; padding:14px 5vw; align-items:flex-start; }.header-links { justify-content:flex-end; flex-wrap:wrap; }.badge { display:none; } main { padding:38px 5vw; }.situation { align-items:flex-start; flex-direction:column; } }
|
@media (max-width:850px) { .metrics { grid-template-columns:repeat(2,1fr); }.metrics article:last-child { grid-column:span 2; }.masthead { height:auto; min-height:70px; padding:14px 5vw; align-items:flex-start; }.header-links { justify-content:flex-end; flex-wrap:wrap; }.badge { display:none; } main { padding:38px 5vw; }.situation { align-items:flex-start; flex-direction:column; } }
|
||||||
|
|
||||||
/* Keep the administration screens visually aligned with the Sentinel reports. */
|
|
||||||
.panel { border-radius:8px; box-shadow:0 14px 34px rgba(31,68,99,.08); }
|
.panel { border-radius:8px; box-shadow:0 14px 34px rgba(31,68,99,.08); }
|
||||||
.panel > .table-wrap { border:1px solid #dce6ee; border-radius:6px; background:#fbfdff; }
|
.panel > .table-wrap { border:1px solid #dce6ee; border-radius:6px; background:#fbfdff; }
|
||||||
.panel > .table-wrap table { margin:0; }
|
.panel > .table-wrap table { margin:0; }
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ internal sealed record ScanResult
|
|||||||
|
|
||||||
public string MachineName { get; init; } = string.Empty;
|
public string MachineName { get; init; } = string.Empty;
|
||||||
|
|
||||||
// Populated only for runs launched by NinjaOne automation.
|
|
||||||
public NinjaOneContext NinjaOne { get; init; } = new();
|
public NinjaOneContext NinjaOne { get; init; } = new();
|
||||||
|
|
||||||
public DateTimeOffset GeneratedAtLocal { get; init; }
|
public DateTimeOffset GeneratedAtLocal { get; init; }
|
||||||
|
|||||||
Reference in New Issue
Block a user