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
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
5. Wenn Dateien zum Schreiben eröffnet werden:<br />
1. wenn der Dateiname in Abhängigkeit von Angaben eines Angreifers<br />
gewählt wird,<br />
2. die zu kreierende Datei in einem vom Angreifer beeinflußbaren<br />
Verzeichnis liegt, oder<br />
3. wenn der Dateiinhalt beeinflußt werden kann.<br />
6. Eine typische Falle kann hier die Mächtigkeit von open() darstellen. Während<br />
open(OUT, $filename) recht harmlos aussieht, wird dies zum idealen<br />
Angriffspunkt, wenn beispielsweise $filename am Ende ein Pipeline-Zeichen<br />
erhalten kann oder wichtige Systemdateien (wie z.B. /etc/passwd) bedroht<br />
werden können.<br />
7. Selbst wenn auf $filename kein Einfluß ausgeübt werden kann, kann das<br />
Anlegen temporärer Dateien in öffentlichen Verzeichnissen (z.B. /tmp) zur<br />
tödlichen Falle werden, wenn dort der Angreifer zuvor einen symbolischen<br />
Verweis auf /etc/passwd <strong>für</strong> den zu erwartenden Dateinamen hinterließ.<br />
8. Natürlich sind auch viele weitere Systemaufrufe gefährlich wie z.B. mkdir,<br />
chmod, chown usw.<br />
9. Perl selbst ist zwar immun gegen den Hauptangriffspunkt bei in C<br />
geschriebenen Programmen auf Basis von Puffer-Überläufen, jedoch sind<br />
möglicherweise in C geschriebene Programme oder hinzugeladene<br />
Bibliotheken bedroht.<br />
10. Typische Fallen sind hier Umgebungsvariablen (z.B. HOME), die auf extrem<br />
lange Werte gesetzt werden <strong>und</strong> damit aufgerufene Shells zur Ausführung mit<br />
übergebenen Codes des Angreifers bringen können (diese Technik ist als<br />
stack smashing bekannt). Weitere Kandidaten sind die Umgebungsvariablen<br />
USER oder LOGIN, bei denen häufig naive Annahmen über deren maximale<br />
Länge gemacht wird.<br />
11. Weitere Probleme kann es mit (ansonsten überprüften)<br />
Kommandozeilenargumente geben, die zu lang sind.<br />
12. Auch Eingaben, die über eine Pipeline an ein fremdes Programm erfolgen,<br />
können einen Angriffspunkt darstellen, wenn z.B. gets statt fgets auf der<br />
einlesenden Seite verwendet wird.<br />
13. Häufig werden solche Sicherheitsaspekte bei Hilfsprogrammen nicht<br />
beachtet, da sie alleine genommen kein Sicherheitsrisiko darstellen.<br />
30.3 Lösungsmöglichkeiten<br />
1. Bei Skripten mit s-bit sind gr<strong>und</strong>sätzlich alle Umgebungsvariablen mit<br />
äußerster Vorsicht zu behandeln, wenn irgendwelche Kommandos oder<br />
Pipelines gestartet werden. Insbesondere sind PATH <strong>und</strong> IFS neu zu setzen<br />
<strong>und</strong> alle anderen Umgebungsvariablen sollten in ihrer Länge begrenzt<br />
werden.<br />
2. Jeder Systemaufruf open() <strong>und</strong> jeder Aufruf von system() sollten ganz genau<br />
daraufhin untersucht werden, inwieweit hier Abhängigkeiten von den<br />
Eingaben eines Angreifers vorliegen.<br />
3. Temporäre Dateien sollten in privaten Verzeichnissen angelegt werden, die<br />
<strong>für</strong> niemanden sonst zugänglich sind oder es sollte mit O_EXCL <strong>und</strong><br />
O_CREAT gearbeitet werden (dies empfiehlt sich übrigens generell!).<br />
4. Generell sollte überprüft werden, welche Privilegien tatsächlich wie lange<br />
notwendig sind:<br />
1. Es ist möglicherweise sinnvoll, den Prozeß (ggf. ab einem<br />
bestimmten Zeitpunkt) oder einen Kindprozeß unter einer chroot-<br />
Umgebung oder unter einer Benutzerberechtigung laufen zu lassen,<br />
die nur sehr wenig Rechte gibt.<br />
2. Ein Prozeß, der mit der Außenwelt in Verbindung steht, kann unter<br />
sehr restriktiven Bedingungen laufen <strong>und</strong> alle gefährlichen<br />
Operationen an einen weiteren Prozeß mit normalen Privilegien<br />
Erstellt von Doc Gonzo - http://kickme.to/plugins