ActiveX

Stefan Ulrich

28. Mai 1998


Zusammenfassung

ActiveX ist eine Technologie von Microsoft, die auf dem Component Object Model (COM) basiert. Programme, welche dieses COM-Modell unterstützen, können leicht in andere Anwendungen integriert werden.

ActiveX beinhaltet mehrere Komponenten, von denen die ActiveX-Steuerelemente die Möglichkeit bieten, Programme, ähnlich wie Java-Appletts, in Webseiten zu integrieren. Dadurch entsteht eine Reihe von Vorteilen, aber auch ein beachtliches Sicherheitsrisiko. Es gibt jedoch Möglichkeiten, dieses Risiko zu minimieren.

In der folgenden Arbeit soll die Bedeutung von ActiveX und COM erläutert werden, es wird dabei detailliert auf die ActiveX-Steuerelemente und deren Anwendung eingegangen.


Einführung

Was Ist ActiveX?
Das Component Object Model – COM
Die Verfügbarkeit von ActiveX
Die Komponenten von ActiveX

ActiveX-Controls

Anwendung von Controls in Web Seiten
Entwicklung von ActiveX-Controls
Vergleich von JavaBeans und ActiveX

Sicherheit

Unterschiedliche Sicherheitskonzepte
Code signing
Sandbox
Geldklau dank ActiveX
Wie kann man sich schützen?

Ausblick

Literatur


Einführung

In den letzten zwei Jahren hörte man immer wieder den Begriff "ActiveX" im Zusammenhang mit dem Internet und Microsoft. Doch was für einen Einfluß haben die ActiveX Technologien bei der Entwicklung von Internet Anwendungen, dem Erstellen von Web Seiten oder generell beim Programmieren von Microsoft-orientierten Anwendungen?

Was ist ActiveX?

ActiveX präsentiert die Gruppe der Microsoft-Technologien zur Aktivierung des World Wide Web.
Microsoft prägte den Ausdruck ActiveX Anfang 1996 und gab ihn auf seiner Internet-Programmers-Developer-Conferenz im März 1996 bekannt. Das Ziel bestand aus Sicht von Microsoft darin, "das Beste vom PC mit dem Besten vom Internet zu verbinden", um die am meisten überzeugende Plattform zu erschaffen.
ActiveX hat jedoch nichts mit einer wohl definierten Technologie oder Technologie-Gruppe zu tun. Vielmehr ist ActiveX im Grunde nur ein Markenname wie Clavin Klein oder Ford. Und wie auch bei diesen Markennamen kann sich das Produkt, welches sich hinter ihnen verbirgt, über die Zeit hinweg verändern.

Alle ActiveX Technologien wurden mit dem COM – Modell (Component Object Model) entwickelt. Es definiert, wie Objekte sich darstellen, wenn sie in anderen Objekten benutzt werden und wie Objekte zwischen Prozessen oder über ein Netzwerk kommunizieren.

COM-Objekte können einfach in andere Sprachen integriert werden wie z.B. Java, Basic oder C++.

Component Object Model - COM

COM stellt die Basis von Microsofts Architektur für die Konstruktion wiederverwendbarer und erweiterbarer Komponenten dar. Einige der Schlüsselmerkmale von COM sind u.a.:

Obwohl COM bisher typischerweise mit einem einzelnen Rechner assoziiert wurde, unterstützt Distributed COM (seit dem Release von Windows NT 4.0) das entfernte Einsetzen von Objektinstanzen über ein Netzwerk.

Verfügbarkeit von ActiveX

ActiveX gibt es momentan für alle Windows - Plattformen. Metroworks hat angekündigt, daß es eine Implementierung für Macintosh anbieten werde. Microsoft arbeitet auch mit anderen Herstellern zusammen (Bristol und Mainsoft), um eine Version für Unix-Plattformen anzubieten.

Die Komponenten von ActiveX

ActiveX umfaßt eine Reihe von Komponenten, von denen hier nur einige aufgeführt werden.

ActiveX-Steuerelemente (Controls)

