
Ursprünglich wurde die Architektur von Microsoft Office auf der Grundlage des Konzepts der zusammengesetzten Dokumente erstellt. Es handelt sich auch um
OLE-Dokumente , die von Microsoft zu Beginn von 32-Bit-Windows aktiv beworben wurden. In jenen Tagen schien die Idee, Daten verschiedener Formate „nahtlos“ in einem Dokument zu kombinieren, attraktiv und faszinierend, und bevor die ersten Probleme identifiziert wurden, gelang es ihr, sich zu vielen großen Produkten zu entwickeln.
Die „schlechte Nachricht“ war, dass die universelle Möglichkeit, Daten (und den Code für die Verarbeitung dieser Daten) zu Dokumenten hinzuzufügen, zu einer universellen Möglichkeit geworden ist, Schwachstellen in das Produkt einzuführen, was die Entwickler
von Malware- Sicherheitsforschern auch heute noch
angenehm überrascht.
Anschließend erhielt das Anwendungspaket eine Reihe umfangreicher Tools zum Hinzufügen von Bildern, Grafiken und Diagrammen sowie Steuerelementen, die von der Anwendung erstellt und verarbeitet werden und in Dokumenten enthalten sind. Aus Sicherheitsgründen sind diese Elemente von etwas geringerem Interesse als die Elemente, die (hauptsächlich) im Artikel behandelt werden - Elemente, die den Code externer Anwendungen verwenden, die mit OLE zu Dokumenten hinzugefügt werden.
Eine "Datenträger" -Darstellung eines zusammengesetzten Dokuments ist eine
CFBF-Datei . In diesem Artikel wird das Einbetten von Objekten in Microsoft Office-Dokumente (oder vielmehr nur der Sicherheitsaspekt) im Kontext von
Daten und Code erläutert, die zur Laufzeit
in den Speicher geladen werden.
Formal eingebettete Objekte in Microsoft Office-Dokumenten können in die folgenden Gruppen unterteilt werden:
- ActiveX-Steuerelemente (ActiveX-Steuerelemente)
- OLE Embedded Objects
- Eingebettete Dateien ( Pakete )
- Nicht-OLE- Inline-Elemente
ActiveX-Steuerelemente
ActiveX-Steuerelemente können als Elemente eines Programmfensters dargestellt werden, z. B. Schaltflächen, Optionsfelder, Listen, Eingabefelder und andere Formulare, mit denen bestimmte Ereignisse erzeugt oder auf Ereignisse reagiert werden können. Es schien einmal eine gute Idee zu sein, solche universellen Steuerelemente mit der Möglichkeit der Verwendung in jeder Anwendung zu erstellen und sie zu diesem Zweck in
COM-Komponenten zu integrieren .
Die in ActiveX integrierten Webseiten stellten eine bekannte Sicherheitsverletzung im Internet Explorer dar. Die Sicherheitsmaßnahmen nahmen im Laufe der Zeit zu. Browser anderer Hersteller gaben die ActiveX-Unterstützung fast sofort auf. Der neue Microsoft Edge-Browser hat sich endlich von diesem Relikt der Vergangenheit getrennt. Das Einbetten in Office-Dokumente ist jedoch weiterhin möglich.
ActiveX in Dokumenten ist für die Verwendung in Verbindung mit
Visual Basic für Applikationen vorgesehen . VBA muss sie jedoch nicht herunterladen und aktivieren, und zum Herunterladen von
Elementen aus der Whitelist ist keine Benutzerberechtigung erforderlich.
Sicherheitslücken in letzterem sind besonders gefährlich. Die Standardeinstellungen, die bei der Installation der Anwendung festgelegt werden, bedeuten weder einen Schutz gegen das Laden dieser Elemente noch eine Warnung an den Benutzer. Der Administrator muss die Einstellungen verschärfen, indem er das Laden von ActiveX-Steuerelementen verhindert (beachten Sie jedoch, dass ActiveX nicht im abgesicherten Browsermodus geladen wird).
Beispiel: CVE-2012-0158
Eine der gefährlichsten Sicherheitslücken in Office-Dokumenten im Jahr 2012 war CVE-2012-0158 . Der Ladecode für das Microsoft ListView Control 6.0-Element aus der MSCOMCTL.OCX-Bibliothek enthielt die Möglichkeit eines Pufferüberlaufs, der es ermöglichte, die Rücksprungadresse zu ersetzen und beliebigen Code auszuführen. Da sich das Element in der ActiveX-Whitelist befand, begann das Laden sofort mit dem Öffnen des Dokuments. Die Sicherheitsanfälligkeit ist derzeit behoben. Das ListView-Steuerelement gilt weiterhin als "sicher".
Hinzufügen von ActiveX zu einem Dokument
Um einem Microsoft Office-Dokument ein Steuerelement hinzuzufügen (nehmen Sie der Einfachheit halber Word), öffnen Sie über die Benutzeroberfläche die Registerkarte "Entwickler" (die Sichtbarkeit wird im Menü "Word-Optionen" konfiguriert) und wählen Sie Steuerelemente -> Extras aus früheren Versionen -> ActiveX-Steuerelemente. Das Menü zeigt eine Reihe von Symbolen, die Microsoft Forms-Elementen entsprechen, sowie die Möglichkeit, ActiveX aus einer Liste auszuwählen, die aus im System verfügbaren Elementen besteht, die nach einer Reihe von Kriterien ausgewählt wurden.

