NFsec Logo

Wszystko w Linuksie jest plikiem na który można zerkać

03/12/2024 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 916, ilość słów: 486)

W

szystko jest plikiem to koncepcja zakładającą, że w systemach z rodziny *nix wejście / wyjście do i z zasobów (dyski twarde, urządzenia sieciowe, urządzenia peryferyjne) jest prostym strumienim bajtów udostępnionych przez przestrzeń nazw systemu plików. Oznacza to, że jesteśmy w stanie wykonać ten sam zestaw operacji opisany dla plików na każdym obiekcie w systemie, ponieważ każdy z nich jest “plikiem”. Możemy otworzyć konkretne urządzenie / plik, odczytać z niego, zapisać do niego i zamknąć je po zakończeniu. Dane z tego zasobu są również przesyłane strumieniowo. Jedyną rzeczą, która się zmienia jest źródło danych. Na przykład, gdy piszemy w terminalu w rzeczywistości zapisujemy dane do zasobu o nazwie standardowe wejście (ang. standard inputstdin). Gdy dane są wyświetlane na terminalu, używane jest standardowe wyjście (ang. standard outputstdout).

W dodatku, gdy otwieramy dany obiekt wówczas zwracany jest nam deskryptor pliku (ang. file descriptor), który pod postacią unikalnej liczby całkowitej reprezentuje otwarty plik. Posiada on standardowe wejście (0), standardowe wyjście (1) oraz standardowe wyjście błędów (2), na które możemy sobie zerkać z innego procesu. Jak to zrobić? W pakiecie o nazwie psmisc (różnych narzędzi wykorzystujących pseudo system plików /proc) znajduje się program peekfd, dzięki któremu możemy zobaczyć dane przesyłane przez dany deskryptor pliku. To daje nam kolejne narzędzie do podsłuchiwania innych procesów w systemie za pomocą ptrace. W pierwszym terminalu pobieramy ID procesu, który chcemy podsłuchiwać:

agresor@darkstar:~$ ps x
    PID TTY      STAT   TIME COMMAND
   1187 ?        Ss     0:00 /lib/systemd/systemd --user
   1188 ?        S      0:00 (sd-pam)
   1251 ?        R      0:00 sshd: agresor@pts/0
   1252 pts/0    Ss     0:00 -bash
   1261 pts/0    R+     0:00 ps x

W drugiej konsoli wydajemy polecenie:

root@darkstar:~# peekfd -n -8 -d -c 1252 0 1 2

i od teraz możemy obserwować stdin (0), stdout (1), stderr (2) procesu 1252:

agresor@darkstar:~$ uname -a
Error attaching to pid -38
Linux darkstar 5.15.0-125-generic #135-Ubuntu SMP Fri Sep 27 13:53:58 UTC 2024 x86_64
agresor@darkstar:~$ uptime
Error attaching to pid -38
 20:21:34 up 37 min,  3 users,  load average: 0.00, 0.21, 0.24

Co ciekawe, znamiennym dla podsłuchiwanej powłoki bash jest fakt, że nie można w niej wykonać sekwencji Ctrl+C ( ^CSIGINT ang. Signal Interrupt) – nie wyświetli nam nowego znaku prompt.

Więcej informacji: Linux: Everything is a file; peekfd: peek write/read of every file, You can use the Linux peekfd command to spy on shells/processes

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

Tagi T a g i : , , , , ,

Komentowanie tego wpisu jest zablokowane.