NFsec Logo

pspy – nieuprzywilejowany podgląd procesów Linuksa

28/05/2019 (3 tygodnie temu) w Bezpieczeństwo, Pen Test Brak komentarzy.  (artykuł nr 695, ilość słów: 760)

N

arzędzie to pozwala na podglądanie procesów bez konieczności posiadania uprawnień administratora. Pozwala zobaczyć polecenia uruchamiane przez innych użytkowników, zadania cron w trakcie ich wykonywania itp. Świetnie nadaje się do badania systemów podczas testów penetracyjnych oraz CTFach. Jak to możliwe, że widzimy polecenia innych użytkowników? Dopóki proces trwa wiele informacji jest widocznych w procfs. Jedynym problemem jest to, że trzeba czasem złapać te krótko żyjące procesy w bardzo krótkim czasie. Skanowanie katalogu /proc w poszukiwaniu nowych PIDów w nieskończonej pętli może zdać egzamin, ale tym samym będzie zużywać bardzo dużo zasobów procesora.

Bardziej dyskretnym sposobem jest użycie API inotify, dzięki któremu możemy otrzymywać powiadomienia za każdym razem, gdy wybrane pliki są tworzone, modyfikowane, usuwane i uzyskiwany jest do nich dostęp itd. Linux do wykorzystania tego interfejsu nie wymaga uprzywilejowanych uprawnień. Wiele niewinnych aplikacji takich jak edytory tekstu jawnie korzysta z tego rozwiązania. Oczywiście użytkownicy inni niż administrator (root) nie mogą bezpośrednio monitorować procesów, ale mogą monitorować efekty procesów w tym systemie plików. Dlatego możemy użyć zdarzeń systemu plików jako wyzwalacza do skanowania /proc, mając nadzieję, że możemy zrobić to wystarczająco szybko, aby przechwycić wszystkie procesy. Tak właśnie działa pspy. Nie daje nam to żadnej gwarancji, że nie przegapimy żadnego zdarzenia, ale ogólnie rzecz biorąc im dłużej lub częściej przebiegają procesy, tym większa szansa na ich złapanie. Sprawdźmy. W pierwszej konsoli zalogujemy się jako zwykły użytkownik, a w drugiej jako administrator serwera i wydamy polecenia: w, uptime oraz mysql z parametrami połączenia do bazy:

agresor@darkstar:~$ ./pspy64
Config: Printing events (colored=true): processes=true | file-system-events=false 
Scannning for processes every 100ms and on inotify events
Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive)
Draining file system events due to startup...

2019/05/27 23:03:50 
CMD: UID=0    PID=1278   | /sbin/agetty --noclear tty1 linux
2019/05/27 23:03:50
CMD: UID=0    PID=1276   | /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
2019/05/27 23:03:50
CMD: UID=0    PID=1270   | /lib/systemd/systemd-logind
2019/05/27 23:03:50
CMD: UID=0    PID=1269   | /usr/lib/accountsservice/accounts-daemon
2019/05/27 23:03:50
CMD: UID=116  PID=1252   | qmgr -l -t unix -u
2019/05/27 23:03:50
CMD: UID=0    PID=1248   | /usr/lib/postfix/sbin/master
2019/05/27 23:03:50
CMD: UID=0    PID=1078   | /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid
2019/05/27 23:03:50
CMD: UID=115  PID=1067   | /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 115:119
2019/05/27 23:03:50
CMD: UID=0    PID=1      | /lib/systemd/systemd --system --deserialize 27
2019/05/27 23:03:56
CMD: UID=1485 PID=8288   | sudo su -
2019/05/27 23:03:56
CMD: UID=0    PID=8289   | su -
2019/05/27 23:03:56
CMD: UID=0    PID=8302   | /bin/sh /usr/bin/lesspipe
2019/05/27 23:03:56
CMD: UID=0    PID=8308   | mesg n
2019/05/27 23:04:01
CMD: UID=0    PID=8310   | /usr/sbin/CRON -f
2019/05/27 23:04:01
CMD: UID=0    PID=8312   | /sbin/modprobe -q -- net-pf-10
2019/05/27 23:04:09
CMD: UID=0    PID=8314   | w
2019/05/27 23:04:16
CMD: UID=0    PID=8315   | uptime
2019/05/27 23:04:57
CMD: UID=0    PID=8318   | mysql -u admin -h localhost -ptajnehaslo
2019/05/27 23:05:01
CMD: UID=0    PID=8322   | /bin/sh -c command -v debian-sa1 > /dev/null && debian-sa1 1 1

Konsola administratora:

agresor@darkstar:~$ sudo su -
root@darkstar:~# w
 23:04:09 up 137 days,  8:19,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
agresor  pts/0    175.19.1.45      23:01   22.00s  2.44s  2.38s ./pspy64
agresor  pts/1    175.19.1.45      23:02    0.00s  0.12s  0.02s sshd: agresor [priv]
root@darkstar:~# uptime
 23:04:16 up 137 days,  8:19,  2 users,  load average: 0.00, 0.00, 0.00
root@darkstar:~# mysql -u admin -h localhost -ptajnehaslo

Oprócz szpiegowania administratora – widzimy jakie niebezpieczne może być przekazywanie poufnych informacji jako argumenty w linii poleceń – czy to w żywych poleceniach, czy skryptach uruchamianych z poziomu cron’a. Podobny efekt tylko bardziej surowy możemy osiągnąć wydając polecenie:

inotifywait -m -r -e open --format '%w%f' /proc

Jeśli chcemy zabezpieczyć się przed tego typu dostępem do katalogu /proc musimy wykorzystać funkcję ukrywania procesów przed innymi użytkownikami – hidepid. Po zamontowaniu wirtualnego systemu plików procfs z tą opcją użytkownik będzie miał tylko i wyłącznie dostęp do listy swoich procesów:

mount -o remount,rw,hidepid=2 /proc

Więcej informacji: pspy – unprivileged linux process snooping

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

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

Komentowanie tego wpisu jest zablokowane.