Die angezeigte Liste entspricht nicht den Elementen, die tatsächlich in das Dokument geladen werden können. Daher kann sie bei der Suche nach anfälligen Elementen nicht geführt werden. Die ausgefeilte mehrstufige Überprüfung von heruntergeladenem ActiveX besteht aus mehreren Phasen. Sie unterscheidet sich für Office-Versionen und variiert von Update zu Update. Die sicherste Möglichkeit, die Downloadfähigkeit zu überprüfen, besteht darin, die Dokumentdatei mit dem gewünschten Element manuell zu „komponieren“ und zu versuchen, sie in Office zu öffnen. Mögliche Dokumentformate werden unten beschrieben.
Programmpräsentation
Jedes ActiveX-Element ist im Wesentlichen ein Objekt einer der COM-Klassen, die bestimmte Anforderungen erfüllen. Ein Element wird über das COM-Subsystem geladen, und der ausführbare Code ist in einem der Module enthalten, die normalerweise für die Containeranwendung „extern“ sind. Wie jedes COM-Objekt kann ein ActiveX-Element als DLL oder als ausführbare EXE-Datei implementiert werden. Im ersten Fall wird die Bibliothek in den Adressraum des Containers geladen, im zweiten Fall wird das Element in einem separaten Prozess verarbeitet, wobei die Daten zwischen dem Container und dem Objekt durch COM-Marshalling übertragen werden.
Wie jedes COM-Objekt verfügt ActiveX über
Schnittstellen ,
Eigenschaften und
Methoden .
Schnittstellen sind in erster Linie eine Reihe von Standardschnittstellen, die die ActiveX-Klasse zum vollständigen Laden und zur Interaktion mit dem Container haben muss, insbesondere IOleControl und IOleObject.
Das Fehlen notwendiger Schnittstellen kann die Funktionalität des Elements verringern oder dessen Laden zu einem bestimmten Zeitpunkt unterbrechen.
Beispiel: CVE-2015-2424
Die Sicherheitsanfälligkeit CVE-2015-2424 wurde dem TaskSymbol-Klassenelement aus der Bibliothek mmcndmgr.dll zugeordnet. Das Element war nicht für die Verwendung in Dokumenten vorgesehen und exportierte die IDispatch-Schnittstelle nicht. Beim Laden eines Elements hat die Prozedur, die diese Schnittstelle angefordert hat, einen Fehler erhalten und die interne Struktur des Elements zerstört, was zu einer Sicherheitsanfälligkeit vom Typ "Use-After-Free" führte. Momentan darf das Element nicht heruntergeladen werden (trotzdem befindet es sich in der Liste, die dem Menü "Entwickler" hinzugefügt werden soll). Die Sicherheitsanfälligkeit selbst wurde nicht behoben.
Zusätzlich zu den Standardfunktionen exportiert jede ActiveX-Klasse die Hauptschnittstelle, die ihre eigene einzigartige Funktionalität darstellt. Für die Klasse Forms.CommandButton.1 ist dies beispielsweise ICommandButton.
Sie können ActiveX-Schnittstellen mit dem im Microsoft Visual Studio-Paket enthaltenen
OleView- Tool
anzeigen .

