Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Über die Autoren
Über dieses Buch
Linux vs. BSD
1 Der Kernel
2 Die Grundlagen aus Anwendersicht
3 Die Shell
4 Reguläre Ausdrücke
5 Tools zur Dateibearbeitung
6 Die Editoren
7 Shellskriptprogrammierung
8 Benutzerverwaltung
9 Grundlegende Verwaltungsaufgaben
10 Netzwerk-Grundlagen
11 Anwendersoftware für das Netzwerk
12 Netzwerkdienste
13 Mailserver unter Linux
14 LAMP
15 DNS-Server
16 Secure Shell
17 Die grafische Oberfläche
18 Window-Manager und Desktops
19 X11-Programme
20 Multimedia und Spiele
21 Softwareentwicklung
22 Crashkurs in C und Perl
23 Sicherheit
24 Prozesse und IPC
25 Bootstrap und Shutdown
26 Dateisysteme
27 Virtualisierung und Emulatoren
A Die Installation
B Lösungen zu den einzelnen Aufgaben
C Kommandoreferenz
D X11-InputDevices
E MBR
F Die Buch-DVDs
G Glossar
H Literatur

Download:
- ZIP, ca. 6,3 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Plötner, Steffen Wendzel
Das distributionsunabhängige Handbuch
Buch: Linux

Linux
2., aktualisierte und erweiterte Auflage
1119 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1090-4
gp 23 Sicherheit
  gp 23.1 Sicherheitskonzepte
  gp 23.2 Unix und Sicherheit
    gp 23.2.1 Benutzer und Rechte
    gp 23.2.2 Logging
    gp 23.2.3 Netzwerkdienste
  gp 23.3 Grundlegende Absicherung
    gp 23.3.1 Nach der Installation
    gp 23.3.2 Ein einfaches Sicherheitskonzept
  gp 23.4 Backups und Datensicherungen
    gp 23.4.1 Die Backup-Strategie
    gp 23.4.2 Die Software
  gp 23.5 Updates
  gp 23.6 Firewalls
    gp 23.6.1 Grundlagen
    gp 23.6.2 Firewalling unter Linux: netfilter/iptables
    gp 23.6.3 Iptables im Detail
  gp 23.7 Proxyserver
    gp 23.7.1 Funktion
    gp 23.7.2 Einsatz
    gp 23.7.3 Beispiel: Squid unter Linux
  gp 23.8 Virtuelle Private Netzwerke mit OpenVPN
    gp 23.8.1 Pre-shared keys
    gp 23.8.2 Zertifikate mit OpenSSL
    gp 23.8.3 OpenVPN als Server einrichten
    gp 23.8.4 OpenVPN als Client
  gp 23.9 Snort
    gp 23.9.1 Aufbau der Intrusion Detection
    gp 23.9.2 snort.conf
  gp 23.10 Mails verschlüsseln: PGP und S/MIME
    gp 23.10.1 PGP/GPG
    gp 23.10.2 S/MIME
  gp 23.11 Trojanische Pferde
  gp 23.12 Logging
    gp 23.12.1 Bei der Analyse Zeit sparen
  gp 23.13 Partitionierungen
  gp 23.14 Restricted Shells
  gp 23.15 chroot
  gp 23.16 LKMs
  gp 23.17 Kernel-Erweiterungen und gcc-propolice
    gp 23.17.1 gcc ProPolice
    gp 23.17.2 SeLinux und SeBSD
    gp 23.17.3 OpenWall (OWL)
    gp 23.17.4 grsecurity
    gp 23.17.5 PaX
  gp 23.18 Sichere Derivate und Distributionen
    gp 23.18.1 Trusted Solaris (jetzt Teil von Solaris)
    gp 23.18.2 OpenBSD
    gp 23.18.3 TrustedBSD
    gp 23.18.4 Hardened Gentoo
    gp 23.18.5 OpenWall
    gp 23.18.6 Adamantix
    gp 23.18.7 Hardened Linux
  gp 23.19 Zusammenfassung
  gp 23.20 Aufgaben


Galileo Computing

23.17 Kernel-Erweiterungen und gcc-propolice  downtop

