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