
AMSI-Funktionen
Celia CatalánAktie
Hallo zusammen! Vor ein paar Beiträgen haben wir über die Einführung in AMSI gesprochen. Heute werden wir uns weiter damit befassen
die Welt von AMSI. Bei dieser Gelegenheit werden wir uns mit den Funktionen befassen, die
verwendet Interpreter wie PowerShell, um mit Messungen zu kommunizieren
Sicherheit dank der AMSI-API.
Da AMSI Teil der Windows-API (Benutzermodus) ist,
Es wird von Microsoft dokumentiert, damit Entwickler keine Probleme haben
bei der Verwendung. Das heißt, die Windows-API-Bibliotheken verfügen über Dokumentation
darüber, wie ihre Funktionen aufgebaut sind, welche Parameter jeder erwartet
Funktion, Werte, die es empfängt usw.
Zuerst haben wir die AmsiInitialize-Funktion. Das
Die Funktion wird aufgerufen, bevor wir einen Befehl in PowerShell ausführen
Das heißt, diese Funktion wird zum Zeitpunkt der Ausführung des Interpreters aufgerufen.
Daher ist es eine komplizierte Funktion, diese anzugreifen und zu umgehen
Sie können die Logik nicht mit PowerShell-Befehlen ändern.
Die Microsoft-Dokumentation sagt uns, dass diese Funktion
erhält zwei Parameter:
- Der erste Parameter ist der Name des Anwendung, die die DLL verwendet, in unserem Fall PowerShell.
- Der zweite Parameter ist ein leerer Zeiger namens amsiContext. Dieser Zeiger wird von der Funktion AmsiInitialize gefüllt mit den übrigen Funktionen verwendet werden.
Sowohl in dieser Funktion als auch in den meisten Funktionen von
Es wird AMSI HRESULT zurückgegeben, ein Code, der angibt, ob die Funktion ausgeführt wurde
erfolgreich ausgeführt werden oder nicht. Wir können die Liste der Codes im sehen
Microsoft-Dokumentation.
Die nächste Funktion ist AmsiOpenSession. Jedes Mal, wenn Sie
Um einen PowerShell-Befehl auszuführen, muss eine Sitzung mit AMSI erstellt werden
wie diese Funktion aufgerufen wird.
Die Microsoft-Dokumentation sagt uns, dass diese Funktion
Es erhält außerdem zwei Parameter:
- Das erste Argument ist amsiContext, was äquivalent ist auf den Kontext, der in der vorherigen Funktion gefüllt wurde.
- Das zweite Argument ist ein Zeiger als nichtig bezeichnet amsiSession. Dieser Zeiger wird von der AmsiOpenSession-Funktion gefüllt und ist Wird von anderen Funktionen verwendet.
Wie AmsiInitialize gibt es einen Code zurück, der
gibt an, ob die Funktion erfolgreich ausgeführt wurde oder nicht.
Drittens haben wir AmsiScanString und AmsiScanBuffer.
Beide Funktionen haben den gleichen Zweck und die Art und Weise, wie sie verwendet werden, ist recht einfach
ähnlich. So sehr, dass AmsiScanString tatsächlich unten aufruft
AmsiScanBuffer. Die Aufgabe dieser Funktionen besteht darin, den Inhalt eines zu erfassen
Befehl, der später vom AV/EDR gescannt werden soll.
Die Microsoft-Dokumentation sagt es uns
sagt, dass AmsiScanString fünf Parameter erhält:
- Das erste Argument stellt den Kontext dar wurde gefüllt die erste Funktion (AmsiInitialize).
- Das zweite Argument ist eine Zeichenfolge, die stellt den Inhalt des Befehls dar.
- Das dritte Argument ist a So'ne Art Bezeichner.
- Das vierte Argument ist die Sitzung, die, wie wir haben Wie zuvor gesehen, wurde in der AmsiOpenSession-Funktion aufgefüllt.
- Abschließend mit dem fünften Argument die Funktion erhält einen leeren Zeiger, der das Scan-Ergebnis darstellt (d. h. (d. h. ob im AV/EDR angegeben ist, dass es sich um Malware handelt oder nicht). Die Werte können sein Folgendes:
Andererseits AmsiScanBuffer
Es empfängt anstelle einer Zeichenfolge, die den Befehl darstellt, einen Puffer.
Darüber hinaus muss auch die Länge dieses Puffers angegeben werden. Andere
Die Argumente sind für beide Funktionen gleich.
Schließlich beides für
Es wird AmsiScanString wie für AmsiScanBuffer HRESULT zurückgegeben, was ebenfalls der Fall ist
Art und Weise wie in den vorherigen Funktionen, stellt dar, ob die Funktion ausgeführt wurde
korrekt. Es ist zu beachten, dass das Scanergebnis nicht verwechselt werden darf
mit dem Ergebnis der Funktion, das sind zwei völlig unterschiedliche Werte.
Trotzdem sind es Werte, die
Ja, sie sind voneinander abhängig. Der Inhalt von result kann nicht sein
AMSI_RESULT_DETECTED, wenn HRESULT E_INVALIDARG ist, da dies bedeuten würde
dass die Analyse nicht ausgeführt werden würde, da die Argumente ungültig sind.
Aber wenn auch zufällig, dann von einigen
Art des Fehlers, der Inhalt von result gibt an, dass Malware vorhanden ist,
aber HRESULT ist INVALIDARG, der Befehl wird normal ausgeführt, da
HRESULT wird zuerst überprüft und ob es anzeigt, dass die Funktion ausgeführt wurde
Normalerweise wird der Inhalt von result.
überprüft
Endlich haben wir die Funktion
AmsiCloseSession, die auftritt, wenn der Scan bereits durchgeführt wurde. Das
Die Funktion wird auch aufgerufen, wenn Sie einen Befehl in PowerShell ausführen. Hausaufgaben
Diese Funktion dient dazu, die Sitzung zu schließen, sodass sie nicht erneut verwendet werden kann.
Die Microsoft-Dokumentation sagt es uns
Es heißt, dass es zwei Parameter erhält:
- Der Kontext der Initialisierung.
- Die Sitzung, die Sie schließen möchten.
Eine void-Funktion
es gibt nichts zurück. Das heißt, es gibt seitens Microsoft keine Fehlerkontrolle.
um zu wissen, ob die Sitzung erfolgreich geschlossen wurde oder ob ein Fehler aufgetreten ist
Fehler.
Wenn wir also eine öffnen
PowerShell, der API-Aufrufablauf würde wie folgt aussehen:
Und wenn die PowerShell bereits geöffnet ist und wir Befehle ausführen, wird die
Der API-Aufrufablauf würde wie folgt aussehen:
Und für heute reicht es! Wir werden in den nächsten Folgen mit AMSI fortfahren.
Juan Gabriel Ruiz, Senior Security Analyst bei Zerolynx und Justo Martín, Sicherheitsanalyst bei Zerolynx .