Im Folgenden sollen einige interessante Erweiterungen für Linux- und BSD-Kernel besprochen werden.

Sie werden zudem sehen, dass wir dieses Thema nur sehr grundlegend behandeln können.


Galileo Computing

23.17.1 gcc propolice  downtop

Bevor wir allerdings zu den eigentlichen Kernel-Patches kommen, soll an dieser Stelle noch der sogenannte »propolice«-Patch für den GNU C Compiler (gcc) besprochen werden. Dieses Feature ist auch als »GCC Stack Smashing Protection« bekannt, und es kommt von IBM.

Die ProPolice Extension baut verschiedene Schutzmechanismen für den Stack ein, um Angriffe wie Buffer-Overflows zu erschweren.

Zu diesen Features gehört der Schutz der Pointer innerhalb einer Stackframe. Zudem werden lokale Funktionsvariablen (bei einer IA32-Architektur) vor den Buffern platziert. Überschreibt ein Angreifer also einen Buffer, so überschreibt er nicht die Variablen. Die gesicherte Rücksprungadresse und der Extendend Instruction Pointer (EIP) werden ebenfalls vor den Buffern platziert und können somit nicht mehr überschrieben werden. Um einen überschriebenen Buffer zu detektieren, wird hinter den Buffern zudem noch ein Canary-Wert eingefügt (der durch /dev/random mit Zufallswerten arbeitet): Wird dieser Canary-Wert verändert, dann wird ein Buffer überschrieben, und es steht fest, dass der Stack beschädigt wurde.

In neueren Versionen des Compilers ist der ProPolice-Patch bereits enthalten. Im Folgenden sei allerdings kurz die Vorgehensweise zur Erstellung des gcc-3.x mit dem Patch gezeigt.

Die Installation erfolgt von Hand, wenn Sie nicht gerade eine Distribution benutzen, die bereits den modifizierten gcc verwendet, etwa Hardened Linux (oder OpenBSD). Die dazu benötigten Patches finden Sie unter www.trl.ibm.com/projects/security/ssp/.

Im Folgenden wird auf fast die gleiche Weise wie früher bei Hardened Linux der gcc modifiziert. Verwendet wird dabei derzeit die Version 3.4.4.

$ tar -xf gcc-3.4.4.tar.gz 
$ cd gcc-3.4.4 
$ patch -p0 < ../gcc_3_4_4.dif 
$ tar -xzvf ../protector-3.4.4-1.tar.gz 
$ mkdir obj && cd obj 
$ ../configure --prefix=/usr 
$ make bootstrap 
$ make install

Anwendungen mit SSP kompilieren

Um ein Programm nun so zu kompilieren, dass es durch die SSP geschützt wird, übergibt man beim Kompilieren den Parameter -fstack-protector.

Achtung: Im Normalfall werden nur Buffer ab einer Größe von 8 Bytes durch den Patch geschützt. Modifiziert man allerdings den Patch bzw. den Quellcode des gcc, so lässt sich diese Grenze anpassen.

Das folgende Programm soll nun einmal mit und einmal ohne SSP übersetzt werden. Dabei werden, wenn mehr Byte übergeben werden, als in dem Buffer »buf« gespeichert werden können, u.  U. andere Werte auf dem Stack überschrieben. <Es muss nicht unbedingt eine andere Variable überschrieben werden, da der gcc manchmal mehr Speicher als nötig reserviert.> Wir werden uns den Unterschied einmal ansehen.

#include <string.h> 
 
int main(int argc, char *argv[]) 
{ 
        char buf[10]; 
 
        if (argc > 1) 
                strcpy(buf, argv[1]); 
 
        return 0; 
}

Listing 23.28    test.c

hikoki:/tmp/ssp> gcc -o test test.c 
hikoki:/tmp/ssp> ./test abcdefffffffffffffffffffffffff 
Segmentation fault 
hikoki:/tmp/ssp> gcc -o test -fstack-protector test.c 
hikoki:/tmp/ssp> ./test abcdefffffffffffffffffffffffff 
*** stack smashing detected ***: ./test terminated 
Abort 
hikoki:/tmp/ssp>

