Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Treiberinstallation muss vorhandene Tools für die Online- und Offlineinstallation verwenden und einen Treiber über die typische INF-Verarbeitung registrieren. Beispielcode für ELAM-Treiber finden Sie unten: https://github.com/Microsoft/Windows-driver-samples/tree/main/security/elam
AM-Treiberinstallation
Um die Kompatibilität der Treiberinstallation sicherzustellen, kündigt sich ein ELAM-Treiber als Starttreiber an, der allen anderen Starttreibern ähnelt. Der INF legt den Starttyp auf SERVICE_BOOT_START (0) fest, was angibt, dass der Treiber vom Startladeprogramm geladen und während der Kernelinitialisierung initialisiert werden soll. Ein ELAM-Treiber kündigt seine Gruppe als "Frühstart" an. Das Frühstartverhalten für Treiber in dieser Gruppe wird in Windows implementiert, wie im nächsten Abschnitt beschrieben.
Im Folgenden sehen Sie ein Beispiel für den Treiberinstallationsbereich eines ELAM-Treibers INF.
[SampleAV.Service]
DisplayName = %SampleAVServiceName%
Description = %SampleAVServiceDescription%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 3 ; SERVICE_ERROR_CRITICAL
LoadOrderGroup = “Early-Launch”
Da ein AM-Treiber keine Geräte besitzt, ist es erforderlich, den AM-Treiber als Legacy zu installieren, sodass der Treiber nur als Dienst in der Registrierung hinzugefügt wird. (Wird der AM-Treiber als normaler PNP-Treiber installiert, wird er dem Enum-Abschnitt der Registrierung hinzugefügt und hat somit einen PDO-Verweis, was zu unerwünschtem Verhalten beim Entladen des Treibers führen kann.)
Sie müssen auch einen SignatureAttributes-Abschnitt in die INF-Datei für den ELAM-Treiber einschließen.
Installation des Backuptreibers
Um einen Wiederherstellungsmechanismus bereitzustellen, wenn der ELAM-Treiber versehentlich beschädigt ist, installiert das ELAM-Installationsprogramm auch eine Kopie des Treibers an einem Sicherungsspeicherort. Dadurch kann WinRE die neu kopierte Kopie abrufen und die Installation wiederherstellen.
Das Installationsprogramm liest den Speicherort der Sicherungsdatei aus dem BackupPath-Schlüssel, der in
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\EarlyLaunch
Das Installationsprogramm platziert dann die Sicherungskopie in dem ordner, der im Registrierungsschlüssel angegeben ist.
AM Treiber-Initialisierung
Das Windows-Startladeprogramm Winload lädt alle Starttreiber und deren abhängige DLLs vor der Übergabe an den Windows-Kernel in den Arbeitsspeicher. Die Starttreiber stellen die Gerätetreiber dar, die initialisiert werden müssen, bevor der Datenträgerstapel initialisiert wurde. Zu diesen Treibern gehören u. a. der Datenträgerstapel und der Volume-Manager sowie Dateisystemtreiber und Bustreiber für das Betriebssystemgerät.
AM-Treiberrückrufschnittstelle
Die ELAM-Treiber verwenden Rückrufe, um den PnP-Manager mit einer Beschreibung jedes Starttreibers und abhängiger DLL bereitzustellen, und es kann jedes Startimage als bekannte gute Binärdatei, bekannte schlechte Binärdatei oder eine unbekannte Binärdatei klassifizieren.
Die Standardmäßige Betriebssystemrichtlinie besteht nicht darin, bekannte fehlerhafte Treiber und DLLs zu initialisieren. Die Richtlinie kann konfiguriert werden und wird von Winload im Rahmen der Systemstart-Attestierung gemessen.
PnP verwendet eine Richtlinie und die vom AM-Treiber bereitgestellte Klassifizierung, um zu entscheiden, ob jedes Startimage initialisiert werden soll.
Registrierungsrückrufe
Die Frühstarttreiber können Registrierungs- oder Starttreiberrückrufe verwenden, um die Konfigurationsdaten zu überwachen und zu überprüfen, die als Eingabe für jeden Starttreiber verwendet werden. Die Konfigurationsdaten werden in der Systemregistrierungsstruktur gespeichert, die von Winload geladen wird und zum Zeitpunkt der Starttreiberinitialisierung verfügbar ist.
Hinweis
Alle Änderungen an der ELAM-Registrierungsstruktur werden verworfen, bevor das System gestartet wird. Daher sollte ein ELAM-Treiber die standardmäßige Ereignisablaufverfolgung für Windows (ETW)-Protokollierung verwenden, anstatt in die Registrierung zu schreiben.
Diese Callbacks sind während der gesamten Lebensdauer des ELAM-Treibers gültig und werden beim Entladen des Treibers abgemeldet. Weitere Informationen:
Rückrufe des Starttreibers
Verwenden Sie IoRegisterBootDriverCallback und IoUnRegisterBootDriverCallback , um eine BOOT_DRIVER_CALLBACK_FUNCTION zu registrieren und aufzuheben.
Dieser Rückruf stellt Statusupdates von Windows zu einem ELAM-Treiber bereit, einschließlich wenn alle Boot-Start-Treiber initialisiert wurden und die Rückruffunktion nicht mehr nutzbar ist.
Rückruftyp
Die BDCB_CALLBACK_TYPE-Aufzählung beschreibt zwei Arten von Rückrufen:
- Rückrufe, die Statusupdates für einen ELAM-Treiber bereitstellen (BdCbStatusUpdate)
- Rückrufe, die vom AM-Treiber verwendet werden, um Starttreiber und abhängige DLLs zu klassifizieren, bevor sie ihre Images initialisieren (BdCbInitializeImage)
Die beiden Rückruftypen weisen eindeutige Kontextstrukturen auf, die zusätzliche Informationen speziell für den Rückruf bereitstellen.
Die Kontextstruktur für den Statusaktualisierungsrückruf enthält einen einzelnen Aufzählungstyp, der das Windows-Callout beschreibt.
Die Kontextstruktur für den Initialisierungsbildrückruf ist komplexer und enthält Hash- und Zertifikatinformationen für jedes geladene Bild. Die Struktur enthält zusätzlich ein Feld, das ein Ausgabeparameter ist, in dem der AM-Treiber den Klassifizierungstyp für den Treiber speichert.
Ein von einem Statusupdaterückruf zurückgegebener Fehler wird als schwerwiegender Fehler behandelt und führt zu einer Systemfehlerüberprüfung. Dies gibt einem ELAM-Treiber die Möglichkeit anzugeben, wann ein Zustand außerhalb der AM-Richtlinie erreicht wird. Wenn beispielsweise ein AM-Laufzeittreiber nicht geladen und initialisiert wurde, kann der Early Launch-Treiber den Vorbereiten-zu-Entladen-Rückruf fehlschlagen, um zu verhindern, dass Windows einen Zustand ohne geladenen AM-Treiber eingibt.
Ein Bild gilt als unbekannt, wenn ein Fehler vom Initialisierungsvorgang des Bild-Callbacks zurückgegeben wird. Unbekannte Treiber werden initialisiert oder ihre Initialisierung basierend auf der Betriebssystemrichtlinie übersprungen.
Schadsoftwaresignaturen
Die Schadsoftwaresignaturdaten werden vom AM ISV bestimmt, sollten jedoch mindestens eine genehmigte Liste von Treiberhashes enthalten. Die Signaturdaten werden in der Registrierung in einem neuen Hive "Early Launch Drivers" unter HKLM gespeichert, der von Winload geladen wird. Jeder AM-Treiber verfügt über einen eindeutigen Schlüssel, mit dem die Signatur des binär großen Objekts (BLOB) gespeichert werden soll. Der Registrierungspfad und der Schlüssel weist das Format auf:
HKLM\ELAM\<VendorName>\
Innerhalb des Schlüssels kann der Anbieter beliebige Werte definieren und verwenden. Es gibt drei definierte binäre BLOB-Werte, die vom kontrollierten Start gemessen werden, und der Anbieter kann jede verwenden:
- Gemessen
- Politik
- Konfiguration
Die ELAM-Hive wird nach der Verwendung durch Early Launch Antimalware zur Leistungsverbesserung entladen. Wenn ein Benutzermodusdienst die Signaturdaten aktualisieren möchte, sollte er die Hive-Datei vom Dateispeicherort \Windows\System32\config\ELAM einhängen. Sie können z. B. eine UUID generieren, in eine Zeichenfolge konvertieren und diese als eindeutigen Schlüssel verwenden, in die der Hive eingebunden werden soll. Das Speicher- und Abrufformat dieser Daten-BLOBs bleibt dem ISV überlassen, die Signaturdaten müssen jedoch signiert werden, damit der AM-Treiber die Integrität der Daten überprüfen kann.
Überprüfen von Schadsoftwaresignaturen
Die Methode zur Überprüfung der Integrität der Schadsoftwaresignaturdaten obliegt jedem AM-ISV. Die CNG-Kryptografiegrundtypfunktionen stehen zur Verfügung, um digitale Signaturen und Zertifikate für die Schadsoftwaresignaturdaten zu überprüfen.
Fehler bei Schadsoftwaresignatur
Wenn der ELAM-Treiber die Integrität der Signaturdaten überprüft und diese Überprüfung fehlschlägt oder keine Signaturdaten vorhanden sind, ist die Initialisierung des ELAM-Treibers weiterhin erfolgreich. In diesem Fall muss der ELAM-Treiber für den jeweiligen Starttreiber bei jedem Initialisierungsrückruf "unbekannt" zurückgeben. Darüber hinaus sollte der ELAM-Treiber diese Informationen nach dem Start an die AM-Komponente übergeben.
Entladen des AM-Treibers
Wenn der Rückruf-StatusType BdCbStatusPrepareForUnload ist, ist dies ein Hinweis für den AM-Treiber, dass alle Start-Treiber initialisiert sind und dass der AM-Treiber auf das Entladen vorbereitet werden soll. Vor dem Entladen muss der AM-Treiber für den Frühstart seine Callbacks deregistrieren. Eine Abmeldung kann während eines Rückrufs nicht erfolgen; stattdessen muss dies in der DriverUnload-Funktion geschehen, die ein Treiber während DriverEntry spezifizieren kann.
Um die Kontinuität im Schutz vor Schadsoftware aufrechtzuerhalten und eine ordnungsgemäße Übergabe sicherzustellen, sollte die AM-Laufzeit-Engine gestartet werden, bevor der AM-Treiber für Frühstarts entladen wird. Dies bedeutet, dass das Laufzeit-AM-Modul ein Starttreiber sein sollte, der vom Frühstart-AM-Treiber überprüft wird.
Leistung
Der Treiber muss die in der folgenden Tabelle definierten Leistungsanforderungen erfüllen:
Szenario(n) |
Startzeit |
Endzeit |
Obere Schranke |
Bewerten des geladenen startkritischen Treibers, bevor seine Initialisierung erlaubt wird. Dazu gehören auch Rückrufe für Statusaktualisierungen. |
Kernel ruft den Antischadsoftwaretreiber an, um den geladenen, für den Start kritischen Treiber auszuwerten. |
Antischadsoftwaretreiber gibt auswertungsergebnis zurück. |
0,5 ms |
Auswerten aller geladenen startkritischen Treiber |
Kernel ruft den Antischadsoftwaretreiber zurück, um den ersten geladenen bootkritischen Treiber auszuwerten. |
Antischadsoftwaretreiber gibt Auswertungsergebnisse für den letzten kritischen Starttreiber zurück. |
50 ms |
Speicherbedarf (Treiber + Konfigurationsdaten im Arbeitsspeicher) |
Nicht verfügbar |
Nicht verfügbar |
128 kB |
Initialisieren von Treibern
Nachdem die Starttreiber vom ELAM-Treiber ausgewertet wurden, verwendet der Kernel die von ELAM zurückgegebene Klassifizierung, um zu entscheiden, ob der Treiber initialisiert werden soll. Diese Entscheidung wird von der Richtlinie bestimmt und wird hier in der Registrierung gespeichert unter:
HKLM\System\CurrentControlSet\Control\EarlyLaunch\DriverLoadPolicy
Dies kann über Gruppenrichtlinien auf einem in eine Domäne eingebundenen Client konfiguriert werden. Eine Antischadsoftwarelösung möchte diese Funktionalität möglicherweise für den Endbenutzer in nicht verwalteten Szenarien verfügbar machen. Die folgenden Werte sind für DriverLoadPolicy definiert:
PNP_INITIALIZE_DRIVERS_DEFAULT 0x0 (initializes known Good drivers only)
PNP_INITIALIZE_UNKNOWN_DRIVERS 0x1
PNP_INITIALIZE_BAD_CRITICAL_DRIVERS 0x3 (this is the default setting)
PNP_INITIALIZE_BAD_DRIVERS 0x7
Startfehler
Wenn ein Starttreiber aufgrund der Initialisierungsrichtlinie übersprungen wird, versucht der Kernel weiterhin, den nächsten Starttreiber in der Liste zu initialisieren. Dies wird fortgesetzt, bis entweder die Treiber initialisiert werden oder der Start fehlgeschlagen ist, da ein übersprungener Starttreiber für den Start von entscheidender Bedeutung war. Wenn der Absturz auftritt, nachdem der Datenträgerstapel gestartet wurde, gibt es ein Absturzabbild, das einige Informationen über den Grund des Absturzes enthält, einschließlich Informationen über fehlende Treiber. Dies kann in WinRE verwendet werden, um die Ursache des Fehlers zu ermitteln und zu versuchen, zu beheben.
ELAM und kontrollierter Start
Wenn der ELAM-Treiber einen Richtlinienverstoß erkennt (z. B. ein Rootkit), sollte sofort Tbsi_Revoke_Attestation aufgerufen werden, um die PCRs zu ungültig zu machen, die darauf hindeuten, dass sich das System in einem guten Zustand befand. Die Funktion gibt einen Fehler zurück, wenn ein Problem mit dem gemessenen Startvorgang vorliegt, z. B. wenn kein TPM im System vorhanden ist.
Tbsi_Revoke_Attestation kann über den Kernelmodus aufgerufen werden. Er erweitert PCR[12] um einen nicht angegebenen Wert und erhöht den Ereigniszähler im TPM. Beide Aktionen sind erforderlich, sodass die Vertrauensstellung in allen Anführungszeichen unterbrochen wird, die von hier aus erstellt werden. Daher spiegeln die Protokolle für den gemessenen Start den aktuellen Zustand des TPM für die restliche Zeit, in der das TPM eingeschaltet ist, nicht wider, und Remotesysteme können dem Sicherheitsstatus des Systems kein Vertrauen entgegenbringen.