Dienstag, 22. Mai 2012


Artikel

Dezember 2006 | Artikel

Grsecurity und PaX Fortsetzung, Teil 2

Teil 1   Teil 2   

RBAC
RBAC (Role Based Access Control) ist ein Verfahren, das eine erweiterte Zugangskontrolle auf Dateien oder Dienste unter Mehrbenutzersystemen zur Verfügung stellt. Benutzer werden in Gruppen eingeteilt, wobei einzelne Benutzer mehreren Gruppen angehören können. Die Gruppenzugehörigkeit räumt den Zugriff auf Ressourcen ein oder verhindert diesen. Eine Gruppe wird als Rolle (role) bezeichnet. Somit ist es einem unpriviligiertem Benutzer möglich, zur Ausübung einer administrativen Tätigkeit eine entsprechende Rolle auszuwählen – sofern er das Recht dazu hat – und bekommt damit alle Befugnisse, die zur Umsetzung erforderlich sind. Nach dieser Vorgehensweise ist es möglich, Zugriffsrechte nicht nur individuell für einen Benutzer, sondern auch für komplette Gruppen zu verteilen. Am häufigsten werden die Rechte Lesen, Schreiben und Ausführen kontrolliert, das RBAC-System stellt zusätzlich noch weitere Berechtigungen zur Verfügung.

Das RBAC-System von Grsecurity wird über das Programm gradm administriert. Die RBAC-Regeln werden vom Systemadministrator angelegt. Um das Anlegen von Regeln zu erleichtern, verfügt gradm über einen „Learning Mode“, der aus dem laufenden System Regeln generiert. Eine detaillierte Dokumentation zum RBAC-System von Grsecurity finden Sie in der Grsecurity-ACL-Dokumentation.

Randomisierung
Der Grsecurity-Patch erweitert den Linux-Kernel um Funktionen zur Randomisierung der TCP-Sequenznummern und PIDs (Prozess-IDs). Durch die Randomisierung der TCP-Sequenznummern wird die Vorausberechnung von Sequenznummern (z.B. für eine „Session Hijacking“-Attacke) unmöglich, da ein Angreifer die Reihenfolge der Sequenznummern nicht berechnen und eine bestehende Verbindung daher nicht übernehmen kann. Bei Start eines Prozesses werden PIDs in der Regel sequenziell vergeben. Zufällige PIDs verhindern zum Beispiel das Erraten von temporären Dateinamen (Race Conditions).

Eingeschränkte Sichtbarkeit von Prozessen
Je mehr Informationen zu einem System vorliegen, desto einfacher ist es einem Angreifer, Fehler aufzudecken, um diese zu seinen Gunsten auszunutzen. Unter einem ungepatchten Kernel ist es möglich, alle Informationen zu Prozessen, zum Beispiel über die Programme ps (1) und top (1), einzusehen. Die Grsecurity-Erweiterung ermöglicht einem Benutzer nur die Sicht auf Prozesse, die ihm gehören.

Chroot Hardening
Chroot ist eine Funktion auf Unix-Systemen, um das Wurzelverzeichnis (Rootverzeichnis) zu ändern, um damit einen Prozess inklusive seiner Kindprozesse unterhalb dieser Verzeichnisstruktur einzusperren. Ein Programm, das auf ein Verzeichnis chrooted wurde, hat nicht mehr die Möglichkeit, auf Dateien außerhalb dieses Verzeichnisses zuzugreifen. Die Benutzung einer chroot-Umgebung bietet somit eine Möglichkeit, Programme in eine so genannte Sandbox zu versetzen. Der Grsecurity-Patch erweitert den Linux-Kernel um viele sinnvolle Restriktionen, die eine chroot-Umgebung sehr viel sicherer machen. Details zu den chroot-Restriktionen von Grsecurity sind wieder auf der Projektseite unter dem Menüpunkt FEATURES zu finden.

Auditing-Funktionen
Über erweiterte Auditing-Funktionen ist es möglich, Programmausführungen, Überschreitungen von Ressourcen, Verzeichniswechsel, mount und umount-Aufrufe, Verstellen der Systemzeit, verschiedene Signale und vieles mehr für eine bestimmte Gruppe oder alle Benutzer zu protokollieren. Jeder Protokolleintrag verfügt zusätzlich zu den üblichen Informationen über die IP-Adresse des Verursachers, sofern eine zum Protokollieren vorgesehene Funktion von einem entfernten System ausgeführt wird.

Trusted Path Execution
Trusted Path Execution (TPE) ist ein Sicherheitskonzept, bei dem Benutzer Programme nur ausführen können, wenn sie in einem Verzeichnis liegen, das dem Benutzer root gehört und nur root das Schreibrecht darauf besitzt. Somit ist es Administratoren ein Leichtes, den Umfang der zur Ausführung stehenden Programme festzulegen. Selbst die Ausführung von selber geschriebenen Skripten ist nicht möglich, solange diese nicht in einem vertrauenswürdigen Verzeichnis liegen.

