NFsec Logo

Podstawy skryptów shell #1

25/05/2017 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 612, ilość słów: 335)

B

ezpieczeństwo, jeśli chodzi o pisanie skryptów shell bywa różne. Większość użytkowników skupia się zazwyczaj na rozwiązaniu napotkanego problemu programistycznego lub automatyzacji żmudnego zadania. Nie doprowadzanie w kodzie do luk umożliwiających późniejszą ich eksploatację schodzi na drugi plan. Dlatego w tej serii zostanie opisanych kilka typowych błędów popełnianych w skryptach shell oraz sposoby, w jaki można je wykorzystać i nim zapobiec.

Ataki na zmienne środowiskowe

– są najczęstszym sposobem manipulowania zachowaniem obranego za cel skryptu. Szczególnie jeśli jego wykonanie jest zależne od wartości tych zmiennych. Mimo, że w dzisiejszych czasach ataki te powinny być mniej szkodliwe dla skryptów, ponieważ nie nadaje się im już atrybutów setuid! To nadal mogą spowodować nieprawidłowe zachowanie w systemie (sprawa ma się gorzej, jeśli to skrypt wywołuje programy z atrybutem suid). Ataki mogą być również szkodliwe w zastosowaniach wieloużytkownikowych, gdy jeden użytkownik jest w stanie przeprowadzić modyfikację skryptów innego użytkownika poprzez błąd lub niepoprawną konfigurację.

Popularną formą tego ataku jest modyfikacja zmiennej środowiskowej PATH. Zmienna ta steruje tym, co zostanie wykonane podczas wpisania polecenia bez podania pełnej ścieżki. Np. polecenie date jest wykonywane w rzeczywistości poprzez ścieżkę /bin/date przy zmiennej PATH=/bin. Spójrzmy teraz na skrypt /usr/bin/tempo.sh:

#!/bin/sh
ls /tmp

Jeśli stworzymy teraz złośliwy skrypt o nazwie ls (echo "Pwned!") i umieścimy go w ścieżce /home/agresor/bin/ls i przed wykonaniem skryptu tempo.sh wykonamy polecenie:

export PATH=/home/agresor/bin:$PATH

To po wykonaniu skryptu tempo.sh zamiast zawartości katalogu tymczasowego otrzymamy:

agresor@darkstar:~$ ./tempo.sh
Pnwed!

Ponieważ poddaliśmy manipulacji ścieżkę wyszukiwania to nasz złośliwy skrypt został wykonany jako pierwszy zamiast programu /bin/ls.

Zawsze należy pamiętać, aby podawać bezwzględne ścieżki podczas wykonywania skryptów. To samo tyczy się dostępu do zawartych w nich programach. Jeśli nasz skrypt do działania potrzebuje innych skryptów lub programów, które nie używają bezwzględnych ścieżek dostępu należy wyraźnie ustawić zmienną PATH w naszym skrypcie, aby uniknąć późniejszych problemów z nadpisaniem:

agresor@darkstar:~$ cat /usr/bin/tempo.sh
#!/bin/sh
declare -r PATH=/bin
export PATH
ls /tmp
agresor@darkstar:~$ echo $PATH
/home/agresor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
agresor@darkstar:~$ ./usr/bin/tempo.sh
cpu_stats mc-agresor file09euhz fileKUOTKQ fileefD0Vb

Skrypt dzięki ustawieniu własnej zmiennej środowiskowej w postaci ścieżki przeszukiwania (która dodatkowo została oznaczona jako tylko do odczytu) nie wykonał złośliwego skryptu.

Więcej informacji: Ograniczenia z poziomu powłoki

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.