Die Schnittstelle eines Elements definiert seine
Methoden und
Eigenschaften . Eigenschaften stellen einige Daten dar, die das Erscheinungsbild und den Betrieb eines Elements bestimmen. Der Entwickler eines ActiveX-Elements weist jeder Eigenschaft einen bestimmten Namen zu, z. B. BackColor oder GridLineWidth, und einen Typ, z. B. eine Zeichenfolge, eine Ganzzahl oder eine echte doppelte Genauigkeit. Für Bitmap-Bilder und -Symbole gibt es eine Art von Eigenschaft, z. B. ein Bild. Das Client-Programm kann einzelne Eigenschaften des Steuerelements festlegen, indem es deren ganzzahlige Indizes und Werte festlegt.
Unter dem Gesichtspunkt einer Implementierung auf niedriger Ebene ist die Unterteilung in Methoden und Eigenschaften formal, da „Eigenschaften“ durch eine Reihe von get / set-Methoden dargestellt werden. Es gibt jedoch einen signifikanten Unterschied: Methoden eines Elements (seiner Hauptschnittstelle) können bei Office-Dokumenten nur programmgesteuert nur von einem laufenden VBA-Programm aufgerufen werden. Aus Sicherheitsgründen ist dies nicht von großem Interesse, da die VBA-Ausführung bereits einen Kompromiss des Betriebssystems darstellt.
Eigenschaften werden im Dokument gespeichert und beim Öffnen
verarbeitet und in Strukturen im Speicher
geladen, auch wenn die Ausführung von VBA verboten ist .
Aus Sicht der Software stellt der Container die
Schnittstellen IStream ,
IStorage und
IPropertyBag bereit , um die Eigenschaften und den Status des Elements im Dokument
beizubehalten . Ihre Implementierung und Darstellung von Daten in einer Datenträgerdatei ist nicht länger das Anliegen des ActiveX-Elements und hängt vollständig vom Container und dem Format des Dokuments ab. Es ist zu beachten, dass der Satz und das Format der gespeicherten Daten einem „öffentlich“ exportierten Satz von Eigenschaften entsprechen können oder völlig anders sein können. Betrachten Sie Implementierungsbeispiele für Microsoft Office.
Zusammengesetzte Datei (CFBF)
Das veraltete Office-Dokumentformat , in dem ObjectPool-Speicher auf niedrigerer Ebene und separate Unterverzeichnisse darin zum Speichern von ActiveX-Daten zugewiesen wurden. Der Stream "\ 001CompObj" enthält die Klassenkennung, die letztendlich die Klasse des geladenen Objekts bestimmt.
Wenn Sie den Bezeichner direkt in hex
ersetzen, wird versucht, ein Objekt einer völlig
anderen Klasse zu laden.

Office Open XML
Modernes XML-Dokumentformat. Die Datei ist ein Zip-Archiv. ActiveX-Steuerdaten werden im ActiveX-Unterverzeichnis in Dateien mit einfachen Namen wie activeX1.xml gespeichert.

Beispieldatei:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ax:ocx ax: classid="{D7053240-CE69-11CD-A777-00DD01143C57} " ax: persistence="persistPropertyBag" xmlns:ax="http://schemas.microsoft.com/office/2006/activeX" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<ax:ocxPr ax:name="Caption" ax:value="CommandButton1"/>
<ax:ocxPr ax:name="Size" ax:value="2540;847"/>
<ax:ocxPr ax:name="FontName" ax:value="Calibri"/>
<ax:ocxPr ax:name="FontHeight" ax:value="225"/>
<ax:ocxPr ax:name="FontCharSet" ax:value="204"/>
<ax:ocxPr ax:name="FontPitchAndFamily" ax:value="2"/>
<ax:ocxPr ax:name="ParagraphAlign" ax:value="3"/>
</ax:ocx>
In diesen Dateien werden Klassenkennungen in Textform angegeben. Das Ersetzen des Bezeichners führt auch zu dem Versuch, ein Element einer anderen Klasse zu laden.
Als nächstes enthält die Datei einen Hinweis auf die Art der Datenspeicherung des Objekts: persistPropertyBag, persistStorage oder persistStream. Wenn ein Element die Eigenschaften von
persistPropertyBag unterstützt, können seine Daten
in derselben Textdatei gespeichert werden (siehe Beispiel oben). Wenn er
Speicher oder einen
Binärdatenstrom benötigt , werden die Daten in einer Datei mit einem Namen vom Typ activeX1.bin gespeichert, bei der es sich um
eine CFBF-Datei handelt .