Sysctl
Über sysctl (8) können Sie die Grsecurity-Optionen im laufenden System aktivieren und deaktivieren. Alle Optionen beginnen mit „kernel.grsecurity“. Der Wert 1 bedeutet aktiviert, der Wert 0 deaktiviert. Bei der Konfiguration des Kernels können Sie festlegen, ob die Sysctl-Optionen per default beim Systemstart aktiviert werden. Aktivieren Sie nicht per default, so müssen die Optionen nach dem Start entweder händisch oder in der Datei /etc/sysctl.conf gesetzt werden. Wird die Option kernel.grsecurity.grsec_lock aktiviert, so ist es nicht mehr möglich, Änderungen über systctl vorzunehmen. Listing 1 zeigt ein Beispiel für einen mit Grsecurity konfigurierten Server.

  1. Listing 1
  2. ---------------------------------------------------------------
  3. # sysctl -a | grep -i grsec
  4. kernel.grsecurity.grsec_lock = 0
  5. kernel.grsecurity.destroy_unused_shm = 1
  6. kernel.grsecurity.chroot_findtask = 1
  7. kernel.grsecurity.dmesg = 1
  8. kernel.grsecurity.audit_mount = 1
  9. kernel.grsecurity.rand_tcp_src_ports = 1
  10. kernel.grsecurity.rand_pids = 1
  11. kernel.grsecurity.chroot_deny_sysctl = 1
  12. kernel.grsecurity.chroot_caps = 1
  13. kernel.grsecurity.chroot_restrict_nice = 1
  14. kernel.grsecurity.chroot_deny_mknod = 1
  15. kernel.grsecurity.chroot_deny_chmod = 1
  16. kernel.grsecurity.chroot_enforce_chdir = 1
  17. kernel.grsecurity.chroot_deny_pivot = 1
  18. kernel.grsecurity.chroot_deny_chroot = 1
  19. kernel.grsecurity.chroot_deny_fchdir = 1
  20. kernel.grsecurity.chroot_deny_mount = 1
  21. kernel.grsecurity.chroot_deny_unix = 1
  22. kernel.grsecurity.chroot_deny_shmat = 1
  23. kernel.grsecurity.forkfail_logging = 1
  24. kernel.grsecurity.signal_logging = 1
  25. kernel.grsecurity.fifo_restrictions = 1
  26. kernel.grsecurity.linking_restrictions = 1
  27. kernel.osrelease = 2.6.18-grsec
Troubleshooting mit chpax
Es gibt Programme, die während ihrer Laufzeit auf durch PaX geschützte Speicherbereiche schreibend oder ausführend zugreifen müssen (z.B. Wine und Xorg/Xfree). Mit dem Programm chpax können Sie alle PaX-Attribute für Programme explizit setzen (aktivieren/deaktivieren). Sollte ein Programm nicht funktionieren bzw. abstürzen, deaktivieren Sie im ersten Schritt alle PaX-Attribute. Funktioniert das Programm darauf, können Sie eine Funktion nach der anderen aktivieren, um festzustellen, mit welcher Konfiguration das Programm funktioniert. Listing 2 stellt das Anzeigen und Deaktivieren aller PaX Flags für den X-Server Xorg dar. Für Details zu den Optionen rufen Sie bitte die Manualpage zu chpax auf.

  1. Listing 2
  2. ---------------------------------------------------------------------
  3. # chpax -v /usr/bin/Xorg
  4. ----[ chpax 0.7 : Current flags for /usr/bin/Xorg (PeMRxS) ]----
  5. * Paging based PAGE_EXEC : enabled (overridden)
  6. * Trampolines : not emulated
  7. * mprotect() : restricted
  8. * mmap() base : randomized
  9. * ET_EXEC base : not randomized
  10. * Segmentation based PAGE_EXEC : enabled
  11. # chpax -pemrxs /usr/bin/Xorg
  12. # chpax -v /usr/bin/Xorg
  13. ----[ chpax 0.7 : Current flags for /usr/bin/Xorg (pemrxs) ]----
  14. * Paging based PAGE_EXEC : disabled
  15. * Trampolines : not emulated
  16. * mprotect() : not restricted
  17. * mmap() base : not randomized
  18. * ET_EXEC base : not randomized
  19. * Segmentation based PAGE_EXEC : disabled
Fazit
Sobald ein Server an das Internet angeschlossen ist, steigt die Wahrscheinlichkeit automatisierter oder gezielter manueller Angriffe. Ein mit Grsecurity gepatchter und richtig konfigurierter Server bietet ein sehr hohes Maß an Systemsicherheit, kann aber nicht vor allen Umständen schützen. Computersysteme sollten im User- wie auch im Kernelspace immer auf dem aktuellsten Stand gehalten werden.

Oliver Hamel, 1977 in Berlin geboren, arbeitet als selbstständiger IT-Consultant und Systemadministrator mit Schwerpunkt Linux. Er verfügt über langjährige Erfahrungen im Umgang mit Linux-Systemen und ist nach LPIC-2 zertifiziert.

Teil 1   Teil 2   

Kommentare