Reverse Engineering: Wie sich Malware selbst verteidigt
Es ist eine Herausforderung, Malware aufzubrechen. Schadsoftware weist zudem häufig Funktionen auf, mit denen sie sich einer Untersuchung entzieht.
- Nadia Meichtry
Um unentdeckt zu bleiben, kann sich Schadsoftware tarnen, wie der vorangegangene Tutorialartikel beschrieb. Manche Malware geht aber noch einen Schritt weiter: Sie erkennt, wenn sie beobachtet oder analysiert wird, und reagiert darauf, indem sie sich beispielsweise selbst beendet. Von Debugger-Erkennung bis hin zu Codeverschleierung nutzen Angreifer eine Vielzahl an Techniken, um sich vor Reverse Engineering zu schützen. Das Ziel ist dabei immer, Sandboxes auszutricksen und die Analyse zu verlangsamen oder zu verhindern. Der letzte Teil der Tutorialreihe zum Reverse Engineering nimmt diese Abwehrmechanismen deshalb unter die Lupe. Er zeigt, mit welchen Techniken Angreifer die Analysten ausbremsen oder fehlleiten – und wie man diese Verteidigung in der Praxis überwindet.
- Selbstverteidigende Malware erkennt, ob sie gerade untersucht wird. Sie bleibt dann inaktiv, beendet sich selbst oder stört die Analyse anderweitig.
- Techniken von API-Missbrauch ĂĽber Codeverschleierung bis hin zu versteckten Einstiegspunkten sollen Malware-Analysten Zeit und Nerven kosten.
- Wer die Mechanismen versteht und abfängt, kann trotzdem zum Kern der Schadsoftware vordringen.
Debugger-Erkennung
Zu den gängigsten Methoden, mit denen sich Malware gegen eine Analyse auf Codeebene schützt, zählt das Erkennen aktiver Debugger. Dabei prüft die Schadsoftware, ob sie in einer Debugging-Umgebung ausgeführt wird. Ist das der Fall, beendet sich die Malware selbst, um ihre Funktionen nicht preiszugeben. Alternativ führt sie gezielt irreführende Befehle aus, um Reverse Engineers auf falsche Fährten zu locken.
Eine der einfachsten Varianten, mit der Schadsoftware ihre Umgebung prüft, besteht im Aufruf der Microsoft-Funktion IsDebuggerPresent. Sie gibt einen Wert ungleich null zurück, sollte der aktuelle Prozess unter Debugging stehen. Daneben gibt es weitere häufig genutzte API-Aufrufe mit ähnlicher Zielsetzung wie CheckRemoteDebuggerPresent oder NtQueryInformationProcess beziehungsweise ZwQueryInformationProcess.