Filtern von eingehenden Paketen
Keywords: Buch

> Nächste Seite: Filtern von ausgehenden Paketen Aufwärts: Crashkurs Firewallaufbau unter Linux Vorherige Seite: Grundlagen der Firewalltechnik Inhalt
> Unterabschnitte
> - Filtern nach IP-Adressen
>   - Filtern nach Absender-Adressen
>     - Ablehnen von gefälschten oder ungültigen Adressen
>     - Bestimmte Adressen herausfiltern
>   - Filtern nach Empfänger-Adressen
> - Filtern nach Portnummern
>   - Filtern nach der Absender-Portnummer
>   - Filtern nach der Empfänger-Portnummer
> - Filtern nach TCP-Status-Flags
> - Angriffsformen von außerhalb
>   - Portscans
>   - Denial-of-Service-Attacks
>     - TCP-SYN-Flooding
>     - PING-Flooding
>     - UDP-Flooding
>     - ICMP-Redirect-Angriff

> # Filtern von eingehenden Paketen

> Eine Firewall ist grundsätzlich in der Lage, sowohl ankommende, als auch abgehende Pakete zu filtern. In der Regel ist jedoch die Filterung der ankommenden Pakete die wichtigere Technik, wollen wir doch vermeiden, daß Angriffe von außen, also aus dem unsicheren Netz, auf unser zu schützendes Netz stattfinden. In diesem Kapitel werden die Kriterien besprochen, nach denen wir eingehende Pakete filtern können.

> # Filtern nach IP-Adressen

> Auf der Ebene der Vermittlungs- und Transportschicht ist die IP-Adresse die einzige Möglichkeit, herauszufinden, wer ein Paket an uns geschickt hat. Diese Information steckt im IP-Header, also der Information, die uns die Vermittlungsschicht übermittelt.

> Die Authentizität dieser Information ist grundsätzlich fragwürdig. Es ist ein leichtes, die IP-Adresse des Senders eines Paketes zu fälschen, auch wenn dadurch eine funktionierende Kommunikation in der Regel unmöglich gemacht wird.

> Grundsätzlich können wir sowohl Absender-, als auch Empfänger-IP-Adressen als Kriterien für eine Firewall benutzen.

> ## Filtern nach Absender-Adressen

> Das Kriterium für die Entscheidung, ob wir ein Paket durchlassen oder nicht ist hier also die Adresse des Senders, die uns ja im IP-Header zur Verfügung steht. Hier kommen verschiedene Techniken zur Anwendung.

> ### Ablehnen von gefälschten oder ungültigen Adressen

> Es ist natürlich nicht so einfach möglich, gefälschte Adressen als solche zu erkennen, aber es stehen uns jedoch ein paar Mittel zur Verfügung, offensichtlich falsche Adressen abzuweisen. Sechs Hauptgruppen von solchen Adressen sollten wir grundsätzlich ablehnen:
> 1. Die eigene IP-Adresse: Niemals kann ein regulär eingehendes Paket vom eigenen Rechner stammen. Es muß sich also zwangsläufig um eine Fälschung handeln.
> 2. Die IP-Adressen, die für lokale Netze ohne Internet-Anschluß reserviert sind: Für jede Klasse (A, B und C) existieren Adressen, die im Internet nicht geroutet werden können. Aus dem Internet können (bzw. dürfen) solche Pakete niemals auf unseren Rechner kommen. Die sogenannten privaten Adressen sind:
>    Klasse A
>      10.0.0.0 bis 10.255.255.255
>    Klasse B
>      172.16.0.0 bis 172.31.255.255
>    Klasse C
>      192.168.0.0 bis 192.168.255.255
>    Pakete, die diese Adressen haben und aus dem Internet kommen, können Sie bedenkenlos ablehnen.
> 3. Multicast-Adressen der Klasse D: Hierbei handelt es sich um reservierte Adressen für sogenannte Multicast-Broadcasts, wie sie etwa für Audio- oder Video Übertragung an mehrere Empfänger verwendet werden. Diese Adressen dürfen zwar als Empfänger-Adressen, niemals jedoch als Absender vorkommen. Es handelt sich um die Adressen im Bereich von 224.0.0.0 bis 239.255.255.255.
> 4. Alle Klasse E-Adressen: Adressen dieser Klasse waren für expeimentelle Erweiterungen vorgesehen und werden grundsätzlich nicht öffentlich vergeben. Sie liegen im Bereich von 240.0.0.0 bis 247.255.255.255. In der Regel werden diese Adressen ohnehin nur von US-Militärs und -Geheimdiensten verwendet. Im Internet sollten sie nie auftauchen.
> 5. Loopback-Adressen: Die reservierte Adresse 127.0.0.1 ist eine Adresse, die immer den lokalen Rechner meint. Ein Paket, das aus dem Internet kommt und diese Adrese als Absenderadresse eingtragen hat kann niemals eine echte Adresse sein.
> 6. Broadcast Adressen: Broadcast-Adressen sind Adressen, die in Netzen benutzt werden, um mehrere Systeme gleichzeitig anzusprechen. Solche Adressen sind als Empfänger-Adresse legal, als Absender-Adresse jedoch nie.

