Dazuko: Die Open-Source-Zugriffskontrolle

07.09.2005 von Gernot Hacker
Open-Source-Betriebssysteme galten lange als sicher vor digitalen Attacken. Auf Grund der wachsenden Zahl von heterogenen Netzwerkumgebungen sind jedoch auch die Unix- und Linux-Systeme immer stärker von digitalen Schädlingen bedroht.

Die Open-Source-Architektur, normalerweise ein großer Vorteil, macht es nahezu unmöglich, Antiviren-Software unter den verschiedenen Unix-/Linux Betriebssystemen und deren Varianten systemübergreifend anzubieten.

Eine Lösung für dieses Problem bietet der Systemschutz auf Dateizugriffsebene. Diese Herangehensweise erfordert eine plattformunabhängige Open-Source-Schnittstelle, wie sie beispielsweise unter dem Namen Dazuko entwickelt wird. Das Interface sorgt nicht nur für eine hohe Kompatibilität verschiedener Applikationen mit unterschiedlichen Betriebssystemen. Dazuko unterstützt außerdem Multithreading und Cascading und steigert so auch die Performance der jeweiligen Systemprozesse.

Die Implementierung einer Schutz-Software auf der Dateizugriffsebene stellt einen tiefen Systemeingriff dar. Das Betriebssystem muss dem Scanner gestatten, noch vor ihm selbst auf relevante Dateien zuzugreifen. Da sich die Architekturen der einzelnen Betriebssysteme erheblich unterscheiden und meist auch noch verschiedene Varianten existieren, ist die Lösung dieser Dateizugriffsfrage essenziell für jeden Lösungsansatz. Jeder Hersteller von Antiviren-Software muss einen enormen Aufwand betreiben, um sicherzustellen, dass die einzelnen Module seines Scanners mit den jeweiligen Betriebssystemkomponenten reibungslos zusammenarbeiten. Derartige Insellösungen ersticken Kompatibilität jedoch bereits im Keim. Hat sich ein Anwender für eine bestimmte Lösung entschieden, kann er in der Regel keine Software anderer Anbieter in seinen IT-Schutz einbinden.

Open-Source-Entwicklung

Seit 2002 steht mit Dazuko eine Open-Source-Schnittstelle zur Verfügung, die Abhilfe schafft. In Anlehnung an ihre Hauptaufgabe, die Dateizugriffskontrolle, erhielt die Lösung von den Entwicklern bei H+BEDV den Namen Dazuko. Sie stellt ein Interface für On-Access-Virenscanner dar und gestattet Antivirenprogrammen und anderer Software den prüfenden Dateizugriff bei unterschiedlichen Betriebssystemen.

Die standardisierte Schnittstelle ist mittlerweile in Version 2.0.6 verfügbar und findet zunehmend Beachtung in der Open-Source-Community, wie an einer Vielzahl von Projekten ablesbar ist. Im Augenblick unterstützt Dazuko die Kernels von GNU/Linux 2.2, 2.4 und 2.6, Linux/RSBAC und FreeBSD 4 sowie 5. Außerdem erkennt Dazuko Dateizugriffe auch unter Samba, Netatalk und NFS und stützt verschiedene Programmiersprachen wie C, Java, Lua, PHP, Perl, Python und Ruby.

Dazuko wurde von seinen Entwicklern weitgehend unter die Berkeley-Software-Distribution-(BSD)-Lizenz gestellt. Damit hat jedermann die Möglichkeit, das Quellprogramm uneingeschränkt zu verwenden und abzuändern, solange Copyright und die Lizenzbedingungen genannt werden. Änderungen am Code müssen dem Projekt nicht zugänglich gemacht werden. Auch die Integration in bestehende Software unterliegt keinerlei Beschränkungen oder bestimmten Anforderungen. Aufgrund der Flexibilität der Lizenz können sowohl Closed- als auch Open-Source-Projekte Dazuko in ihren Code integrieren. Eine Ausnahme von dieser Lizenzierung gilt für einige Teile von Linux. Für die Kernel-Implementation und für die Treiber gelten die Richtlinien der General Public License (GPL).

