Backdoor

SideDoor – jak stworzyć Backdoor na systemach Debian/Ubuntu przy użyciu odwrotnego tunelu SSH

Backdoor, czyli luka w zabezpieczeniach, to swoista furtka utworzona umyślnie w celu późniejszego wykorzystania. Jak stworzyć taki backdoor przy pomocy odwrotnego tunelu SSH – czyli tak zwany SideDoor?

Często istnieje potrzeba dostania się do komputera, który znajduje się za NAT-em (Network Adress Translation), znanym również jako maskarada sieci lub maskarada IP, czyli techniką przesyłania ruchu sieciowego poprzez router, która wiąże się ze zmianą źródłowych lub docelowych pakietów oraz ich adresów IP. Najczęściej ma to miejsce w sieci bez publicznego adresu IP lub na przykład przy połączeniach komórkowych. Jednak jest to problem, który można obejść za pomocą właśnie odwrotnego tunelu – tworzymy tunel z jednego komputera do innego, z publicznym adresem IP, następnie, odwołując się do zdalnego komputera, wracamy tunelem do naszego komputera. Tak skonstruowany tunel z zastosowaniem SSH nosi właśnie nazwę odwrotnego tunelu, gdyż w tym przypadku to klient nawiązuje połączenie z hostem w sieci. Dzięki takiemu tunelowi możemy dostać się do zasobów urządzenia, które nawiązuje połączenie. Minusem zaś jest potrzeba uzyskania dostępu do komputera z publicznym adresem IP, widocznym w sieci.

Można jednak pójść o krok dalej – wykorzystać odwrotny tunel do przeprowadzenia sidedooru, to znaczy takiego rodzaju backdooru, który utrzymuje tunel, aby go uzyskać.
Sidedoor, o którym tu mowa, działa na systemach bazujących na Debianie z systemd lub upstartem. Był również używany na systemie Debian 8 (jessie) oraz Ubuntu 14.04 LTS.
Sidedoor ten wymaga pełnego roota, czyli dostępu do wszystkich plików systemowych oraz do dowolnego ich modyfikowania.

Instalacja

Jeśli sidedoor jest w twoim repozytorium pakietów, po prostu go zainstaluj (sudo apt-get install sidedoor).
Jeśli jednak nie masz takiego programu, musisz stworzyć pakiet dla Debiana i zainstalować go. Po pierwsze konieczne jest zainstalowanie „build dependencies”. W tym celu należy wpisać w konsoli systemu:
sudo apt-get install debhelper dh-systemd
Następnie, z folderu zawierającego plik README, stwórz i zainstaluj pakiet:
rm -f ../sidedoor*.deb # usuń stare pakiety
dpkg-buildpackage -us -uc -b
sudo dpkg -i ../sidedoor*.deb

Konfiguracja

Konfiguracja zdalnego serwera i portu tunelu znajduje się pod adresem /etc/default/sidedoor. Plik z konfiguracją SSH znajduje się z kolei w folderze /etc/sidedoor .
~sidedoor/.ssh to symlink (łącze symboliczne) do /etc/sidedoor.
Skonfiguruj REMOTE_SERVER (zdalny serwer) i TUNNEL_PORT (port tunelu) pod adresem /etc/default/sidedoor .
Utwórz plik konfiguracyjny SSH pod adresem /etc/sidedoor.
Authorized_keys : publiczny klucz(e) SSH do kontroli dostępu dla lokalnego użytkownika sidedoora.
Id_rsa : prywatny klucz SSH dostępu do serwera zdalnego. Może on zostać wygenerowany za pomocą sudo ssh-keygen –t rsa –f /etc/sidedoor/id_rsa (naciśnij enter, kiedy zostaniesz poproszony o pozostawienie hasła pustego). Potrzebuje on pozwolenia na odczyt przez użytkownika lub grupy sidedooru, na przykład: sudo chown root:sidedoor /etc/sidedoor/id_rsa oraz sudo chmod 640 /etc/sidedoor/id_rsa. Odpowiadający kod publiczny id_rsa.pub musi zostać załączony do pliku zdalnego użytkownika ~/.ssh/authorized_keys .
Known_hosts : klucz hosta SSH zdalnego serwera.
Config (opcjonalnie): dodatkowa konfiguracja SSH, zobacz man ssh_config.
Zrestartuj usługę sidedoora, aby zastosować zmiany za pomocą komendy
sudo service sidedoor restart

Propozycje

  • Zablokuj lokalny serwer SSH przez edycję /etc/ssh/sshd_config.
    • Wyłącz autentykację hasła (ChallengeResponseAuthentication no oraz PasswordAuthentication no).
    • Ogranicz daemona jedynie do odbioru hostów lokalnych. (ListenAdress ::1 oraz ListenAdress 127.0.0.1)
    • Aby zastosować zmiany w konfiguracji, zrestartuj lub przeładuj sshd, na przykład komendą sudo service ssh reload.
  • Zmodyfikuj plik ssh_client_config_example i zawarte w nim pliki klientów ~/.ssh/config, aby łatwo uzyskać dostęp do ztunelowanego backdoora poprzez ssh, scp, rsync, i tym podobne.

Strona Projektu(SideDoor): https://github.com/daradib/sidedoor