> ### Bestimmte Adressen herausfiltern

> Es existieren bestimmte Adressen, von denen man weiß, daß von ihnen oft Angriffe ausgehen. Es ist möglich, solche Adressen, seien es Host- oder ganze Netz-Adressen einfach zu sperren. Auf der anderen Seite ist es auch möglich, bestimmten Adressen den Zugriff auf bestimmte Dienste eines Netzes zuzulassen. So kann etwa die Filliale unserer Firma, von der wir genau die IP-Adresse wissen, auf unseren Datenbank-Server zugreifen, während sonst nieman das können soll.

> ## Filtern nach Empfänger-Adressen

> Das Feld der Empfänger-Adresse ist für die Firewall dann interessant, wenn sie selbst auch Router in ein Netz ist. In diesem Fall kann bestimmt werden, welche Rechner im Netz ein Paket bekommen dürfen und welche nicht. So kann etwa ein bestimmter Rechner (mit bestimmter IP-Adresse) im lokalen Netz ein Webserver sein, der natürlich für andere Netzteilnehmer erreichbar sein soll. Ein Paket, dessen Empfänger-IP-Adressenfeld die Adresse dieses Webservers enthält, muß also durchgelassen werden, alle anderen Pakete könnten wir sperren.

> # Filtern nach Portnummern

> Portnummern sind Informationen aus der Transportschicht, also entweder aus dem UDP-Header oder dem TCP-Header. Sie geben an, welches Programm auf der Anwendungsschicht ein eingehendes Paket erhält (Empfänger-Portnummer) oder von welcher Anwendung ein Paket geschickt wurde (Absender-Portnummer). Beide Fälle sind wichtige Informationen für eine Firewall.

> ## Filtern nach der Absender-Portnummer

> Hier müssen wir unterscheiden, ob es sich um ein Paket handelt, das eine Anfrage nach einem lokalen Service beantragt (also ein Client von außerhalb, der einen Service von innerhalb nutzen will). In diesem Fall wird die Portnummer eine Nummer zwischen 1024 und 65535 sein müssen.

> Im umgekehrten Fall, also wenn ein Client von innerhalb einen Service von außerhalb nutzen will, dann wird ein eingehendes Paket die Absender-Portnummer des jeweils genutzten Dienstes haben4.1.

> ## Filtern nach der Empfänger-Portnummer

> Dieses Feld ist für uns sehr interessant, weil hier - zumindestens bei eingehenden Paketen - die Portnummer des Dienstes steht, den ein User von außerhalb nutzen will. Das heißt, hier ist der Ort, wo wir von vorneherein nur die Pakete durchlassen, die Portnummern von Diensten enthalten, die wir auch anbieten wollen.

> Auch hier gibt es jedoch den zweiten Fall, nämlich die Antwort eines fremden Servers auf eine Nachfrage eines lokalen Clients. In dem Fall liegen die Empfänger-Portnummern im unprivilegierten Bereich zwischen 1024 und 65535.

