Czy wymiana kluczy SSH jest bezpieczniejsza niż uwierzytelnianie za pomocą hasła?

9

Zdalni użytkownicy łączą się z kilkoma usługami w naszym biurze głównym za pośrednictwem Internetu za pośrednictwem SSH. Hasło SSH jest synchronizowane z kontem LAN A / D.

Czy posiadanie przez użytkowników kopii klucza SSH do domu za pomocą płyty CD lub kawałka papieru byłoby bezpieczniejsze niż wprowadzanie hasła przez użytkowników? Czy powinienem wymagać obu?

Moje pytanie prawdopodobnie zostanie ponownie sformułowane w następujący sposób: czy istnieje jakaś luka w protokole uwierzytelniania hasła SSH?

Ta wiadomość budzi we mnie wątpliwości:

The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:.
Are you sure you want to continue connecting (yes/no)?
srmark
źródło

Odpowiedzi:

22

Wiadomość, którą widzisz, to osobny problem. Prosi o potwierdzenie, że host, z którym się łączysz, jest naprawdę tym, którego się spodziewasz. Z serwera możesz uzyskać odcisk palca, uruchamiając ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub. Następnie, gdy łączysz się zdalnie po raz pierwszy, możesz upewnić się, że odciski palców pasują.

Klucze hosta, widoczne tutaj w akcji, odnoszą się do problemu ataków typu mężczyzna w środku - być może DNS został obalony, a ty łączysz się z maszyną konkurenta zamiast z własną. Ta maszyna zbiera dane uwierzytelniające i w sposób transparentny przekazuje połączenie z prawdziwym serwerem, kradnąc informacje bez Twojej wiedzy. Upewnienie się, że klucz hosta pasuje, zapobiega temu, chyba że osoba atakująca faktycznie ukradła klucz publiczny serwera.

Pozostaje jednak problem - skąd wiesz, który klucz jest odpowiedni? Po pierwszym połączeniu klucz publiczny jest zapisywany w ~/.ssh/known_hostspliku, więc kolejne połączenia są w porządku. Ale po raz pierwszy albo potrzebujesz jakiegoś pozapasmowego sposobu na uzyskanie odcisku palca, albo podążasz za modelem „TOFU”: zaufanie przy pierwszym użyciu.

Ale to nie ma nic wspólnego z hasłami vs. kluczami, z wyjątkiem tego, że zarówno klucze, jak i hasła mogą zostać skradzione w wyniku tego ataku - w pewnym sensie jest to luka, o którą prosisz.

Istnieją (przynajmniej) trzy powody, dla których hasła są gorsze niż klucze:

  1. Mogą być brutalnie zmuszane. Typowe 8-znakowe hasło wybrane przez użytkownika ma około 30 bitów zgadywania-entropii. Para kluczy publiczny / prywatny ssh ma 1024 bity lub więcej. Brutalne użycie klucza ssh jest praktycznie niemożliwe, ale automatyczne zgadywanie hasła odbywa się cały czas.
  2. Mogą być głupie. Użytkownicy rutynowo wybierają okropne hasła, nawet z obowiązującymi ograniczeniami, i częściej używają trudniejszych haseł w wielu miejscach. To oczywiście ułatwia ataki.
  3. Hasła mogą zostać skradzione zdalnie. Gdy używasz SSH, hasło jest szyfrowane w sieci, ale bardzo często serwer ssh jest zastępowany w zaatakowanym systemie tym, który rejestruje wszystkie hasła. Dzięki kluczom klucz prywatny pozostaje w systemie lokalnym i nigdy nie jest wysyłany, więc nie można go skradzić bez narażenia komputera klienta.

Ponadto klucze ssh zapewniają wygodę, gdy są używane z czymś podobnym ssh-agent- zapewnia bezproblemową operację łączenia bez ponownego uwierzytelniania za każdym razem, przy jednoczesnym zachowaniu rozsądnego poziomu bezpieczeństwa.

Żądanie obu nie ma znaczącej przewagi, ponieważ ktoś, kto ma wystarczający dostęp do kradzieży klucza prywatnego, może dość łatwo ukraść hasło użytkownika. Jeśli potrzebujesz większego bezpieczeństwa, zastanów się nad systemem dwuskładnikowego uwierzytelniania, takim jak RSA SecurID lub WiKID .

mattdm
źródło
Świetna odpowiedź. Dokładnie tego szukałem. Dzięki!
srmark
odnośnie numeru 3) Jeśli logujesz się na już skompromitowanym serwerze ... dlaczego ktoś miałby chcieć twoje hasło? Jedynym powodem, dla którego mogę wymyślić, jest użycie wszędzie tego samego hasła.
Sirex,
Sirex - racja; kradną twoje hasło i używają go w innych systemach. Zwróć uwagę na pytanie, że hasła są używane jako „LAN A / D”. Więc kradną twoje hasło z serwera logowania ssh, a następnie mają również dostęp do serwera Windows. Dodatkowo, teraz, gdy tylko zagrożony jest system, musisz przejść do ćwiczenia ogniowego „w porządku, wszyscy zmieniają hasło ponownie”.
mattdm,
Ponadto, jak wspomniano w liczbie 2, użytkownicy za pomocą wszędzie tego samego hasła. Westchnienie.
mattdm,
precz z nieznośnymi użytkownikami! :(
Sirex,
1

tak naprawdę pytasz: „jest jeden czynnik lepszy niż inny”, tematem jest uwierzytelnianie wieloskładnikowe i naprawdę dobrze byłoby zajrzeć do tematu.

Zazwyczaj „czynnikiem” jest coś, co znasz (hasło), coś, co masz (plik ssh lub karta machnięcia klawiszem), lub coś, czym jesteś (odcisk palca).

Jedna nie jest lepsza niż żadna inna per se, są one komplementarne. Utrata płyty CD z plikiem klucza jest tak samo niebezpieczna jak ujawnienie hasła, jeśli to wszystko, czego potrzebujesz. W przypadku bezpiecznych środowisk powszechne jest uwierzytelnianie dwuskładnikowe.

Sirex
źródło
Tak, rozumiem co mówisz. W tym przypadku próbuję jednak dowiedzieć się, czy uwierzytelnienie hasła może zostać zhakowane przy użyciu czegoś takiego jak człowiek pośrodku.
srmark,
dla ssh jako konkretny przykład, nie, ponieważ sekcja podająca hasło jest również szyfrowana, a klucze zmieniają się podczas sesji (wierzę, że 30 sekund). Nie odzwierciedla to jednak hasła w porównaniu z kluczem
Sirex,