Uciekając z sudo – część pierwsza
Napisał: Patryk Krawaczyński
18/08/2014 w Bezpieczeństwo Brak komentarzy. (artykuł nr 455, ilość słów: 410)
S
udo jest narzędziem stosowanym w świecie systemów Unix i Linux do “bezpiecznego” ograniczenia dostępów do poleceń i plików wymagających praw administratora. Różni się tym od polecenia su -
, że su daje natychmiastowy dostęp do konta root. Sudo natomiast pozwala na dostrojenie, które rzeczywiście polecenia mogą zostać uruchomione z wyższymi uprawnieniami. Problem z sudo jest taki, że nie jest ono w stanie przewidzieć / ograniczyć dalszych działań uprawnionych programów, ani upewnić się, że środowisko wokół tych programów nie posiada żadnych luk konfiguracyjnych, które mogą negatywnie wpłynąć na rozszerzenie nadanych praw.
Prostym przykładem będzie zezwolenie wszystkim użytkownikom należącym do grupy users do wykonywania prostego polecenia less
z prawami administratora, tak aby mogli oni czytać przykładowy plik /etc/named.conf
. W tym celu dodajemy odpowiedni wpis do pliku /etc/sudoers
%users ALL=/usr/bin/less /etc/named.conf
Jako użytkownik należący do grupy users możemy teraz wydać polecenie:
sudo less /etc/named.conf
Oczywiście system poprosi nas o podanie hasła (aktualnego użytkownika, nie administratora). Raz wpisane hasło powinno wyświetlić nam zawartość pliku konfiguracyjnego serwera DNS, a w dzienniku aktywności programu sudo pojawi się wpis podobny do tego:
Aug 17 21:24:27 darkstar sudo: agresor : TTY=pts/0 ; PWD=/home/agresor ; USER=root ; COMMAND=/usr/bin/less /etc/named.conf
Widzimy informację, która zapisała nam datę i czas; kto wykonał polecenie; z jakiego terminala; w jakim katalogu aktualnie się znajdował; jaki poziom uprawnień uzyskał; jakie polecenie wraz z opcjami zostało wykonane (w tym przypadku ścieżka do pliku). Wracając do naszego polecenia less
, które cały czas wyświetla nam zawartość pliku… Wydajmy w nim następującą komendę:
! [Enter]
Czyli wpisujemy znak wykrzyknika i naciskamy klawisz Enter. W tym momencie powinna zgłosić się nam powłoka z uprawnieniami administratora. Dla pewności możemy wydać polecenie: whoami
, które rozwieje nasze wątpliwości:
[agresor@darkstar ~]$ sudo less /etc/named.conf [sudo] password for agresor: [root@darkstar agresor]# whoami root
I tak oto uciekliśmy z ograniczenia programu, a wydanie polecenia whoami
, czy uruchomienie pełnej powłoki administratora nie wygenerowało nawet pojedynczego wpisu w logach bezpieczeństwa systemu. Innymi słowy – raz uruchomiona powłoka za pomocą polecenia less
pozwala nam na dowolne działania, które nie zostaną odnotowane przez program sudo, a jedynie w pliku .bash_history
użytkownika root (który możemy teraz wyczyścić).
Nauka z powyższej historii wynika, że nie możemy przyznawać podwyższonego dostępu do narzędzi, które pozwalają na uruchamianie powłoki jako subprocesów. Przeszukując podręcznik pomocy polecenia less
pod kątem słowa kluczowego shell przed przyznaniem uprawnień byśmy byli w stanie uniknąć tego błędu i zamiast nadać je dla programu less
– wybrali raczej bezpieczną alternatywę, czyli cat
.
Więcej informacji: Breaking out of a sudo shell