![]() |
|
||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
Achim Leitner
Der beste Schutz vor Internetangreifern ist perfekt sichere Software, die genau das erledigt, was sie soll, und sich von niemandem austricksen lässt. Dummerweise ist nichts perfekt -- und schon gar keine Software. Folglich haben sich Computer-Sicherheitsexperten viele Tricks einfallen lassen, um die Bösewichte vom eigenen Computer fernzuhalten und, wenn das nicht gelingt, den Schaden zu begrenzen.
Eine recht neue Technik, die dieses Ziel verfolgt, nennt sich AppArmor ([1-3] und Kasten "Historie"). Novell integriert dieses System in Suse Linux 10.1 und aktiviert es per Default sogar. Die Grundidee hinter AppArmor ist nicht neu, erst die Art der Umsetzung macht den Charme dieses Produkts aus.
| Historie |
|
AppArmor war ursprünglich unter dem Namen Subdomain bekannt, ein kommerzielles Produkt der Sicherheitsfirma Immunix. Novell hat Immunix Mitte 2005 gekauft, Subdomain in AppArmor umgetauft und Anfang 2006 unter die GPL gestellt. Für Suse Linux 10.0 existieren Pakete und Patches; in Version 10.1 hat Novell ihre neue Errungenschaft gleich eingebaut. Immunix war auch maßgeblich an der Entwicklung der LSM-Schnittstelle (Linux Security Modules) beteiligt. Neben AppArmor nutzen etliche Sicherheitssysteme wie das konkurrierende SELinux die LSM-Technik, um ihre Kontrollfunktionen in die passenden Stellen des Kernels einzuklinken. |
Die Sicherheit eines Linux-Systems ist beinahe militärisch in vielen Verteidigungslinien organisiert. Die Firewall verhindert Zugriffe auf Serverdienste, die gar nicht öffentlich zugängig sein sollen. Der Kernel isoliert die Prozesse voneinander, die Benutzer haben nur eingeschränkte Zugriffsrechte, Programmierer achten auf sicheren Entwurf ihrer Programme, Distributoren wählen Software auch nach deren Sicherheitseigenschaften aus und untersuchen sie auf Fehler.
Bleibt bei all dem Aufwand doch ein Lücke unbemerkt, dann übernimmt ein Angreifer üblicherweise die Kontrolle über einen Prozess (also ein gerade laufendes Programm). Dieser Prozess gehört einem Benutzer. Da der Prozess über alle Rechte seines Besitzers verfügt, hat sich der Eindringling automatisch alle Rechte dieses Benutzers verschafft. Schlimmstenfalls ist das Root -- aber auch normale Benutzerrechte reichen für allerlei Unfug.
Ob der Einbrecher über seinen neu erworbenen Zugang private Daten ausspioniert, den Benutzer bei dessen Onlinebankgeschäften austrickst oder ob er im Namen seines Opfers weitere Rechner attackiert und damit das Opfer in juristische Schwierigkeiten bringt -- in jedem Fall fangen die Probleme erst richtig an, sobald der Onlinebösewicht den Rechner geknackt hat.
Dabei muss all das gar nicht sein. Denn: Linux räumt den Programmen eigentlich viel zu viele Rechte ein. Ein Bildbetrachter muss keine Netzwerkverbindung aufbauen, ein Hilfeprogramm braucht keinen Zugang zu den Homeverzeichnissen der Benutzer, und ping verwendet seine Root-Rechte nur, um die speziellen Ping-Netzwerkpakete abzusenden, aber nicht um die Rechte anderer User anzunehmen oder fremde Prozesse zu beenden.
Per Default räumt das Rechtemodell von Linux seinen Prozessen dennoch all diese Fähigkeiten ein. Die Gegenbewegung nennt sich "least privilege": Hat jeder Prozess nur das wirklich nötige Minimum an Rechten, dann erbt auch ein Angreifer nur diese Minimalprivilegien, was seine Aktionen deutlich behindert. Im Idealfall ist die Lohn seiner Mühe nur ein so geringer Satz an Privilegien und Zugriffsrechten, dass er keinen Schaden anrichten kann.
Linux bringt bereits einfache Basistechniken mit, um die Privilegien zu begrenzen: Die Unterscheidung in den allmächtigen Administrator Root und in Normalbenutzer sowie die Dateizugriffsrechte, die der Besitzer einer Datei oder eines Verzeichnisses erteilt. Diese Einteilung ist zwar recht grob, aber vergleichsweise gut zu verstehen.
Das extreme Gegenteil stellen Techniken wie SELinux [4] dar: Sie modellieren enorm detailliert, welche Komponente im System auf welche Weise worauf zugreifen darf. Dafür führen sie Rollen, Typen und Sicherheitsdomänen ein -- zusammen mit einem Regelsatz, den ein einzelner Mensch nicht mehr verstehen kann. Solche Regeln zu vergeben bleibt ausgewiesenen SELinux-Spezialisten vorbehalten; selbst Vollzeit-Administratoren beißen sich daran die Zähne aus.
Einen vernünftigen Mittelweg [5] beschreitet AppArmor: Statt alle Komponenten und jeden möglichen Zugriff zu behandeln, konzentriert es sich auf Prozesse und deren Privilegien. So genannte Profile geben vor, wie sich dieser Prozess im Normalfall verhält, sprich: welche Aktionen er ausführt, welche Programme er startet und auf welche Dateien und Verzeichnisse er zugreift. Seine Rechte sind dadurch weit stärker begrenzt als die seines Besitzers. Ein von AppArmor erfasster Prozess bleibt sogar dann in seinem virtuellen Korsett gefangen, wenn er unter der Benutzerkennung root läuft.
In der Fachsprache übt AppArmor eine so genannte Mandatory Access Control (MAC) aus: Während es beim herkömmlichen Discretionary Access Control (DAC) im Ermessen des Besitzers einer Datei liegt, welche Rechte diese erhält, gibt bei MAC der Regelsatz (oder das Profil in der AppArmor-Sprache) vor, was erlaubt ist. Das Profil stammt vom Administrator.
Die Liste der zulässigen Zugriffe klebt bei AppArmor nicht an der Zieldatei, sie steht vielmehr in einem Profil, das für je ein Programm gilt. Dabei gelten diese Zugriffsbeschränkungen zusätzlich zu den normalen Linux-Rechten. Sprich: Sowohl die Zugriffsrechte einer Datei als auch AppArmor müssen eine Aktion gestatten, damit der Kernel sie ermöglicht und nicht blockiert.
Wenn Sie sehen wollen, welche Programme bereits über ein AppArmor-Profil verfügen, starten Sie am besten das entsprechende YaST-Modul:
Das Ping-Beispiel zeigt ein recht einfaches Profil. Es beginnt mit drei so genannten Abstraktionen: #include abstractions/base bindet eine Reihe von erlaubten Zugriffen ein, die jedes Programm braucht, um überhaupt zu starten. Dazu gehören zum Beispiel wichtige Basisbibliotheken. Danach folgen die Sammlung für Konsolenprogramme und eine für den Namensdienst: Ping ermittelt per Nameservice die IP-Nummer zu einem Rechnernamen.
Die Rechtesammlungen oder Abstraktionen sind recht praktisch: Sie halten die Profile übersichtlich und ersparen dem Sicherheitsexperten viel lästige und fehlerträchtige Mehrfacharbeit.
Abb. 2: Unter "Profile bearbeiten" listet YaST alle bereits vorhandenen AppArmor-Profile auf. Wie viele AppArmor-Module steht auch dieses nur in Englisch zur Verfügung. |
Abb. 3: Das AppArmor-Profil für Ping gibt diesem Programm einige typische Sammlungen von Rechten (nach der "#include"-Anweisung), sowie zwei so genannte Capabilities (siehe gleichnamigen Abschnitt) und Zugang zu zwei Dateien. |
Das Ping-Programm läuft mit Root-Rechten, um spezielle Netzwerkpakete erstellen zu können, die ein gewöhnlicher User nicht senden darf. Linux und AppArmor unterteilen die vielfältigen Root-Rechte in eine Vielzahl einzelner Fähigkeiten, so genannter Capabilities. Von all den möglichen Root-Fähigkeiten braucht Ping nur CAP_NET_RAW (für die Ping-Netzwerkpakete) sowie CAP_SETUID, um als Set-UID-Programm mehr Rechte zu erhalten als der aufrufende Benutzer.
Die letzten beiden Zeilen in Abbildung 3 zeigen Zugriffsrechte für einzelne Dateien. Die Syntax orientiert sich an der Linux-typischen Darstellung. Der erste Eintrag gestattet dem Ping-Programm, überhaupt zu laufen: Die Datei /bin/ping erhält Lese (r)- und Ausführungsrechte (x) sowie das Inherit-Flag (i). Mit letzterem erbt der laufende Prozess das Profil, das zu dieser Datei gehört. Interessanter ist die letzte Zeile: Ping darf die Datei /etc/modules lesen.
In diesem YaST-Modul ist zu sehen, dass Novell die Integration etwas mit der heißen Nadel gestrickt hat: Trotz deutscher Spracheinstellung nervt eine wilde Mischung aus Deutsch und Englisch. Währen manche Bereiche noch gar nicht übersetzt sind, wechselt in manchen Fenster die Sprache von Zeile zu Zeile. Solche Schlampereien stärken nicht gerade das Vertrauen in ein Sicherheitssystem.
Wer neue Profile anlegen will, muss bei AppArmor nicht alles von Hand machen. Novell liefert einen Wizard mit: das YaST-Modul Assistent zum Aktualisieren von Profilen.
Aber Vorsicht: So einfach wie Novell seine Benutzer glauben machen will, ist das Anlegen neuer Profile nicht. Die richtigen Entscheidungen zu treffen, erfordert viel Hintergrundwissen. Zu der noch recht einfachen Frage, ob eine Aktion Teil einer Abstraktion ist, gesellt sich noch die Wahl passender Jokerzeichen bei Dateinamen.
Überlassen Sie das Anlegen oder Ändern von Profilen lieber Linux-Experten und gestandenen Administratoren. Denn: Sind die Regeln in den Profilen zu lax, verkommt der AppArmor-Mantel zum löchrigen Fetzen, auf den Sie auch verzichten können. Zu eng gefasste Profile schnüren dagegen das Programm so weit ein, dass es nicht mehr korrekt funktioniert.
Gerade in dieser Situation ist die Fehlersuche schwer: Resultiert ein Programmabsturz aus einem gewöhnlichen Programmierfehler, oder hat AppArmor eine Aktion untersagt und das geschützte Programm damit nicht gerechnet? Oder: Ist vielleicht sogar gerade ein Angriff im Gange? AppArmor will mit detaillierten Berichten über Schutzverletzungen zwar helfen, aber nur erfahrene Linux-Spezialisten verstehen diese Meldungen.
Was bleibt, ist der Zusatzschutz, den Novell mit der AppArmor-Defaultkonfiguration seiner Suse-Distribution spendiert hat. Viele wichtige Programme sperrt AppArmor in ein enges, aber ausreichend dimensioniertes Korsett. Einbrechern stemmt sich damit eine weitere Verteidigungslinie entgegen, während AppArmor den Benutzer bei seiner Arbeit mit Linux nicht weiter behelligt. (fjl)
| Infos |
|
[1] Suse-Informationsseite zu AppArmor: http://de.opensuse.org/AppArmor
[2] AppArmor-Artikel mit Beispiel zum Erstellen eines Profils: Ralf Spenneberg, "Goldene Käfige", LinuxUser 03/2006, S. 58 ff. [3] Hintergrundartikel zur Funktionsweise von AppArmor: Ralf Spenneberg, "Allgemeine Schutzimpfung", Linux-Magazin 06/2006, S. 44 ff. [4] Artikel zu SELinux: Ralf Spenneberg, "Verstärkte Sicherheit", Linux-Magazin 06/2006, S. 36 ff. [5] Diskussion über die Unterschiede zwischen AppArmor und SELinux: Achim Leitner, Crispin Cowan und Daniel Riek, "Der stärkste Schutz", Linux-Magazin 06/2006, S. 50 ff. |
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2012 Linux New Media AG |
Last modified: 2008-11-05 17:01
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Admin-Magazin]
[Ubuntu User]
[Smart Developer]
[Linux Events]
[Linux Magazine]
[Ubuntu User]
[Admin Magazine]
[Smart Developer]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]