Aufgrund der Integration des Dazuko-Treibers in den Kernel müssen diese beiden Bestandteile natürlich in ihrer Konfiguration übereinstimmen. Im Idealfall wird der Treiber in genau den Quellcode übersetzt, aus dem auch der Kernel stammt. Im Moment erfordert die Installation also noch Fachkenntnisse vom Nutzer, in der Zukunft sollen Distributoren diesen Schritt übernehmen. SUSE Linux ist die erste Distribution, die seit mehreren Versionen mit vorkompiliertem Treiber für Dazuko ausgeliefert wird und so dem Nutzer diese schwierige und wichtige Arbeit abgenommen hat.

Funktionsweise

Um System Calls für Dateizugriffe steuern zu können, ist Dazuko direkt in den Betriebssystem-Kernel eingebunden. Jede Applikation - etwa ein Virenscanner - muss sich beim Interface anmelden, bevor sie aktiv werden kann. Dies ist die Voraussetzung für eine reibungslose Kommunikation mit der Schnittstelle und sorgt dafür, dass die jeweilige Software den Dateizugriff kontrollieren kann. Hierbei läuft die registrierte Lösung nicht als Kernel-Prozess, sondern im Userspace.

Sobald ein Dateizugriff erfolgt, unterbricht Dazuko den Vorgang und reicht die Datei an die registrierte Applikation weiter. Dabei stellt es Informationen über Eigenschaften wie Dateiname, Zugriffsart und Dateiattribute zur Verfügung. Anhand dieser Informationen entscheidet die Applikation, ob sie den Zugriff auf diese Datei zulässt oder verweigert. Abhängig vom Ergebnis der Prüfung lässt die Schnittstelle das Betriebssystem entweder mit der Bearbeitung fortfahren oder unterbricht den Prozess, ein Dateizugriff ist dann nicht mehr möglich.

Durch die Integration in das Betriebssystem arbeitet Dazuko transparent im Hintergrund. Wird ein Dateizugriff verweigert, erhält der Anwender eine Fehlermeldung direkt vom Betriebssystem. Das ist wichtig, weil dadurch bereits vorhandene Programme nicht extra angepasst werden müssen. Somit bietet die Schnittstelle auch dann Schutz, wenn etwa ein Windows-Anwender versucht, eine virenbefallene Datei auf einem Linux-Server zu öffnen.

Hohe Verarbeitungsgeschwindigkeit

Dazuko unterstützt Multithreaded-Applikationen und ist so in der Lage, mehrere Scannerinstanzen parallel anzusteuern, die innerhalb eines Prozesses implementiert werden. Das traditionelle Konzept mehrerer parallel arbeitender Prozesse der gleichen Applikation funktioniert natürlich ebenfalls. Hierbei übergibt es den Dateizugriff an den ersten erreichbaren Prozess einer Gruppe. Im Falle von zusammenarbeitenden Prozessen sind diese unter dem gleichen Gruppennamen registriert. Durch die Multithreading-Unterstützung entsteht ein On-Access-Scanner, der den Verzögerungseffekt umgeht, der gewöhnlich mit dem sequenziellen Bearbeiten einer Datei verbunden ist.

Dazuko unterstützt zudem Cascading und kann somit beispielsweise zwei Virenscanner parallel laufen lassen. Dies ist mit einer Multiprozess-Unterstützung vergleichbar, allerdings wird der Vorgang nicht verteilt, sondern die Applikationen arbeiten ihn nacheinander ab. Die Anwendungen unterscheiden sich dabei durch ihre Gruppennamen. Bei einem Dateiaufruf haben Prozesse jeder Gruppe die Möglichkeit, den Zugriff zuzulassen oder abzulehnen. Mehrere Prozesse, die unter dem gleichen Gruppennamen registriert sind, können die Virensuche unter sich aufteilen. Auch verschiedene Applikationen können gleichzeitig mit der Schnittstelle arbeiten. Dazuko übergibt einen Dateizugriff an den ersten verfügbaren Prozess der ersten Gruppe und anschließend den gleichen Dateizugriff an den ersten verfügbaren Prozess der zweiten Gruppe. Wenn einer der Prozesse entscheidet, dass der Zugriff verweigert werden soll, unterbindet ihn das Interface zunächst, verweigert ihn aber erst dann endgültig, wenn jeder Prozess seine Aufgabe abgeschlossen hat.

