Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Benutzer:Grey/Security Tool Developement Projekt

Doku

HowTo

Wozu braucht man das Testscript?

Um eine Firewall testen zu können, müssen Pakete unterschiedlichster Art generiert und durch die Firewall hindurch verschickt werden können. Die Generierung und das Senden von Paketen übernimmt in diesem Fall das Testskript, indem es bereitgestellte Funktionen (aus den wrapper-Klassen) benutzt. Da die Testskripte(eher der Pfad zu den Skripten) per Kommandozeile dem FWTEST übergeben werden, muß der Code nicht immer wieder neucompiliert werden, wenn ein neues Testkript ausgeführt werden soll.

Welche Sprache wird für ein Testscript benutzt? Und warum diese Sprache?

Python.

Python hat mehrere Vorteile:

  • einfache Syntax und somit leicht erlernbar
  • eine mächtige Bibliothekensammlung
  • leicht in C integrierbar und umgekehrt
  • Plattformunabhängig

Was kann ein Testscript?

  • default Pakete
  • IP-Pakete
  • UDP-Pakete
  • TCP-Pakete
  • ICMP-Pakete
  • Pakete senden
  • alles was Python kann

Wie sieht der Versuchsaufbau für ein Testskript aus?

Grundsätzlich läßt sich sagen, daß FWTEST zwei Agenten und einen FWTEST-Prozess benötigt.

Es gibt momentan zwei Versuchsaufbauten, die hauptsächlich benutzt werden.

Variante 1:

Wir haben insgesamt drei Rechner: die Firewall(FW), Agent A(Achen) und Agent B(Bchen). Auf Achen und Bchen laufen jeweils ein Agent, zusätzlich wird auf einem Rechner (der Agenten) FWTEST gestartet. Es übernimmt also ein Agent zusätzlich die Aufgabe vom FWTEST-Prozess.

Ein möglicher Aufbau wäre zum Beispiel:

http://www.freitagsrunde.org/~grey/sonstiges/std/versuchsaufbau1.png

Variante 2:

Die andere Variante geht von vier Rechnern aus, bei denen zwei Rechner ausschließlich die Funktion eines Agenten einnehmen, und der dritte Rechner als Controller fungiert (also FWTEST ausführt). Die Firewall wiederum bleibt wie zuvor unberührt davon.

Ein möglicher Aufbau wäre zum Beispiel:

http://www.freitagsrunde.org/~grey/sonstiges/std/versuchsaufbau2.png

Wie schreibe ich meine eigenen Testskripte?

Im Grunde ist das Implementieren eines Testskriptes recht einfach. Nehmen wir beispielhaft ein UDP-Paket, welches den Inhalt "Hallo Welt!" hat. Als erstes generieren wir ein default IP-Paket und passen die Felder unseren bedürfnissen an. Danach generieren wir erstmal unabhängig vom IP-Paket ein default UDP-Paket. Auch hier passen wir unser Paket unseren bedürfnissen an. Am Ende müssen wir noch das IP-Paket mit dem UDP-Paket verschmelzen. Wir geben dem IP-Paket das UDP-Paket als Payload und korrigieren die checksum-Felder mit der Funktion FIXUP. Nun sollte ein UDP/IP-Paket vorhanden sein, daß mittels transceive-Funktion verschickt wird.

Eine genauere Erklärung, bei der ein UDP-Testskript implementiert wird, finden Sie hier: UDP-Testskript

Grenzen von Tests

Testskripte sollen den Traffic simulieren und somit einen realistischen Paketaustausch darstellen. Zum Beispiel in unserem netdate-Beispiel haben wir eine Einschränkung.

Wir benutzen nicht wirklich den Heise-Server, sondern unser Agent nimmt diese Funktion ein, so daß natürlich die IP-Adresse unseres Agenten B (Bchen) im IP-Paket stehen muß. So gesehen ist es nicht wirklich eine Einschränkung des Testsktiptes, sondern eher des Versuchaufbaus. Es sei denn Bchen ist www.heise.de.

Eine weitere Einschränkung ist die komplexe Nachbildung einer Verbindungsstrecke, wie beim ICMP Fragmentation Needed Aufbau. Wir haben nicht alles, Server und Rechner zu denen eine Verbindung in der Realität aufgebaut werden würde, aber das ist auch nicht nötig. Es soll nur die Firewall getestet werden, ob sie richtig konfiguriert ist oder Schwachstellen hat.

So sind nur die Pakete wichtig die durch die Firewall gehen.