[Blockierte Grafik: https://abload.de/img/info8dl7v.png]Kurze Einführung
Autoit ist eine leicht zu erlernende Programmiersprache - sie ist von der Syntax her Powershell sehr ähnlich, aber meiner Meinung nach um einiges leichter zu verstehen. Gerade im administrativen Bereich bietet sie einen recht großen Funktionsumfang, um durch eigene Befehle oder frei zugängliche userdefinierte Includes Sachen sehr einfach umzusetzen, die in anderen Sprachen eine größere Praxis erfordern und nur schwer zu erstellen sind. Auch einige Tools im Antimalwarebereich setzen diese Sprache ein. Durch Zufall bin ich auf ein Poblem gestoßen, über das ich hier Anwender und Programmierer solcher Tools informieren möchte.
Das Problem
Wie es aussieht, funktionieren einige interne Befehle zum Auflisten von Registryeinträgen in der Programmiersprache Autoit zur Zeit nicht wirklich sicher. Betroffen sind - getestet unter Autoit 3.3.14.2 - folgende interne Registrybefehle der Sprache:
Verwendet ein Antimalwaretool diese Funktionen, kann Malware Starteinträge sehr einfach für das Tool an den Stellen der Registry unsichtbar machen, an denen sie zum Lesen der Starteinträge verwendet werden. Es reicht hier aus, einen speziell angepassten Registrywert oder Registryschlüssel zu erstellen, um Malwareeinträge für das Tool verschwinden zu lassen.
Dabei ist es für Malwareschreiber extrem einfach und schnell festzustellen, ob diese Funktionen im Tool verwendet werden und wo genau sie zum Einsatz kommen.
Sehr erschreckend (mein Eindruck): Um zu erkennen, dass diese Lücke besteht und wie sie ausnutzbar ist, reicht es eigentlich aus, lesen zu können und in der API Programmierung recht gut bewandert zu sein (eigentlich Grundvoraussetzung für so ziemlich jeden Malwareschreiber).
Vorsicht! Auch Windowskomponenten reagieren auf diese Modifikationen.
Bei meinen Tests musste ich feststellen, dass auch der in Windows enthaltene Registryeditor bis Windows8.1 auf diese Modifikationen reagiert und diese speziellen Einträge nicht listet. Erst ab Windows10 funktioniert der Registryeditor da korrekt.
Auch Powershell kann scheinbar diese Einträge nicht immer korrekt listen, gibt aber nach meinen Tests unter STDError einen Fehler zurück. Tools oder Scripte, die interne Powershell Funktionen zum Listen der Registry benutzen, sind hier also eventuell ebenfalls betroffen.
Was bedeutet das für Programmierer von Antimalwaretools, die Autoit als Sprache verwenden?
Die Verwendung der Funktionen RegEnumKey und RegEnumVal sollte unbedingt vermieden werden. Es gibt Includes für Autoit, die die Registry-API in sichererer Art bereizstellen (zum Beispiel die Include WinAPIReg.au3).
Verwendet Ihr Tool die Autoit Funktion RegEnumKey oder die Funktion RegEnumVal in seinem Code, sollten diese umgehend durch sicheren Code ersetzt werden.
Was bedeutet das für Anwender?
Ist das Tool, dass Sie zur Malwareanalyse oder Malwarebeseitigung verwenden in Autoit geschrieben, sollte das erhaltene Ergebnis möglichst mit anderen Tools, die in anderen Sprachen geschrieben wurden, überprüft werden. Zu erkennen, ob ein Tool die problematischen Funktionen verwendet, ist für einen Anwender schwer nachzuvollziehen (aber nicht unbedingt unmöglich). Weiter darauf eingehen darf ich hier nicht.
Kann ich als Anwender denn erkennen, ob ein Tool in Autoit programmiert wurde?
Zu erkennen, ob ein Tool in Autoit programmiert wurde, ist auch für einen Anwender Recht leicht.
Als Hilfsmittel kann dazu das Freewaretool Resource Hacker verwendet werden.
Öffnet man eine in Autoit programmierte EXE mit dem Tool, ist links unter der Resourcenart RCData der Eintrag Script zu finden. Klickt man den Eintrag an, findet man ganz rechts im Text den Eintrag AU3, der auf Autoit 3 hindeutet.