30.3 Lösungsmöglichkeiten
- Bei Skripten mit s-bit sind grundsätzlich alle Umgebungsvariablen mit
äußerster Vorsicht zu behandeln, wenn irgendwelche Kommandos oder Pipelines
gestartet werden. Insbesondere sind PATH und IFS neu zu setzen und alle
anderen Umgebungsvariablen sollten in ihrer Länge begrenzt werden.
- Jeder Systemaufruf open() und jeder Aufruf von system() sollten ganz genau daraufhin
untersucht werden, inwieweit hier Abhängigkeiten von den Eingaben eines
Angreifers vorliegen.
- Temporäre Dateien sollten in privaten Verzeichnissen angelegt werden, die
für niemanden sonst zugänglich sind oder es sollte mit O_EXCL und O_CREAT
gearbeitet werden (dies empfiehlt sich übrigens generell!).
- Generell sollte überprüft werden, welche Privilegien tatsächlich wie lange
notwendig sind:
- Es ist möglicherweise sinnvoll, den Prozeß (ggf. ab einem bestimmten
Zeitpunkt) oder einen Kindprozeß unter einer chroot-Umgebung oder unter
einer Benutzerberechtigung laufen zu lassen, die nur sehr wenig Rechte gibt.
- Ein Prozeß, der mit der Außenwelt in Verbindung steht, kann unter sehr
restriktiven Bedingungen laufen und alle gefährlichen Operationen an einen
weiteren Prozeß mit normalen Privilegien delegieren. Diese Architektur wird
z.B. von smtpd und smtpfwdd von Obtuse verwendet.