Funciones de AMSI

AMSI-Funktionen


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 .




var Article = document.querySelector('#medium-feed-article-root'); if(Artikel) { Article.style.display = 'none'; }
Zurück zum Blog

Hinterlasse einen Kommentar

Bitte beachten Sie, dass Kommentare vor der Veröffentlichung genehmigt werden müssen.