Früher wurden diese Steuerelemente auch OLE-Steuerelemente bzw. OCXes (OLE Custom Controls) genannt. Oft werden fälschlicherweise ActiveX, ein Name für eine Technologie Familie, und ActiveX Steuerelemente verwechselt. Es handelt sich bei ActiveX-Controls um wiederverwendbare Komponenten, die in eigenständigen Applikationen und Web-Seiten verwendet werden können.
Es gibt momentan mehrere tausend ActiveX-Controls, welche man sich zum Teil kostenlos aus der Internet laden kann. Beispiele sind Tabellenkalkulationen, Editoren, Bildsteuerelemente und Buttons.

(Detaillierte Beschreibung siehe Kap.2)

ActiveX-Skripting

Skripting wird normalerweise der einfache Prozeß des Programmierens genannt, wenn Sprachen wie Visual Basic, Perl, Scheme oder JavaScript verwendet werden. Diese Sprachen werden interpretiert, was die schnelle Erzeugung von Prototypen erleichtert. Sie sind zwar nicht so leistungsfähig wie C oder C++, leisten jedoch außerordentliche Dienste als "Klebstoff" zwischen komplexen Objekten. Hat man es z.B. mit einer Vielzahl von Objekten in Form von ActiveX-Controls oder Java-Applets zu tun, so kann man diese mit einer Skripting-Engine verbinden.

Man kann ActiveX-Skripting in zwei Kategorien einteilen: Skripting-Hosts und Skripting-Engines.
ActiveX-Skripting-Hosts rufen Skripting-Engines auf, um Skrips zu analysieren. Die üblichsten Beispiele von Skripting-Hosts sind Web-Browser wie der Microsoft Internet Explorer 3.0 und der Netscape Navigator 3.0.

ActiveX-Skripting-Engines machen die eigentliche Arbeit des Parsens der Skripts und führen sie dann aus. Die bekanntesten Skrip-Engines sind wohl VBScript und JavaScript.
Will man seine eigene Skripting-Sprache anderen zur Verfügung stellen, so muß man ein COM-basiertes Object daraus machen, welches bestimmte COM-Schnittstellen unterstützen muß.


ActiveX-Controls

Wie bereits erwähnt, handelt es sich bei den ActiveX-Controls um wiederverwendbare Komponenten, die sowohl in eigenständigen Anwendungen als auch in Web-Seiten verwendet werden können. Mit ihrer Hilfe ist es möglich überzeugendere und dynamischere Web-Seiten zu erstellen, als es zuvor mit rein statischem HTML möglich war. Ähnliches läßt sich auch mit Java-Applets ermöglichen, doch dazu später mehr.

Ein ActiveX-Control ist ein COM Objekt, das eine Reihe von Standards einhält. Unter anderem legen diese Standards fest, wie ein Steuerelement mit dem Client interagieren soll. Dadurch läßt es sich in vielen unterschiedlichen Bereichen einsetzen, kann aber trotzdem alle möglichen Funktionalitäten implementieren.

ActiveX-Controls sind sprachenunabhängig, d.h. sie können mit Visual C++, Delphi oder Borland C++ geschrieben werden. Es handelt sich dabei um DLL‘s, d.h. sie können nicht eigenständig ablaufen, sondern benötigen einen Container. Ein Container für ein ActiveX-Control kann Visual Basic sein; aber viel wichtiger ist, daß ein Web Browser ebenfalls ein solcher Container für Steuerelemente sein kann.

