Webwehr - Red Hat People

Werbung
Sysadmin
Webserver vor Einbrüchen schützen mit Mod-Selinux
Web Application Firewalls wehren bekannte Angriffe ab, bieten jedoch keinen Schutz vor den immer neuen
Tricks der Cracker. Mod-Selinux schiebt ihnen den endgültigen Riegel vor. Thorsten Scherf
System-Ressourcen einschränkt. Nun stehen jedoch beim Einsatz von Webapplikationen primär Web- beziehungsweise
Applikationsserver und Datenbanken im
Vordergrund und benötigen besonderen
Schutz.
Mit Hilfe von Security Enhanced PostgreSQL (SE-PostgreSQL) [2] und
Mod-Selinux [3] lassen sich nun auch
Webapplikationen und deren Zugriff auf
einzelne Datenbank-Objekte unter das
Schutzschild von SE Linux stellen. Dass
dies zwingend notwendig ist zeigt eine
Studie der Little eArth Corporation (LAC)
vom März 2009 (Abbildung 1). Hiernach
zeigt sich eine deutliche Zunahme der
Angriffe auf webbasierte Applikationen
von 53 Prozent im Jahr 2006 auf über 90
Prozent im Jahre 2008.
© Jaroslaw Grudzinski, 123RF
2
Linux-Magazin 10/09
Mod-Selinux
Webwehr
Web-basierte Applikationen entwickeln
sich immer mehr zu einem beliebten
Angriffspunkt für Einbruchsversuche in
Computersysteme. Vor modernen Angriffsmethoden wie SQL Injection und
Cross Site Scripting bieten klassische
Firewall-Systeme keinen Schutz, somit
kann ein Fehler in einer Webapplikation fatale Folgen haben. Erstens sind
Webapplikationen extrem dynamisch
und komplex, zweitens kann der Entwickler einer Webanwendung nicht in
die Zukunft blicken und alle möglichen
Gefahren bereits im Vorfeld erkennen
und eliminieren.
Eine Barriere bilden so genannte Web
Application Firewalls (WAF), die mit
Wissen über die beschriebenen Angriffe
ausgestattet sind. Zusätzlich hat sich im
Open-Source-Umfeld in den letzten Jahren Mod-Security [1] verbreitet. Hierbei
handelt es sich um ein Apache-Modul,
anhand von Regelsätzen den eingehenden Datenstrom auf verdächtige Inhalte
überwacht. Mod-Security arbeitet ähn-
lich wie ein Intrusion-Detection-System,
das anhand einer Pattern-Datenbank
unerwünschte Datenpakete verwirft.
Hiermit lässt sich bereits ein großer
Anteil gefährlicher Pakete vor der Übergabe an die Web-Applikation abfangen.
Aber was passiert mit Paketen, die trotzdem durchrutschen? Systemen, die auf
Basis von Pattern-Matching arbeiten, erkennen ja immer nur bekannte Muster
wieder und versagen somit bei bisher
unbekannten Angriffsmethoden. Dann
würde das eigentlich unerwünschte Paket
problemfrei durchgereicht und könnte
innerhalb der Web-Applikation Schaden
anrichten.
SE Linux für die Datenbank
Auf Betriebssystem-Ebene löst der Administrator solche Probleme mit Hilfe von
Mandatory Access Control (MAC). In diesem Bereich hat sich in letzten Jahren SE
Linux als Standard etabliert. Das Problem
ist aber, dass SE Linux nur den Zugriff auf
Eigener Security-Context
Bei klassischen PostgreSQL-Installationen
meldet sich ein Benutzer mit seinem Benutzernamen an und authentifiziert sich
mit seinem Passwort. Der Benutzer erhält dann Zugriff auf alle Objekte die für
dieses Benutzerkonto zugänglich sind,
wobei das Benutzerkonto hierbei unabhängig vom eigentlichen Systemkonto
ist. Im Fall von SE-PostgreSQL teilt die
Funktion »getpeercon()« den SecurityContext des zugreifenden Client-Sockets
mit: entweder den Security-Context eines
zugreifenden Benutzers oder den eines
Prozesses. Somit bekommt jede Verbindung zur Datenbank einen individuellen
Security-Context zugewiesen.
Da der Administrator bei SE-PostgreSQL
auch jede Tabelle und jedes darin enthaltene Objekt mit einem Security-Label
versehen darf, kann er über das zentrale SE-Linux-Regelwerk genau festlegen, welcher Benutzer beziehungsweise
Anders als bei den klassischen SystemObjekten, beispielsweise Dateien oder
Verzeichnissen eines Dateisystems, bei
denen der Security-Context in den erweiterten Attributen gespeichert sind, hält
SE-PostgreSQL den Security-Context für
ein Datenbank-Objekt in einem besonderen Systemkatalog vor. In solchen Systemkatalogen befinden sich bei relationalen Datenbanksystemen üblicherweise
ihre Schemadaten und andere Metainformationen. SE-PostgreSQL führt einen
zusätzlichen Katalog mit dem Namen
»sg_security« ein.
In diesem Katalog führt SE-PostgreSQL
ein Mapping zwischen dem eigentlichen
SE Linux als Apache-Modul
Ähnlich verhält es sich mit dem Apache-Modul Mod-Selinux. Hiermit ist es
möglich, unterschiedliche Webserver-Instanzen mit einem individuellen SecurityContext zu starten anstatt für jeden Prozess immer wieder den gleichen Kontext
zu verwenden. Welcher Security-Context
für eine Webserver-Instanz zum Einsatz
kommt, hängt nun vom zugreifenden Benutzer ab.
Die Vorgehensweise ähnelt der eines klassischen Shell-Logins. Nach erfolgreicher
Authentifizierung mittels »login« oder
»ssh« bekommt die Shell des Benutzers
einen Security-Kontext zugewiesen. Der
Anwender kann nun, gemäß der in diesem Kontext gestatteten Rechte, auf dem
System arbeiten. Führt er eine Aktion
aus, die für seinen Kontext nicht gestattet
ist, dann verhindert SE Linux sie.
Im Fall von Mod-Selinux ist es der Webserver Apache, der als Agent/​Proxy für
einen zugreifenden Benutzers agiert. Meldet er sich mit seinem Benutzerkonto an,
verwendet der Webserver-Prozess den
Kontext des Benutzers. Über eine Abfrage
des Security-Servers im Kernel, wird erkennbar welche Rechte dieser Prozess
hat und auf welche Objekte der Benutzer
– über den Webserver als Agent/​Proxy –
nun Zugriff erhält und auf welche nicht.
Wer SE-PostgreSQL als Backend für die
Webapplikation verwendet, weitet die
Zugriffskontrolle sogar auf einzelne Objekte innerhalb der Datenbank aus.
Bevor es an die Konfiguration geht, ist
erst einmal das Paket Mod-Selinux zu installieren. Es ist in den Software-Repositories der großen Linux-Distribution standardmäßig enthalten, alternativ finden
sich auf der Projektseite [2] die Quellen
zur Installation. Nach erfolgreicher Installation liegt auf einem Fedora-11-System
die Datei »mod_selinux.conf« im Verzeichnis »/etc/httpd/conf.d«. Die Frage
ist nun, wie bekommt der Benutzer einer
Webapplikation seinen Security-Context?
Mod-Selinux bietet hierfür mehrere Möglichkeiten an, die in der Konfigurationsdatei von Mod-Selinux beschrieben sind.
Listing 1: »/etc/httpd/conf.d/mod_
selinux.conf«
01 <Directory "/var/www/html">
02 ### HTTP Basic Authentication
03 AuthType
Basic
04 AuthName
"Secret Zone"
05 AuthUserFile
/var/www/htpasswd
06 Require
valid‑user
07 </Directory>
Listing 2: »/etc/httpd/conf.d/mod_
selinux.conf«
01 ### mod_selinux.conf kann auf eine lokale Datei
zurückgreifen, um
02 ### Benutzer mit einem Security‑Context zu verknüpfen
03 04 selinuxDomainMap
/var/www/mod_selinux.map
05 selinuxDomainVal
anon_webapp_t:s0
06 selinuxDomainEnv
SELINUX_DOMAIN
Listing 3: »/var/www/mod_selinux.
map«
01 foo
*:s0:c0
02 bar
*:s0:c1
03 __anonymous__
anon_webapp_t:s0
04 *
user_webapp_t:s0
Listing 4: »chcat«
01 # chcat ‑L
02 s0
03 s0‑s0:c0.c255
SystemLow‑SystemHigh
04 s0:c0.c255
SystemHigh
05 s0:c1
Marketing
06 s0:c2
Payroll
07 s0:c3
IT
08 09 chcat +IT /var/www/virtual/www1/index.html
10 ls ‑lZ /var/www/virtual/www1/index.html
Abbildung 1: Die Angriffe auf Webapplikationen haben in den letzten Jahren enorm zugenommen. Quelle:
Little Earth Corporation.
11 ‑rw‑rw‑r‑‑
content_t:IT
root
apache
root:object_r:httpd_sys_
/var/www/virtual/www1/index.html
Mod-Selinux
Sysadmin
Security-Context in der
Tabelle
Security-Context eines Objektes und einem Object-Identifier (OID) durch. Legt
man ein neues Datenbank-Objekt an,
so bekommt es eine numerische OID
zugwiesen. Um die Auflösung in die
klassische String-Darstellung für einen
Security-Context kümmert sich die Datenbank selbst.
Linux-Magazin 10/09
Prozess auf welches Datenbank-Objekt
zugreifen darf oder eben nicht. Das heißt,
wie bei SE Linux üblich, dass zwei Zugriffsprüfungen erfolgreich zu passieren
sind, bevor das angeforderte Objekt ausgeliefert wird. Zuerst muss der Zugriff
auf Basis der datenbankbasierten Authentifizierung gestattet sein, im zweiten Schritt überprüft das System dann,
ob das Security-Label des zugreifenden
Sockets die nötigen Rechte für das angefragte Objekt hat.
Nur wenn beide Tests erfolgreich abgelaufen sind, liefert die Datenbank das
gewünschte Objekt aus, sonst kommt
es zu einer Fehlermeldung und einem
Eintrag im Log. Selbst der DatenbankAdministrator hat nur dann Zugriff auf
ein bestimmtes Objekt, wenn der zuständige Security-Administrator diesen
Zugriff explizit über eine entsprechende
SE-Linux-Regel erlaubt hat. Somit lässt
sich das Vier-Augen-Prinzip von MACRegeln umsetzen.
3
Sysadmin
4
Linux-Magazin 10/09
Mod-Selinux
Zuerst muss der Administrator Apache
natürlich mitteilen, für welches Verzeichnis oder welche Location eine Authentifizierung erfolgen soll. Listing 1 zeigt ein
Beispiel zur Authentifizierung der Benutzer mittels einer lokalen Datei, die Benutzernamen und die MD5-Passworthashes
der Benutzer enthält.Mit dem folgenden
Kommando nimmt der Administrator einen Benutzer in die Passwort-Datei auf:
htpasswd ‑m /var/www/htpasswd foo
Listing 5: »sesearch« zeigt Regeln
01 # sesearch ‑‑allow ‑s user_webapp_t
02 Found 120 semantic av rules:
03 allow user_webapp_t public_content_t : file { ioctl
read getattr lock open} ;
04 allow user_webapp_t public_content_t : dir { ioctl
read getattr lock search open } ;
05 allow user_webapp_t public_content_t : lnk_file {
read getattr } ;
Policy Suche
06 allow user_webapp_t sysctl_kernel_t : file { ioctl
read getattr lock open } ;
Ist ein Benutzer in dieser Map-Datei
nicht explizit aufgeführt, findet der Zugriff lediglich über die Domäne »user_
webapp_t«, ohne gesetzter MCS-Kategorie, statt. Das Tool »sesearch« verrät,
auf welche Objekte ein Zugriff aus der
Domäne »user_webapp_t« gestattet ist
(Listing 5). Diese neuen Regeln für die
SE-Linux-Policy stammen aus dem PolicyPaket »mod_selinux.pp«. Das Paket wird
nach der Installation von Mod-Selinux
automatisch geladen, wie ein Aufruf von
»semodule« bestätigt:
07 allow user_webapp_t sysctl_kernel_t : dir { ioctl
read getattr lock search open } ;
08 ...
Listing 6: Tabelle »uaccount«
01 # su sepgsql
02 # createdb web
03 # psql web
04 ...
05 06 web=# CREATE TABLE uaccount (
07 web(#
uname
TEXT PRIMARY KEY,
08 web(#
upass
TEXT,
09 web(#
udomain
TEXT
Listing 2 zeigt die weiteren Einstellungen. Die Anweisung »selinuxDomainMap« bestimmt eine lokale Datei, die
jedem Benutzer einen Security-Context
zuweist, alternativ lässt sich mittels »selinuxDomainVal« ein Default-Context
setzen. Eine solche Map-Datei kann
wie in Listing 3 aussehen. Nach einer
erfolgreichen Authentifizierung laufen
die Webserver-Prozesse der beiden Benutzeranfragen jeweils in der SE-LinuxDomäne »user_webapp_t« mit einem
MLS-Sensitiviätslevel von »s0« und einer MCS-Kategorie von »c0« (foo) und
»c1« (bar). Somit ist ein Zugriff nur auf
Objekte möglich, die ebenfalls diesen
Kategorien angehören und auf die Domäne »user_webapp_t« zugreifen dürfen.
MCS-Kategorien an Dateiobjekten setzt
das Tool »chcat« (Listing 4).
10 web(# );
# semodule ‑l | grep mod_selinux
11 mod_selinux 2.2
12 web=# INSERT INTO uaccount VALUES ('foo', 'pass',
'user_webapp_t:s0:c0');
Natürlich kann der Administrator der Policy eigene Regeln hinzufügen. Hierfür
muss er dann aber ein eigenes Policy-
13 web=# INSERT INTO uaccount VALUES ('bar', 'pass',
'user_webapp_t:s0:c1');
Paket entwickeln. Wie das geht, verrät
ein anderer Artikels des Autors [4]. Alle
nicht authentifizierten Zugriffe auf den
Webserver laufen, wie in der Map-Datei festgelegt, in der SE-Linux-Domäne
»anon_webapp_t«.
Nur mit PostgreSQL
Für größere Umgebungen wird man die
Benutzer jedoch in einer Datenbank ablegen wollen und die Authentifizierung
hierüber abwickeln, zumal beim Einsatz
einer Webapplikation bereits ein Datenbank-System vorhanden ist. Im folgenden
Beispiel kommt als Datenbank das bereits
angesprochene SE-PostgreSQL zum Einsatz. Das hat den Vorteil, dass der Administrator alle Objekte der Datenbank
mit einem Security-Context verknüpfen
kann, was bei anderen RDBMS-Systemen
nicht möglich ist.
Die Installation gelingt bei den meisten
Linux-Distributionen wieder aus dem
Standard-Software-Repository heraus.
Alternativ finden sich auf der Webseite
des Projektes [2] die Sourcen. Auf einem
Fedora-11-System installiert der folgende
Yum-Aufruf die Datenbank:
yum install sepostgresql
Im Anschluss ist die Datenbank zu initialisieren und zu starten, dies übernehmen
die folgenden Befehle:
/etc/init.d/sepostgresql initdb
/etc/init.d/sepostgresql start
Für den administrativen Zugriff auf die
Datenbank existiert ein Standardbenutzer
»sepgsql«. Darüber kann der Administrator die erste Datenbank erzeugen und
dann Benutzer-Objekte darin anlegen
(Listing 6).
Listing 7: »/etc/httpd/conf.d/mod_selinux.conf«
01 LoadModule dbd_module
modules/mod_dbd.so
14 AuthDigestProvider
dbd
02 LoadModule authn_dbd_module
modules/mod_authn_
15 AuthDBDUserRealmQuery
\
dbd.so
16 03 "SELECT md5(uname || ':' || $2 || ':'
|| upass), udomain, \
04 # Parameter für die Datenbank‑Verbindung
05 17 %s=%s as dummy FROM uaccount
WHERE uname = $1"
06 DBDriver
pgsql
07 DBDParams
"dbname=web user=apache"
08 18 19 #
SE Linux context mapping
20 09 # Digest Authentifizierung
10 21 s
elinuxDomainEnv
AUTHENTICATE_UDOMAIN
11 <Directory "/var/www/html">
22 s
elinuxDomainVal
anon_webapp_t:s0
12 AuthType
Digest
23 13 AuthName
"Secret Zone"
24 <
/Directory>
Anmeldung am Web
In der Konfigurationsdatei von »mod_selinux.conf« kann man nun zur Authentifizierung der Benutzern einer Webapplikation auf diese Objekte zurückgreifen. Der
passende Security-Context ist zu jedem
Benutzer-Objekt bereits in der Datenbank
hinterlegt, somit ist kein Mapping mehr
durchzuführen. Die notwendigen Direktiven zur Konfiguration von »mod_selinux«
zeigt Listing 7.
Hier sind zuerst die passenden Apache-
Sysadmin
zer. Diese wandern dann über die Variable »AUTHENTICATE_UDOMAIN«
an Mod-Selinux. Klappt die Anmeldung
eines Benutzers nicht, so dient als Fallback-Lösung wieder der Security-Context
»anon_webapp_t«.
Dank Mod-Selinux ist es nun also möglich, einzelne Webserver-Prozesse (genauer: Webserver-Threads) mit einem
jeweils individuellen Security-Context zu
starten. Über SE-Linux-Regeln definiert
der Administrator dann, welche Objekte
Mod-Selinux
Module zum Zugriff auf die Datenbank
zu laden. Die nächsten beiden Parameter
legen den gewünschten Treibernamen
und die Anmeldeparameter für den Zugriff auf PostgreSQL fest. Im Anschluss
erfolgt die Authentifizierung der Benut-
01 # su sepgsql
19 footballdb=# INSERT INTO clubs (id, name, platz, punkte)
02 # createdb footballdb
20 footballdb‑# VALUES (1, 'Schalke', 1, 72);
03 # psql footballdb
21 04 Welcome to psql 8.3.7, the PostgreSQL interactive terminal.
22 footballdb=# SELECT security_context, * FROM clubs;
05 23 06 Type:
\copyright for distribution terms
07 \h for help with SQL commands
08 \? for help with psql commands
09 \g or terminate with semicolon to execute query
10 \q to quit
24 security_context
| id |
name
Linux-Magazin 10/09
Listing 8: Security-Context auf Datenbank-Zeilen
| platz | punkte
25 ‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑+‑‑‑‑+‑‑‑‑‑‑‑‑‑+‑‑‑‑‑‑‑+‑‑‑‑‑
26 unconfined_u:object_r:sepgsql_table_t:s0 |
1 | Schalke |
1 |
72
27 (1 row)
28 29 footballdb=# UPDATE clubs SET security_context =
11 'system_u:object_r:public_content_t:s0' WHERE
12 footballdb=# CREATE TABLE clubs (
name='Schalke';
30 13 footballdb(# id
integer primary key,
14 footballdb(# name
varchar(32),
32 15 footballdb(# platz
integer,
33 16 footballdb(# punkte
integer
34 ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑+‑‑‑‑+‑‑‑‑‑‑‑‑‑+‑‑‑‑‑‑‑+‑‑‑‑‑‑‑‑
31 footballdb=# SELECT security_context, * FROM clubs;
security_context
| id |
17 footballdb(# );
35 system_u:object_r:public_content_t:s0 |
18 36 (1 row)
1/2 quer A
210 x 148 mm zzgl. Beschnitt
???
name
| platz | punkte
1 | Schalke |
1 |
72
5
Sysadmin
6
Linux-Magazin 10/09
Mod-Selinux
auf diese einzelnen Threads zugreifen
dürfen. Wer sich die Dokumentation etwas genauer anschaut stellt schnell fest,
dass das Einsatzgebiet bei den hier vorgeführten Beispielen nicht aufhört. So kann
der Administrator mittels Mod-Selinux
beispielsweise auch einzelne virtuelle
Apache-Hosts mit einem jeweils eigenen
Security-Context starten oder in Abhängigkeit der IP-Adresse eines zugreifenden
Hosts den Context setzen.
SE-PostgreSQL mit MACSchutz
Die folgenden Abschnitte führen die SELinux-Konfiguration eines relationalen
Datenbankverwaltungssystem am Beispiel von SE-PostgreSQL vor. Dabei handelt es sich um eine Erweiterung des bekannten PostgreSQL-Datenbanksystems.
Die Erweiterung ermöglicht, einzelne
Objekte mit einem SE-Linux SecurityContext zu versehen und beim Zugriff
auf diese Objekte eine Abfrage an den
Security-Server im Kernel zu stellen, welche Rechte der Kontext des zugreifenden
Sockets in Bezug auf das angefragte Objekt besitzt.
Listing 8 zeigt den schematischen Ablauf. Zuerst meldet der Administrator sich
erneut mit einem administrativen Konto
am RDBMS an und erzeugt eine neue
Datenbank, in diesem Fall »footballdb«.
Anschließend verbindet er sich über die
Psql-Clientanwendung mit der Datenbank und erzeugt eine neue Tabelle, hier
»clubs«. Diese bekommt einen einzelnen
Datensatz zugewiesen. Das erste SelectStatement gibt den Datensatz aus. Hierbei
zeigt sich, dass dieser bereits über einen
Security-Context verfügt. Der Type für
diesen Default-Security-Context lautet für
Zugriffe aus der »unconfined_t«-Domäne
jeweils »sepgsql_table_t«. Möchte man
den Context ändern, so gelingt dies mit
einem einfachen Update-Statement. Der
letzte Select-Aufruf verifiziert, dass der
Datensatz nun über einen neuen Typ im
Security-Context verfügt.
Natürlich lässt sich ein Context nicht nur
auf eine Datenbank-Zeile anwenden, sondern auch auf einzelne Spalten. Listing 9
zeigt ein Beispiel. Hierbei handelt es sich
um eine Tabelle die Mitarbeiter-Daten
enthält. Für diese Spalte soll derSecurityContext »sepgsql_secret_table_t« zum
Zuge kommen. Auf diesen Typen darf
eine reguläre SE-Linux User-Domäne
nicht zugreifen. Dies bestätigten die letzten beiden Select-Statements. Der Befehl
»SELECT sepgsql_getcon();« zeigt den Security-Context des zugreifenden Sockets
an, in diesem Fall handelt es sich um die
User-Domäne »user_t«.
Das abschließende Select versucht nun
auf alle Spalten der Mitarbeiter-Tabelle
zuzugreifen. Dies endet in einer SE-LinuxFehlermeldung, da der Zugriff aus der Domäne »user_t« auf ein Datenbank-Objekt
mit dem Typen »sepgsql_secret_table_t«
nicht gestattet ist. Die hierfür notwendigen Regeln hat das Policy-Paket »sepostgresql‑devel.pp« dem systemweiten
SE-Linux-Regelwerk bei der Installation
von SE-PostgreSQL hinzugefügt. Es lässt
sich, genau wie auch bei Mod-Selinux,
natürlich durch eigene Regelsätze erweitern. Die Manpage von »sepostgresql«
listet alle möglichen SE-Linux-Typen und
deren Berechtigungen auf.
Wie bereits im letzten Abschnitt erwähnt,
verwendet SE-PostgreSQL immer den SELinux-Context des zugreifenden ClientSockets, um eine Zugriffsentscheidung
auf ein Objekt innerhalb der Datenbank
zu treffen. Hierbei handelt es sich entweder um den Security-Context eines
Listing 9: Security-Context auf Spalten
01 foo=# CREATE TABLE mitarbeiter (
11 ‑
‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑
02 foo(# mid integer primary key,
12 user_u:user_r:user_t:s0
03 foo(# mname varchar(32),
13 (
1 row)
04 foo(# mgehalt varchar(32)
CONTEXT =
'system_u:object_r:sepgsql_secret_table_t:s0'
14 15 f
oo=# SELECT * FROM mitarbeiter;
05 foo(# );
16 E
RROR:
SELinux: denied { select } \
06 17 scontext=user_u:user_r:user_t:s0 \
07 foo=# GRANT ALL ON mitarbeiter TO PUBLIC;
18 tcontext=system_u:object_r:sepgsql_
08 secret_table_t:s0 \
09 foo=# SELECT sepgsql_getcon();
10 sepgsql_getcon
19 mgehalt
tclass=db_column name=mitarbeiter.
zugreifenden Prozesses (beispielsweise
»httpd_t«) oder den Context der Shell des
Benutzers (beispielsweise »user_t«). Den
Context des zugreifenden Sockets zeigt
»psql« über ein »SELECT sepgsql_getcon();« Statement an.
Findet der Zugriff nicht von der lokalen
Maschine, sondern von einem Apache einer anderen Maschine statt, sieht SE-PostgreSQL nur den Kontext des zugreifenden
Netzwerk-Sockets. Hierfür existiert mit
Labeled Networking eine elegante Lösung. Damit lassen sich beliebige IPSecTunnel zwischen verschiedenen Systemen aufbauen, die den Security-Context
eines Prozesses über Netzwerkgrenzen
hinweg übertragen [5].
Fazit
Mod-Selinux bietet einen wesentlich fein
granulierteren Zugriff auf SE-Linux-Objekte als es bisher der Fall war. App Armor bietet zwar mit Apache-Heads eine
ähnliche Lösung, sie erfordert aber den
Einsatz eines speziellen Apache-Servers,
was hier nicht der Fall ist. Kommt SEPostgreSQL als Backend der Webapplikation zum Einsatz, lässt sich da Einsatzgebiet der Mandatory Access Control
auch auf Datenbank-Objekte ausweiten.
Gerade eine Kombination aus beiden
Systemen verspricht beim Einsatz von
Webapplikationen einen großen Gewinn
n
an Sicherheit. (ofr)
Infos
[1] Tim Schürmann, Web Application Firewall
mit Mod-Security und Apache, Linux-Magazin Sonderheft 02/​2008, S. 114
[2] SE-PostgreSQL, Security Enhanced PostgreSQL: [http://​­wiki.​­postgresql.​­org/​­wiki/​
­SEPostgreSQL]
[3] Mod-Selinux: [http://​­code.​­google.​­com/​­p/​­sepgsql/]
[4]Thorsten Scherf, Grafisches Frontend für
SE Linux, Linux-Magazin-Sonderheft 01/​
2009, S. 102
[5] Thorsten Scherf, SE Linux kontrolliert
Netzwerk-Traffic, Linux-Magazin-Sonderheft 01/​2009, S. 19
Der Autor
Thorsten Scherf arbeitet für die Firma Red Hat,
wo er unter anderem Trainings sowie Projekte im
Bereich Netzwerksicherheit durchführt.
Herunterladen