Weitere ADMIN-Magazin Angebote

Firewalling auf Benutzerebene mit Portsmith

Parole

Regelwerk

Eine Firewall ist nur so sinnvoll wie das Regelwerk, das der zuständige Paketfilter umzusetzen hat. Im Falle von Portsmith sieht die grundlegende Policy nach dem Start wie in Listing 1 aus.

Listing 1

Portsmith-Filter

Chain INPUT (policy DROP 22 packets, 3590 bytes)
 pkts bytes target     prot opt in     out     source               destination
    7   476 ACCEPT     all  --  eth1   *       192.168.2.0/24       0.0.0.0/0
  200 17460 ACCEPT     all  --  lo     *       127.0.0.1            0.0.0.0/0
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/sec burst 5 tcp dpt:80
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/sec burst 5 tcp dpt:25
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/sec burst 5 tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    1    62 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 15/sec burst 5 udp spt:53 state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       192.168.2.0/24       0.0.0.0/0           limit: avg 5/sec burst 5
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      *       192.168.2.0/24       0.0.0.0/0
    0     0 ACCEPT     all  --  *      *       127.0.0.1            0.0.0.0/0
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 233 packets, 21730 bytes)
 pkts bytes target     prot opt in     out     source               destination

Das interne Netzwerk 192.168.2.0/24, das hinter dem Interface eth1 liegt, darf uneingeschränkt und mit Port Address Translation versehen mit dem großen weiten Internet kommunizieren. Mag dies für den einfachen Hausgebrauch oder sehr kleine Unternehmen noch akzeptabel sein, birgt diese Grundeinstellung doch hohes Gefahrenpotenzial.

Entgegen des auf der Portsmith-Homepage genannten Credos "alle externen Ports sind geblockt bis sie nach der Anmeldung freigeschaltet werden" sind hier jedoch nicht nur Port 80 und 443 für den Zugang zu den Webseiten, sondern auch Port 25 für den Mailverkehr freigeschaltet. Welchem Zweck diese Freischaltung dienen soll, bist unklar. Geblockt werden hingegen sämtliche ICMP-Pakete, die auf dem externen Interface ankommen, auch wenn dadurch teils wertvolle Informationen zur Fehlersuche verloren gehen. Erfreulich ist jedoch der Rückgriff auf die RELATED- und ESTABLISHED-States, so dass der Rückkanal bestehender TCP- und DNS-Verbindungen aus dem internen Netz (stateful) automatisch erlaubt ist.

Weitere Rätsel gibt die standardmäßig aktivierte Source-NAT auf eine nicht näher spezifizierte IP-Adresse (192.168.1.250) auf (Listing 2).

Listing 2

Source-NAT

Chain PREROUTING (policy ACCEPT 1603 packets, 117K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:9100 to:192.168.1.250:9100

Vermutlich handelt es sich um das Überbleibsel einer Weiterleitung auf den LPD-Port eines internen Printservers. Auch wenn der TCP-Port 9100 standardmäßig "dicht" ist, könnte der Eintrag im Falle eines ähnlichen Setups zu Fehlern führen, deren Ursache sich nicht auf den ersten Blick erschließt.

Glücklicherweise lässt sich die grundlegende Policy ganz den Bedürfnissen des Admins und der Sicherheitspolicy anpassen. Hierzu sind die Vorgaben aus der »/usr/local/bin/fw_policy« einfach zu löschen oder den Wünschen entsprechend zu erweitern, wodurch auch komplexeste initiale Regelwerke problemlos ermöglicht werden. Wem die grundlegenden IPTables-Kenntnisse fehlen, der sollte dabei lieber fachkundige Hilfe in Anspruch nehmen.

Nach erfolgtem Login eines Nutzers und der Freischaltung der für ihn vorgesehenen SSH-Verbindung wurde die INPUT-Chain entsprechend erweitert (Listing 3).

Listing 3

Geänderte Regeln

Chain INPUT (policy DROP 122 packets, 14737 bytes)
 pkts bytes target     prot opt in     out     source               destination
   85  7589 ACCEPT     tcp  --  eth0   *       192.168.0.10         0.0.0.0/0           tcp dpt:22
   14   961 ACCEPT     all  --  eth1   *       192.168.2.0/24       0.0.0.0/0
 2497  640K ACCEPT     all  --  lo     *       127.0.0.1            0.0.0.0/0
   23  3652 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/sec burst 5 tcp dpt:80
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/sec burst 5 tcp dpt:25
  262 37622 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/sec burst 5 tcp dpt:443
  114 22241 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    3   204 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 15/sec burst 5 udp spt:53 state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       192.168.2.0/24       0.0.0.0/0           limit: avg 5/sec burst 5

Wie hier unschwer zu erkennen werden die dynamischen Regeln nach ganz oben gesetzt. Potentiellen Überscheidungen mit existierenden, nicht so exakt gefassten Einträgen wird somit aus dem Weg gegangen. Ein wenig erschreckend hingegen ist die Destination (0.0.0.0) der neuen Regel, da sie laut der Portsmith-eigenen Policy ausschließlich auf die externe IP begrenzt sein sollte.

Sicherheit

Besonderes Augenmerk weiterer sicherheitstechnischer Betrachtungen ist in diesem Fall sicherlich nicht der Paketfilter an sich, sondern vor allem der ständig erreichbare Webserver, insbesondere die dabei zum Einsatz kommende Scriptsprache PHP. Ließe sich die Authentifizierung an dieser Stelle durch Schwachstellen innerhalb der Programmierung oder der Sprache selbst aushebeln, wäre das gesamte Netz potentiell gefährdet, einem Angreifer stünden so Tür und Tor offen. Ein weiteres lohnendes Ziel stellt die Datenbankanbindung dar. Lässt sich das Regelwerk durch eine passende SQL-Injection "anpassen", wird der Schutz, den die Firewall eigentlich bieten sollte, mehr als löchrig. Auch wenn bisherige Untersuchungen des Portsmith-PHP keine offensichtlichen Schwachstellen zutage förderten, ist ein erfolgreicher Angriff nicht auszuschließen. Dass Updates an dieser Stelle so zeitnah wie möglich eingespielt werden, versteht sich von selbst. Für einen erweiterten Schutz wäre die zusätzliche Installation von Suhosin [8] und / oder Mod-Security [9] anzuraten, die günstigstenfalls auch gegen bislang unbekannte Attacken schützen könnten.

Das System basiert darauf, dass die IP-Adresse des authentisierten Clients für die jeweiligen Verbindungen freigeschaltet werden. Die Adresse wird folglich über die Quell-IP gewonnen, die auf Port 443 des Webservers ankommt. Dieses Verhalten könnte sich wiederum als mögliche Gefahrenquelle erweisen: Im einfachsten Fall sitzt der Client ohne es zu wissen hinter einem Proxy, der die Verbindung zur Portsmith-Firewall stellvertretend für den Webbrowser aufbaut, wodurch nicht die Adresse des Clients, sondern die des Proxies freigeschaltet würde. Dies hätte zur Folge, dass jeder Benutzer dieses Proxies analog der Rechte des eigentlichen Nutzers Zugang zu dessen freigegebenen Ressourcen erhalten würde. Noch schlimmer wäre der Fall, in dem ein Angreifer den Client unbemerkt über einen durch ihn kontrollierten Proxyserver umleitet. Im Zusammenspiel mit der relativen Langlebigkeit der Freischaltung wäre weiteren Angriffen Tür und Tor geöffnet.

Kommentare

Suche

ADMIN auf Twitter, Facebook, Xing

Auf Twitter folgen   

Unsere Partner:

hackerboard.deUnixboard