Was ist BYOVD (Bring-Your-Own-Vulnerable-Driver)? (Glossar)

BYOVD ist der Schritt, bei dem ein Angreifer einen legitim signierten Kerneltreiber mit einem bekannten ausnutzbaren Bug ablegt, ihn lädt und den Bug nutzt, um Ring 0 zu erlangen. Driver Signature Enforcement nickt höflich, weil der Treiber tatsächlich von einem echten Hersteller signiert ist. Die Schwachstelle lebt im Treiber selbst, üblicherweise in einem IOCTL-Handler, der beliebigen Speicher-Lese-/Schreibzugriff an jeden verteilt, der das Gerät öffnet.

Bekannte Beispiele: altes mhyprot2.sys (Anti-Cheat von Genshin Impact), gdrv.sys (Gigabyte), RTCore64.sys (MSI Afterburner), procexp152.sys (der Treiber von Process Explorer). Die Liste auf loldrivers.io wächst weiter.

Warum DSE nicht hilft#

DSE prüft die Signaturkette. Sie schaut nicht in den Treiber hinein und reasoniert nicht über dessen IOCTL-Oberfläche. Sobald ein verwundbarer signierter Treiber geladen ist, erhält der Angreifer:

  • Deaktivieren des EDR durch Patchen seiner Kernel-Callbacks.
  • Lesen von LSASS, ohne Erkennungen vom Typ MiniDumpWriteDump auszulösen.
  • Umschalten von PPL-Bits, damit User-Mode-Tools geschützte Prozesse berühren können.
  • Laden eines völlig unsignierten Angreifertreibers durch Schreiben in den Kernelspeicher.

Microsofts empfohlene Driver-Blocklist existiert dafür, und auf den meisten SKUs ist sie Opt-in oder nur teilweise standardmäßig aktiv.

Wie Amcache BYOVD erwischt#

Root\InventoryDriverBinary enthält einen Datensatz pro Treiber, den das System geladen hat. Die wichtigen Felder:

  • DriverTimeStamp: das PE-Linkdatum des Treibers.
  • DriverSigned: das Signatur-Flag.
  • Hash: SHA-1 der Treiberbinary.
  • KeyLastWriteTimestamp: wann der Appraiser den Eintrag geschrieben hat.

Das Muster ist einfach: signiert + alter DriverTimeStamp + aktueller KeyLastWriteTimestamp. Ein 2014 kompilierter Treiber, der erstmals letzten Dienstag in Ihrer Hive auftauchte, hat per Konstruktion die Form eines BYOVD.

Import-Csv .\HOST_amcache_DriverBinaries.csv |
  Where-Object {
    $_.DriverSigned -eq 'True' -and
    [DateTime]$_.DriverTimeStamp -lt (Get-Date).AddYears(-2) -and
    [DateTime]$_.KeyLastWriteTimestamp -gt (Get-Date).AddDays(-30)
  } |
  Select DriverName, DriverTimeStamp, KeyLastWriteTimestamp, Hash, Service |
  Sort-Object KeyLastWriteTimestamp

Gleichen Sie die verbleibenden Hashes mit loldrivers.io ab. Ein Treffer ist nahezu diagnostisch.

Für den vollständigen Workflow siehe Commodity-Malware mit Amcache jagen.

Verwandte Begriffe#

Verwandte Beiträge

  • Was ist SRUM (SRUDB.dat)? (Glossar)

    SRUM ist die ESE-Datenbank, mit der Windows die Ressourcennutzung pro Anwendung stündlich über 30 bis 60 Tage verfolgt. Das einzige Windows-Artefakt mit Netzwerk-Byte-Summen pro App. Kritisch für Exfiltration.

  • Was ist Shimcache (AppCompatCache)? (Glossar)

    Shimcache ist der vom Kernel verwaltete Loader-Cache in der SYSTEM-Hive. 1024 Einträge, kein Hash, bis zum Neustart veraltet. Anders als Amcache; paaren Sie sie.

  • Was ist Amcache ProgramId? (Glossar)

    ProgramId ist der 44-Zeichen-Anwendungs-Identitätshash, den Amcache speichert. Über Hosts hinweg stabil bei derselben Installation. Erwischt Neukompilierungen und Umbenennungen, wo Hash daneben liegt.

  • Was ist Windows Prefetch? (Glossar)

    Windows Prefetch ist das Verzeichnis der .pf-Dateien, das Ausführung beweist. Bis zu 8-10 Laufzeiten pro Binary plus die in den ersten zehn Sekunden geladenen Dateien. Der stärkste Windows-Ausführungsnachweis.

Zurück zu allen Beiträgen