Kann ich Paketfilter umgehen?

Weiß ich, auf welche Art und Weise ein Paketfilter umgangen werden kann, hilft mir dass beim Entwurf von Paketfilterregeln, beim Testen und Monitoring. Darum schaue ich in diesem Kapitel, wie ich Informationen an einem Paketfilter vorbei übertragen kann.

Nicht alle der hier vorgestellten Möglichkeiten sind von vornherein illegitim oder schädlich. Jede einzelne muss ich im konkreten Kontext betrachten, in dem ich den Paketfilter einsetze.

Stateless Firewallregeln

Eine Möglichkeit, die Firewall zu umgehen beziehungsweise zu überwinden, findet sich bei stateless Firewalls, das heißt, wenn die Conntrack-Module nicht aktiv sind.

Ich kann mit einer stateless Firewall TCP-Verbindungen in einer Richtung sperren und in der anderen Richtung offen lassen, indem ich Datagramme ohne gesetztes ACK-Bit nur in einer Richtung erlaube.

Zwar kann man dann aus der anderen Richtung keine Verbindung aufbauen, jedoch ist es möglich, Informationen über die Rechner hinter dem Paketfilter zu erlangen. Kommt ein Datenpaket mit gesetztem ACK-Bit an einem Rechner hinter dem Paketfilter an, dann antwortet dieser mit TCP-Reset, falls ein Socket an den Zielport gebunden ist und mit ICMP-Unreachable-Port, wenn nicht. Diese Antworten gehen oft durch die Firewall und teilen dem Angreifer auf diese Art mit, ob der Port offen ist. Das Programm nmap scannt bei gesetzter Option -PA mit dieser Methode.

Bei einer stateful Firewall wäre das nicht möglich, weil diese erkennen würde, dass das erste Datagramm zu keiner gültigen Verbindung gehört und es gleich verwerfen würde.

Normalerweise ziehe ich als Firewall-Administrator daher stateful Paketfilterregeln vor. Lediglich bei speziellen Performance-Problemen kann es nötig sein auf stateless Regeln auszuweichen.

Fehlerhafte IP-Optionen

Lässt der Paketfilter ICMP-Pakete durch, entweder auf Grund der Policy, oder weil er als stateless Filter bestimmte ICMP-Pakete durchlassen muss, um die Funktionalität des Netzes nicht zu behindern, dann kann ich das ausnutzen um das Netz hinter dem Paketfilter zu erkunden.

Dazu sende ich ICMP-Pakete mit ungültigem IP-Header oder ICMPv6-Pakete mit ungültigem Extension-Header.

RFC 792 definiert für ICMP die Nachricht vom Typ 12 “Parameter Problem Message”, die ein Host oder Gateway sendet, wenn er ein Datagramm nicht verarbeiten kann. Für IPv6 definiert RFC 4443 in Abschnitt 3.4 die ICMPv6 Nachricht “Parameter Problem”, bei Datagrammen mit ungültigen Extension Headern.

Um das auf dem Paketfilter zu unterbinden, kann ich fehlerhafte Datagramme verwerfen.

Dynamisch ausgehandelte Protokolle

Dynamisch ausgehandelte Protokolle arbeiten mit einer Kombination von festgelegten und dynamisch ausgehandelten Ports, wie zum Beispiel FTP, TFTP oder SiP. Ohne Connection Tracking muss ich hier ganze Bereiche von Ports freigeben, so dass ich im ungünstigsten Fall auch unerwünschte Datenverbindungen in Kauf nehmen muss.

Will ich diese Protokolle über den Paketfilter regulieren, werde ich daher auf jeden Fall mit stateful Regeln und Connection Tracking arbeiten und dafür nötigenfalls leistungsfähigere Hardware einsetzen.

Beim Einsatz von Connection Tracking muss ich allerdings einige Feinheiten beachten. So ist es sinnvoll, die dynamisch ausgehandelten Verbindungen, die den Zustand RELATED bekommen, wenn möglich an fest vorgegebene IP-Adressen zu binden, zum Beispiel an die des FTP-Servers, wenn ich FTP zu einzelnen Servern freischalte.

Wenn ein Session Helper auf einem anderen als dem Stardard-Port arbeiten soll, kann ich mit dem CT Target in den Regeln der Tabelle raw den entsprechenden Port einstellen. Dabei muss ich aber beachten, dass der Session Helper nicht mehr an den Standard-Ports lauschen darf, da sonst darüber unerwünschte Verbindungen freigeschaltet werden können. Zu diesem Zweck deaktiviere ich das Parsen der Verbindungen per Default und aktiviere es für jede gewünschte Verbindung mit dem CT Target.

