Einführung
Reputationsbasierte Schutzmaßnahmen wie der Reputationsservice von Elastic können die Erkennungsfunktionen erheblich verbessern und gleichzeitig niedrige False-Positive-Raten aufrechterhalten. Wie bei jeder Schutzmöglichkeit gibt es jedoch Schwachstellen und Umgehungen sind möglich. Das Verständnis dieser Schwachstellen ermöglicht es Verteidigern, ihre Erkennungstechnik auf die wichtigsten Abdeckungslücken zu konzentrieren. In diesem Artikel werden Windows Smart App-Steuerung und SmartScreen als Fallstudie für die Erforschung von Umgehungen zu reputationsbasierten Systemen untersucht und dann Erkennungen zur Abdeckung dieser Schwachstellen demonstriert.
Kernerkenntnisse:
- Windows Smart App Control und SmartScreen weisen mehrere Designschwächen auf, die es Angreifern ermöglichen, ohne Sicherheitswarnungen oder Popups ersten Zugriff zu erhalten.
- Ein Fehler in der Handhabung von LNK-Dateien kann diese Sicherheitskontrollen ebenfalls umgehen
- Verteidiger sollten die Einschränkungen dieser Betriebssystemfunktionen verstehen und Erkennungen in ihrem Sicherheitsstack implementieren, um dies zu kompensieren
SmartScreen/SAC-Hintergrund
Microsoft SmartScreen ist seit Windows 8 eine integrierte Betriebssystemfunktion. Es arbeitet mit Dateien, die das "Mark of the Web" (MotW) haben und von Benutzern angeklickt werden. Microsoft hat mit der Veröffentlichung von Windows 11 Smart App Control (SAC) eingeführt. SAC ist in gewisser Weise eine Weiterentwicklung von SmartScreen. Microsoft sagt , dass es "einen erheblichen Schutz vor neuen und aufkommenden Bedrohungen bietet, indem es Apps blockiert, die bösartig oder nicht vertrauenswürdig sind". Es funktioniert, indem ein Microsoft-Clouddienst abgefragt wird, wenn Anwendungen ausgeführt werden. Wenn bekannt ist, dass sie in Sicherheit sind, dürfen sie hingerichtet werden; Wenn sie jedoch unbekannt sind, werden sie nur ausgeführt, wenn sie über eine gültige Code Signing-Signatur verfügen. Wenn SAC aktiviert ist, wird Defender SmartScreen ersetzt und deaktiviert.
Microsoft stellt nicht dokumentierte APIs zum Abfragen der Vertrauensstufe von Dateien für SmartScreen und Smart App Control zur Verfügung. Um diese Recherche zu unterstützen, haben wir ein Dienstprogramm entwickelt, das die Vertrauenswürdigkeit einer Datei anzeigt. Den Quellcode für dieses Dienstprogramm finden Sie hier.
Signierte Malware
Eine Möglichkeit, Smart App Control zu umgehen, besteht darin, Malware einfach mit einem Code-Signing-Zertifikat zu signieren. Schon vor SAC gab es einen Trend, dass Angreifer ihre Malware signieren, um der Erkennung zu entgehen. In jüngster Zeit haben Angreifer routinemäßig Extend-Validation-Signaturzertifikate (EV) erhalten. EV-Zertifikate erfordern einen Identitätsnachweis, um Zugang zu erhalten, und können nur auf speziell entwickelten Hardware-Token existieren, was es schwierig macht, sie zu stehlen. Angreifer haben jedoch Wege gefunden, sich als Unternehmen auszugeben und diese Zertifikate zu kaufen. Die Bedrohungsgruppe hinter SolarMarker hat über 100 einzigartige Signaturzertifikate für ihre Kampagnen genutzt. Zertifizierungsstellen (Certificate Authorities, CAs) sollten mehr tun, um Missbrauch zu unterbinden und betrügerisch erworbene Zertifikate zu minimieren. Möglicherweise sind weitere öffentliche Untersuchungen erforderlich, um Druck auf die Zertifizierungsstellen auszuüben, die am häufigsten betrügerische Zertifikate verkaufen.
Reputations-Hijacking
Reputation-Hijacking ist ein generisches Angriffsparadigma auf reputationsbasierte Malware-Schutzsysteme. Es ist vergleichbar mit der unangebrachten Vertrauensforschung von Casey Smith und anderen gegen Anwendungskontrollsysteme sowie der Forschung zu verwundbaren Treibern von Gabriel Landau und mir. Leider ist die Angriffsfläche in diesem Fall noch größer. Beim Reputations-Hijacking geht es darum, Apps mit einem guten Ruf zu finden und wiederzuverwenden, um das System zu umgehen. Um als Vektor für den ersten Zugriff zu fungieren, besteht eine Einschränkung darin, dass die Anwendung ohne Befehlszeilenparameter gesteuert werden muss, z. B. ein Skripthost, der ein Skript unter einem vorhersagbaren Dateipfad lädt und ausführt.
Skript-Hosts sind ein ideales Ziel für einen Reputation-Hijacking-Angriff. Dies gilt insbesondere, wenn sie eine FFI-Funktion (Foreign Function Interface) enthalten. Mit FFI können Angreifer beliebigen Code und Malware einfach in den Speicher laden und ausführen. Durch die Suche in VirusTotal und GitHub haben wir viele Skript-Hosts identifiziert, die einen bekannten guten Ruf haben und für die vollständige Codeausführung kooptiert werden können. Dazu gehören Lua-, Node.js- und AutoHotkey-Interpreter. Ein Beispiel zur Veranschaulichung dieser Technik finden Sie hier.
Das folgende Video zeigt das Hijacking mit dem JamPlus-Build-Dienstprogramm, um Smart App Control ohne Sicherheitswarnungen zu umgehen:
In einem anderen Beispiel wurden SmartScreen-Sicherheitswarnungen mithilfe eines bekannten AutoHotkey-Interpreters umgangen:
Eine weitere Möglichkeit, den Ruf einer bekannten Anwendung zu kapern, besteht darin, sie auszunutzen. Dies kann einfach sein, wie ein klassischer Pufferüberlauf beim Lesen einer INI-Datei in einem vorhersehbaren Pfad. Es könnte etwas Komplexeres sein, das andere Primitive (wie Befehlsausführung/Registrierungsschreiben/etc.) abkettet. Außerdem können mehrere bekannte Apps miteinander verkettet werden, um eine vollständige Codeausführung zu erreichen. Beispielsweise kann eine Anwendung, die eine Konfigurationsdatei liest und einen Befehlszeilenparameter ausführt, dann verwendet werden, um eine andere bekannte Anwendung zu starten, die einen Satz von Parametern benötigt, um die Ausführung von beliebigem Code zu erreichen.
Reputations-Seeding
Ein weiterer Angriff auf den Reputationsschutz besteht darin, von Angreifern kontrollierte Binärdateien in das System einzuschleusen. Wenn sie sorgfältig hergestellt werden, können diese Binärdateien harmlos erscheinen und einen guten Ruf erlangen, während sie später für Angreifer immer noch nützlich sind. Dabei kann es sich einfach um eine neue Skripthost-Binärdatei, eine Anwendung mit einer bekannten Schwachstelle oder eine Anwendung mit einem nützlichen Primitiv handeln. Auf der anderen Seite könnte es sich um eine Binärdatei handeln, die eingebetteten bösartigen Code enthält, aber erst nach einem bestimmten Datum oder Umgebungsauslöser aktiviert wird.
Smart App Control scheint anfällig für Seeding zu sein. Nach der Durchführung einer Probe auf einer Maschine erhielt sie nach ca. 2 Stunden ein gutes Etikett. Wir stellten fest, dass grundlegende Anti-Emulationstechniken ein Faktor für das Erhalt eines wohlwollenden Urteils oder Rufs zu sein schienen. Glücklicherweise scheint SmartScreen eine höhere globale Prävalenzleiste zu haben, bevor eine Anwendung als vertrauenswürdig eingestuft wird. Ein Beispiel, das diese Technik veranschaulicht, ist hier verfügbar und wird im Folgenden veranschaulicht:
Reputations-Manipulation
Eine dritte Angriffsklasse gegen Reputationssysteme ist die Reputationsmanipulation. Normalerweise verwenden Reputationssysteme kryptografisch sichere Hashing-Systeme, um Manipulationen unmöglich zu machen. Wir haben jedoch festgestellt, dass bestimmte Änderungen an einer Datei die Reputation von SAC nicht zu ändern scheinen. SAC kann Fuzzy-Hashing oder merkmalsbasierte Ähnlichkeitsvergleiche anstelle von oder zusätzlich zum standardmäßigen Datei-Hashing verwenden. Es kann auch ein ML-Modell in der Cloud nutzen, um Dateien zuzulassen, die eine sehr gutartige Bewertung aufweisen (z. B. sehr ähnlich zu einem bekannten Gut). Überraschenderweise konnten einige Codeabschnitte geändert werden, ohne die zugehörige Reputation zu verlieren. Durch Versuch und Irrtum konnten wir Segmente identifizieren, die sicher manipuliert werden konnten und die gleiche Reputation beibehielten. Wir haben eine manipulierte Binärdatei mit einem eindeutigen Hash erstellt, der noch nie von Microsoft oder SAC gesehen wurde. Dies bettete einen "execute calc"-Shellcode ein und konnte mit SAC im Erzwingungsmodus ausgeführt werden:
LNK-Stampfen
Wenn ein Benutzer eine Datei herunterlädt, erstellt der Browser eine zugehörige Datei "Zone.Identifier" in einem alternativen Datenstrom , der als Mark of the Web (MotW) bekannt ist. Dadurch wird andere Software (einschließlich AV und EDR) auf dem System darüber informiert, dass die Datei riskanter ist. SmartScreen scannt nur Dateien mit dem Zeichen des Webs. SAC blockiert bestimmte Dateitypen vollständig, wenn sie über SAC verfügen. Das macht MotW Bypasses zu einem interessanten Forschungsziel, da es in der Regel zur Umgehung dieser Sicherheitssysteme führen kann. Finanziell motivierte Bedrohungsgruppen haben mehrere Schwachstellen entdeckt und ausgenutzt, um MotW-Prüfungen zu umgehen. Diese Techniken umfassten das Anhängen von gestalteten und ungültigen Codesignatursignaturen an JavaScript- oder MSI-Dateien.
Während unserer Recherchen sind wir auf eine weitere MotW-Umgehung gestoßen, die trivial auszunutzen ist. Dabei geht es um die Erstellung von LNK-Dateien, die nicht standardmäßige Zielpfade oder interne Strukturen haben. Wenn Sie darauf klicken, werden diese LNK-Dateien von explorer.exe mit der kanonischen Formatierung geändert. Diese Änderung führt dazu, dass das MotW-Etikett entfernt wird, bevor Sicherheitsüberprüfungen durchgeführt werden. Die Funktion, die die LNK-Dateien überschreibt, ist _SaveAsLink(), wie in der folgenden Aufrufliste gezeigt:
Die Funktion, die die Sicherheitsüberprüfung ausführt, ist CheckSmartScreen(), wie in der folgenden Aufrufliste gezeigt:
Die einfachste Demonstration dieses Problems besteht darin, einen Punkt oder ein Leerzeichen an den Pfad der ausführbaren Zieldatei anzuhängen (z. B. powershell.exe.
). Alternativ kann eine LNK-Datei erstellt werden, die einen relativen Pfad enthält, z. B. .\target.exe
. Nachdem Sie auf den Link geklickt haben, suchen und finden explorer.exe
den passenden .exe
Namen, korrigieren automatisch den vollständigen Pfad, aktualisieren die Datei auf der Festplatte (Entfernen von MotW) und starten schließlich das Ziel. Eine weitere Variante besteht darin, einen mehrstufigen Pfad in einem einzigen Eintrag des Zielpfad-Arrays des LNK zu erstellen. Das Zielpfad-Array sollte normalerweise 1 Eintrag pro Verzeichnis haben. Das Dienstprogramm pylnk3 zeigt die Struktur eines Exploit-LNK (nicht-kanonisches Format) vor und nach der Ausführung (kanonisches Format):
Ein Python-Skript, das diese Techniken veranschaulicht, ist hier verfügbar.
Im Folgenden sehen Sie eine LNK-Datei, die die MotW-Einschränkungen unter Smart App Control umgeht, um Powershell und Pop Calc zu starten:
In einem anderen Beispiel zeigen wir diese Technik, die mit dem Microsoft cdb-Befehlszeilendebugger verkettet ist, um die Ausführung von beliebigem Code zu erreichen und Shellcode auszuführen, um Calc zu popen:
Wir haben mehrere Beispiele in VirusTotal identifiziert, die den Fehler aufweisen, was zeigt, dass er in freier Wildbahn verwendet wird. Die älteste identifizierte Probe wurde vor über 6 Jahren eingereicht. Wir haben auch Details zu dem Fehler an das MSRC weitergegeben. Es kann in einem zukünftigen Windows-Update behoben werden. Wir veröffentlichen diese Informationen zusammen mit Erkennungslogik und Gegenmaßnahmen, um Verteidigern zu helfen, diese Aktivität zu identifizieren, bis ein Patch verfügbar ist.
Entdeckungen
Reputations-Hijacking kann von Natur aus schwer zu erkennen sein. Unzählige Anwendungen können kooptiert werden, um die Technik durchzuführen. Das Katalogisieren und Blockieren von Anwendungen, von denen bekannt ist, dass sie missbraucht werden, ist ein erster (und kontinuierlicher) Schritt.
process where process.parent.name == "explorer.exe" and process.hash.sha256 in (
"ba35b8b4346b79b8bb4f97360025cb6befaf501b03149a3b5fef8f07bdf265c7", // AutoHotKey
"4e213bd0a127f1bb24c4c0d971c2727097b04eed9c6e62a57110d168ccc3ba10" // JamPlus
)
Dieser Ansatz wird jedoch immer hinter Angreifern zurückbleiben. Ein etwas robusterer Ansatz besteht darin, Verhaltenssignaturen zu entwickeln, um allgemeine Kategorien von missbrauchter Software zu identifizieren. Zum Beispiel können wir in verdächtigen Aufruflisten nach gängigen Lua- oder Node.js-Funktionsnamen oder -Modulen suchen:
sequence by process.entity_id with maxspan=1m
[library where
(dll.Ext.relative_file_creation_time <= 3600 or
dll.Ext.relative_file_name_modify_time <= 3600 or
(dll.Ext.device.product_id : ("Virtual DVD-ROM", "Virtual Disk","USB *") and not dll.path : "C:\\*")) and
_arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info: "*!luaopen_*")] by dll.hash.sha256
[api where
process.Ext.api.behaviors : ("shellcode", "allocate_shellcode", "execute_shellcode", "unbacked_rwx", "rwx", "hook_api") and
process.thread.Ext.call_stack_final_user_module.hash.sha256 : "?*"] by process.thread.Ext.call_stack_final_user_module.hash.sha256
api where process.Ext.api.name : ("VirtualProtect*", "WriteProcessMemory", "VirtualAlloc*", "MapViewOfFile*") and
process.Ext.api.behaviors : ("shellcode", "allocate_shellcode", "execute_shellcode", "unbacked_rwx", "rwx", "hook_api") and
process.thread.Ext.call_stack_final_user_module.name : "ffi_bindings.node"
Sicherheitsteams sollten besonders auf heruntergeladene Dateien achten. Sie können die lokale Reputation nutzen, um Ausreißer in ihrer Umgebung zu identifizieren und genauer zu untersuchen.
from logs-* |
where host.os.type == "windows"
and event.category == "process" and event.action == "start"
and process.parent.name == "explorer.exe"
and (process.executable like "*Downloads*" or process.executable like "*Temp*")
and process.hash.sha256 is not null
| eval process.name = replace(process.name, " \\(1\\).", ".")
| stats hosts = count_distinct(agent.id) by process.name, process.hash.sha256
| where hosts == 1
LNK-Stomping kann viele Varianten haben, was die signaturbasierte Erkennung von LNK-Dateien erschwert. Sie sollten jedoch alle ein ähnliches Verhaltenssignal auslösen – explorer.exe
das Überschreiben einer LNK-Datei. Dies ist besonders ungewöhnlich im Download-Ordner oder wenn der LNK das Mark of the Web hat.
file where event.action == "overwrite" and file.extension : "lnk" and
process.name : "explorer.exe" and process.thread.Ext.call_stack_summary : "ntdll.dll|*|windows.storage.dll|shell32.dll|*" and
(
file.path : ("?:\\Users\\*\\Downloads\\*.lnk", "?:\\Users\\*\\AppData\\Local\\Temp\\*.lnk") or
file.Ext.windows.zone_identifier == 3
)
Schließlich hilft eine robuste Verhaltensabdeckung rund um gängige Angreifertechniken wie In-Memory-Umgehung, Persistenz, Zugriff auf Anmeldeinformationen, Enumeration und Lateral Movement dabei, realistische Eindringlinge, einschließlich Reputations-Hijacking, zu erkennen.
Fazit
Reputationsbasierte Schutzsysteme sind eine leistungsstarke Schicht zum Blockieren von Standard-Malware. Wie jede Schutztechnik haben sie jedoch Schwächen, die mit etwas Sorgfalt umgangen werden können. Smart App Control und SmartScreen weisen eine Reihe grundlegender Designschwächen auf, die einen ersten Zugriff ohne Sicherheitswarnungen und mit minimaler Benutzerinteraktion ermöglichen können. Sicherheitsteams sollten Downloads in ihrem Erkennungsstack sorgfältig prüfen und sich zum Schutz in diesem Bereich nicht ausschließlich auf betriebssystemeigene Sicherheitsfunktionen verlassen.