Malware-Scan (Pass 14)
Pass 14 ist ein optionaler Assessment-Pass (Opt-in), der den Quellcode einer Anwendung in drei Phasen auf Sicherheitsbedrohungen untersucht: Erkennung von Secrets und Scan der Abhängigkeiten auf Schwachstellen (Phase 1), Antiviren-Signaturen und eigene YARA-Regeln (Phase 2) sowie OSS-Lizenz-Compliance über ORT (Phase 3, standardmäßig deaktiviert). Alle Werkzeuge sind optional. Ist ein Werkzeug nicht installiert, überspringt der Pass es, statt fehlzuschlagen.
Pass-Schlüssel: malware Ausgabedatei: wsp/runs/<timestamp>/passes/14-malware.yaml
Was der Pass tut
Phase 1: Erkennung von Secrets und Schwachstellen-Scan der Abhängigkeiten
- Gitleaks durchsucht den Quellpfad nach eingecheckten Secrets, API-Schlüsseln, Tokens und Zugangsdaten. Bei einem Fund gibt SWAO das Signal MAL-03 (Schweregrad: high) mit Regel-ID und Fundstelle für jedes erkannte Secret aus.
- OSV-Scanner liest die Lockfile (
package-lock.json,yarn.lock,pnpm-lock.yaml) und fragt die Open-Source-Vulnerabilities-Datenbank nach bekannten CVEs ab. Bei einem Fund gibt SWAO das Signal MAL-09 (Schweregrad: high) mit jedem betroffenen Paket und seiner CVE-Kennung aus.
Phase 2: Antivirus und eigene Regeln
- ClamAV führt einen rekursiven Antiviren-Signaturscan über den Quellbaum aus. Der Pass versucht aus Geschwindigkeitsgründen zuerst
clamdscan(Daemon-Modus); läuft der Daemon nicht, weicht er aufclamscan(Einzelaufruf) aus. Bei einem Fund gibt SWAO das Signal MAL-01 (Schweregrad: critical) mit jeder infizierten Datei und dem Namen der gefundenen Signatur aus. - YARA wendet jede Regeldatei mit der Endung
.yaroder.yaraauswsp/inputs/yara-rules/auf den Quellbaum an. Bei einem Treffer gibt SWAO das Signal MAL-02 (Schweregrad: high) mit jedem passenden Regelnamen und Dateipfad aus.
Phase 3: OSS-Lizenz-Compliance (Opt-in)
ORT (OSS Review Toolkit) analysiert die deklarierten Paketlizenzen. Drei Signale sind möglich:
- MAL-10 (Schweregrad: high): Copyleft-Abhängigkeiten (GPL, AGPL, LGPL, MPL, CDDL, EPL und vergleichbare).
- MAL-11 (Schweregrad: high, Konfidenz: medium): Abhängigkeiten ohne deklarierte Lizenz.
- MAL-12 (Schweregrad: high): Verstöße gegen ORT-Policy-Regeln, sofern ein Policy-Skript
wsp/inputs/ort-rules.ktsvorhanden ist.
ORT ist standardmäßig deaktiviert, weil ein Analyselauf auf einem großen Repository mehrere Minuten dauern kann. Aktivieren Sie es ausdrücklich in
.swao.yml(siehe Abschnitt Konfiguration unten).
Werkzeuge und Signal-IDs
| Werkzeug | Signal | Schweregrad | Was erkannt wird |
|---|---|---|---|
| Gitleaks | MAL-03 | high | Hartcodierte Secrets, API-Schlüssel, Tokens |
| OSV-Scanner | MAL-09 | high | Bekannte CVEs in Abhängigkeiten aus der Lockfile |
| ClamAV | MAL-01 | critical | Bekannte Malware-Signaturen |
| YARA | MAL-02 | high | Treffer eigener Regeln |
| ORT | MAL-10 | high | Abhängigkeiten mit Copyleft-Lizenz |
| ORT | MAL-11 | high (Konfidenz medium) | Nicht deklarierte Lizenz |
| ORT | MAL-12 | high | Verstöße gegen Policy-Regeln |
Für jedes Werkzeug, das läuft und nichts findet, wird ein positives (sauberes) Signal erfasst. Die Pass-Ausgabe zeigt damit, welche Werkzeuge tatsächlich gelaufen sind.
Voraussetzungen: Werkzeuge installieren
Alle vier Werkzeuge der Phasen 1 und 2 sind optional. Der Pass überspringt jedes Werkzeug, das nicht im PATH liegt, und fährt mit dem nächsten fort. swao health-check meldet den Status jedes Werkzeugs als warn, wenn es fehlt, und als ok, wenn es installiert ist.
Gitleaks
# macOS
brew install gitleaks
# Linux: Download aus den GitHub-Releases
curl -sSL https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks_linux_x64.tar.gz \
| tar xz -C /usr/local/bin gitleaksLizenz: MIT. Builds für alle Plattformen finden Sie unter https://github.com/gitleaks/gitleaks/releases.
OSV-Scanner
# Über die Go-Toolchain
go install github.com/google/osv-scanner/cmd/osv-scanner@latest
# Oder ein vorgefertigtes Binary aus den GitHub-Releases herunterladen
# https://github.com/google/osv-scanner/releasesOSV-Scanner läuft nur, wenn eine Lockfile (package-lock.json, yarn.lock oder pnpm-lock.yaml) direkt im Quellpfad liegt. Bei Projekten ohne Lockfile wird MAL-09 automatisch übersprungen.
ClamAV
# Ubuntu / Debian
apt-get install clamav clamav-daemon
freshclam # aktuelle Virendatenbank herunterladen
# macOS
brew install clamavHalten Sie die Virendatenbank vor jedem Assessment mit freshclam aktuell. Eine veraltete Datenbank verringert die Erkennungsgenauigkeit. Der Pass nutzt clamdscan (Daemon), wenn verfügbar, und weicht automatisch auf clamscan (Einzelaufruf) aus.
YARA
# Ubuntu / Debian
apt-get install yara
# macOS
brew install yaraLegen Sie Ihre eigenen Regeldateien (Endung .yar oder .yara) im Anwendungs-Workspace unter wsp/inputs/yara-rules/ ab. Der Pass verarbeitet alle Dateien in diesem Verzeichnis (nicht rekursiv) und überspringt YARA vollständig, wenn das Verzeichnis fehlt oder keine Regeldateien enthält.
ORT (Phase 3, Opt-in)
ORT benötigt eine Java-Laufzeitumgebung (JDK 11 oder neuer). Hinweise zur Installation finden Sie unter https://github.com/oss-review-toolkit/ort/releases. Prüfen Sie nach der Installation, ob ort im PATH liegt:
ort --versionInstallation der Werkzeuge prüfen
swao health-checkAchten Sie in der Ausgabe auf folgende Einträge:
| Eintrag | Status ok | Status warn |
|---|---|---|
gitleaks | Installiert; Pass 14 MAL-03 aktiv | Fehlt; MAL-03 wird übersprungen |
osv-scanner | Installiert; Pass 14 MAL-09 aktiv | Fehlt; MAL-09 wird übersprungen |
clamav | Installiert; Pass 14 MAL-01 aktiv | Fehlt; MAL-01 wird übersprungen |
yara | Installiert; Pass 14 MAL-02 aktiv | Fehlt; MAL-02 wird übersprungen |
warn ist kein Fehler. Der Pass läuft mit den verbleibenden Werkzeugen weiter.
Aktivierung
Pass 14 ist ein Opt-in-Pass und nie Teil der Standard-Pass-Auswahl. Rufen Sie ihn ausdrücklich über --passes auf:
# Malware-Scan zusammen mit den Standard-Assessment-Passes ausführen
swao assess --app sovereign-health --passes inv,state,sbom,crypto,malware
# Nur den Malware-Scan ausführen
swao assess --app sovereign-health --passes malware
# Assessment fehlschlagen lassen, wenn Secrets oder Malware gefunden werden (für CI-Pipelines)
swao assess --app sovereign-health --passes malware --malware-fail-on-detection--malware-fail-on-detection bewirkt, dass SWAO mit einem Exit-Code ungleich null endet, sobald ein Finding MAL-01 (Antiviren-Treffer) oder MAL-03 (erkanntes Secret) vorliegt. So lässt sich der Pass als CI-Gate einsetzen.
Konfiguration (.swao.yml)
Der folgende Block in .swao.yml (im Stammverzeichnis des Anwendungs-Workspace) steuert das Verhalten von Pass 14. Alle Felder sind optional; angegeben sind die Standardwerte.
passes:
malware:
enabled: true # true, wenn --passes malware explizit angegeben ist
severity_threshold: high # Mindestschweregrad für die Aufnahme in den Bericht
exclude:
paths:
- "node_modules/"
- "dist/"
- "*.min.js"
tools:
gitleaks:
enabled: true
config_file: ".gitleaks.toml" # optionale eigene Gitleaks-Konfiguration
osv_scanner:
enabled: true
clamav:
enabled: true
yara:
enabled: true
rules_dir: "wsp/inputs/yara-rules/" # Standard; für einen anderen Pfad überschreiben
ort:
enabled: false # Phase 3, Opt-in; erfordert ORT im PATH
rules_file: "wsp/inputs/ort-rules.kts" # optionales ORT-Policy-SkriptUm Phase 3 (ORT-Lizenz-Compliance) zu aktivieren, setzen Sie passes.malware.tools.ort.enabled: true. Die Prüfung auf Policy-Verstöße (MAL-12) wird automatisch aktiviert, wenn wsp/inputs/ort-rules.kts vorhanden ist oder passes.malware.tools.ort.rules_file auf ein gültiges Kotlin-Skript verweist.
Beispielausgabe
Pass 14 schreibt seine Ergebnisse nach wsp/runs/<timestamp>/passes/14-malware.yaml. Ein typischer Zusammenfassungsabschnitt:
pass:
id: 14
name: malware_scanning
signal_prefix: MAL
status: complete
assessment:
tools_attempted:
- gitleaks
- osv-scanner
- clamav
tools_skipped:
- "yara (no rules in wsp/inputs/yara-rules/)"
- "ort (not enabled; set passes.malware.tools.ort.enabled: true in .swao.yml to enable)"
signals:
- id: MAL-03
severity: positive
derivation: "No secrets detected by Gitleaks."
- id: MAL-09
severity: high
derivation: "3 CVE(s) found by OSV-Scanner."
evidence:
- "lodash@4.17.20: CVE-2021-23337"
- "minimist@1.2.5: CVE-2021-44906"
- "node-fetch@2.6.6: CVE-2022-0235"
- id: MAL-01
severity: positive
derivation: "No AV signature matches detected by ClamAV."Bekannte Einschränkungen
- OSV-Scanner benötigt eine Lockfile (
package-lock.json,yarn.lockoderpnpm-lock.yaml) direkt im Quellpfad. Bei Projekten ohne Lockfile wird MAL-09 übersprungen. - Die ClamAV-Virendatenbank muss für eine zuverlässige Erkennung aktuell gehalten werden (
freshclam). Eine veraltete Datenbank kann kürzlich katalogisierte Signaturen übersehen. - YARA benötigt mindestens eine Regeldatei mit der Endung
.yaroder.yaraim konfigurierten Regelverzeichnis (standardmäßigwsp/inputs/yara-rules/). Das Werkzeug wird übersprungen, wenn das Verzeichnis fehlt oder leer ist. - YARA-Regeln werden nicht rekursiv aus dem konfigurierten Verzeichnis geladen. Unterverzeichnisse werden nicht berücksichtigt.
- Der SBOM-Modus von OSV-Scanner (Übergabe der CycloneDX-Ausgabe aus Pass 05 an OSV-Scanner über
--sbom) ist noch nicht implementiert. Die aktuelle Implementierung arbeitet im Lockfile-Modus (--lockfile).
Weitere Malware-Signale sind für künftige Releases geplant.
