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.
Was Ist ActiveX?
Anwendung von Controls in Web Seiten
Unterschiedliche Sicherheitskonzepte
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?
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++.
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.:
- Binärer Standard für die Kompatibilität der Komponenten, was impliziert, daß die COM-Objekte sprachenunabhängig sind.
- Gruppierung der Funktionen in Schnittstellen sowie eine Methode, alle diese Schnittstellen eindeutig zu identifizieren.
- Läuft auf einer Vielzahl von Plattformen (z.B. Windows 95, Windows NT, Macintosh, einigen Versionen von Unix).
- Unterstützt dynamische Abfrage von Komponenten-Schnittstellen.
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.
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.
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-Dokumente
Office95 enthält eine neue Applikation namens Office Binder. Er erlaubt es, heterogene Dokumente zu gruppieren und sie im Binder zu betrachten. Die Technologie hinter diesem Binder besteht aus ActiveX-Dokumenten (oder DocObjects, wie sie früher genannt wurden.) Am ehesten gleichen ActiveX-Dokumente dem an-Ort-und-Stelle-Editieren von eingebetteten Objekten. (z.B. dem Bearbeiten von einer Exel-Tabelle, die in ein Microsoft-Word-Dokument eingebettet ist.) Obwohl Microsoft ursprünglich ActiveX-Dokumente für Microsoft-Office und Office-kompatible Applikationen entwickelte, haben sie den Internet Explorer ab der Version 3.0 zum Behälter für ActiveX-Dokumente gemacht.
ActiveX-Konferenzsysteme
Es gibt bereits eine Reihe von Produkten, mit denen man über das Internet telefonieren kann. Um diese Idee noch einen Schritt weiter zu führen und Echtzeit-Daten sowie gemeinsam benutzte Applikationen hinzuzufügen, hat Microsoft ihr ActiveX-Konferenzsystem entwickelt.
ActiveX-Konferenzen beruhen auf dem ITU-T.120-Standard für Datenkonferenzen. In der Zukunft werden sie auch noch den H.232-Standard für Video und Audio benutzen. Da das System auf Standards beruht, wird es mit anderen Standard-basierten Konferenzprodukten wie PictureTel, Onlive Technonolgies und White Pines zusammenarbeiten können.
Man kann ActiveX-Konferenzen unterteilen:
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 DLLs, 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.
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.
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.
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:
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.
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 JDKs, die "Code signing" mit unterschiedlichen Graden der Sicherheit unterstützen.
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.
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.
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
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)