Skip to content

Ein bisschen Geschichte: Shims unter Windows (1)

Das kommt jetzt etwas spät, weil die Shims unter Windows 10 nicht mehr unterstützt werden, aber ich brauche das Material als Linkziel. Und ich finde das Thema auch generell interessant.

Shims erlauben es, die API-Aufrufe eines Programms zu manipulieren. Microsoft hat das zum Beispiel genutzt, um als sog. "FixIt-Patches" bzw. "FixIt-Tools" Workarounds für bereits ausgenutzte Schwachstellen bereit zu stellen. Ein Angreifer kann die Shims aber auch nutzen, um seinem Schadcode neue Fähigkeiten zu verschaffen.

Shims allgemein und unter Windows

Allgemein ist ein Shim Code, der API-Aufrufe transparent abfängt und zum Beispiel die übergebenen Parameter ändert, den Aufruf selbst ausführt, ihn unterdrückt oder an ein anderes Ziel weiterleitet. Im Rahmen des Windows Application Compatibility Toolkit (ACT) aus dem Windows Assessment and Deployment Kit (ADK) kommen Shims zum Einsatz, um mit einer neuen Windows-Version inkompatiblen Programmen die benötigten API-Aufrufe zu ermöglichen oder sonstige Inkompatibilitäten zu umschiffen.

Das hat sich in Windows Vista und 7 bewährt, zum Beispiel bei Programmen, die wie unter Windows XP oft üblich davon ausgingen, dass sie mit Administrator-Rechten laufen. Programmen, die mit den reduzierten Benutzerrechten von Windows Vista und 7 gar nicht erst starten wollten, obwohl sie damit eigentlich problemlos laufen würden, konnte über ein Shim vorgegaukelt werden, sie hätten Administrator-Rechte.

Ruft ein Programm eine API-Funktion mit früher erlaubten, inzwischen aber nicht mehr unterstützten Parametern auf, können die vom Shim in die benötigten Parameter umgewandelt werden. Ruft ein Programm eine nicht mehr unterstützte API-Funktion auf, kann der Aufruf vom Shim in den Aufruf der entsprechenden aktuellen Funktion umgewandelt werden. Wenn es keinen Ersatz gibt, kann das Shim die Funktion entweder selbst implementieren oder mit einer vom Programm verwertbaren Fehlermeldung reagieren.

Manche Programme bestehen auch auf einer bestimmten Windows-Version, obwohl sie auch auf einer neueren Version laufen könnten. Oft passiert das, weil die Abfrage der Version falsch implementiert wurde und nun nur genau die bei der Entwicklung des Programms aktuelle Version akzeptiert wird statt jeder, die größer oder gleich dieser Version ist. Auch in diesem Fall kann ein Shim helfen, dass dem Programm die gewünschte Windows-Version zurück liefert.

Falls Sie jetzt denken "Moment mal, Windows 10 heißt doch angeblich nur deshalb Windows 10, weil viele Programme mit der Versionsnummer 9 nicht klar gekommen wären, weil sie das als Windows 95 erkannt hätten und gar nicht erst gestartet wären. Hätte man da nicht auch Shims für einsetzen können?" Klar, hätte man. Aber was ist einfacher: Für Tausende Anwendungen Shims bereitstellen oder für ein Windows eine Versionsnummer zu überspringen? Sehen Sie, der Sprung von Version 8 zu Version 10 ist die viel einfachere Lösung.

Ein weitere Anwendungsfall für Shims sind Änderungen an Speicherorten. Zum Beispiel wurden in Windows Vista die Konfigurationsdaten für den Bildschirmschoner von der system.ini in die Registry verschoben. Programme, die ihre Informationen in die system.ini schrieben, hatten danach ein Problem: Da Windows diese Daten nun aus der Registry holte, funktionierte die Konfiguration des Bildschirmschoners nicht mehr, oder jedenfalls nicht mehr so, wie vom Benutzer erwartet. Ein Shim sorgte dafür, dass das Programm die Daten weiterhin in die system.ini schreiben konnte, sie aber zusätzlich in der Registry landeten, so dass Windows sie weiterhin fand.

Shims zur Abwehr laufender Angriffe

Über viele Jahre hat Microsoft auf die sog. "FixIt-Patches" gesetzt, um Workarounds zum Schließen aktuell für Angriffe ausgenutzter Schwachstellen bereit zu stellen. Auch dabei wird auf Shims zurückgegriffen. Zum Beispiel, um Aufrufe der von der Schwachstelle betroffenen Funktion oder API entweder komplett zu unterdrücken oder betroffene Parameter auszufiltern. Dann stürzt das betroffene Programm zwar mit mehr oder weniger großer Wahrscheinlichkeit ab oder die Nutzung bestimmter Funktionen ist nicht mehr möglich, ein Angreifer kann aber auch keinen Code mehr einschleusen. Und im Zweifelsfall ist das immer vorzuziehen, egal wie unschön die "Nebenwirkungen" des Workarounds auch sind. Und manchmal ist es sogar möglich, die Schwachstelle im Speicher des laufenden Prozesses zu beheben, so dass der Workaround für den Benutzer gar keine Folgen hat. Außer der, dass sein Rechner über diese Schwachstelle nicht mehr angreifbar ist, aber dagegen wird wohl (abgesehen vom Angreifer natürlich) niemand etwas haben.

In der nächsten Folge stelle ich Ihnen die Shim-Infrastruktur vor.

Carsten Eilers

>
        </div>
                
        <footer class= Kategorien: Grundlagen

Trackbacks

Dipl.-Inform. Carsten Eilers am : Shims unter Windows (2) - Die Shim-Infrastruktur und ihre Sicherheit

Vorschau anzeigen
Was Shims sind haben sie im ersten Teil erfahren. In dieser Folge gibt es einen Überblick über die Shim-Infrastruktur und ihre Sicherheit. Die Shim-Infrastruktur im Überblick Die Shim-Infrastruktur (offiziell: &quot;Microsoft Wind

Dipl.-Inform. Carsten Eilers am : Shims unter Windows (4) - Die Ergebnisse der Sicherheitsforscher, Teil 1

Vorschau anzeigen
Sie wissen bereits was Shims sind und wie die Shim-Infrastruktur aufgebaut ist (und wie es theoretisch mit ihrer Sicherheit aussieht). Danach haben Sie erfahren, dass Entwickler die Shims außer in einigen Ausnahmefällen gar nicht ben

Dipl.-Inform. Carsten Eilers am : Shims unter Windows (5) - Die Ergebnisse der Sicherheitsforscher, Teil 2

Vorschau anzeigen
Sie wissen bereits was Shims sind und wie die Shim-Infrastruktur aufgebaut ist (und wie es theoretisch mit ihrer Sicherheit aussieht). Danach haben Sie erfahren, dass Entwickler die Shims außer in einigen Ausnahmefällen gar nicht ben