Malware- Analyse ist nicht immer ein einfaches Unterfangen. Den Autoren, die eine Schadsoftware schreiben, ist nämlich daran gelegen, es für die Gegenseite so schwer zu machen wie möglich. Dazu obfuskieren sie ihr Kompilat auf unterschiedliche Arten. Das wissen Analystinnen und Analysten natürlich, und haben ihrerseits Werkzeuge entwickelt, die eine Untersuchung einer Schadsoftware erleichtern sollen. Werkzeuge wie de4dot, welche obfuskierten Code wieder lesbar machen, sind essentiell für die Analyse dieser Dateien.
Doch manchmal ist es schwieriger als gedacht, und auch Hilfsprogramme scheitern zunächst. Das bedeutet jedoch nicht, dass alle Hoffnung verloren ist. Denn gerade de4dot lässt sich für viele Fälle anpassen, sodass einer Analyse nichts mehr im Weg steht.
Packing
Programme lassen sich auf verschiedene Arten obfuskieren. Das so genannte „Packing“ ist die schnellste und einfachste Methode dafür. Das eigentliche Programm wird in eine Art Hülle gepackt, die eine signaturbasierte Erkennung verhindern soll. Von außen sieht das gepackte Programm nun komplett anders aus. Eine statische Signatur, die nur auf eine bestimmte Datei „trainiert“ ist, erkennt die so umverpackte Datei nicht mehr. Diese Hülle zu wechseln und somit praktisch unendlich viele „neue“ Schadprogramme zu erstellen, ist eine leichte Übung für Menschen, die Schadsoftware schreiben. Der eigentliche Kern der Schadsoftware bleibt dabei unverändert.
Erkannt wird ein so getarntes Schadprogramm übrigens von Technologien wie etwa DeepRay. In der Malware-Analyse sind diese Packer zumindest bei .NET-Binaries leicht zu umgehen, denn die Arten, auf die ein Programm gelanden werden kann, sind begrenzt. Alles, was Analysten bei .NET-Dateien tun müssen, ist, bestimmte Stellen im System im Auge zu behalten und einfach zu warten, bis die entpackten Daten im Speicher landen.
Verschleierte Methodenaufrufe
Schwieriger wird es bei der Verschleierung von Methoden-Aufrufen. Jeder Funktionsaufruf erhält einen kryptischen Namen und wird zunächst umgeleitet. Kern dieser Obfuskierungsmethode ist eine Art „Telefonbuch“, welches eine die kryptischen Umleitungen in Klartext auflöst. Dieses „Telefonbuch“ ist jedoch verschlüsselt.
Problematisch (für die Analyse) ist diese Obfuskierungsmethode aus zwei Gründen: Erstens kommt man an die Übersetzungstabelle nicht ohne weiteres heran, weil diese verschlüsselt ist. Zeitgleich ist es aber auch unmöglich, die interne Logik des Programms zu analysieren.
Man stelle sich vor, jemand fragt nach dem Weg in die Bahnhofstraße. Statt jedoch direkt jemanden anzusprechen und zu fragen „Wie komme ich zur Bahnhofstraße?“ schreibt die Person die Zeichenfolge „Ci8LCQdBAwMQhOHrDZdw“ auf einen Zettel und wirft diese in einen Briefkasten, welcher die Nachricht automatisch entschlüsselt und an die Person weitergibt, die die Information tatsächlich hat. Von außen ist dadurch nicht feststellbar, ob jemand gerade nach dem Weg fragt, einen Fahrplan abruft oder eine Pizza bestellt.
String-Verschlüsselung
Schließlich gibt es noch die Möglichkeit, mit verschlüsselten Strings zu arbeiten. Normalerweise sind Strings das Erste, was im Rahmen einer Analyse betrachtet wird. Diese können bereits Aufschluss darüber geben, was ein Programm kann und wie es funktioniert. Um dem einen Riegel vorzuschieben und es ihren Gegnern nicht zu einfach zu machen, benutzen Malware-Autoren an dieser Stelle Verschlüsselungen für alle Strings. Diese werden erst dann entschlüsselt, wenn sie im Programm gerade gebraucht werden.
de4dot lässt sich für alle diese Fälle anpassen. Es gibt zahlreiche Forks dieses Werkzeugs für unterschiedliche Anforderungen - einerseits gut, denn es findet sich auf jeden Fall etwas Passendes. Andererseits führen die zahlreichen unterschiedlichen Forks zu einer Fragmentierung, die das Ganze eher unübersichtlich machen. Daher haben unsere Kollegen von G DATA Advance Analytics einen Fork veröffentlicht, der zahlreiche bestehende Versionen miteinander vereint und die Suche stark abkürzen kann.
Alle Details erfahren Sie im Artikel von G DATA Advanced Analytics (Artikel in englischer Sprache).