Ukryty wymiar praw dostępu
Napisał: Patryk Krawaczyński
24/08/2017 w Administracja, Bezpieczeństwo Brak komentarzy. (artykuł nr 635, ilość słów: 424)
P
otężny administrator systemu postanowił stworzyć bramę do ukrytego wymiaru. Dla niepoznaki zrobił to w katalogu domowym zwykłego użytkownika. By chronić portal przed różnymi daemonami rzucił na niego zaklęcie zdejmujące wszystkie prawa dostępu:
:~# bash -c "echo 'Niedostrzegalne barwy - czarne wodospady' > \ /home/agresor/ukryty_wymiar" :~# chmod 0000 /home/agresor/ukryty_wymiar
Podczas powrotu do swojego katalogu ($HOME
) użytkownik zauważył dziwne wrota:
agresor@darkstar:~$ ls -lah ukryty_wymiar ---------- 1 root root 39 Aug 24 21:01 ukryty_wymiar
Dookoła nich krążyły już Kerberos, Sphinx oraz sam Dracula. Widząc to, w użytkowniku wezbrał niepohamowany gniew, który przekształcił w ukrytą moc zniszczenia. Użytkownik wiedział, że bez księgi sudo nie jest w stanie zniszczyć portalu potężnego administratora, ale postanowił chociaż spróbować:
agresor@darkstar:~$ rm -rf ukryty_wymiar agresor@darkstar:~$ ls -al ukryty_wymiar ls: cannot access 'ukryty_wymiar': No such file or directory
Ku zdziwieniu użytkownika brama do ukrytego wymiaru zniknęła bezpowrotnie, a wraz z nią głodne przejścia daemony.
Gdzie był haczyk?
W systemie Linux, jeśli chcemy cokolwiek zrobić z plikiem to pierwszym krokiem jest sprawdzenie praw dostępu do jego nadrzędnego katalogu (w naszym przypadku $HOME
). Zapoznanie się z zawartością katalogu jest możliwe dzięki prawu read (-r-)
:
drw----r-- 3 root root 4096 Aug 24 22:37 test agresor@darkstar:~$ ls -al test/ total 0 d????????? ? ? ? ? ? . d????????? ? ? ? ? ? .. d????????? ? ? ? ? ? test1
z kolei prawo execute (-x-)
daje nam możliwość wejścia do katalogu, ale także dostęp do i-węzłów plików znajdujących się w jego środku:
drw----r-x 3 root root 4096 Aug 24 22:37 test agresor@darkstar:~$ ls -al test total 12 drw----r-x 3 root root 4096 Aug 24 22:37 . drwxr-xr-x 3 agresor agresor 4096 Aug 24 22:37 .. drwxr-xr-x 2 root root 4096 Aug 24 22:37 test1
Ma to kluczowe znaczenie w tym kontekście, ponieważ proces usuwania powoduje odłączenie pliku. Sam proces usuwania lub zmiany nazwy nie wymagają wywołania systemowego write() ani prawa write (-w-)
. Praktycznie użytkownik nie wymaga żadnych praw dostępu, aby usunąć plik. Nie musi też dbać o właściciela usuwanego pliku. Jedynym wymogiem jest posiadanie praw zapisu oraz wykonywania na katalogu nadrzędnym, co z perspektywy użytkownika naturalnie spełnia katalog $HOME
.
Więcej informacji: Prawa dostępu do plików i katalogów, Casually removing root files