Ein Windows-Programm erledigt fast alles über Funktionen des Betriebssystems, die sogenannte Windows-API. Welche Funktionen es braucht, steht in seiner Importtabelle, und die lässt sich lesen, ohne das Programm zu starten. Manche Funktionen und vor allem manche Kombinationen verraten viel über die Absichten eines Programms. Diese Seite erklärt, wie du die Importliste liest, und beschreibt weiter unten jede Funktion, die das Werkzeug markiert.
Was sind Importe?
Kaum ein Programm bringt alles selbst mit. Um eine Datei zu öffnen, eine Verbindung aufzubauen oder einen Prozess zu starten, ruft es Funktionen aus System-Bibliotheken wie kernel32.dll, advapi32.dll oder wininet.dll auf. Damit Windows diese Funktionen beim Start bereitstellen kann, listet das Programm sie in seiner Importtabelle auf: welche Bibliothek, welche Funktion.
Diese Liste ist für die Analyse wertvoll, weil sie eine Art Inhaltsverzeichnis der Fähigkeiten ist. Ein Taschenrechner braucht keine Funktionen, um in fremde Prozesse zu schreiben. Ein Bildbetrachter braucht keine Funktion, die jeden Tastendruck abfragt.
Viele Funktionen gibt es in mehreren Varianten: mit A am Ende für ANSI-Text, mit W für Unicode, mit Ex für erweiterte Versionen. CreateProcessA, CreateProcessW und CreateProcessAsUserW tun im Kern dasselbe. Das Werkzeug fasst diese Varianten zusammen, auf dieser Seite steht jeweils der Basisname.
Was zeigt das Werkzeug?
Im Reiter Importe siehst du oben die verdächtigen Funktionen, gruppiert nach Kategorie, darunter alle importierten Bibliotheken mit ihren Funktionen. Funktionen, die über eine Nummer statt eines Namens importiert werden (Ordinal), löst das Werkzeug für bekannte Bibliotheken auf, zum Beispiel „Ordinal 4 (connect)“ bei ws2_32.dll.
Einige Funktionen kommen in fast jedem normalen Programm vor, weil der Compiler sie automatisch einbaut. Sie stehen abgeschwächt am Ende ihrer Kategorie mit dem Hinweis „kommt auch in vielen normalen Programmen vor“. Dazu gehören IsDebuggerPresent, GetProcAddress und LoadLibrary.
Zwei Regeln erzeugen zusätzlich eine Auffälligkeit in der Übersicht:
Injektionsmuster:VirtualAllocEx, WriteProcessMemory und CreateRemoteThread zusammen. Das ist das Lehrbuchmuster für das Einschleusen von Code in einen fremden Prozess.
Sehr wenige Importe: weniger als zehn Funktionen, darunter LoadLibrary und GetProcAddress. Das Programm besorgt sich seine Funktionen erst zur Laufzeit, typisch für gepackte oder nachladende Programme. Bei .NET-Programmen gilt diese Regel nicht.
Wie liest du die Importliste?
Der wichtigste Grundsatz: Einzelne Funktionen beweisen nichts, Kombinationen erzählen eine Geschichte. Fast jede Funktion auf dieser Seite hat legitime Verwendungen. Ein Installer startet Prozesse, ein Updater lädt Dateien herunter, ein Passwortmanager verschlüsselt Daten. Aussagekräftig wird es, wenn die Fähigkeiten nicht zum angeblichen Zweck des Programms passen oder sich zu einem bekannten Angriffsmuster fügen.
Diese Kombinationen solltest du kennen:
Klassische DLL-Injektion:OpenProcess, VirtualAllocEx, WriteProcessMemory und CreateRemoteThread, oft zusammen mit LoadLibrary. Das Programm schreibt den Pfad einer DLL in einen fremden Prozess und lässt sie dort laden. MITRE ATT&CK: T1055.001.
Process Hollowing:CreateProcess (im angehaltenen Zustand), NtUnmapViewOfSection, VirtualAllocEx, WriteProcessMemory, SetThreadContext und ResumeThread. Ein legitimer Prozess wird gestartet, sein Inhalt ausgetauscht, und er läuft mit fremdem Code weiter. T1055.012.
APC-Injektion:VirtualAllocEx, WriteProcessMemory und QueueUserAPC. Der eingeschleuste Code wird in die Warteschlange eines fremden Threads gestellt. T1055.004.
Downloader:URLDownloadToFile oder InternetOpenUrl mit InternetReadFile, danach CreateProcess, ShellExecute oder WinExec. Lädt etwas herunter und startet es.
Keylogger:SetWindowsHookEx oder GetAsyncKeyState, dazu GetForegroundWindow, um zu wissen, in welchem Fenster getippt wird, und Netzwerkfunktionen zum Versand.
Bildschirmspion:GetDC bzw. GetWindowDC mit BitBlt, kombiniert mit Dateizugriff oder Netzwerk.
Ransomware-Muster: Kryptofunktionen, das Durchsuchen von Verzeichnissen mit FindFirstFile und FindNextFile und oft Befehle wie vssadmin delete shadows in den Strings.
Persistenz:RegSetValue oder CreateService zusammen mit Registry-Pfaden wie ...\CurrentVersion\Run in den Strings.
Prüfe außerdem, ob die Fähigkeiten zum angeblichen Programm passen. Eine „Rechnung.exe“ mit Netzwerk-, Registry- und Injektionsfunktionen ist verdächtiger als ein Verwaltungswerkzeug mit denselben Importen.
Was Importe nicht zeigen
Angreifer wissen, dass Analysten auf die Importtabelle schauen. Deshalb verstecken sie ihre Absichten oft:
Dynamisches Laden: Mit LoadLibrary und GetProcAddress holt sich ein Programm beliebige Funktionen erst zur Laufzeit. Sie tauchen dann nicht in der Importliste auf. Oft sind die Funktionsnamen zusätzlich verschlüsselt oder nur als Prüfsumme gespeichert (API-Hashing).
Packer: Ein gepacktes Programm zeigt nur die Importe des Entpackers. Die echten Importe entstehen erst im Speicher.
Direkte Systemaufrufe: Manche Schadsoftware ruft den Windows-Kern direkt auf und umgeht dabei die Bibliotheken komplett. Dann gibt es gar keinen Import.
.NET und Skriptsprachen: .NET-Programme importieren fast nur mscoree.dll. Die eigentliche Logik steckt im .NET-Code und braucht einen .NET-Decompiler.
Eine unauffällige Importliste ist deshalb kein Freispruch. Eine auffällig kurze ist dagegen selbst ein Befund.
Typische Fehlinterpretationen
„IsDebuggerPresent heißt Anti-Analyse.“ Die C-Laufzeitbibliothek von Visual Studio importiert diese Funktion in praktisch jedem Programm. Allein ist sie bedeutungslos.
„CreateProcess ist verdächtig.“ Sehr viele Programme starten andere Programme. Erst der Zusammenhang macht es interessant.
„Kryptofunktionen bedeuten Ransomware.“ Verschlüsselung ist Alltag, etwa für Verbindungen, Passwörter oder Lizenzen. Ransomware erkennt man am Zusammenspiel mit massenhaftem Dateizugriff.
„Keine verdächtigen Importe, also sauber.“ Siehe oben: Dynamisches Laden, Packer und direkte Systemaufrufe verstecken genau diese Funktionen.
„Sicherheitssoftware hat dieselben Importe wie Malware.“ Stimmt, und das ist normal. Virenscanner, Debugger und Überwachungswerkzeuge brauchen dieselben Fähigkeiten. Deshalb zählt immer der Kontext: Wer hat die Datei geschickt, und was soll sie tun?
Die Funktionen im Einzelnen
Im Folgenden steht jede Funktion, die das Werkzeug markiert, mit einer kurzen Erklärung, typischen legitimen Verwendungen und dem Zusammenhang, in dem sie auffällig wird. Über die Links im Reiter Importe springst du direkt zum passenden Eintrag.
Prozessinjektion
VirtualAllocEx
Reserviert Speicher in einem fremden Prozess, oft der erste Schritt beim Einschleusen von Code.
Reserviert Speicher im Adressraum eines anderen Prozesses. Legitim nutzen das Debugger und manche Überwachungswerkzeuge. In Schadsoftware ist es meist der erste Schritt einer Injektion: Speicher im Zielprozess anlegen, dann mit WriteProcessMemory befüllen und mit CreateRemoteThread oder QueueUserAPC ausführen. Auffällig vor allem in dieser Kombination. MITRE ATT&CK: T1055.
WriteProcessMemory
Schreibt Daten in den Speicher eines fremden Prozesses.
Schreibt Daten in den Speicher eines anderen Prozesses. Debugger und Spiele-Trainer nutzen das, normale Anwendungen kaum. Zusammen mit VirtualAllocEx und einer Funktion, die den geschriebenen Code startet, ergibt sich das klassische Injektionsmuster. Auch beim Process Hollowing wird damit der Inhalt des ausgehöhlten Prozesses ersetzt.
CreateRemoteThread
Startet einen Thread in einem fremden Prozess und kann so eingeschleusten Code ausführen.
Startet einen neuen Thread in einem anderen Prozess. Die bekannteste Injektionstechnik lässt den Zielprozess darüber LoadLibrary mit dem Pfad einer eingeschleusten DLL aufrufen. Legitime Verwendungen sind selten und meist auf Debugger und Diagnosewerkzeuge beschränkt. Moderne EDR-Produkte überwachen diesen Aufruf genau, deshalb weichen Angreifer zunehmend auf andere Wege aus. T1055.001.
NtUnmapViewOfSection
Entfernt Speicherbereiche aus einem Prozess, typisch für das Aushöhlen eines Prozesses (Process Hollowing).
Eine undokumentierte Funktion aus ntdll.dll, die einen Speicherbereich aus einem Prozess entfernt. Beim Process Hollowing startet die Schadsoftware ein legitimes Programm im angehaltenen Zustand, entfernt damit dessen Code und schreibt eigenen hinein. Normale Anwendungen haben praktisch keinen Grund, diese Funktion direkt zu importieren. T1055.012.
ZwUnmapViewOfSection
Entfernt Speicherbereiche aus einem Prozess, typisch für das Aushöhlen eines Prozesses (Process Hollowing).
Die Zw-Variante von NtUnmapViewOfSection. Aus Sicht eines normalen Programms verhalten sich beide gleich, Schadsoftware importiert mal die eine, mal die andere, um einfache Signaturen zu umgehen. Die Bewertung ist dieselbe: ein starker Hinweis auf Process Hollowing, besonders zusammen mit SetThreadContext und ResumeThread.
QueueUserAPC
Reiht Code zur Ausführung in einem anderen Thread ein, eine bekannte Injektionstechnik.
Stellt eine Funktion in die Warteschlange eines Threads, die ausgeführt wird, sobald der Thread in einen bestimmten Wartezustand geht. Das nutzt Windows selbst an vielen Stellen. Angreifer schreiben mit WriteProcessMemory Code in einen fremden Prozess und lassen ihn per APC starten. Bei der Variante „Early Bird“ geschieht das in einem frisch gestarteten, noch angehaltenen Prozess, bevor Schutzsoftware eingreifen kann. T1055.004.
SetThreadContext
Ändert Register eines Threads und kann so dessen Ausführung umlenken.
Setzt die Registerwerte eines Threads, darunter den Befehlszeiger, der bestimmt, wo der Thread weiterläuft. Debugger brauchen das. Beim Process Hollowing und beim Thread Hijacking wird damit ein Thread auf eingeschleusten Code umgelenkt. Zusammen mit ResumeThread und Schreibfunktionen für fremde Prozesse ein deutliches Muster.
NtCreateThreadEx
Erzeugt Threads auf niedriger Ebene, auch in fremden Prozessen.
Die undokumentierte, tiefer liegende Variante von CreateRemoteThread aus ntdll.dll. Schadsoftware nutzt sie, weil manche Schutzprodukte nur die bekannte Funktion überwachen und weil sie auch in Prozessen anderer Sitzungen funktioniert. Ein direkter Import in einer normalen Anwendung ist ungewöhnlich.
RtlCreateUserThread
Erzeugt Threads auf niedriger Ebene, auch in fremden Prozessen.
Eine weitere undokumentierte Funktion zum Erzeugen von Threads, auch in fremden Prozessen. Sie wird in Injektionswerkzeugen und Schadsoftware als Alternative zu CreateRemoteThread verwendet. Taucht sie zusammen mit VirtualAllocEx und WriteProcessMemory auf, ist das Muster dasselbe wie bei der klassischen Injektion.
Anti-Analyse
CheckRemoteDebuggerPresent
Prüft, ob ein Prozess von einem Debugger beobachtet wird.
Prüft, ob ein Prozess, auch der eigene, von einem Debugger beobachtet wird. Seltener als IsDebuggerPresent und nicht automatisch vom Compiler eingebaut. Schadsoftware nutzt die Funktion, um ihr Verhalten zu ändern oder sich zu beenden, sobald jemand zuschaut. Legitim findet man sie vor allem in Kopierschutz- und Lizenzsystemen.
NtQueryInformationProcess
Liest interne Prozessinformationen, wird oft zur Debugger-Erkennung genutzt.
Liest interne Informationen über einen Prozess, etwa den Elternprozess oder ob ein Debug-Port gesetzt ist. Die Funktion hat legitime Anwendungen in Systemwerkzeugen, wird aber auch gern für Debugger-Erkennung genutzt, die einfache Tricks gegen IsDebuggerPresent umgeht. Zusammen mit anderen Anti-Analyse-Funktionen ein Hinweis auf bewusst schwer analysierbare Software.
NtSetInformationThread
Kann einen Thread vor einem Debugger verstecken.
Kann einen Thread mit der Option ThreadHideFromDebugger vor Debuggern verstecken. Danach erhält ein Debugger keine Ereignisse mehr aus diesem Thread. Diese Nutzung ist ein bekannter Anti-Debugging-Trick. Die Funktion hat auch andere, harmlose Einsatzzwecke, ein direkter Import in einer kleinen, unbekannten Anwendung ist aber bemerkenswert.
IsDebuggerPresent
Prüft, ob das Programm in einem Debugger läuft. Kommt auch in vielen normalen Programmen vor.
Prüft, ob der eigene Prozess von einem Debugger beobachtet wird. Die C-Laufzeitbibliothek von Visual Studio importiert diese Funktion standardmäßig, sie steht deshalb in fast jedem Windows-Programm. Allein hat sie keine Aussagekraft. Interessant wird sie nur, wenn weitere Anti-Analyse-Funktionen dazukommen oder das Programm sonst kaum Importe hat. T1622.
OutputDebugString
Gibt Debug-Meldungen aus und wird manchmal für Tricks gegen Debugger genutzt. Kommt auch in vielen normalen Programmen vor.
Gibt eine Meldung an einen angehängten Debugger aus. Viele Programme nutzen das für Diagnosemeldungen, weshalb es als häufige Funktion gilt. Es gibt einen alten Trick, bei dem Schadsoftware anhand des Rückgabeverhaltens erkennt, ob ein Debugger läuft. Allein ist die Funktion unauffällig.
Netzwerk und Download
URLDownloadToFile
Lädt eine Datei aus dem Internet direkt auf die Festplatte.
Lädt eine Datei von einer Adresse herunter und speichert sie direkt auf der Festplatte, mit einem einzigen Aufruf. Wegen dieser Einfachheit ist die Funktion in Downloadern und in Makros sehr beliebt. Legitime Programme verwenden sie für Updates. Verdächtig mit einem anschließenden Programmstart und einer ungewöhnlichen Adresse in den Strings. T1105.
InternetOpen
Startet eine Internetverbindung über WinINet.
Initialisiert die WinINet-Bibliothek für Internetverbindungen. Browser-ähnliche Anwendungen und Updater nutzen sie, und sie ist nicht per se verdächtig. Interessant ist der User-Agent, den das Programm dabei angibt: Er steht oft in den Strings und ist bei Schadsoftware manchmal auffällig veraltet oder fehlerhaft, was ihn zu einem guten Suchbegriff in Proxy-Protokollen macht.
InternetOpenUrl
Öffnet eine Internetadresse, um Daten zu laden.
Öffnet eine HTTP- oder FTP-Adresse über WinINet. Zusammen mit InternetReadFile liest ein Programm damit Daten aus dem Netz, etwa einen weiteren Schadcode oder Befehle eines Kontrollservers. In einem Programm, das angeblich nichts mit dem Internet zu tun hat, ein deutlicher Hinweis.
InternetReadFile
Liest Daten aus einer Internetverbindung.
Liest Daten aus einer zuvor geöffneten Internetverbindung. Häufig in Downloadern: Adresse öffnen, Inhalt lesen, in eine Datei oder direkt in den Speicher schreiben und ausführen. Die Kombination mit VirtualAlloc und einem Programmstart ohne Zwischenspeicherung auf der Festplatte ist typisch für Loader.
HttpSendRequest
Sendet eine HTTP-Anfrage an einen Server.
Sendet eine HTTP-Anfrage über WinINet, oft mit eigenen Kopfzeilen oder Daten. Schadsoftware nutzt das, um sich bei ihrem Kontrollserver zu melden und gestohlene Daten zu übertragen. Die Adresse und besondere Kopfzeilen stehen häufig in den Strings und eignen sich als Suchbegriff.
WinHttpOpen
Startet eine HTTP-Sitzung über WinHTTP.
Startet eine HTTP-Sitzung über WinHTTP, die serverseitige Alternative zu WinINet. Sie wird von Diensten und Hintergrundprogrammen verwendet und ist allein unauffällig. Wie bei InternetOpen lohnt ein Blick auf den User-Agent in den Strings.
WinHttpSendRequest
Sendet eine HTTP-Anfrage über WinHTTP.
Sendet eine Anfrage in einer WinHTTP-Sitzung. Viele moderne Schadprogramme und Angriffswerkzeuge kommunizieren über WinHTTP, weil es Proxy-Einstellungen des Systems automatisch übernimmt und in Unternehmensnetzen zuverlässig funktioniert.
WSAStartup
Initialisiert die Windows-Netzwerkschnittstelle für eigene Verbindungen.
Initialisiert die Windows-Sockets-Schnittstelle für eigene Netzwerkverbindungen auf niedriger Ebene. Jedes Programm, das direkt mit Sockets arbeitet, ruft sie auf. Bei Schadsoftware deutet das auf eigene Protokolle hin, etwa eine Hintertür, die auf einem Port lauscht oder sich mit einem Server verbindet.
connect
Baut eine Netzwerkverbindung zu einem anderen Rechner auf.
Baut eine TCP-Verbindung zu einer Adresse und einem Port auf. Häufig in Hintertüren und Reverse Shells, aber natürlich auch in jeder Netzwerkanwendung. Wird oft per Ordinal aus ws2_32.dll importiert, das Werkzeug löst das auf. Zusammen mit fest eingetragenen IP-Adressen in den Strings wird es interessant.
send
Sendet Daten über eine Netzwerkverbindung.
Sendet Daten über eine bestehende Socket-Verbindung. Allein unauffällig. In Kombination mit Tastatur- oder Bildschirmfunktionen kann es ein Hinweis darauf sein, wie gestohlene Daten das Netz verlassen.
recv
Empfängt Daten über eine Netzwerkverbindung.
Empfängt Daten über eine Socket-Verbindung. Zusammen mit Funktionen zum Starten von Prozessen deutet das auf eine Hintertür hin, die Befehle empfängt und ausführt. Allein ist die Funktion Alltag jeder Netzwerkanwendung.
Ausführung
ShellExecute
Öffnet Dateien oder startet Programme über die Windows-Shell.
Öffnet eine Datei oder Adresse mit dem zuständigen Programm, so als hätte der Benutzer doppelt darauf geklickt. Schadsoftware nutzt das, um heruntergeladene Dateien zu starten oder Programme mit Administratorrechten anzufordern (Verb „runas“). Legitim in fast jeder Anwendung, die Dateien oder Links öffnet.
WinExec
Startet ein Programm über eine alte, einfache Schnittstelle.
Eine alte, seit Jahrzehnten nur noch aus Kompatibilitätsgründen vorhandene Funktion zum Starten von Programmen. Moderne Software nutzt CreateProcess. WinExec taucht deshalb überproportional oft in Schadsoftware und Shellcode auf, weil sie einfach aufzurufen ist.
CreateProcessAsUser
Startet ein Programm im Namen eines anderen Benutzers.
Startet ein Programm im Sicherheitskontext eines anderen Benutzers, etwa mit einem zuvor gestohlenen oder kopierten Zugriffstoken. Dienste und Verwaltungswerkzeuge brauchen das legitim. Zusammen mit Funktionen zur Rechteanpassung ist es ein Hinweis auf Rechteausweitung. T1134.
CreateProcess
Startet ein weiteres Programm. Kommt auch in vielen normalen Programmen vor.
Startet ein neues Programm. Installer, Updater und unzählige normale Programme tun das, deshalb gilt die Funktion als häufig. Interessant ist, was gestartet wird: Stehen in den Strings cmd.exe, powershell.exe, rundll32.exe oder mshta.exe, lohnt der genaue Blick. Mit dem Parameter für einen angehaltenen Start ist sie außerdem der erste Schritt beim Process Hollowing.
Persistenz
RegSetValue
Schreibt Werte in die Registry, etwa für den Autostart.
Schreibt einen Wert in die Registry. Fast jedes Programm speichert Einstellungen dort, die Funktion allein ist also normal. Verdächtig wird sie mit Autostart-Pfaden wie Software\Microsoft\Windows\CurrentVersion\Run in den Strings. Dann trägt sich das Programm selbst in den Autostart ein. T1547.001.
RegCreateKey
Legt Schlüssel in der Registry an.
Legt einen Schlüssel in der Registry an. Wie bei RegSetValue entscheidet der Ort: Schlüssel unter Run, Winlogon, Image File Execution Options oder in COM-Registrierungen können der Persistenz oder dem Kapern anderer Programme dienen.
CreateService
Richtet einen Windows-Dienst ein, der automatisch starten kann.
Richtet einen Windows-Dienst ein, der mit Systemrechten und oft automatisch beim Start läuft. Installer von Treibern und Serversoftware brauchen das. Schadsoftware nutzt Dienste für dauerhafte Präsenz mit hohen Rechten und für die seitliche Bewegung im Netz, etwa beim Remote-Start über PsExec-ähnliche Werkzeuge. T1543.003.
StartService
Startet einen Windows-Dienst.
Startet einen installierten Windows-Dienst. Zusammen mit CreateService ergibt sich das Muster „Dienst anlegen und sofort starten“. Allein ist die Funktion in Verwaltungsprogrammen üblich.
Überwachung
SetWindowsHookEx
Klinkt sich in Ereignisse wie Tastatureingaben ein, typisch für Keylogger.
Klinkt eine Funktion in die Ereigniskette von Windows ein, zum Beispiel für alle Tastatur- oder Mauseingaben. Barrierefreiheits-Werkzeuge, Hotkey-Programme und manche Spiele nutzen das legitim. Keylogger ebenfalls: Mit dem Hook-Typ für die Tastatur sieht das Programm jeden Tastendruck im System. T1056.001.
GetAsyncKeyState
Fragt den Zustand einzelner Tasten ab, wird von Keyloggern genutzt.
Fragt ab, ob eine bestimmte Taste gerade gedrückt ist. Spiele nutzen das ständig. Ein einfacher Keylogger ruft die Funktion in einer Schleife für alle Tasten auf. In einem Programm, das weder Spiel noch Eingabewerkzeug ist, besonders zusammen mit GetForegroundWindow, ein Warnsignal.
BitBlt
Kopiert Bildschirminhalte, zusammen mit GetDC typisch für Bildschirmfotos.
Kopiert Bildbereiche. Jede grafische Anwendung nutzt das, deshalb markiert das Werkzeug die Funktion nur zusammen mit GetDC oder GetWindowDC. Diese Kombination ist die übliche Art, ein Bildschirmfoto zu erstellen. Datendiebe fotografieren so regelmäßig den Bildschirm. T1113.
GetKeyState
Fragt den Zustand einzelner Tasten ab. Kommt auch in vielen normalen Programmen vor.
Fragt den Zustand einer Taste ab, etwa ob die Umschalttaste gedrückt ist. Sehr viele Programme mit Oberfläche nutzen das, deshalb gilt die Funktion als häufig. Nur im Zusammenspiel mit anderen Überwachungsfunktionen relevant.
GetForegroundWindow
Ermittelt das aktive Fenster, etwa um mitzuschreiben, wo getippt wird. Kommt auch in vielen normalen Programmen vor.
Liefert das Fenster, das gerade im Vordergrund ist. Viele Programme nutzen das harmlos. Keylogger und Datendiebe verwenden es, um mitzuschreiben, in welcher Anwendung getippt wird, etwa im Browser beim Online-Banking. Allein unauffällig, in Kombination mit Tastaturfunktionen aussagekräftig.
Krypto
CryptEncrypt
Verschlüsselt Daten, kommt auch in Erpressungssoftware vor.
Verschlüsselt Daten über die klassische Windows-Kryptoschnittstelle. Legitim für geschützte Konfigurationen, Kommunikation und Lizenzprüfungen. Ransomware nutzt die Funktion, um Dateien zu verschlüsseln. Achte auf die Kombination mit Funktionen zum Durchsuchen von Verzeichnissen und auf Lösegeldtexte oder vssadmin delete shadows in den Strings. T1486.
CryptDecrypt
Entschlüsselt Daten, etwa versteckte Konfigurationen.
Entschlüsselt Daten. Schadsoftware speichert ihre Konfiguration, Adressen der Kontrollserver oder eine zweite Stufe oft verschlüsselt und entschlüsselt sie erst zur Laufzeit. Das erklärt, warum die String-Analyse dann wenig findet. T1140.
CryptAcquireContext
Öffnet den Windows-Kryptodienst.
Öffnet einen Kryptografie-Anbieter und ist Voraussetzung für die übrigen klassischen Kryptofunktionen. Sehr verbreitet, auch weil viele Programme damit nur Zufallszahlen erzeugen. Allein wenig aussagekräftig.
CryptGenKey
Erzeugt einen Schlüssel für die Verschlüsselung.
Erzeugt einen neuen kryptografischen Schlüssel. Ransomware erzeugt so pro Opfer oder pro Datei einen Schlüssel, der anschließend mit dem öffentlichen Schlüssel des Angreifers geschützt wird. Legitim in Programmen, die selbst verschlüsseln.
BCryptEncrypt
Verschlüsselt Daten über die neuere Krypto-Schnittstelle.
Die Verschlüsselungsfunktion der neueren Windows-Kryptoschnittstelle CNG. Moderne Software und auch moderne Ransomware verwenden sie. Die Bewertung ist dieselbe wie bei CryptEncrypt: Der Zusammenhang entscheidet.
Rechte
AdjustTokenPrivileges
Aktiviert zusätzliche Rechte des Prozesses, etwa zum Debuggen anderer Prozesse.
Aktiviert oder deaktiviert Sonderrechte des eigenen Prozesses. Häufig wird damit SeDebugPrivilege aktiviert, das Zugriff auf fast alle anderen Prozesse erlaubt, etwa um den Speicher von lsass.exe auszulesen, in dem Anmeldedaten liegen. Auch Herunterfahren und Neustarten erfordern ein solches Recht. T1134.
OpenProcessToken
Öffnet die Rechteinformation eines Prozesses.
Öffnet das Zugriffstoken eines Prozesses, also die Information, mit welchen Rechten er läuft. Meist der erste Schritt vor AdjustTokenPrivileges oder vor dem Kopieren eines Tokens, um als anderer Benutzer zu handeln.
LookupPrivilegeValue
Sucht die Kennung eines Rechts, meist vor dem Aktivieren.
Übersetzt den Namen eines Rechts, etwa „SeDebugPrivilege“, in eine interne Kennung. Wird fast immer direkt vor AdjustTokenPrivileges aufgerufen. Welches Recht gemeint ist, steht meist in den Strings.
Dynamisches Laden
LdrLoadDll
Lädt eine DLL auf niedriger Ebene nach.
Die interne Funktion aus ntdll.dll, die LoadLibrary im Hintergrund aufruft. Normale Programme importieren sie nicht direkt. Schadsoftware tut es, um Überwachung auf der Ebene von LoadLibrary zu umgehen.
LoadLibrary
Lädt eine DLL zur Laufzeit nach. Kommt auch in vielen normalen Programmen vor.
Lädt eine DLL zur Laufzeit. Viele Programme nutzen das für Plugins oder optionale Funktionen, deshalb gilt die Funktion als häufig. Zusammen mit GetProcAddress und einer sehr kurzen Importliste ist sie aber das typische Zeichen, dass ein Programm seine eigentlichen Funktionen verbirgt und erst zur Laufzeit auflöst.
GetProcAddress
Ermittelt die Adresse einer Funktion zur Laufzeit, so bleiben Importe verborgen. Kommt auch in vielen normalen Programmen vor.
Ermittelt die Adresse einer Funktion in einer geladenen DLL. Damit kann ein Programm beliebige Funktionen nutzen, ohne sie in der Importtabelle aufzuführen. In praktisch allen Programmen vorhanden. Aussagekräftig nur, wenn die Importliste sonst auffällig leer ist, dann kommt es auf die Funktionsnamen in den Strings an, sofern sie nicht verschlüsselt sind.
Speicher
VirtualAlloc
Reserviert Speicher, häufig bei Entpackern, aber auch in vielen normalen Programmen. Kommt auch in vielen normalen Programmen vor.
Reserviert Speicher im eigenen Prozess. Sehr viele Programme tun das, etwa für große Datenmengen. Entpacker und Shellcode-Loader reservieren damit Speicher, schreiben den entpackten Code hinein und führen ihn aus. Auffällig nur mit ausführbaren Speicherrechten oder zusammen mit VirtualProtect in einem gepackten Programm.
VirtualProtect
Ändert Speicherrechte, häufig bei Entpackern, aber auch in vielen normalen Programmen. Kommt auch in vielen normalen Programmen vor.
Ändert die Zugriffsrechte eines Speicherbereichs, zum Beispiel von beschreibbar auf ausführbar. Das braucht jeder Entpacker, aber auch Laufzeitumgebungen wie JavaScript- und .NET-Engines. Angreifer nutzen es außerdem, um Schutzfunktionen im eigenen Prozess zu überschreiben, etwa die AMSI-Schnittstelle, mit der Windows Skripte prüft.