1.Co to jest SSH?
Secure Shell (RFC 4251) najprosciej ujmując, jest to protokół sieciowy, który pozwoli ci bezpiecznie przesyłać dane pomiędzy dwa komputery 🙂 Standardowo nasłuchuje na porcie TCP 22, wspiera wykonywanie zdalnych komend na maszynie, przesył plików (SFTP,SCP) i tunelowanie 🙂 Istnieją dwie wersje tego protokołu,jedynka odeszła do lamusa. Od roku 1999 jest rozwijany jako otwarta implementacja, najbardziej popularny OpenSSH. Został certyfikowany przez FIPS 140-1 i -2 jako rządowy szyfrowy standard, wiec protokół przy dobrej konfiguracji zapewnia:
- odporny na podsłuch,
- odporność na podkradanie sesji,
- odporność na podszywanie sie pod IP/DNS,
- spokojny sen 🙂
Mozna podzielić sie na trzy warstwy:
- Transport (RFC 4253) – kompresja, autoryzacja serwera, szyfrowanie połączenia(SSL/TLS).
- Autoryzacja użytkownika
- publickey (DSA, RSA*,OpenPGP)
- hostbased
- password
- keyboard-interactive
- Połączenia – multiplesaksja kilka sesji w jedna
2. Jak dziala?
Przykładowe ustanowienie połączenia:
- TCP Handshake Klient <–> Serwer
- Klient <– Serwer: wysyła informacje do klienta o wspieranych algorytmach i kompresji.
- Serwer <– Klient : odpowiada co wybiera i wysyła akceptuje
- Wchodzi do gry algorytm Diffiego-Hellmana w którym:
- Obie strony uzgadniają największą liczbę pierwsza i jaki generator szyfru będzie używany (najczęściej jest to AES).
- Dodatkowo serwer i klient ustawiają swoja prywatna liczbę pierwsza i otrzymując ja w sekrecie tylko dla siebie.
- Z własnej sekretnej liczby pierwszej obie strony generują klucz prywatny.
- Kazda z stron, za pomocą własnego klucz prywatnego, dzielonej publicznej liczby pierwszej i generatora, tworzy klucz publiczny.
- Obie strony wymieniają sie kluczami publicznymi.
- Serwer wysyła zaszyfrowana wiadomość do klienta (challenge-response)
- Klient odszyfrowuje wiadomość i wysyla ja szyfrywujac ja swoim kluczem.
- Serwer po odszyfrowaniu wiadomości sprawdza ja z wyslana i jesli jest taka sama ustanawia sesje.
- W uproszczeniu cale obliczenie przedstawia sie nastepujaco:
Publiczna Liczba pierwsza: 97
Wybrany generator: 3^ (prywatna)mod(publiczna)
Wybrana liczba Klienta: 89
Wybrana Liczba Serwer: 43
Klient: 3^89mod97=11 wysyla wunik serwerowy
Serwer: 3^43mod97=2 wysyla wynik do Klienta
Klient: 2^89mod97=72
Serwer: 11^43mod87=72
TO BE CONTINUED 😛
3. Konfiguracja serwera
Konfiguracja Serwera i Klienta z autoryzacja użytkownika przez Public-key i challenge-response auth:
Serwer do działania potrzebuje klucza prywatnego i publicznego dla wybranej . Do wygenerowania używamy ssh-keygen:
/usr/bin/ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N
TO BE CONTINUED 😛
4. Przykładowe użycia ssh
TO BE CONTINUED 😛