# 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.0–8.9 | | **Mittel** | Türkis | CVSS 4.0–6.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 (3–10 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)