(Momentan ist der Internet Explorer ab Version 3.0 der einzige Browser der diese Steuerelemente standardmäßig unterstützt. Es gibt jedoch von Ncompass ein Plug-In für den Navigator von Netscape, damit auch dieser ActiveX-Controls anzeigen kann.

http://www.ncompasslabs.com)

Was heute als ActiveX-Control bezeichnet wird, wurde früher als OLE-Controls bezeichnet. Diese mußten eine Vielzahl von Methoden implementieren. Dadurch wurden sie in der Regel sehr groß. Solange sie nur von Containern wie Visual Basic geladen wurden, war dies egal. Seitdem jedoch die Möglichkeit bestand sie über das Internet in einen Browser zu laden, wurde ihre Größe enorm wichtig. Nun änderte Microsoft den Namen und verfügte, daß die Controls nur die Methoden zu implementieren brauchen, die sie auch tatsächlich benötigen.
Genaugenommen müssen sie nur die IUnknown Schnittstelle implementieren und sich selbst registrieren können.

IUnknown ist die Basis-Schnittstelle für sämtliche anderen COM-Schnittstellen. Sie definiert drei Methoden: QueryInterface, AddRef und Release. QueryInterface erlaubt dem Schnittstellen-Benutzer nach einem Pointer zu einer von der Komponente implementierten Schnittstelle zu fragen. AddRef und Release implementieren die Möglichkeit, Instanzen bezogen auf die Schnittstelle zu zählen.

Außerdem ist es möglich, ActiveX-Controls mit einem Zertifikat zu versehen, das den Autor des Controls nennt.

Anwendung in Web Seiten

Wie bereits erwähnt, ermöglichen es ActiveX-Controls überzeugendere und dynamischere Web-Seiten zu entwickeln, als es mit rein statischem HTML möglich ist.

ActiveX Komponente benötigen eine Reihe von Eintragungen in der Registry. Jedoch ist es möglich, z.B. mit dem von Visual Basic 5.0 mitgelieferten Setup Wizard die hierfür benötigten Dateien zu erstellen. Unter anderem wird eine .cab-Datei erstellt, die dann wie folgt in eine Webseite eingebunden wird:

<OBJECT classid="clsid:D75D5AEA-4B9A-11CF-8980-444553540000"

id=UserControl1%
codebase="Project1.CAB#version=1,0,0,0">

</OBJECT>

Die classid stellt eine eindeutige Identifizierung des Controls sicher. Sie wird automatisch von Visual Basic vergeben. Die codebase Angabe beschreibt, wo das ActiveX Control zu finden ist, falls es noch nicht auf dem lokalen Rechner installiert ist.

In diesem Falle befand sich die .cab-Datei im selben Verzeichnis wie die .html-Datei. Anderenfalls müßte der Pfad von project1.cab angepaßt werden.

Weiterhin wird zur Ausführung des Controls auf dem Client PC noch die Datei msvbvm50.dll im Windows Systemverzeichnis benötigt. Beim Fehlen dieser 1,2 MB großen Datei wird diese standardmäßig von ftp.microsoft.com heruntergeladen. Daher kann der erste Start eines solchen mit Visual Basic generierten ActiveX-Controls unter Umständen etwas länger dauern.

Entwicklung von ActiveX-Controls

Es gibt die unterschiedlichsten Herangehensweisen an die Konstruktion von ActiveX-Controls. Am einfachsten ist es, eines der folgenden Werkzeuge zu benutzen:

Von diesen drei Methoden ist die Verwendung der MFC mit Visual C++ die mit Abstand einfachste. Jedoch enthalten diese Controls sehr viel Standardcode. Die mit ACF erzeugten Controls enthalten hingegen so wenig Code wie möglich, da angenommen wird, daß sie in Web-Seiten eingebunden werden sollen.

Natürlich ist es möglich, bereits vorhandene OLE-Controls mit geringem Aufwand in optimale ActiveX-Controls zu überführen.

Ein ActiveX Steuerelement teilt sich in zwei Bereiche. Der Initialisierungsteil dient dazu, Speicher und den Bildschirmbereich auf der WWW-Seite vorzubereiten, z.B. Buttons zu zeichnen. Ist die Seite aufbereitet, können die Nutzeraktionen auf dem Applettbereich den Hauptteil bedienen.

Vergleich von JavaBeans und ActiveX

Sowohl JavaBeans-Controls als auch ActiveX-Controls unterstützen die Architektur
"download once run many times".

Im Falle von Java-Appletts interpretiert die JVM (java virtual mashine) den Bytecode und kontrolliert den Zugriff auf die System Ressourcen. Die Apletts werden komplett von dem eigentlichen Betriebssystem getrennt.

Im Gegensatz dazu müssen sich ActiveX-Controls unter Windows registrieren und werden dann als reine Windows Applikationen ausgeführt.

Java Code ist zwar plattformunabhängig solange eine JVM unterstützt wird, ist jedoch langsam in der Ausführung und das Sicherheitsprinzip untersagt einen Zugriff auf das lokale Dateisystem. Es eignet sich somit für den Anwender, der zum einen unterschiedliche Betriebsysteme bedienen muß, und zum anderen wenig Wert auf Performance legt.

ActiveX-Controls hingegen sind schnell, aber beherrschen nur eine Sache: Win32. Sie verhalten sich exakt wie Windows Applikationen (schließlich sind es ja auch solche) und haben wie diese auch den vollen Zugriff auf sämtliche lokalen Ressourcen wie z.B. Drucker, Dateisystem, Hauptspeicher usw. Das damit verbundene Sicherheitsrisiko versucht Microsoft durch sein Authentifizierungs System zu minimieren.
Ein weiterer Vorteil gegenüber Java ist, daß ActiveX-Controls sprachenunabhängig sind. D.h. man kann sie mit den gängigen Client/Server Werkzeugen entwickeln. Außerdem sind sie nicht an den Browser gebunden, sondern können in vielen anderen Windows Applikationen wiederverwendet werden.

Für welche der beiden man sich nun entscheidet, muß man von dem konkreten Anwendungsgebiet abhängig machen, da beide ihre Stärken und Schwächen haben.


Sicherheit

Viele Bürger verbinden aus Sicherheitsbedenken ihren PC nicht mit dem Internet. Durch die Entwicklungen aus dem Hause Microsoft haben diese Bedenken erneut Nahrung bekommen; die Utopie des Big Brother wird Wirklichkeit: Ist ActiveX im Microsoft Internet Explorer aktiviert, so kann der lokale Rechner systematisch ausgespäht werden.

Die Frage ist, welche Ziele verfolgt Microsoft mit diesen Entwicklungen?

Um das Internetwachstum weiterhin zu fördern, ist es notwendig auf Sicherheitsmängel aufmerksam zu machen und die Privatsphäre der Benutzer zu respektieren.

Es wird immer ein Risiko sein, ausführbare Daten aus dem unbekannten Web zu laden. Niemand weiß, was diese kleinen Anwendungen machen, wenn sie ersteinmal installiert sind. Doch es gibt Möglichkeiten, dieses Risiko so gering wie möglich zu halten.

Unterschiedliche Sicherheitskonzepte:

Code signing

Microsofts Authentifizierungs Mechanismus entstand aus diesem Konzept. Durch ein Zusatzprogramm kann der Entwickler sein Control signieren. Der Anwender eines solchen Controls kann sich dann sicher sein, daß es tatsächlich von dem Entwickler stammt und daß es nachträglich nicht verändert wurde. Wenn ein solches Control nun trotzdem Schaden anrichtet, weiß man zumindest, von wem es kam.

Es gibt unabhängige Institutionen, sogen. Certificate Authorities (Cas), wie z.B. VeriSign, bei denen ein Entwickler sich registrieren lassen kann und seine digitale Signatur erhält.

Das Prinzip der digitalen Signatur beruht auf einem öffentlichen und einem privaten Schlüssel. Der private Schlüssel (nur dem Entwickler bekannt) generiert die Signatur und der öffentliche Schlüssel bestätigt sie.

 

Abb. 1 zeigt ein Zertifikat, wie es im Explorer erscheint, bevor man ein ActiveX-Control von Microsoft laden will.

Sandbox

Das Konzept der "Sandbox", wie es bei Java-Appletts eingesetzt wird, bietet einen sehr hohen Grad an Sicherheit, da das Java-Applett keine unautorisierten System Funktionen ausführen kann. Es kann z.B. keinen zusätzlichen Speicher belegen, lesend oder schreibend auf die Festplatte oder andere Geräte zugreifen.

Da viele Entwickler diese Sicherheitsmaßnahmen zu einschränkend finden, gibt es mittlerweile JDK’s, die "Code signing" mit unterschiedlichen Graden der Sicherheit unterstützen.

Geldklau dank ActiveX

Der Chaos Computer Club suchte nach einer Möglichkeit, die Unsicherheit von Online Banking und Internetbanking zu demonstrieren. Als Methode für den Angriff beim typischen T-Online Hombankingkunden mit Windows 95 wurde ActiveX gewählt.

Mit Hilfe von einer frei verfügbaren Demoversion von Visual Basic 5.0 wurde ein ActiveX-Control geschrieben, welches mit einer shell-Anweisung Quicken (einer Finanzverwaltungs-Software) startet und dieses via der SenkKeys-Methode fernbedient. Da das Control vollen Zugriff auf die Windows API hat, wird mit SetWindowsPos das Fenster des Internet Explorers in den Vordergrund gesetzt, damit Quicken ungesehen im Hinterrund laufen kann.
Klickt das ahnungslose Opfer auf der Lockseite den Link an, so wird die Schadensseite geladen. Während des Ladens wird das Applet gestartet und schaltet den Internet Explorer in den Vordergrund. Hinter dem Explorerfenster wird Quicken gestartet und die Überweisung ausgefüllt. Erst nachdem Quicken wieder geschlossen wurde, ist das Laden der Seite beendet.

Wie kann man sich schützen?

Schon während des Initialisierungsteils eines ActiveX-Controls wird diesem voller Zugriff auf die lokale API gewährt. (Bei Windows 95 bietet sie auch Funktionen, die das Dateisystem betreffen)

Der einzige Weg, dieses Risiko zu vermeiden, ist keine ActiveX Controls auf seinem Rechner laufen zu lassen. Denn selbst wenn man die Sicherheitsstufe des Internet Explorers auf die höchste Stufe stellt, was bewirkt, daß nur zertifizierte Controls nach Rückfrage ausgeführt werden, besteht noch ein Risiko. Controls haben die Möglichkeit, die Sicherheitsstufe des Internet Explorers zu verändern, um z.B. unzertifizierte Controls starten zu können. Ebenso finden sich dort Hinweise auf die vorhandene Banksoftware, manchmal sogar deren Passworte.


Ausblick

Die ActiveX-Technologien werden wohl auch weiterhin hauptsächlich in der Umgebung von Windows und Windows NT anzutreffen sein. Microsoft arbeitet jedoch daran COM, DCOM und einige andere Bestandteile von ActiveX auf anderen Betriebssystemen verfügbar zu machen. Bereits heute unterstützt Macintosh ActiveX, was hauptsächlich daran liegt, daß Microsoft Office auf dem COM – Prinzip aufbaut. Auch Digital und HP haben ihre Bereitschaft, diese Technologie zu unterstützen, zugesagt.

Die sogen. Componentware ist wohl die nächste große Welle in der Software Entwicklung, egal ob die Software im Web-Browser oder irgendwo anders läuft. Momentan sind auf diesem Gebiet die ActiveX-Controls führend, doch alleine aus dem Grund, daß die Anwender ein Monopol verhindern wollen, kann es sein, daß sich JavaBeans einen großen Teil dieses Marktes sichern wird.

Unter dem Schlagwort Windows Distributed interNet Architecture (DNA) will Microsoft zukünftig alle Produkte und Techniken bündeln. Das für DNA als Klebstoff verwendete Component Object Model (COM) ziert ab sofort ein Pluszeichen. Es soll eine - durchaus begrüßenswerte - Vereinfachung der Programmierung der doch eher bürokratischen Schnittstellen mit sich bringen


Literatur

ActiveX Demystified

BYTE Magazine September 1997
(http://www.byte.com/art/9709/sec5/art1.htm)

Introduction to ActiveX Controls

Microsoft
(http://www.microsoft.com/msdn/sdk/inetsdk/help/compdev/controls/intro.htm)

ActiveX Programming Unleashed

Second Edition SAMS.Net
(http://www.developer.com/reference/library/1575211548/ewtoc.html)

HTML im Intranet

QUE

ActiveX Controls vs. JavaBeans

David Chappell Januar 1998
(http://www.chappellassoc.com/OMC5.htm)

Geldklau dank ActiveX

iX März 1997
(http://www.iks-jena.de/mitarb/lutz/security/activex.ix.html)

Windows DNA

Microsoft
(http://www.microsoft.com/dna/default.asp)