Schließlich muss ich im Hinterkopf behalten, dass Session Helpers die Daten in IP-Datagrammen inspizieren und selbst keine Prüfungen auf Gültigkeit der Datagramme vornehmen wie der Rest der Connection Tracking Module. Es ist daher möglich, durch gespoofte Datagramme Verbindungen über Session Helper freizuschalten, indem ich ein passendes Datagramm über ein anderes Interface einspeise. Dem muss ich mit Anti-Spoofing-Maßnahmen begegnen, zum Beispiel mit dem rpfilter Modul.

Der Webartikel Secure use of iptables and connection tracking helpers geht näher auf diese Problematik ein.

Application Level Gateways

Application Level Gateways (ALG) erlauben es, Paketfilter zu umgehen. Ihre Aufgabe ist es, explizit den Datenverkehr zu kontrollieren und zu steuern, der mit einfachen Paketfiltern nicht kontrolliert werden kann. Das sind meist Protokolle der oberen vier OSI-Schichten. Damit liegen Application Level Gateways außerhalb des Themas dieses Buches. Ich behalte aber im Hinterkopf, dass ALG einen Weg bieten können, auf dem Daten mein Netz unkontrolliert erreichen oder verlassen.

Virtual Private Networks

Das gleiche gilt für VPN, seien diese mit IPsec, OpenVPN, SSH-Tunneln oder auf andere Art und Weise realisiert. Diese kann ich nur an den Endpunkten, den VPN-Gateways, kontrollieren.

Habe ich Bedenken bezüglich des Verkehrs, der durch die VPN geht, dann platziere ich einen Paketfilter direkt auf dem VPN-Gateway. Alternativ lasse ich den Datenverkehr aus dem VPN nicht direkt in mein Netz sondern nur über einen vorgeschalteten Paketfilter, zum Beispiel den der DMZ, indem ich das VPN-Gateway genau dort platziere.

Zusätzlich sperre ich allen anderen VPN-Datenverkehr mit den Paketfiltern, so dass deren Regeln auf diese Art nicht umgangen werden können.

NAT Traversal

NAT Traversal ist, je nach Gegebenheit, eine möglicherweise gewünschte Methode, einen Paketfilter zu passieren. Dabei geht es darum, einen direkte TCP- oder UDP-Verbindung zwischen zwei Rechnern aufzubauen, die sich beide hinter einer NAT-Box befinden. VoIP-Verbindungen oder Peer-to-Peer-Netze, die geringe Latenz benötigen, sind mögliche Anwendungen.

Das Problem besteht darin, dass Rechner hinter NAT-Boxen nicht direkt adressiert werden können. Sitzt nur ein Partner hinter einer NAT-Box, kann dieser die Verbindung zum anderen aufbauen. Sitzen beide Partner hinter NAT-Boxen ist eine unmittelbare direkte Verbindung nicht möglich.

Dann kann man sich mit einem Rendezvous-Server behelfen, zu dem sich beide Partner verbinden und der die nötigen Informationen weiterleitet, damit die Partner eine direkte Verbindung aufbauen können. Dafür gibt es verschiedene Lösungen, die mit unterschiedlichen NAT-Boxen umgehen können.

Je nachdem, ob solch direkter Verkehr in meiner Sicherheitsrichtlinie erlaubt ist oder nicht, muss ich meine Paketfilter-Regeln entsprechend anpassen.

Netzwerk Topologie

Eine weitere Möglichkeit, Paketfilter zu überwinden, ist, diese zu umgehen, wenn es mehrere Wege zum Ziel gibt. Das kann ein vermaschtes Netz sein, eine zweite Verbindung zum Internet oder Daten, die über das Netz eines Kooperationspartners laufen.

Daher muss ich bei der Umsetzung einer Sicherheitsrichtlinie immer die komplette Topologie des Netzes, in dem diese gelten soll, kennen.

Fragmentierung

Mit fragmentierten Paketen ist es gelegentlich möglich, simpel gestrickte Paketfilter auszutricksen, wenn die Fragmente nicht genug Informationen für eine korrekte Identifizierung enthalten.

Die Abhilfe dafür ist einfach: ich kann die Datenpakete direkt am Paketfilter zusammensetzen oder, falls das zu Performanceproblemen führt, die Fragmente gleich verwerfen.

Verdeckte Kanäle

Schließlich gibt es noch die Möglichkeit, Daten unkontrolliert über verdeckte Kanäle zu versenden, die sich in anderen Protokollen verbergen.

Das können IP-Daten sein, die sich in DNS-Datagrammen oder ICMP-Datagrammen verbergen. Oder in beliebigen anderen Protokollen, die Nutzerdaten transportieren können.

Bei ICMP habe ich das Problem, dass zumindest einige dieser Datagramme für das korrekte Funktionieren des Netzes erforderlich sind. Hier kann ich mit Rate-Limits und stateful Paketfilter-Regeln arbeiten.

Bei allen anderen Protokollen können Application Level Gateways helfen, wenn ich auf diesen den Verkehr für die entsprechenden Protokolle kontrolliere.