> # Filtern nach TCP-Status-Flags

> Auch diese Information stammt aus der Transportschicht, steht jedoch - im Gegensatz zu Portnummern - nur bei TCP, nicht bei UDP zur Verfügung. Hier geht es im Speziellen um die Frage des Handshakes beim Verbindungsaufbau. Der zugrundeliegende Mechanismus wurde ab Seite genau dargestellt.

> Diese Information ist für eine Firewall von daher sehr wichtig, daß mit ihrer Hilfe unterschieden werden kann, ob ein Paket eine Anfrage von außen oder eine Antwort auf eine Anfrage von innen enthält. Pakete, die Antworten fremder Server enthalten haben grundsätzlich das ACK-Flag gesetzt. Firewall-Regeln können daher z.B. entscheiden, daß in ein internes zu schützendes Netz nur Pakete mit diesem Flag hereingelassen werden.

> # Angriffsformen von außerhalb

> Um eine Filterung eingehender Pakete überhaupt sinnvoll zu nutzen, ist es notwendig, die gängigen Formen von Angriffen von außerhalb zu kennen. Im Folgenden sollen kurz die häufigsten Angriffsformen beschrieben werden, die keine normalen Zugriffe auf Dienste sind.

> ## Portscans

> Ein Portscan ist ein Abtastversuch - ein Versuch, zu einem bestimmten Port eine Verbindung aufzubauen oder zumindestens eine Reaktion zu erhalten, aus der Rückschlüsse möglich sind, ob ein bestimmter Dienst angeboten wird oder nicht. Der Begriff Scan bezeichnet dabei eine Serie von Abtastversuchen auf verschiedene Ports. Dazu werden sogenannte Portscanner benutzt, die einfach verschiedene - oder gar alle - Ports eines Rechners ansprechen und auf Antwort warten.

> Obwohl der eigentliche Versuch eines Portscans selbst noch kein Einbruchsversuch ist, ist er doch meistens der erste Schritt eines Angriffs. Ein potentieller Angreifer kann mittels Portscan herausfinden, auf welchem Port eines bestimmten Rechners Anwendungen laufen, die Antworten verschicken. Mit dieser Grundinformation kann dann eine Angriffsstrategie festgelegt werden.

> Man unterscheidet zwischen kompletten Portscans, die alle Ports zwischen 0 und 65534 abfragen und gezielten Portscans, die nur bestimmte - als potentiell gefährlich einzuschätzende - Ports überprüfen. Komplette Scans sind heute eher selten, weil sie viel Zeit benötigen und daher auch leicht bemerkt werden. Aktuelle Utilities sind heute in der Lage, bestimmte Ports abzufragen, die sich für Angriffe von außen eignen. Das kostet weniger Zeit und ist daher auch weniger leicht zu erkennen.

> Typische Ports, die gerne gescannt werden sind in der Tabelle im Anhang (Seite ) aufgelistet.

> Mit einer installierten Firewall werden solche Portscanns natürlich bemerkt. Allerdings - und dazu haben wir ja eine Firewall - bedeutet der Scan an sich noch keine reale Gefahr. Jemand versucht etwas über unser System herauszufinden, wird jedoch von der Firewall abgewiesen...

> ## Denial-of-Service-Attacks

> Eine wesentlich gefährlichere Art des Angriffs ist die sogenannte Denial of Service Attack, oft als DoS abgekürzt. Hierbei wird versucht, einen Computer derart mit Datenpaketen zu überfluten, daß er entweder keine anderen Pakete mehr verarbeiten kann, oder im schlimmsten Fall komplett abstürzt. Eine Abart dieser Angriffsform ist die Distributed Denial of Service Attack (DDoS), bei der nicht nur ein, sondern viele Computer gleichzeitig unseren Rechner mit Paketen überschwemmen.

> Es gibt keinen vollkommenen Schutz gegen solche Angriffsformen, daher ist es wichtig, zumindestens die wichtigsten Formen dieses Angriffs zu kennen. Im Folgenden sollen ein paar dargestellt werden:

> ### TCP-SYN-Flooding

