Kapitel 13. Sicherheit

13.1. Was ist ein Sandkasten (sandbox)?
13.2. Was sind die Sicherheitsstufen (securelevel)?
13.3. Wieso wartet BIND (named) auf hohen Ports auf Anfragen?
13.4. Wieso wartet der Sendmail-Dienst sowohl auf Port 587 als auch auf dem Standard-Port 25 auf Anfragen?
13.5. Woher kommt dieser Benutzer toor mit UID 0? Ist mein System gehackt worden?

13.1.

Was ist ein Sandkasten (sandbox)?

Sandkasten (sandbox) ist ein Ausdruck aus dem Bereich Sicherheit. Er hat zwei Bedeutungen:

  • Ein Programm, das innerhalb virtueller Wände ausgeführt wird. Wenn ein Angreifer über eine Sicherheitslücke in diesen Programm einbricht, verhindern diese Wände ein tieferes Vordringen in das System.

    Der Prozess kann innerhalb der Wände laufen, das heißt nichts, was der Prozess in Bezug auf die Ausführung von Code tut, kann die Wände durchbrechen. Es ist also keine detaillierte Revision des Codes erforderlich, um gewisse Aussagen über seine Sicherheit machen zu können.

    Die Wände könnten z.B. eine Benutzerkennung sein. Dies ist die Definition, die in den Manualpages security(7) und named(8) benutzt wird.

    Nehmen Sie zum Beispiel den Dienst ntalk (siehe inetd(8)). Dieser Dienst ist früher mit der Benutzerkennung root gelaufen; nun läuft er mit der Benutzerkennung tty. Der Benutzer tty ist ein Sandkasten, der dazu gedacht ist, es jemandem, der über ntalk erfolgreich in das System eingebrochen ist, schwer zu machen, über diese Benutzerkennung hinaus vorzudringen.

  • Ein Prozess, der sich innerhalb einer simulierten Maschine befindet. Dies ist etwas fortgeschrittener; grundsätzlich bedeutet es, dass jemand, der in der Lage ist, in einen Prozess einzudringen, annehmen könnte, er könnte weiter in die Maschine eindringen, tatsächlich aber nur in eine Simulation der Maschine einbricht und keine echten Daten verändert.

    Der gängigste Weg, dies zu erreichen, ist, in einem Unterverzeichnis eine simulierte Umgebung zu erstellen und den Prozess in diesem Verzeichnis mit chroot auszuführen (für diesen Prozess ist / dieses Verzeichnis und nicht das echte / des Systems).

    Eine weitere gebräuchliche Anwendung ist, ein untergeordnetes Dateisystem nur mit Leserechten zu mounten, und dann darüber eine Dateisystemebene zu erstellen, die einem Prozess einen scheinbar schreibberechtigten Blick in das Dateisystem gibt. Der Prozess mag glauben, dass er in der Lage ist, diese Dateien zu verändern, aber nur der Prozess sieht diesen Effekt - andere Prozesse im System natürlich nicht.

    Es wird versucht, diese Art von Sandkasten so transparent zu gestalten, dass der Benutzer (oder Hacker) nicht merkt, dass er sich in ihm befindet.

UNIX® implementiert zwei Arten von Sandkästen - eine auf Prozessebene und die andere auf der Ebene der Benutzerkennung.

Jeder Prozess unter UNIX® ist komplett von allen anderen Prozessen abgeschirmt. Ein Prozess kann den Adressraum eines anderen Prozesses nicht modifizieren.

Ein UNIX® Prozess gehört einer bestimmten Benutzerkennung. Falls die Benutzerkennung nicht die von root ist, dient sie dazu, den Prozess von Prozessen anderer Benutzer abzuschirmen. Die Benutzerkennung wird außerdem dazu genutzt, Daten auf der Festplatte abzuschirmen.

13.2.

Was sind die Sicherheitsstufen (securelevel)?

Sicherheitsstufen (securelevel) sind ein Sicherheitsmechanismus, der im Kernel implementiert ist. Wenn die Sicherheitsstufe einen positiven Wert hat, verhindert der Kernel die Ausführung bestimmter Tätigkeiten; nicht einmal der Super-User (root) darf sie durchführen. Zurzeit können über die Sicherheitsstufen unter anderem die folgenden Tätigkeiten geblockt werden:

  • Zurücksetzen bestimmter Dateiattribute, wie zum Beispiel schg (das system immutable Attribut).

  • Schreibender Zugriff auf die Speicherbereiche des Kernels mittels /dev/mem und /dev/kmem.

  • Laden von Kernel-Modulen.

  • Änderungen an den Firewall-Regeln.

Das folgende Kommando kann benutzt werden, um die eingestellte Sicherheitsstufe eines aktiven Systems abzufragen:

# sysctl -n kern.securelevel

Die Ausgabe enthält den aktuellen Wert der Sicherheitsstufe. Wenn die Zahl positiv (größer als Null) ist, sind zumindest einige der Schutzmaßnahmen aktiviert.

