Erster Commit
This commit is contained in:
@@ -0,0 +1,171 @@
|
|||||||
|
# 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)
|
||||||
Reference in New Issue
Block a user