Files
SecWatch/README.md
T

172 lines
6.1 KiB
Markdown
Raw Normal View History

2026-07-21 10:09:31 +02:00
# SecWatch — IT-Sicherheitsbriefing
Erstellt von **Holger Coenen** · Version **1.0** · **202607** · Mit Hilfe von KI
---
## Was ist SecWatch?
SecWatch ist eine eigenständige HTML-Datei (`secwatch.html`), die aktuelle IT-Sicherheitsmeldungen, CVEs und Cybervorfälle aus mehreren **kostenfreien, öffentlichen Quellen** zusammenfasst und übersichtlich darstellt.
**Kein API-Key, kein Backend, kein Server, keine Kosten.** Einfach die HTML-Datei im Browser öffnen.
---
## Datenquellen
| Quelle | Inhalt | Abrufmethode |
|---|---|---|
| **Heise Security** | Deutsche Sicherheitsnews, Analysen, Warnungen | RSS-Feed via `rss2json.com` |
| **CERT-Bund / BSI** | Offizielle deutsche Schwachstellenwarnungen | RSS-Feed via `rss2json.com` |
| **NIST NVD** | Nationale Vulnerability Database — CVEs mit CVSS-Scores | Direkte REST API (`services.nvd.nist.gov`) |
| **CISA KEV** | Katalog aktiv in der Praxis ausgenutzter Schwachstellen | Direkte JSON-Datei (CORS-eingeschränkt) |
### Hinweise zu den Quellen
- **Heise & CERT-Bund**: RSS-Feeds werden über `rss2json.com` in JSON umgewandelt, da RSS-Feeds keine CORS-Header liefern. Der Dienst ist kostenfrei und benötigt keinen API-Key.
- **NVD**: Die API ist komplett frei zugänglich und liefert CORS-Header (`access-control-allow-origin: *`). Ohne API-Key gilt ein Rate-Limit von 5 Anfragen pro 30 Sekunden.
- **CISA KEV**: Die JSON-Datei (~2 MB) enthält keine CORS-Header und kann daher aus dem Browser heraus eingeschränkt sein. Die App behandelt einen Ausfall fehlerfrei.
---
## Funktionen
### Kernfunktionen
- **Tagesbericht abrufen** — Lädt parallel alle 4 Quellen und zeigt die Ergebnisse
- **Automatische Aktualisierung** — Alle 2 Stunden wird der Bericht aktualisiert
- **24-Stunden-Verlauf** — Frühere Berichte bleiben als Chips gespeichert (localStorage)
- **PDF-Export** — Ein-Klick-Export als PDF (via jsPDF)
### Sicherheitsklassifikation
Jeder Meldung wird automatisch ein Schweregrad zugewiesen:
| Schweregrad | Farbe | Kriterium |
|---|---|---|
| **Kritisch** | Rot | CVSS >= 9.0, CISA KEV-Eintrag, Zero-Day |
| **Hoch** | Orange | CVSS 7.08.9 |
| **Mittel** | Türkis | CVSS 4.06.9, Standardwert |
| **Niedrig** | Grün | CVSS < 4.0 |
### CISA KEV-Sonderstatus
Einträge aus dem CISA-Katalog (aktiv ausgenutzte Schwachstellen) erhalten zusätzlich ein rotes **KEV**-Badge. Ransomware-Verbindungen werden in den Zusammenfassungen explizit erwähnt.
---
## Technische Details
### Architektur
- **Eine einzige HTML-Datei** — kein Build, kein npm, kein Bundler
- **Vanilla JavaScript** — keine Frameworks, keine Abhängigkeiten (außer jsPDF)
- **localStorage** für die 24h-Verwaltung der Berichte
### Externe Abhängigkeiten
| Abhängigkeit | Version | Zweck |
|---|---|---|
| IBM Plex Mono | Google Fonts | Monospace-Schriftart |
| IBM Plex Sans | Google Fonts | Sans-Schriftart |
| jsPDF | 2.5.1 (CDN) | PDF-Generierung |
| rss2json.com | — | RSS-zu-JSON-Umwandlung |
### Dateistruktur
```
SecWatch/
├── secwatch.html # Die komplette Anwendung
└── README.md # Diese Dokumentation
```
### JavaScript-Modulübersicht
| Funktion | Beschreibung |
|---|---|
| `storage` | localStorage-Wrapper für 24h-Berichtsverwaltung |
| `fetchHeise()` | Lädt Heise Security RSS (letzte 48h) |
| `fetchCertBund()` | Lädt CERT-Bund RSS (Schwachstellenwarnungen) |
| `fetchNVD()` | Lädt aktuelle CVEs der letzten 3 Tage (Score >= 7.0) |
| `fetchCISA()` | Lädt CISA KEV der letzten 14 Tage (optional) |
| `renderItems()` | Gruppiert und rendert Meldungen nach Kategorie |
| `buildPdf()` | Generiert PDF-Export via jsPDF |
| `scheduleAutoRefresh()` | Plant Auto-Refresh mit Countdown |
| `guessSeverity()` | Erkennt Schweregrad aus Text-Schlüsselwörtern |
| `extractCertSeverity()` | Extrahiert Schweregrad aus CERT-Bund Titeln |
| `mapCvssSeverity()` | Mappt CVSS-Score auf Schweregrad-Stufen |
| `buildCveSummary()` | Erstellt deutsche Zusammenfassungen aus CVE-Beschreibungen |
---
## Nutzung
1. `secwatch.html` im Browser öffnen
2. Auf **"Tagesbericht abrufen"** klicken
3. Warten, bis die 4 Quellen geladen sind (310 Sekunden)
4. Optional: **PDF exportieren** oder **Auto-Aktualisierung** aktivieren
### Tastatur-Shortcut
Leider keine definiert — der Button ist die einzige Interaktionsmöglichkeit.
### Offline-Nutzung
Einmal geladene Berichte bleiben 24 Stunden im localStorage verfügbar und können auch ohne Internetverbindung angesehen werden.
---
## Bekannte Einschränkungen
- **CISA KEV**: Kann aus dem Browser nicht immer geladen werden (fehlende CORS-Header). In diesem Fall wird die Quelle als "Übersprungen" angezeigt — die restlichen 3 Quellen funktionieren weiterhin.
- **NVD Rate-Limit**: Ohne API-Key max. 5 Anfragen / 30 Sek. Bei der normalen Nutzung (alle 2 Stunden) kein Problem.
- **rss2json.com**: Kostenfreier Dienst mit Rate-Limit. Bei sehr häufigem manuellen Abruf kann es kurzfristige Verzögerungen geben.
- **Kein Server-Rendering**: Die Zusammenfassungen werden maschinell aus Metadaten erstellt und sind keine KI-generierten Texte.
---
## Entwicklung
### Voraussetzungen
- Jeder moderne Browser (Chrome, Firefox, Safari, Edge)
- Keine Build-Tools, kein Node.js, kein lokaler Server nötig
### Lokale Entwicklung
```bash
# Einfach im Browser öffnen:
open secwatch.html
# Oder mit lokalem Server (optional):
python3 -m http.server 8000
# Dann http://localhost:8000/secwatch.html öffnen
```
### Anpassungen
#### Neue Quelle hinzufügen
1. Neue `async function fetchXYZ()` erstellen
2. Im `fetchBriefing()`-Promsie hinzufügen
3. In `sourceStates` registrieren
#### Farben anpassen
CSS-Variablen in `:root` ändern:
```css
:root {
--crit: #E5484D; /* Kritisch */
--high: #F5A623; /* Hoch */
--med: #3FB8AF; /* Mittel */
--low: #4CAF7D; /* Niedrig */
}
```
---
## Lizenz
Dieses Projekt wurde von Holger Coenen erstellt. Verwendung auf eigenes Risiko.
---
## Changelog
### Version 1.0 (202607)
- Erstveröffentlichung
- 4 Datenquellen: Heise, CERT-Bund, NVD, CISA KEV
- PDF-Export via jsPDF
- Automatische Aktualisierung alle 2 Stunden
- 24-Stunden-Verlauf im localStorage
- Responsives Design (Dark Theme)