RTF
In einem RTF-Dokument wird das ActiveX-Element durch die
Tags \ object \ objocx definiert. Das
Tag \ objdata enthält den Eigenschaftsspeicher des Elements als hexadezimale Darstellung der CFBF-Datei.
{\object\objocx\f37\objsetsize\objw1440\objh480{\*\objclass Forms.CommandButton.1}
{\*\objdata 010500000200000016000000
466f726d732e436f6d6d616e64427574746f6e2e31000000000000000000000e0000
d0cf11e 0a1b11ae1000000000000000000000000000000003e000300feff090006
Aus Datei herunterladen
Das Laden von ActiveX aus einem Dokument als Ganzes ist recht einfach. Die Containeranwendung erstellt ein sauberes Objekt der angegebenen Klasse, fordert die angegebene Speicherschnittstelle an und stellt einen Zeiger auf den Speicher, den Stream oder das "Eigenschaftspaket" bereit.
Das Filtern von Elementen, die geladen werden können, umfasst viele Schritte. Zunächst werden Klassen entfernt, die in der als
Office COM Kill Bit (Registrierungshinweis * OFFICE_KEY * \ Common \ COM-Kompatibilität) bekannten Blacklist angegeben sind. Anti-Download-Flags haben beispielsweise Klassen wie Microsoft Scriptlet Component und Microsoft Web Browser.
Die verbleibenden Klassen durchlaufen das anfängliche Laden. Dies bedeutet, dass
die DLL in die Containeranwendung
geladen wird oder
der in der EXE-Datei implementierte
Prozess des COM-Servers gestartet wird . Erst danach werden die restlichen Überprüfungen durchgeführt, einschließlich der elementaren - und ob das Objekt tatsächlich ein ActiveX-Vertreter ist.
Beispiel: CVE-2015-6128
Im Jahr 2015 entdeckte der Forscher, dass das Vorladen von COM-Modulen verwendet werden kann, um ASLR zu umgehen und beliebigen Code auszuführen, indem gefälschte dynamische Bibliotheken geladen werden. Der später veröffentlichte CVE-2015-6128 ist kein Wort über Microsoft Office.
Wenn der Bezeichner ActiveX wirklich definiert, werden mehrere Überprüfungen in mehreren Schwarzweißlisten durchgeführt.
Liste der ActiveX-Starts von .docx unter sauberem Windows 7 und Office 2016 mit Standardeinstellungen.{00024522-0000-0000-C000-000000000046} RefEdit.Ctrl
{02AF6DD2-77E6-44DF-B3E1-57CF1476D8EA} Microsoft Forms 2.0 OptionButton
{04082FC6-E032-49F2-A263-FE64E9DA1FA3} Microsoft Forms 2.0 HTML TEXT
{0B314611-2C19-4AB4-8513-A6EEA569D3C4} Microsoft Slider Control, version 6.0
{13D557B6-A469-4362-BEAF-52BFD0F180E2} Microsoft Forms 2.0 HTML TextAREA
{19FED08E-EFD1-45da-B524-7BE4774A6AEE} Microsoft Forms 2.0 ListBox
{20DD1B9E-87C4-11D1-8BE3-0000F8754DA1} Microsoft Date and Time Picker Control 6.0 (SP4)
{227B1F3B-C276-4DE0-9FAA-C0AD42ADDCF0} Microsoft Forms 2.0 HTML RESET
{232E456A-87C3-11D1-8BE3-0000F8754DA1} Microsoft MonthView Control 6.0 (SP4)
{3D0FD779-0C2D-4708-A9BA-62F7458A5A53} Microsoft Forms 2.0 ToggleButton
{444D2D27-02E8-486B-9018-3644958EF8A9} FieldListCtrl.2 Object
{4C599241-6926-101B-9992-00000B65C6F9} Microsoft Forms 2.0 Image
{5052A832-2C0F-46c7-B67C-1F1FEC37B280} Microsoft Forms 2.0 Label
{5512D110-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML SUBMIT
{5512D112-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML IMAGE
{5512D114-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML RESET
{5512D116-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML CHECKBOX
{5512D118-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML OPTION
{5512D11A-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML TEXT
{5512D11C-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML Hidden
{5512D11E-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML Password
{5512D122-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML SELECT
{5512D124-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML TextAREA
{556C2772-F1AD-4DE1-8456-BD6E8F66113B} Microsoft ImageList Control 6.0 (SP6)
{585AA280-ED8B-46B2-93AE-132ECFA1DAFC} Microsoft StatusBar Control 6.0 (SP6)
{5CBA34AE-E344-40CF-B61D-FBA4D0D1FF54} Microsoft Forms 2.0 HTML CHECKBOX
{5E90CC8B-E402-4350-82D7-996E92010608} Microsoft Forms 2.0 HTML OPTION
{603C7E80-87C2-11D1-8BE3-0000F8754DA1} Microsoft UpDown Control 6.0 (SP4)
{6240EF28-7EAB-4dc7-A5E3-7CFB35EFB34D} Microsoft Forms 2.0 ScrollBar
{65BCBEE4-7728-41A0-97BE-14E1CAE36AAE} Microsoft Office List 16.0
{6C177EBD-C42D-4728-A04B-4131892EDBF6} Microsoft Forms 2.0 ComboBox
{787A2D6B-EF66-488D-A303-513C9C75C344} Microsoft Forms 2.0 HTML Password
{79176FB0-B7F2-11CE-97EF-00AA006D2776} Microsoft Forms 2.0 SpinButton
{86F56B7F-A81B-478d-B231-50FD37CBE761} Microsoft Forms 2.0 CommandButton
{87DACC48-F1C5-4AF3-84BA-A2A72C2AB959} Microsoft ImageComboBox Control, version 6.0
{8B2ADD10-33B7-4506-9569-0A1E1DBBEBAE} Microsoft Toolbar Control 6.0 (SP6)
{8BD21D10-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 TextBox
{8BD21D20-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ListBox
{8BD21D30-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ComboBox
{8BD21D40-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 CheckBox
{8BD21D50-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 OptionButton
{8BD21D60-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ToggleButton
{9432194C-DF54-4824-8E24-B013BF2B90E3} Microsoft Forms 2.0 HTML SUBMIT
{95F0B3BE-E8AC-4995-9DCA-419849E06410} Microsoft TreeView Control 6.0 (SP6)
{978C9E23-D4B0-11CE-BF2D-00AA003F40D0} Microsoft Forms 2.0 Label
{9A948063-66C3-4F63-AB46-582EDAA35047} Microsoft TabStrip Control 6.0 (SP6)
{9BDAC276-BE24-4F04-BB22-11469B28A496} Microsoft Forms 2.0 HTML IMAGE
{A0E7BF67-8D30-4620-8825-7111714C7CAB} Microsoft ProgressBar Control, version 6.0
{CCDB0DF2-FD1A-4856-80BC-32929D8359B7} Microsoft ListView Control 6.0 (SP6)
{D7053240-CE69-11CD-A777-00DD01143C57} Microsoft Forms 2.0 CommandButton
{DCA0ED3C-B95D-490f-9C60-0FF3726C789A} Microsoft Forms 2.0 Image
{DD4CB8C5-F540-47ff-84D7-67390D2743CA} Microsoft Forms 2.0 TextBox
{DFD181E0-5E2F-11CE-A449-00AA004A803D} Microsoft Forms 2.0 ScrollBar
{E9729012-8271-4e1f-BC56-CF85F914915A} Microsoft Forms 2.0 CheckBox
{EA778DB4-CE69-4da5-BC1D-34E2168D5EED} Microsoft Forms 2.0 SpinButton
{EAE50EB0-4A62-11CE-BED6-00AA00611080} Microsoft Forms 2.0 TabStrip
{F14E8B03-D080-4D3A-AEBA-355E77B20F3D} Microsoft Forms 2.0 HTML SELECT
{F8CF7A98-2C45-4c8d-9151-2D716989DDAB} Microsoft Visio Document
{FB453AD8-2EF4-44D3-98A8-8C6474E63CE4} Microsoft Forms 2.0 HTML Hidden
{FDEA20DB-AC7A-42f8-90EE-82208B9B4FC0} Microsoft Forms 2.0 TabStrip
{FE38753A-44A3-11D1-B5B7-0000C09000C4} Microsoft Flat Scrollbar Control 6.0 (SP4)
Sie können sehen, dass die Komponenten der
Microsoft Forms- Gruppe einen wichtigen Platz in der Liste
einnehmen . Dies ist eine Reihe von Steuerelementen, die mit Office geliefert werden. Sie können sie im ActiveX-Steuerungsfeld anzeigen. Anfangs wurden sie alle als „sicher“ registriert, aber im Laufe der Zeit wurde klar, dass dies nicht für einzelne Elemente gilt. Das Frame-Element lädt beispielsweise jedes andere ActiveX, ohne Listen zu überprüfen (in den neuesten Versionen ist dies "behoben", aber die eigene Blacklist von Frame unterscheidet sich vom allgemeinen Office). Aus diesem Grund dürfen einige Microsoft Forms-Elemente nur mit Erlaubnis des Benutzers in ein Dokument geladen werden. Microsoft Forms Frame erfordert ebenfalls die Zustimmung des Benutzers (bei den Standardeinstellungen), ermöglicht jedoch das Herunterladen einiger Elemente aus der Kill Bit-Liste, die unter anderen Bedingungen nicht geladen werden konnten.
Wenn es einem Angreifer gelingt, den Benutzer davon zu überzeugen, das Laden von ActiveX zuzulassen, hilft ihm Frame, das Arsenal aufgrund von Elementen wie beispielsweise dem Webbrowser erheblich zu erweitern.
Das Microsoft Forms-Eigenschaftsspeicherformat wird teilweise durch
die Spezifikation [MS-OFORMS] dokumentiert.
Während des ActiveX-Scans stellte sich heraus, dass die Klassen für doc, docx und rtf unterschiedlich sind sowie verschiedene Listen verfügbarer ActiveX für eine Anwendung, die auf die übliche Weise und
im Automatisierungsmodus ausgeführt wird .
Viele beliebte Anwendungen ergänzen diese Listen mit ihrem eigenen ActiveX. Wenn eine Sicherheitsanfälligkeit entdeckt wird, wird sie im Bulletin als mit der Anwendung verbunden dargestellt, zu der sie gehört. Die einzige Möglichkeit, die Sicherheitsanfälligkeit auszunutzen, sind möglicherweise Office-Dokumente.
Beispiel: Flash ActiveX
Flash ActiveX wurde besonders von Virenschreibern wegen ihrer durchweg erkennbaren Schwachstellen und eines dauerhaften Platzes in den weißen Listen von IE und Office geschätzt. Die ersten bekannten Sicherheitslücken in dieser Komponente traten bereits 2008 auf. Eine der letzten CVE-2018-4878 wurde im Februar dieses Jahres geschlossen. Mit der schwindenden Popularität des IE sind Office-Dokumente zur Hauptmethode für die Verbreitung von Exploits für Flash geworden.
Eingebettete OLE-Datenelemente
Die implementierten OLE-Elemente dienen zur Implementierung des Konzepts „Dokument in Dokument“ mit der Möglichkeit, In-Place-Daten verschiedener Formate zu bearbeiten, die von anderen Anwendungen verarbeitet werden. OLE-Dokumente werden wie ActiveX auf Basis von COM implementiert.
Sie können einem Word-Dokument wie folgt ein OLE-Element hinzufügen: Öffnen Sie die Registerkarte "Einfügen" und wählen Sie "Text -> Objekt". Das Programm zeigt eine Liste der Dokumenttypen an, für die OLE-Handler registriert sind. Wie bei ActiveX stimmt diese Liste nicht mit den Klassen überein, die wirklich als OLE-Dokumente geladen werden können.

Programmpräsentation
Wie bei ActiveX wird die Implementierung eines OLE-Dokuments durch die entsprechende COM-Klasse dargestellt, die in Form einer DLL oder EXE erstellt wird. Die Komponente exportiert die erforderlichen Dienstschnittstellen, und der Status wird über die IPersist * -Schnittstellen im Containerdokument gespeichert.
In einem CFBF-Dokument werden OLE-Objektdaten im ObjectPool-Speicher der zweiten Ebene gespeichert. Eine Reihe von Threads ähnelt im Allgemeinen den entsprechenden ActiveX-Steuerelementen.

In Open Office-XML-Dokumenten werden OLE-Objektdaten im Unterverzeichnis für Einbettungen in einer CFBF-Speicherdatei mit dem Typnamen oleObject1.bin gespeichert.

In RTF-Dokumenten werden Objektinformationen unter dem Tag
\ object \ objemb \ gespeichert. Der Abschnitt enthält auch Speicher, der als Hex-Darstellung der CFBF-Datei codiert ist.
{\object\objemb\objw8307\objh553{\*\objclass WordPad.Document.1}
{\*\objdata 010500000200000013000000576f72645061642e446f63756d656e742e31000000000000000000000a0000
d0cf11e 0a1b11ae100000000
Das RTF-Format zeichnet sich dadurch aus, dass es das Tag
\ objupdate unterstützt, das eine automatische Aktivierung des Elements bewirkt, während OLE-Elemente beim Laden standardmäßig inaktiv sind.
Beispiel: CVE-2017-11882
Die Sicherheitsanfälligkeit CVE-2017-11882 OLE der Equation Editor-Komponente aufgrund der Verarbeitung des Objekts in einem separaten Prozess ermöglichte einen stabilen und universellen Betrieb. Das Tag \ objupdate hat dazu geführt, dass Word die anfällige Komponente sofort nach dem Öffnen des Dokuments geladen hat.
Beispiel: Eingebettete Excel-Elemente mit Makrovirus
Forscher haben bösartige RTF-Dokumente entdeckt, die keine neuen Sicherheitslücken verwenden. Dokumente enthalten mehrere Excel-Dokumente mit Makros als eingebettete Objekte. Die Berechnung basiert auf der Tatsache, dass der Benutzer, der sich nach mehrmaligem Öffnen des Dokuments weigert, das Makro auszuführen, "kapituliert" und die Ausführung zulässt. Im Moment funktioniert die Technik noch.

Ein wesentlicher Unterschied zu ActiveX bei eingebetteten OLE-Elementen besteht darin, dass die Klassenkennung von der WriteClassStg-Funktion direkt in die Speicherdatei geschrieben wird. Diese Technik stammt aus einer sehr langen Zeit, als Microsoft das Konzept der "Serialisierung" und Speicherung von Objekten mit ihrem Status im CFBF-Format enthusiastisch entwickelte. Das Containerdokument speichert auch die Klassenkennung des implementierten Elements, aber das im Repository angegebene Objekt der Klasse wird geladen. Diese Kennung kann ersetzt werden, indem die Anwendung gezwungen wird, ein Objekt zu laden, das für diese Zwecke überhaupt nicht vorgesehen ist.
Es ist möglich, die Elementdaten zu bearbeiten, was in bestimmten Fällen zur Identifizierung von Schwachstellen führt.
OLE-Objekte werden außerdem zahlreichen Überprüfungen auf Downloadfähigkeit unterzogen, wodurch es schwierig wird, eine vollständige Liste potenziell geladener Elemente zu erhalten. Die Menge der Elemente, die als OLE-Objekte geladen werden können, unterscheidet sich von der Liste der geladenen ActiveX-Elemente. Insbesondere werden sie in einer KillBit-Liste überprüft, die nicht Office gehört, sondern Internet Explorer (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ ActiveX-Kompatibilität).
OLE per Link
OLE unterscheidet zwei Mechanismen zum Einbetten von Inhalten in ein Dokument: direktes Einbetten eines OLE-Dokuments und Erstellen eines Links innerhalb eines anderen Dokuments zu einem anderen Dokument. Wenn Sie das OLE-Objekt als Referenz einbetten, enthält das Hauptdokument eine Angabe des Pfads zur Datei des eingebetteten Dokuments. Der Pfad kann lokal oder im Netzwerk oder eine Internetadresse sein. Der OLE-Handler wird durch die Dateierweiterung bestimmt, der entsprechende Handler muss im Betriebssystem registriert sein.
Beispiel: CVE-2017-0199
Die Sicherheitsanfälligkeit von CVE-2017-0199 bestand in der Möglichkeit, dem Dokument ein hta-Format „Objekt durch Referenz“ hinzuzufügen. Letzteres ist HTML mit der Fähigkeit, Code auszuführen, das heißt, es ist tatsächlich eine ausführbare Datei. Der Handler hat hta automatisch heruntergeladen und ausgeführt, sodass Sie beim Öffnen eines Dokuments beliebigen Code ausführen können.
Vor dem Aktualisieren des eingebetteten Objekts fordert die Anwendung die Benutzerberechtigung an. In diesem Fall wird die Datei im Voraus heruntergeladen, wodurch Informationen über den Benutzer offengelegt werden können.
Eingebettete Dateien (Pakete)
Office-Dokumente unterstützen die Möglichkeit, beliebige Dateien hinzuzufügen (Objekt -> Aus Datei erstellen oder einfach das Dateisymbol in das Bearbeitungsfeld ziehen und dort ablegen). Technisch wird dies implementiert, indem dem Dokument ein integriertes
Object Packager- Element hinzugefügt wird, das die gewünschte Datei in seine eigenen Daten schreibt. Mit Object Packager können Sie das Symbol und die Signatur der Datei ersetzen und die zu öffnende Befehlszeile angeben. Es kann
Dateien "als Referenz" enthalten, wenn die Datei nicht aus ihrem eigenen Speicher geöffnet wird, sondern entlang des angegebenen Pfads,
einschließlich des Netzwerkpfads .
In letzter Zeit wurde die Funktionalität von Object Packager erheblich eingeschränkt, und anfangs konnte das Element alle Dateien speichern, einschließlich ausführbarer Dateien, Links und sogar der Befehlszeile. Alles, was der Benutzer tun musste, um den Inhalt zu starten, war ein Doppelklick auf das Symbol im Text des Dokuments.
Beispiel: Dateien im Hauptteil einer Outlook-Nachricht
Mit Outlook-Nachrichten, die auch zusammengesetzte Dokumente sind, können Sie dem Nachrichtentext Object Packager-Elemente hinzufügen . Für den Benutzer sieht das Element wie ein Bild aus, das von einem Angreifer willkürlich ausgewählt wurde. Ein Doppelklick auf das Bild öffnet die gepackte Datei. Ein Angreifer muss einen Datentyp aus denjenigen auswählen, für die noch keine strengeren Sicherheitsrichtlinien gelten .

Inline-Elemente, die nicht mit OLE implementiert wurden
Derzeit besteht die größte Bedrohung / das größte Interesse von Nicht-OLE-Elementen möglicherweise aus
Bildern, die dem Dokument durch Bezugnahme hinzugefügt werden . Wenn ein Dokument in einem nicht geschützten Modus geöffnet wird, werden Bilder automatisch heruntergeladen. Dies kann zur Offenlegung des Standorts und der Identität des Benutzers führen, der das Dokument durch anonymisierende Proxies heruntergeladen oder ein vertrauliches Dokument von Dritten erhalten hat. Diese Technik wurde insbesondere im
Scribbles-Tool implementiert, das dem US-Geheimdienst zur Verfügung steht.
In einem lokalen Windows-Netzwerk können Sie durch das automatische Herunterladen von Bildern als Referenz die
NTLMRelay-Sicherheitsanfälligkeit ausnutzen. Der Mechanismus zum Verknüpfen von Images ist nicht mit den Sicherheitsanforderungen von ActiveDirectory-Netzwerken kompatibel, da ein Administrator, der ein solches Dokument empfängt, im Wesentlichen einen Angreifercode mit vollständigen Administratorrechten ausführt.
Sicherheitsmethoden
Was kann getan werden? Alles in allem ein bisschen.
Die effektivste Methode zum Schutz vor Sicherheitslücken in in Office-Dokumente eingebetteten Objekten ist
der geschützte Anzeigemodus . In diesem Modus werden sowohl das Laden von Objekten als auch das Laden von Daten aus externen Quellen ausgeschlossen. Leider erfordert der Übergang zu einem Modus mit vollem Funktionsumfang elementare Benutzeraktionen, die durch Social-Engineering-Methoden leicht provoziert werden können.

ActiveX-Steuerelemente können
in den Trust Center-Einstellungen deaktiviert werden
Beachten Sie, dass dies für OLE-Inline-Elemente nicht funktioniert.