Skip to content

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 auf clamscan (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 .yar oder .yara aus wsp/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.kts vorhanden 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 ​

WerkzeugSignalSchweregradWas erkannt wird
GitleaksMAL-03highHartcodierte Secrets, API-Schlüssel, Tokens
OSV-ScannerMAL-09highBekannte CVEs in Abhängigkeiten aus der Lockfile
ClamAVMAL-01criticalBekannte Malware-Signaturen
YARAMAL-02highTreffer eigener Regeln
ORTMAL-10highAbhängigkeiten mit Copyleft-Lizenz
ORTMAL-11high (Konfidenz medium)Nicht deklarierte Lizenz
ORTMAL-12highVerstöß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 ​

bash
# 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 gitleaks

Lizenz: MIT. Builds für alle Plattformen finden Sie unter https://github.com/gitleaks/gitleaks/releases.

OSV-Scanner ​

bash
# Ü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/releases

OSV-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 ​

bash
# Ubuntu / Debian
apt-get install clamav clamav-daemon
freshclam   # aktuelle Virendatenbank herunterladen

# macOS
brew install clamav

Halten 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 ​

bash
# Ubuntu / Debian
apt-get install yara

# macOS
brew install yara

Legen 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:

bash
ort --version

Installation der Werkzeuge prüfen ​

bash
swao health-check

Achten Sie in der Ausgabe auf folgende Einträge:

EintragStatus okStatus warn
gitleaksInstalliert; Pass 14 MAL-03 aktivFehlt; MAL-03 wird übersprungen
osv-scannerInstalliert; Pass 14 MAL-09 aktivFehlt; MAL-09 wird übersprungen
clamavInstalliert; Pass 14 MAL-01 aktivFehlt; MAL-01 wird übersprungen
yaraInstalliert; Pass 14 MAL-02 aktivFehlt; 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:

bash
# 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.

yaml
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-Skript

Um 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:

yaml
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.lock oder pnpm-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 .yar oder .yara im konfigurierten Regelverzeichnis (standardmäßig wsp/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.