Aufbau

Um die Plattformunabhängigkeit zu gewährleisten, ist Dazuko dreischichtig konzipiert. Bei der ersten Ebene handelt es sich um eine plattformabhängige Schicht ("Platform Dependent Layer"), in der die unterschiedlichen systemspezifischen Funktionen festgelegt sind. Dieses Modul ist für die gesamte Interaktion mit dem Betriebssystem verantwortlich. Zur Implementierung von Dazuko auf ein neues System muss man somit nur dieses Modul neu schreiben.

Die zweite Schicht ("Functionality Layer") stellt quasi das Gehirn der Software dar und übernimmt alle zu treffenden Entscheidungen. Die dritte Schicht ("Visible Layer") ist die nach außen hin sichtbare Schicht. Sie stellt die eigentliche Programmierschnittstelle dar, auf der auch der Informationsaustausch mit Virenscannern oder anderen Prüfapplikationen erfolgt.

Der Hauptvorteil dieses Software-Designs liegt darin, dass der "Functionality Layer" ohne plattformabhängigen Code auskommt. Das vereinfacht das Implementieren von Funktionen und das Debugging wesentlich. Neue Funktionen in dieser Schicht stehen somit allen Dazuko-Plattformen zur Verfügung. Die Konzentration der plattformabhängigen Funktionen auf den Platform Dependent Layer gewährleistet auch eine einfache und unkomplizierte Portierung auf andere Plattformen.

Die dritte Schicht ermöglicht es jedem Anbieter, seine Software auf einfache Weise einzubinden. Damit existiert eine feste Schnittstelle, welche die wichtigsten Funktionen bereits integriert hat. Das Interface ist einfach und überschaubar aufgebaut. Es umfasst Funktionen zur (De-)Registrierung und zum Setzen von Parametern. Außerdem ermöglicht es eine Statusabfrage für Dateizugriffe. Für welches Betriebssystem oder in welcher Programmiersprache die Applikation geschrieben ist, spielt für Dazuko keinerlei Rolle. Der nachfolgende Code zeigt das Beispiel eines einfachen On-Access-Virenscanners in C. Es ist auf der 1.2-Version von Dazuko basiert.

int main () {

struct access_t *access = NULL;

dazukoRegister(„myScanner„, „r+„);

dazukoSetAccessMask (ON_OPEN | ON_CLOSE | ON_EXEC);

dazukoAddIncludePath(„/„);

while (dazukoGetAccess(&access) == 0) {

access.deny = do_scan_file(access.filename);

dazukoReturnAccess(&access);

dazukoUnregister();

return 0; }

}

Installation von Dazuko

Bei Dazuko handelt es sich um ein Kernel-Modul, das nachgeladen wird. Da es sich mit dem Kernel einen Satz an Funktionen teilt, wird der zum installierten Kernel gehörige Kernel-Source zum Kompilieren von Dazuko benötigt.

Um sicherzustellen, dass Binär-Kernel und Kernel-Sourcen zusammengehören, empfiehlt es sich, zunächst einen Kernel zu erstellen und zu installieren. Optional reicht es auch, das Paket mit den Kernel-Sourcen nachzuinstallieren.

Sobald diese Voraussetzung erfüllt ist, können Sie sich an das Kompilieren von Dazuko machen. Laden Sie das Archiv von der Dazuko-Homepage und entpacken Sie es in ein Verzeichnis. Der erste Schritt besteht darin, ein passendes Makefile zu erzeugen, mit dem dann die Sourcen kompiliert werden.

./configure

Dieses Script ermittelt eine Reihe von Systeminformationen und stellt benötigte Flags ein, die für ein korrektes Funktionieren notwendig sind. Danach können Sie Dazuko übersetzen lassen:

make

Dadurch werden der Gerätetreiber und eine Reihe von Beispielprogrammen erzeugt. Unter Linux 2.2 bis 2.4 heißt der Treiber dazuko.o, unter Linux 2.6 und FreeBSD dazuko.ko. Wenn Sie Warnungen oder Fehlermeldungen erhalten, sollten Sie die FAQ konsultieren, ob das Problem dort schon beschrieben ist.

