Heuristik durch Zwischenaktivitäten umgehen Marc Ruef | 02.12.2013 Meine ersten Gehversuche (http://www.computec.ch/news.php?item.349) im Bereich der Computersicherheit habe ich mit dem Entwickeln von Viren gemacht. Ich war fasziniert vom Wettlauf zwischen Malware und Antiviren-Lösungen. Dies zu beobachten und vergangene sowie aktuelle Geschehnisse nachzuprogrammieren, sollte mir ein weitreichendes Verständnis zum Thema bescheren. Auch heute noch (http://www.computec.ch/news.php?item.262) verdiene ich Geld damit, indem ich Malware programmiere. Im Rahmen von sogenannten Backdoor Inside/Out Tests (http://www.scip.ch/?dienstleistungen.backdoortest) erstellen wir massgeschneiderte Hintertüren, die im Rahmen von Sicherheitsüberprüfungen eingesetzt werden. Dass dies mit ungeahnten Aufwänden verbunden ist, habe ich schon an verschiedenen Stellen angemerkt (http://www.computec.ch/news.php?item.239). Eine spezielle Herausforderung ist dann gegeben, wenn mit einer Malware offensichtlich bösartige Aktivitäten durchgeführt werden sollen, die durch die heuristischen Mechanismen einer Antiviren-Lösung als solche entdeckt werden. Ein typisches Beispiel ist das temporäre Anlegen von Dateien, die kurzfristig erstellt und dann wieder gelöscht werden müssen. Um einer Entdeckung mit "blossem Auge" weitestgehend zu entgehen, wird sofort nach dem Erstellen das Hidden-Attribut gesetzt. Um nun auch der heuristischen Entdeckung zu entgehen, muss der zuvor geschilderte Kernprozess um weitere Aktivitäten erweitert werden. Dies hat Einfluss auf Ablauf und Timing der einzelnen Aktivitäten. Dies kann geschehen, indem nach dem Anlegen der Datei zuerst der Benutzername aus user32.dll ausgelesen und erst dann das Hidden-Attribut gesetzt wird. Dieser Zwischenschritt "verwirrt" die Heuristik, da der typische Ablauf unterbrochen und damit eine Entkoppelung zwischen den Kernaktivitäten etabliert wird. Oftmals reichen solche scheinbar unsinnigen Zugriffe, um einer Entdeckung zu entgehen. Falls dies nicht reichen sollte, kann zwischendurch ein Lesezugriff auf die lokale MAC-Tabelle erfolgen, wobei auch hier mit dem Resultat nicht viel angefangen wird. Das Problem heuristischer Methoden ist, dass diese als Verknüpfung von Aktivitäten, die in ihrer Summe als verdächtig deklariert werden, wahrgenommen werden. Wird diese Aktivitätskette unterbrochen, kann die Deklarierung nicht vervollständigt werden. Aus Performance-Gründen und zur Vermeidung von False-Positives wird dann von einer Identifikation abgesehen. Der grosse Nachteil dieses Ansatzes einer Evasion ist, dass der Programmcode und die Ausführung aufgebläht wird, da diverse Aktivitäten eingestreut werden müssen, die für die eigentliche Aufgabe der Komponente nicht erforderlich sind. Damit wird aber dem Bedürfnis des übergeordneten Ziels, nämlich der unentdeckten und uneingeschränkten Ausführung, Folge geleistet.