2.2. Inspizieren offener Ports zur Immunisierung von Programmen

Eine automatisierte Methode zum Auffinden von Netzwerkserver-Daemons, für die ein Profil erstellt werden sollte, ist der Einsatz des Werkzeugs unconfined. Sie können auch einfach einen Bericht dieser Informationen in der grafischen YaST-Benutzeroberfläche ansehen. (Anweisungen finden Sie in Abschnitt 4.3.1.1, „Anwendungsprüfbericht“ (↑ Novell AppArmor 2.0-Administrationshandbuch ).)

Das Werkzeug unconfined verwendet den Befehl netstat -nlp, um Ihre offenen Ports vom Computer aus zu inspizieren, die mit diesen Ports verbundenen Programme zu ermitteln und den geladenen Novell AppArmor-Profilsatz zu prüfen. Unconfined meldet dann diese Programme zusammen mit dem Novell AppArmor-Profil, das mit jedem Programm verbunden ist, oder es meldet „none“, wenn das Programm nicht eingeschränkt ist.

[Note]Anmerkung

Wenn Sie ein neues Profil für ein Programm erstellen, müssen Sie das Programm neu starten, damit unconfined den neuen Status mit Profil erkennen und melden kann.

Beispiel einer Ausgabe von unconfined:

2325 /sbin/portmap not confined 
37021 /usr/sbin/sshd2 confined
   by '/usr/sbin/sshd3 (enforce)' 
4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 
4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 
4505 /usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)'
5274 /sbin/dhcpcd not confined 
5592 /usr/bin/ssh not confined 
7146 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'
  
1

Der erste Teil ist eine Zahl. Diese Zahl ist die Prozess-ID-Nummer (PID) des lauschenden Programms.

2

Der zweite Teil ist eine Zeichenfolge, die den absoluten Pfad des lauschenden Programms angibt.

3

Der letzte Teil gibt das Profil an, welches das Programm einschränkt, falls vorhanden.

[Note]Anmerkung

Unconfined benötigt root-Berechtigungen und sollte nicht von einer Shell ausgeführt werden, die durch ein AppArmor-Profil eingeschränkt ist.

Unconfined unterscheidet nicht zwischen Netzwerkschnittstellen, daher meldet es alle uneingeschränkten Prozesse, selbst diejenigen, die an einer internen LAN-Schnittstelle lauschen.

Das Auffinden von Netzwerk-Client-Benutzeranwendungen hängt von Ihren Benutzereinstellungen ab. Das Werkzeug unconfined erkennt und meldet Netzwerkports, die von Client-Anwendungen geöffnet wurden, allerdings nur die Client-Anwendungen, die während der unconfined-Analyse ausgeführt werden. Dies ist ein Problem, da Netzwerkdienste eher ständig laufen, während Netzwerk-Client-Anwendungen nur dann ausgeführt werden, wenn sie den Benutzer interessieren.

Das Übernehmen von Novell AppArmor-Profilen für Netzwerk-Client-Benutzeranwendungen hängt auch von Benutzereinstellungen ab und Novell AppArmor ist eher für Server als für Arbeitsstationen konzipiert. Daher überlassen wir die Profilerstellung von Netzwerk-Client-Benutzeranwendungen dem Benutzer.

Für die aggressive Einschränkung von Desktop-Anwendungen unterstützt der Befehl unconfined die Option "Paranoid", die alle laufenden Prozesse und die entsprechenden AppArmor-Profile meldet, die eventuell mit jedem Prozess verbunden sein können. Der nicht eingeschränkte Benutzer kann dann entscheiden, ob jedes dieser Programme ein AppArmor-Profil benötigt.

Wenn Sie über neue oder geänderte Profile verfügen, können Sie sie zur Mailingliste apparmor-general@forge.novell.com hinzufügen und jeweils einen Anwendungsfall für das ausgeübte Anwendungsverhalten angeben. Das AppArmor-Team überprüft die Arbeit und übermittelt sie eventuell an openSUSE. Wir können nicht garantieren, dass alle Profile aufgenommen werden, aber wir bemühen uns nach Kräften, so viele wie möglich aufzunehmen, sodass die Endbenutzer zu den Sicherheitsprofilen in openSUSE beitragen können.