Die Sicherheitsstufe eines laufenden Systems kann nicht verringert werden, da dies den Mechanismus nutzlos machen würde. Wenn Sie eine Tätigkeit ausführen müssen, bei der die Sicherheitsstufe nicht-positiv sein muss, dann müssen Sie die Variablen kern_securelevel und kern_securelevel_enable in /etc/rc.conf ändern und das System neustarten.

Weitere Informationen über die Sicherheitsstufen und was die Einstellungen bewirken, können Sie init(8) entnehmen.

Warnung:

Die Sicherheitsstufen sind kein magischer Zauberstab; es gibt viele bekannte Probleme. Und in der Mehrzahl der Fälle vermitteln sie ein falsches Gefühl von Sicherheit.

Eines der größten Probleme ist, dass alle für den Start des Systems benötigten Dateien geschützt sein müssen, damit die Sicherheitsstufe effektiv sein können. Wenn es ein Angreifer schafft, seine eigenen Programme ausführen zu lassen, bevor die Sicherheitsstufe gesetzt wird (was leider erst gegen Ende des Startvorgangs erfolgen kann, da viele der notwendigen Tätigkeiten für den Systemstart nicht mit einer gesetzten Sicherheitsstufe möglich wären), werden die Schutzmechanismen ausgehebelt. Es ist zwar nicht technisch unmöglich, alle beim Systemstart genutzten Dateien zu schützen; allerdings würde in einem so geschützten System die Administration zu einem Alptraum, da man das System neu starten oder in den Single-User-Modus bringen müsste, um eine Konfigurationsdatei ändern zu können.

Dieses und andere Probleme werden häufig auf den Mailinglisten diskutiert, speziell auf auf der Mailingliste FreeBSD security. Das verfügbare Archiv enthält ausgiebige Diskussionen. Einige Benutzer sind guter Hoffnung, dass das System der Sicherheitsstufen bald durch ein besser konfigurierbares System ersetzt wird.

13.3.

Wieso wartet BIND (named) auf hohen Ports auf Anfragen?

BIND benutzt einen Port mit einer hohen, zufälligen Nummer für den Versand von Anfragen. Aktuelle Versionen wählen einen neuen, zufälligen UDP-Port für jede Anfrage. Das kann für manche Netzwerkkonfigurationen Probleme verursachen, besonders wenn eine Firewall eingehende UDP-Pakete auf bestimmten Ports blockiert. Wenn Sie durch eine solche Firewall wollen, können Sie die Optionen avoid-v4-udp-ports und avoid-v6-udp-ports ausprobieren, um ein zufälliges Auswählen von Portnummern innerhalb eines blockierten Bereiches zu verhindern.

Warnung:

Wenn eine Portnummer (wie 53) über die Optionen query-source oder query-source-v6 in /etc/namedb/named.conf spezifiziert ist, wird zufällige Portauswahl nicht verwendet. Es wird dringend empfohlen, dass diese Optionen nicht für die Spezifikation von festen Portnummern verwendet wird.

Es ist eine sehr gute Angewohnheit, die Ausgaben von sockstat(1) durchzusehen und auf merkwürdige Dinge zu achten.

13.4.

Wieso wartet der Sendmail-Dienst sowohl auf Port 587 als auch auf dem Standard-Port 25 auf Anfragen?

Aktuelle Versionen von Sendmail unterstützen eine Technik zur Einlieferung von Mails, die Port 587 nutzt. Diese Technik wird zwar noch nicht oft angewendet, erfreut sich aber ständig steigender Popularität.

13.5.

Woher kommt dieser Benutzer toor mit UID 0? Ist mein System gehackt worden?

Keine Panik. toor ist ein alternativer Account für den Super-User (wenn man root rückwärts schreibt, erhält man toor). Dieser Account ist für die Verwendung mit einer alternativen Shell vorgesehen; damit ist es nicht mehr erforderlich, die Shell von root zu ändern. Dies ist wichtig, wenn eine Shell verwendet wird, die nicht zum Basissystem von FreeBSD gehört, zum Beispiel aus einem Port oder einem Paket. Diese Shells werden in der Regel in /usr/local/bin installiert und dieses Verzeichnis liegt standardmäßig auf einem anderen Dateisystem. Wenn die Shell von root in /usr/local/bin liegt und das Dateisystem, auf dem /usr/local/bin liegt nicht gemountet werden kann, kann sich root nicht mehr einloggen, um das Problem zu beheben. Es ist allerdings möglich, das System zu rebooten und das Problem im Single-User-Modus zu lösen, da man hier gefragt wird, welche Shell benutzt werden soll.

Einige Anwender benutzen toor mit einer alternativen Shell für die tägliche Arbeit und benutzen root (mit der Standard-Shell) für den Single-User-Modus und für Notfälle. Standardmäßig kann man sich nicht als toor anmelden, da der Account kein gültiges Passwort hat; Sie müssen sich also als root anmelden und ein Passwort für toor setzen, wenn Sie diesen Account benutzen wollen.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.