Nächste Seite: Filtern von ausgehenden Paketen
Aufwärts: Crashkurs Firewallaufbau unter Linux
Vorherige Seite: Grundlagen der Firewalltechnik
  Inhalt
Unterabschnitte
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.
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.
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.
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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
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.
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.
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.
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.
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.
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.
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...
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:
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.
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.
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.
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
root
2001-08-07