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
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