Listing 23.29    SSP-Test


Galileo Computing

23.17.2 SeLinux und SeBSD  downtop

Beim SeLinux-Projekt handelt es sich um eine Erweiterung des Linux-Kernels um sogenannte Mandatory Access Control Policies. Hierbei handelt es sich um die Möglichkeit, die Rechte einzelner Prozesse stark einzugrenzen.


Galileo Computing

23.17.3 OpenWall (OWL)  downtop

Das OpenWall-Projekt ist Bestandteil vieler gehärteter Linux-Distributionen. Die Funktionalitäten von OpenWall werden teilweise auch von anderen Kernel-Patches unterstützt (besonders von grsecurity/PaX).

Zu den Features gehört eine Stack-Härtung: Der Stack eines Programms kann oft durch Buffer-Overflow-Exploits angegriffen werden, wozu der Stack ausführbar sein muss. OpenWall unterbindet diese Möglichkeit.

Die Links und FIFOs im Verzeichnis /tmp und der Zugriff auf /proc werden ebenfalls durch OWL gehärtet.

Weitere Features sind die RLIMIT_NPROC-Überprüfung für den Syscall execve() und das Löschen von nicht verwendeten Shared Memory Pages im Speicher. <RLIMIT_NPROC gibt die Anzahl der Prozesse an, die ein Benutzer maximal gleichzeitig laufen lassen kann. Shared Memory ist eine Art der Interprozesskommunikation (IPC).>


Galileo Computing

23.17.4 grsecurity  downtop

Bei grsecurity handelt es sich um einen sehr umfangreichen Kernel-Patch plus Administrationstools.

Wir können an dieser Stelle nicht auf die Feinheiten von grsecurity eingehen und werden nur die wichtigsten erwähnen.

grsecurity implementiert diverse Features, die auch OWL kennt (FIFO-Restrictions etc.), Role-Based Access Control (RSBAC), zufällige Prozess-IDs, chdir()-Hardening, Unterstützung für zufällige TCP-Quellports, Logging von Signalen, Zugriffsbeschränkungen auf /dev/kmem und /dev/mem sowie das komplette PaX-Projekt, das wir gleich besprechen werden.

Eine ausführliche Auflistung der aktuellen Features erhalten Sie auf der Seite http://www.grsecurity.net/features.php.


Galileo Computing

23.17.5 PaX  toptop

PaX (Page exec) ist ein Kernel-Patch, der das Ziel hat, Speicherseiten abzusichern. Das Primärziel ist die Verhinderung von erfolgreichen Stack-Smashing-Angriffen (die sogenannte Stack-Smashing-Protection), die nicht mit dem ProPolice-Patch des gcc zu verwechseln ist. Zu diesem Zweck wurde eine »executable space protection« implementiert, die – vereinfacht gesagt – verhindern soll, dass es zur Ausführung von Shell-Code und zu erfolgreichen Return-to-Libc-Angriffen kommt. <Dieses Thema ist sehr umfassend, und es wird leider wesentlich mehr Security- und Kernel-Know-how zum Verständnis von PaX benötigt, als wir es Ihnen hier bieten können.>

PaX erreicht das Ziel durch zwei Techniken:

1. Nicht-ausführbare Speicherseiten Eingeschleuster Code, der zur Ausführung gebracht werden soll, muss sich innerhalb von Speicherseiten (pages) befinden, denen das Ausführen von Programmcode erlaubt ist. Sind diese Seiten nicht ausführbar, so wird auch der Code nicht ausgeführt.
       
2. Zufällige Speicheradressen Wenn ein Angreifer versucht, eine bestimmte Funktion im Speicher aufzurufen, obwohl dies nicht geplant ist, so wird dazu die Speicheradresse dieser Funktion benötigt. Durch die sogenannte »Address Space Layout Randomzation« wählt PaX diese Adressen bei jedem Programmstart neu, und ein Erraten der Adresse einer Funktion wird somit sehr erschwert.
       


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Linux






 Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Einstieg in Linux






 Einstieg in Linux


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: Praxisbuch Netzwerk-Sicherheit






 Praxisbuch
 Netzwerk-Sicherheit


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de