05.02.2013 Aufrufe

Firewall Handbuch für LINUX 2.0 und 2.2 - zurück

Firewall Handbuch für LINUX 2.0 und 2.2 - zurück

Firewall Handbuch für LINUX 2.0 und 2.2 - zurück

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

22.7 Warum Filter anfällig gegen buffer overflows sind<br />

Das folgende Beispiel stammt von Eric Dumazet <strong>und</strong> findet sich auf<br />

ftp://ftp.ris.fr/pub/linux/proxy/. Es ist ein Beispiel <strong>für</strong> einen Proxy, wie man ihn auf vielen<br />

<strong>Firewall</strong>s implementiert finden kann. Viele <strong>Firewall</strong> - Hersteller benutzen oft Code aus dem<br />

Internet, um Ihrer <strong>Firewall</strong> noch ein paar spezielle Protokolle, hier einem VDO Proxy,<br />

hinzuzufügen. Dies ist nicht der in dem <strong>LINUX</strong> Kernel implementierte Proxy, sondern<br />

einer, der auf jedem UNIX einfach zu installieren ist. Der Autor hat auch einen<br />

transparenten HTTPD-PROXY geschrieben, der auch auf o.a. URL zu finden ist. Das<br />

Problem mit diesem Proxy ist folgendes. Es fehlen überall Begrenzungen <strong>für</strong> die maximal<br />

zulässige Länge der Übergabeparameter. Um feststellen zu können, welche Daten von wo<br />

aus an den Filter übergeben werden, muß man eine vollständige Flußanalyse des (hier<br />

noch überschaubaren Programmes) durchführen. Es müssen also folgende Fragen geklärt<br />

werden. Ein einziger Fehler im Quellcode ist bereits <strong>für</strong> einen Angreifer ausreichend, um in<br />

das Netzwerk hinter dem Proxy vorzudringen. Wo ist der Fehler ?:<br />

• Werden ARGC() ARGV() abgefangen ?<br />

• Wie fordern die Unterroutinen in stdio, netdb, netinet u.s.w Speicher an<br />

(malloc, realloc, vmalloc). Welche Routinen sind buffer overflow gefährdet ?<br />

• Welche Arrays sind statisch angelegt, welche Informationen können dort<br />

hineingeschrieben werden ? Ist ein buffer overflow möglich ?<br />

• Werden unzulässig Lange Strings vor dem Speichern in statische Arrays auf<br />

Überlänge abgefragt ? Wo ist ein Beispiel im Code ?<br />

• Welche Pointer auf Arrays oder Funktionen können mit unzulässigen Werten<br />

gefüllt werden. Wo werden diese Werte auf Zulässigkeit untersucht ?<br />

• Welche Fehlermeldungen werden an den SYSLOGD oder KLOGD bei<br />

welchen Fehlern übergeben ? Welche Fehler können vom<br />

Systemadministrator entdeckt werden ?<br />

• Nach welchem Mechanismus arbeitet der VDO Proxy ? Welche Ports<br />

(TCP/UDP) sind zu welchem Zeitpunkt geöffnet, welche bleiben unnötig lange<br />

geöffnet ? Welche TCP Ports bleiben offen ? Welche Angriffe sind möglich ?<br />

• Welche Ports werden nach Absprache mit dem VDO Video-Server im Internet<br />

in der <strong>Firewall</strong> bzw. in dem Proxy geöffnet ? Ist der Proxy manipulierbar<br />

dahingehend, daß eventuell die <strong>Firewall</strong> auch <strong>für</strong> andere Protokolle<br />

transparent wird ?<br />

• Wieviel Speicher verbraucht der Proxy in Abhängigkeit der Zahl der Video<br />

Datenströme ? Ist ein DoS möglich ?<br />

• Wie fängt der Proxy Spoofing Angriffe ab ? Wird ein double reverse lookup<br />

durchgeführt ?<br />

• Wird der IDENTD mit aktiviert ? Welche Informationen könnte dieser liefern ?<br />

• Kann man den Proxy mit einem TCP Wrapper betreiben ?<br />

• Kann der PROXY in einer CHROOT() Umgebung gestartet werden ?<br />

• Was passiert, wenn der das Format der Videodaten plötzlich verändert wird.<br />

Kann sich der Eingangspuffer dynamisch anpassen, oder ist ein buffer<br />

overflow möglich ?<br />

• Können Funktionen, wie strcpy() mit unzulässigen Werten aufgerufen werden<br />

(altes strcpy() Pointer Problem) ?<br />

• Ist die Library gefixt ?<br />

• Gibt es Parameter, die bei Übergabe an den PROXY diesen Killen (DoS) ?<br />

• Wieviele gleichzeitige Video Datenströme verträgt der PROXY ?<br />

Wer sich intensiver mit dieser Materie auseinandersetzt, wird beim Lesen dieses Artikels<br />

über sicheres Programmieren unter UNIX, siehe http://www.whitefang.com/sup/securefaq.html,<br />

daß viele Programme unter <strong>LINUX</strong> weit davon entfernt sind, sicher zu sein....<br />

Für C-Spezialisten hier nun der vollständige Quellcode, der, bevor er auf einer <strong>Firewall</strong><br />

eingesetzt werden kann, nach obigen Punkten abgesucht werden sollte. Wie schwer<br />

Erstellt von Doc Gonzo - http://kickme.to/plugins

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!