Als Kernel-Modul laden

Ist Dazuko erfolgreich kompiliert, müssen Sie nur noch das Modul in den Kernel laden. Dies funktioniert allerdings nur mit root-Rechten:

Unter Linux 2.2-2.4:

/sbin/insmod dazuko.o

Unter Linux 2.6:

/sbin/insmod dazuko.ko

Unter FreeBSD:

/sbin/kldload dazuko.ko

Um zu überprüfen, ob das Modul erfolgreich geladen wurde, geben Sie unter Linux den Befehl

cat /proc/modules

und unter FreeBSD

/sbin/kldstat

ein.

Taucht dort dazuko auf, hat alles wie gewünscht funktioniert. Wenn Sie devfs benutzen, sind keine weiteren Schritte notwendig. Ansonsten müssen Sie noch das Device-Node per Hand erzeugen.

Unter Linux suchen Sie zunächst mit

cat /proc/devices

nach der Major Number von Dazuko. Normalerweise ist das die 254. Um das Device-Node zu erzeugen, geben Sie folgende Befehle ein:

mknod -m 600 /dev/dazuko c 254 0

chown root:root /dev/dazuko

Bei FreeBSD 4 verwenden Sie

mknod /dev/dazuko c 33 0

Damit ist Dazuko kompiliert und gestartet. Jetzt ist eine Applikation in der Lage, Dateizugriffe über das Dazuko-Device abzuwickeln. Für einen ersten Test empfiehlt es sich, das mitgelieferte Beispielprogramm auszuprobieren.

Wechseln Sie in das Verzeichnis example_c und erstellen Sie das Programm mit

make

Aus Sicherheitsgründen läuft Dazuko nur mit Programmen, die unter dem root-Account laufen. Also sollten Sie als root eingeloggt sein, um das Beispiel zu testen. Es erwartet eine Liste mit zu überwachenden Verzeichnissen als Argument.

./example /home /usr/home

Sobald das Programm läuft, öffnen Sie eine weitere Shell und greifen dort auf Dateien und Verzeichnisse unterhalb von /home zu. Sie sollten nun diverse Meldungen vom Beispielprogramm erhalten. Es erlaubt natürlich jeden Zugriff, es lassen sich aber auch Anwendungen schreiben, die komplexe Zugriffskontrollen oder das Logging von Dateizugriffen realisieren.

Zukunftsaussichten

Das Dazuko-Projekt möchte als Standard einer definierten Schnittstelle für plattformübergreifendes On-Access-Scanning verstanden werden. Die Lösung wartet insbesondere noch darauf, Mac OS X, Solaris und OpenBSD zu erschließen. Mit der Portierung der Schnittstelle auf Windows wird es auch hier möglich sein, mehrere Antiviren-Scanner auf einer Workstation zu installieren, die kaskadiert zusammenarbeiten. Derzeit entwickelt jeder Antiviren-Software-Hersteller sein Filter-Device selbst, was dazu führt, dass diese proprietären Lösungen nicht im Parallelbetrieb auf einem Rechner laufen können.

Um zu einem systemübergreifenden Standard für das On-Access-Scanning zu werden, müssen aber noch einige Hürden genommen werden. Dazuko unterstützt im Augenblick Applikationen von Anti Exploit, AntiVir für Unix Workstation/Server, Avast!, AVG Anti-Virus, Clam AntiVirus, ImageServer und NOD32. In dieser Liste ist natürlich noch eine Vielzahl von weiteren Herstellern vorstellbar und wünschenswert.

Details der Schnittstelle sowie ausführliche Beispielprogramme sind auf der Dazuko-Projektseite verfügbar. Dort finden sich auch eine Menge nützlicher Hinweise, etwa zum Troubleshooting unter einzelnen Unix-/Linux-Variationen wie Debian GNU, SUSE, Fedora oder Mandriva. Der aktuelle Stand des Projekts ist hier dokumentiert ((LINK: http://savannah.gnu.org/projects/dazuko/)). (mja)

Der Autor Gernot Hacker ist Director Corporate Communications der H+BEDV Datentechnik GmbH.