> Diese Angriffsform besteht einfach darin, den dreiteiligen Handshake einer TCP-Verbindung (siehe Seite ) zu unterbrechen. Wenn ein Client einem Server eine Anfrage stellt, so schickt er dem Server ein Paket mit gesetztem SYN-Flag. Der Server schickt als Antwort ein Paket mit einem gesetzten SYN- und ACK-Flag. Damit ist die Verbindung halboffen. Wenn der Client jetzt keine Antwort mit gesetztem ACK-Flag schickt, dann hält der Server diese Verbindung in der Regel für etwa 5 Minuten offen.

> Wenn der Client jetzt erneut (mit anderer Sequenznummer) eine SYN-Nachfrage schickt, dann muß der Server einen neuen Kanal öffnen. So geht das Spielchen weiter, bis der Server keine Kanäle mehr zur Verfügung hat. Im schlimmsten Fall wird der Server dann gänzlich abstürzen, im mindesten Fall kann er keine weiteren Dienste an andere anbieten.

> Die SYN-Flag Anfragepakete werden normalerweise eine gefälschte Sender-IP-Adresse haben, der Sender erwartet ja keine Antwort, er will ja nur stören.

> Linux bietet eine speziell gegen diese Angriffsform gerichtete Kerneleigenschaft, die sogenannten SYN-Cookies. Damit kann sich ein Linux-Kernel erfolgreich gegen Angriffe dieser Art wehren.

> ### PING-Flooding

> Das Programm `ping` wird benutzt, um festzustellen, ob ein betimmter Rechner über das Netz erreichbar ist. Dieses Programm schickt eine ICMP-Echoanforderung an einen bestimmten Rechner und wartet dann auf eben dieses Echo. Die Tatsache, daß es sich hier um ICMP (siehe Seite ) handelt, zeigt schon, daß ping hier nicht über die Netzwerkschicht (Vermittlungsschicht) hinausgeht. Es existieren also keinerlei Ports.

> Wenn ein Rechner einen anderen Rechner mit ping-Anfragen überhäuft, so kann es dazu kommen, daß dieser andere Rechner keine Bandbreite mehr für andere Netzwerkdienste übrig hat, er ist also auch faktisch lahmgelegt.

> Ältere Unix-Versionen (nicht Linux) waren auch anfällig gegen das sogenannte Todesping, eine Echoanforderung, die zu große Datenpakete verschickt. Diese alten Rechner konnten dann tatsächlich zum Absturz gebracht werden.

> ### UDP-Flooding

> Das UDP-Protokoll eignet sich hervorragend für Denial-of-Service-Angriffe. Es ist verbindungslos, d.h., es existiert keine Flußkontrolle, kein Handshake, keine Sequenznummern... Es ist also sehr einfach, einen Rechner mit UDP-Anfragen derart zu überhäufen, daß keine Bandbreite mehr für andere Netzwerkdienste übrig bleibt.

> UDP ist traditionell aber sowieso für Dienste innerhalb des lokalen Netzes bestimmt, Dienste im Internet benutzen fast immer TCP als Transportprotokoll. Viele Firewalls lassen daher grundsätzlich keine oder nur ein paar ausgewählte UDP-Dienstanfragen aus dem unsicheren Netz zu.

> ### ICMP-Redirect-Angriff

> Der Nachrichten-Typ 5 des Internet Control Message Protocol ist dazu gedacht, einen Computer anzuweisen, seine Routing Tables zugunsten anderer Routen umzustellen. Diese Funktionalität ist aber nur dann gewährleistet, wenn auf dem Rechner entweder der `gated` oder der `routed` läuft.

> Im Fall eines Angriffs, kann der Angreifer Ihren Rechner miz dieser Methode anweisen, alle ausgehenden Pakete über ihn zu routen. Das käme einer Katastrophe gleich, kann er doch so jedes ein- und ausgehende Paket manipulieren.

> Nächste Seite: Filtern von ausgehenden Paketen Aufwärts: Crashkurs Firewallaufbau unter Linux Vorherige Seite: Grundlagen der Firewalltechnik Inhalt