|
Zagrożenia
Wywołanie strony będącej skryptem (programem) CGI powoduje uruchomienie
na serwerze odpowiedniego programu jako oddzielnego procesu.
Powoduje to powstanie wielu zagrożeń których należy unikać.
- Program uruchamiany jest jako użytkownik apache, bądź
nobody (zależnie od konfiguracji), dzięki czemu uzyskuje
on dostęp do wszystkich plików zapisanych przez tego użytkownika
na serwerze (również do plików wykorzystywanych przez inne skrypty).
- Program otrzymuje standardowe prawa użytkownika, czyli ma dostęp do takich
plików jak /etc/passwd, których upublicznienie poza
serwer jest zagrożeniem bezpieczeństwa
- Użytkownik może w taki sposób napisać program, że powoduje on uruchomienie
zdalnego terminala wyświetlanego na końcówce klienta. Zazwyczaj sposób
ten omija firewall'e ponieważ połączenie TCP/IP jest inicjowane przez
serwer.
- Użytkownik może nieświadomie (ale łatwo) napisać skrypt, który
zawiera błędy i umożliwia atak na serwer, bądź przynajmniej na
konto na którym skrypt jest umieszczony.
Przykładem może być program który jako parametr otrzymuje nazwę
pliku (np. z pocztą) do wyświetlenia. Ale sprytne podanie nazwy
pliku jako np. ../../../../../etc/passwd da dostęp do plików
z poza katalogu poczty. Proszę rozważyć skrypt
zrodlo.cgi w którym
pominięto by sprawdzanie czy plik ma jedno ze znanych rozszerzeń
i na leży na bieżącej ścieżce.
Szczególnie ostrożnie należy stosować polecenia typu eval,
exec w bashu, czy system, execl w C lub perlu,
których parametry nie są stałe (np. zależą od QUERY_STRING).
- Innym zagrożeniem może być atak typu DOS. Każde odwołanie
do skryptu CGI powoduje uruchomienie procesu, więc masowo uruchamiając
skrypt można przeciążyć system.
Przed pierwszym z wymienionych zagrożeń można częściowo zabezpieczyć się,
korzystając z mechanizmu suexec. Gdy serwer jest skonfigurowany aby
korzystał z tego modułu, skrypt (program) uruchamiany jest z prawami
właściciela pliku, a nie właściciela procesu serwera (apache).
W takim wypadku użytkownik może udostępnić do zapisu co najwyżej pliki
do których sam ma takie prawa. Nie zabezpiecza to jednak przed dostępem
do plików spoza własnego katalogu.
Często stosowanym "zabezpieczeniem" jest nieudostępniane możliwości
wykonywania skryptów CGI zwykłym użytkownikom. Po sprawdzeniu
administrator umieszcza takie skrypty w specjalnym katalogu.
Ważne informacje np. hasła można wydzielić ze skryptów i umieścić je w
oddzielnym pliku poza ścieżką dostępną do normalnego odczytu przez
serwer WWW (np. poza katalogiem public_html).
Dzięki takiemu rozwiązaniu skrypt dalej może
taki plik odczytywać (bo ma prawa użytkownika), ale w przypadku
wyłączenia modułu CGI (np. w przypadku wadliwego upgrade'u oprogramowania)
plik z hasłami nie zostanie udostępniony do odczytu jako tekst, tak
jak się to może stać ze skryptami.
Jan Słupski, jslupski@email.com
| |