2.2.1. Immunisieren von Cron-Jobs

Für das Auffinden von Programmen, die von cron ausgeführt werden, müssen Sie Ihre lokale cron-Konfiguration prüfen. Leider ist die cron-Konfiguration ziemlich komplex, daher sind zahlreiche Dateien zu inspizieren. Regelmäßige Cron-Jobs werden von den folgenden Dateien ausgeführt:

/etc/crontab 
/etc/cron.d/* 
/etc/cron.daily/* 
/etc/cron.hourly/*
/etc/cron.monthly/* 
/etc/cron.weekly/*

Für die Cron-Jobs von root können Sie die Aufgaben mit crontab -e bearbeiten und die Cron-Aufgaben von root mit crontab -l auflisten. Sie müssen root-Benutzer sein, damit diese Befehle funktionieren.

Sobald Sie diese Programme gefunden haben, können Sie den Assistenten zum Hinzufügen von Profilen verwenden, um Profile für sie zu erstellen. Informationen finden Sie unter Abschnitt 3.3.1, „Hinzufügen eines Profils mit dem Assistenten“ (↑ Novell AppArmor 2.0-Administrationshandbuch ).

2.2.2. Immunisieren von Webanwendungen

Zum Auffinden von Webanwendungen sollten Sie Ihre Webserver-Konfiguration untersuchen. Der Apache-Webserver ist stark konfigurierbar und Webanwendungen können abhängig von Ihrer lokalen Konfiguration in vielen Verzeichnissen gespeichert sein. Standardmäßig speichert SUSE Linux Webanwendungen unter /srv/www/cgi-bin/. Soweit irgend möglich, sollte jede Webanwendung durch ein Novell AppArmor-Profil abgesichert werden.

Sobald Sie diese Programme gefunden haben, können Sie den AppArmor-Assistenten zum Hinzufügen von Profilen verwenden, um Profile für sie zu erstellen. Informationen finden Sie unter Abschnitt 3.3.1, „Hinzufügen eines Profils mit dem Assistenten“ (↑ Novell AppArmor 2.0-Administrationshandbuch ).

2.2.2.1. Einschränkung von CGI-Programmen und Unterprozessen in Webanwendungen

Da CGI-Programme vom Apache-Webserver ausgeführt werden, muss das Profil für Apache usr.sbin.httpd2-prefork (für Apache2 unter SUSE Linux) geändert werden, um Ausführungsberechtigungen für jedes dieser Programme hinzuzufügen. Beispiel: Das Hinzufügen der Zeile /srv/www/cgi-bin/my_hit_counter.pl rpx gibt Apache die Berechtigung, das Perl-Skript my_hit_counter.pl auszuführen, und verlangt, dass ein eigenes Profil für my_hit_counter.pl vorhanden ist. Wenn mit my_hit_counter.pl kein eigenes Profil verbunden ist, sollte die Regel /srv/www/cgi-bin/my_hit_counter.pl rix lauten, damit my_hit_counter.pl das Profil usr.sbin.httpd2-prefork erbt.

Einige Benutzer finden es eventuell unbequem, für jedes CGI-Skript, das Apache aufrufen könnte, Ausführungsberechtigungen anzugeben. Stattdessen kann der Admi­nistrator kontrollierten Zugriff auf Sammlungen von CGI-Skripts gewähren. Beispiel: Durch Hinzufügen der Zeile /srv/www/cgi-bin/*.{pl,py,pyc} rix kann Apache alle Dateien in /srv/www/cgi-bin/ ausführen, die auf .pl (Perl-Skripts) und .py oder .pyc (Python-Skripts) enden. Der ix-Teil der Regel sorgt dafür, dass die Python-Skripts das Apache-Profil erben, das geeignet ist, wenn Sie nicht für jedes Python-Skript ein eigenes Profil schreiben möchten.

[Note]Anmerkung

Wenn Sie die Funktionalität des Moduls zur Einschränkung von Unterprozessen (mod-apparmor) bei der Verwendung von Apache-Modulen (mod_perl und mod_php) durch Webanwendungen wünschen, benutzen Sie beim Hinzufügen eines Profils in YaST oder an der Befehlszeile die ChangeHat-Funktionen. Wie Sie die Einschränkung von Unterprozessen nutzen können, erfahren Sie unter Abschnitt 5.1, „Apache ChangeHat“ (↑ Novell AppArmor 2.0-Administrationshandbuch ).

Die Profilerstellung für Webanwendungen, die mod_perl und mod_php verwenden, erfordert eine geringfügig andere Vorgehensweise. In diesem Fall ist das „Programm“ ein Skript, das direkt durch das Modul im Apache-Prozess interpretiert wird, daher findet kein exec-Systemaufruf statt. Stattdessen ruft die Novell AppArmor-Version von Apache change_hat() auf und gibt ein Unterprofil an (einen „Hat“), das dem Namen des angeforderten URI entspricht.

[Note]Anmerkung

Der Name, den das auszuführende Skript erhält, ist eventuell nicht der URI, abhängig davon, wie Apache für die Suche nach Modulskripts konfiguriert wurde. Falls Sie Apache so konfiguriert haben, dass Skripts an einer anderen Stelle abgelegt werden, werden die anderen Namen im Syslog angezeigt, wenn Novell AppArmor Zugriffsverletzungen meldet. Siehe Kapitel 4, Verwalten von Anwendungen mit Profilen (↑ Novell AppArmor 2.0-Administrationshandbuch ).

Für mod_perl- und mod_php-Skripts ist dies der Name des angeforderten Perl-Skripts bzw. der angeforderten PHP-Seite. Beispiel: Durch Hinzufügen dieses Unterprofils kann die Seite localtime.php ausgeführt werden und auf die lokale Systemzeit zugreifen:

/usr/sbin/httpd2-prefork^/cgi-bin 
localtime.php { 
/etc/localtime                        r, 
/srv/www/cgi-bin/localtime.php        r, 
/usr/lib/locale/**                    r, 
}

Falls kein Unterprofil definiert wurde, wendet die Novell AppArmor-Version von Apache den Hat DEFAULT_URI an. Dieses Unterprofil genügt im Prinzip, um eine HTML-Webseite anzuzeigen. Der Hat DEFAULT_URI, den Novell AppArmor standardmäßig zur Verfügung stellt:

/usr/sbin/suexec2 ixr, 
/var/log/apache2/** rwl,
/home/*/public_html/**             r, 
/srv/www/htdocs/**                 r, 
/srv/www/icons/*.{gif,jpg,png}     r, 
/usr/share/apache2/**              r,
    

Wenn Sie ein einziges Novell AppArmor-Profil für alle Webseiten und CGI-Skripts wünschen, die Apache bereitstellt, ist es eine gute Lösung, das DEFAULT_URI-Unterprofil zu bearbeiten.

2.2.3. Immunisieren von Netzwerkagenten

Für das Auffinden von Netzwerkserver-Daemons, für die ein Profil erstellt werden sollte, prüfen Sie die offenen Ports auf Ihrem Rechner, beachten Sie die Programme, die auf diesen Ports reagieren, und stellen Sie Profile für möglichst viele dieser Programme zur Verfügung. Wenn Sie Profile für alle Programme mit offenen Netzwerk­ports bereitstellen, kann ein Angreifer nicht in das Dateisystem auf Ihrem Rechner gelangen, ohne eine Novell AppArmor-Profilrichtlinie zu durchlaufen.

Prüfen Sie Ihren Server manuell auf offene Netzwerkports von außerhalb des Rechners mithilfe eines Scanners wie nmap oder von innerhalb des Rechners mithilfe von netstat. Inspizieren Sie dann den Rechner, um zu bestimmen, welche Programme auf den entdeckten offenen Ports antworten.