SSH: Identyfikacja Serwera Autor: Damian Zelek, jimmy@hacking.pl Data: 20 grudzień 2004



Podobne dokumenty
SSH. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Usługi sieciowe systemu Linux

Protokoły zdalnego logowania Telnet i SSH

Serwer SSH. Wprowadzenie do serwera SSH Instalacja i konfiguracja Zarządzanie kluczami

Instalacja i konfiguracja serwera SSH.

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Bezpieczeństwo systemów informatycznych

Konfiguracja programu pocztowego Outlook Express i toŝsamości.

Problemy z bezpieczeństwem w sieci lokalnej

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 11

System operacyjny Linux

1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki za pomocą otrzymanych danych.

INSTRUKCJA KONFIGURACJI KLIENTA POCZTOWEGO

4. Podstawowa konfiguracja

DESlock+ szybki start

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Jak skorzystać z aplikacji do tworzenia kursów WBT Express

Konfiguracja IPSec Brama IPSec w Windows 2003 Server

Laboratorium Protokoły sieci teleinformatycznych

Praca w programie dodawanie pisma.

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Bezpieczeństwo systemów informatycznych

INSTRUKCJA INSTALACJI SYSTEMU

TELEFONIA INTERNETOWA

Instalacja i konfiguracja serwera IIS z FTP

MidpSSH - analiza bezpieczeństwa

11. Autoryzacja użytkowników

Klient poczty elektronicznej - Thunderbird

Sprawozdanie. (notatki) Sieci komputerowe i bazy danych. Laboratorium nr.3 Temat: Zastosowanie protokołów przesyłania plików

Spis treści. Spis treści Wstęp Instalacja nazwa.pl Instalacja Home.pl Edycja grafiki strony logo...

ZiMSK. Konsola, TELNET, SSH 1

Opis instalacji oparto na przykładzie serwera SUPERHOST z obsługą PHP i MySQL.

VPN Host-LAN L2TP over IPSec z wykorzystaniem DrayTek Smart VPN Client

SSH - Secure Shell Omówienie protokołu na przykładzie OpenSSH

Instrukcja instalacji Control Expert 3.0

Obsługa poczty elektronicznej w domenie emeritus.ue.poznan.pl

Metody zabezpieczania transmisji w sieci Ethernet

Instalacja Ubuntu 12.12

Kalipso wywiady środowiskowe

Praca z programami SAS poza lokalną siecią komputerową UZ. Zestawienie tunelu SSH oraz konfiguracja serwera proxy w przeglądarce WWW

T: Zabezpieczenie dostępu do komputera.

Krótka instrukcja instalacji

Praca zdalna z poziomu systemu Linux

Instrukcja instalacji programu SYSTEmSM

Poradnik cz.1 Użycie połączenia SSH

Konfiguracja poczty IMO w programach Microsoft Outlook oraz Mozilla Thunderbird

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

INSTRUKCJA INSTALACJI I PIERWSZEGO URUCHOMIENIA APLIKACJI Rodzajowa Ewidencja Wydatków plus Zamówienia i Umowy

Instrukcja instalacji nośników USB w systemie internetowym Alior Banku

Przykładowa konfiguracja konta pocztowego w programie Thunderbird z wykorzystaniem MKS 2k7 (MS Windows Vista Busissnes)

Archiwizacja baz MSSQL /BKP_SQL/ opis oprogramowania

Instalacja krok po kroku /instalacja programu, serwera bazy danych/

26.X.2004 VNC. Dawid Materna

Instrukcja pierwszego logowania do EBO - aplikacja kliencka oraz migracji kontrahentów i szablonów z KIRI do EBO.

INSTRUKCJA INSTALACJI I KONFIGURACJI KARTY GOLIATH UNI HD PROTECTOR

Metody ataków sieciowych

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

MUCHA S.C Zgorzelec ul.turowska 1

Wszystkie parametry pracy serwera konfigurujemy w poszczególnych zakładkach aplikacji, podzielonych wg zakresu funkcjonalnego.

Instrukcja klienta wideokonferencji Yealink VC Desktop dla systemów Windows 7, 8, 10

FTP przesył plików w sieci

Połączenie VPN Host-LAN SSL z wykorzystaniem przeglądarki. 1. Konfiguracja serwera VPN 1.1. Ustawienia ogólne 1.2. Konto SSL 1.3. Grupa użytkowników

PRODUKCJA BY CTI INSTRUKCJA INSTALACJI I KONFIGURACJI

LABORATORIUM SIECI KOMPUTEROWYCH (compnet.et.put.poznan.pl)

CREATE USER

APLIKACJA SHAREPOINT

VinCent Administrator

Poniżej znajduje się instrukcja konfiguracji najpopularniejszych programów do obsługi poczty.

Dokumentacja Użytkownika Systemu. Konfiguracja konta

Instrukcja obsługi serwera FTP v

Pracownia internetowa w szkole podstawowej (edycja jesień 2005)

Instrukcja instalacji nos niko w USB w bankowos ci Alior Banku

Tomasz Greszata - Koszalin

Windows Server Active Directory

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

Instalacja PPPoE w systemie Windows XP za pomocą kreatora nowego połączenia sieciowego

Xopero Backup Build your private cloud backup environment. Rozpoczęcie pracy

Instalacja (GM) AMXBans #1.5.1/ #1.6.1 na serwerze gry/stronie WWW. Wymagania

Sieciowa instalacja Sekafi 3 SQL

BlackHole. Bezpieczne Repozytorium Ważnych Zasobów.

Po pobraniu plików instalacyjnych w pierwszej kolejności dokonujemy instalacji serwera ESET Remote Administrator Server

INSTRUKCJA. Konfiguracja skrytki na platformie epuap dla potrzeb rekrutacji na studia w Uniwersytecie Jagiellońskim

Dodawanie nowego abonenta VOIP na serwerze Platan Libra

FARA INTENCJE ONLINE. Przewodnik dla użytkownika programu FARA. Włodzimierz Kessler SIGNUM-NET

VPN Host-LAN IPSec X.509 z wykorzystaniem DrayTek Smart VPN Client

3S TeleCloud - Aplikacje Instrukcja użytkowania usługi 3S FAX SYSTEM

W jaki sposób pozyskać dane logowania lub odzyskać hasło?

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

1. Instalacja certyfkatu OSX 10.9

Konfiguracja współpracy urządzeń mobilnych (bonowników).

Skrócony podręcznik dla partnerów

Konfiguracja routera ADSL ZyXEL Prestige 660H/HW do usług dostępu do Internetu: Neostrada (TPSA) Net24 (Netia) DialNet DSL (Dialog)

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

System zdalnego dostępu (VPN) do sieci Wydziału Elektrycznego PW

COMODO Endpoint Security Błąd access denied

INFO-R. Instalacja pakietu programów obsługujących platformę

Bezpieczeństwo usług oraz informacje o certyfikatach

Instrukcja konfigurowania poczty Exchange dla klienta pocztowego użytkowanego poza siecią uczelnianą SGH.

Uwierzytelnianie użytkowników sieci bezprzewodowej z wykorzystaniem serwera Radius (Windows 2008)

Transkrypt:

SSH: Identyfikacja Serwera Autor: Damian Zelek, jimmy@hacking.pl Data: 20 grudzień 2004 Wszyscy używamy/korzystamy z SSH. Dzięki temu protokołowi jesteśmy w stanie w bezpieczny sposób łączyć się z inną maszyną i wykonywać na niej w sposób zdalny komendy. Jesteśmy także w stanie przesyłać bezpiecznie pliki (SCP) a nawet tworzyć o niebo bezpieczniejszą alternatywę dla FTP (RSSH + SCPOnly), tworzyć szyfrowane tunele itp. Jednak wiele osób nie zdaje sobie sprawy z tego, iż chociaż SSH szyfruje przesyłane dane to dla atakującego wcale nie jest problemem podsłuchać Naszą sesje. Podsłuchiwanie to z powodu szyfrowania sesji przybiera trochę inny kształt: atakujący może symulować serwer, z którym chcemy się połączyć. Dzięki symulowaniu serwera będzie w stanie Nas "podsłuchiwać", ponieważ chociaż dane są szyfrowane to de fakto będą one przechodziły (lub adekwatnie od intencji atakującego -- dochodziły) przez "niepowołaną" maszynę. Jest to atak typu Man-In-The- Middle. Tekst ten ma na celu przybliżenie Wam sposobu ochrony Naszej szyfrowanej sesji ssh dzięki kluczom identyfikacyjnym serwera. Krótkie omówienie ataku Man-In-The-Middle Jak widzimy na powyższym przykładzie Nasza maszyna (ofiara) chciała się połączyć zdalnie z serwerem. Jednak na drodze połączenia stanął komputer atakującego (ponieważ zarówno Nasz komputer jak i atakującego są w jednej i tej samej sieci wewnętrznej opartej o NAT a dodatkowo komputer przejęty przez hackera pełni rolę gateway'a to wcale nie było to trudne, a wręcz trywialne). Gateway, który jest pod kontrolą hackera, jest w stanie imitować serwer usługi, z którą chcemy się połączyć. Jeżeli do tego dojdzie, będziemy połączeni z maszyną włamywacza myśląc, iż jesteśmy połączeni z docelowym serwerem. Wszystkie dane

(łącznie z hasłem użytym podczas logowania) przechwyci hacker. Tylko od niego zależy czy chce uzyskać tylko i wyłącznie hasło "na szybko" czy też, bardziej prawdopodobnie, będzie chciał przejąć i korzystać z Naszego konta na serwerze. Jeżeli tak, to w tym celu będzie on odbierał wszystkie Nasze pakiety, analizował je i przesyłał dalej do serwera. Dzięki takiemu działaniu nieświadomy "user" nie będzie nawet podejrzewać, iż coś jest nie tak. Należy tu także wspomnieć, iż hacker wcale nie musi przejąć gatewaya. Może użyć technik, które pozwolą to pominąć... Identyfikacja serwera Standardowo SSH udostępnia Nam możliwość "obrony" przed powyższym atakiem (oraz wieloma innymi). Jest to możliwe dzięki temu, iż klient ssh podczas łączenia się z serwerem sprawdzi jego klucz (weryfikujący tożsamość serwera). Klucz ten w bazie Naszego klienta może znaleźć się na kilka sposobów: najbezpieczniejszym sposobem jest skontaktowanie się z administratorem serwera, z którym chcemy się połączyć i prośba o podanie klucza SSH (mądrym rozwiązaniem ze strony administratora jest stworzenie strony internetowej szyfrowanej za pomocą np. SSL, na której będzie dostępny klucz) ręczne wprowadzenie klucza dostępnego od osób trzecich (np. znajomy, który także posiada konto na danym serwerze i łączy się z nim za pomocą SSH) akceptacja klucza przy pierwszym połączeniu To ostatnie rozwiązanie jest najczęściej stosowanym. Łącząc się pierwszy raz z danym serwerem, dostaniemy ostrzeżenie, iż nie posiadamy w swojej bazie klucza owego serwera (Rysunki 1, 2). Teraz od Nas zależy czy zaufamy serwerowi bądź nie. Często zatwierdza się tę decyzję i od tej pory, jeżeli ktoś stanie na drodze pomiędzy Nami a serwerem dostaniemy ostrzeżenie, iż klucz, który dostaliśmy od serwera (tak naprawdę od usługi na komputerze hackera) nie zgadza się z tym, który jest w Naszej bazie kluczy. Wykryliśmy próbę ataku!!! (tzn. niedokładnie, ale o tym później). Rys. 1. Ostrzeżenie wywołane przez klienta ssh (Windows, PuTTy) Rys. 2. Ostrzeżenie widoczne w konsoli (Unix/Linux)

Pierwsze podejście... Zobaczmy jak wygląda typowe połączenie... Rys. 3. Przebieg typowego połączenia Łączymy się z serwerem po raz pierwszy, więc dostaliśmy ostrzeżenie o nieznanym kluczu. Załóżmy, iż ufamy temu serwerowi i połączymy się (wybierzemy opcje YES). Jak widać na powyższym rysunku Nasz system dodał klucz owego serwera na stałe do "bazy danych kluczy". Przy następnym połączeniu nie powinniśmy dostać żadnych ostrzeżeń (jeżeli dostaniemy to będzie znaczyło to iż najprawdopodobniej ktoś "imituje" serwer i w takim przypadku NIE wyrazimy zgody na dokończenie połączenia a tym samym nie staniemy się łupem dla hackera). W momencie akceptacji połączenia Nasz klient SSH zapisał klucz serwera w Naszym systemie w pliku $HOME/.ssh/known_hosts. To właśnie ten plik jest Naszą bazą kluczy, która przechowuje wszystkie zatwierdzone bądź ręcznie wprowadzone klucze. Przykładowa wpis w tym pliku wygląda tak: serwer.pl,217.123.245.54 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAt2cX8Lpo9eDGUxv5Q5iEnuLOeu7xiyMwuPZcE Uwav5GIwgVqW1JOnJwLOZVLjRpilI+crKR3DHH3BBQDgIPfZRPJRVtjT4hztGJZFvkDX jdehz8vaqsaxqs4kfzdbgqtdufe6ng7f4rnmy6ibpu4t2d3bbpi+2g0gstmyaj77ke= Budowa pliku składa się kolejno z poszczególnych wpisów akceptacji. Z kolei zaś poszczególne wpisy są bardzo intuicyjne i łatwe do zrozumienia. Składają się z: host/ip serwera, określenie typu klucza oraz sam klucz publiczny. Istnieje także druga "baza kluczy", ale o innym priorytecie. Baza znajduje się w /etc/ssh/ssh_known_hosts. Przechowuje ona hosty mające potwierdzenie z poziomu administratora (czyli odgórnie). Do modyfikacji pliku należy użyć odpowiedniego parametru w pliku konfiguracyjnym klienta ssh (/etc/ssh/ssh_config). Rodzaje kluczy Wyróżniamy 3 rodzaje kluczy: SSHv1 RSA (rsa1), SSHv2 RSA (rsa) i SSHv2 DSA (dsa). Opcje odnośnie tych kluczy i ich używania znajdziemy w pliku konfiguracyjnym ssh /etc/ssh/sshd_config (m.in. możliwość ładowania tylko określonych kluczy [RSAAuthentication yes] - włączenie tych bardziej bezpiecznych). Po zainstalowaniu OpenSSH wszystkie 3 klucze powinny zostać stworzone w standardowej procedurze automatycznej. Jeżeli tak się nie stało możemy tworzyć je ręcznie: ssh-keygen -t rsa /etc/ssh/ssh_host_rsa_key Zamiast rsa możemy oczywiście podstawić rsa1 i dsa... Wzmianka o rodzajach kluczy jest niezbędna do zrozumienia poniższej sekcji.

Pomocy!!! Wpadłem Jak już wspominałem wcześniej nie jest zadaniem wcale trudnym podsłuchanie/przejęcie Naszej sesji SSH przez osobę z Naszej sieci. Do tego celu stworzono kilka dobrych programów "gotowców", więc każdy początkujący "hacker" lub nawet wścibski kolega z sieci będzie w stanie Nas przechwycić. Pamiętajmy o jednym - będzie w stanie Nas przechwycić tylko za sprawą Naszej własnej głupoty poprzez akceptację nieznanego klucza z Naszej strony. Jeżeli jesteś przezorny sekcja ta nie jest dla Ciebie. Jeżeli jednak miała miejsce wpadka (przypadkowe/nieumyślne zaakceptowanie nieznanego klucza MIMO ostrzeżenia) sprawa nie jest jeszcze całkowicie przegrana. Można sprawdzić czy atak naprawdę miał miejsce... Zacznijmy od tego, iż zmiana klucza wcale nie musi oznaczać próby ataku. Do jego zmiany może dojść także z powodu: zmiana IP/host/DNS serwera nieudolny reinstal systemu update/upgrade ssh zmiana protokołu między SSHv1 i SSHv2 Teraz, jak wychodzić z opresji?. Dzień, jak co dzień, normalne logowanie w celu sprawdzenia poczty... Rys. 4....coś jednak nie gra! A jednak nie!! Klucz ssh się zmienił. Musimy zapisać RSA fingerprint (ta długa liczba oddzielona dwukropkami). Następnie logujemy się (jak widać i tak musimy się zalogować, czyli nawet jeżeli do ataku doszło kilka dni wcześniej a my dopiero teraz zdaliśmy sobie sprawę z powagi sytuacji to "fałszywy" klucz został zapisany do Naszego known_hosts a za pomocą komendy ssh-keygen można "otrzymać" RSA fingerprint -- czyli de fakto także możemy sprawdzić czy to był atak czy też nie). Po zalogowaniu przechodzimy do katalogu /etc/ssh i listingujemy wszystkie pliki *.pub ls *pub ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub Odpowiednie użycie komendy ssh-keygen + odpowiedni plik *.pub zwróci Nam fingerprint klucza. Zastanówmy się przez chwilę, który plik *.pub wybrać. Jeżeli wiemy, iż korzystamy ze

starszej wersji protokołu SSHv1 będzie nam potrzebny plik ssh_host_key.pub. Dla RSA fingerprint użyjemy pliku z "rsa" w nazwie a analogicznie do DSA fingerprint użyjemy pliku z "dsa" w nazwie. Wybór nie jest obojętny: musisz wybrać zależnie DSA lub RSA odwołując się do ostrzeżenia, które dostaliśmy na początku:... RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.... Jak widać tutaj był RSA fingerprint więc komenda wyglądałaby tak: ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub Jeżeli RSA fingerprint teraz uzyskany zgadza się z tym wyświetlonym podczas logowania (lub analogicznie z tym, który został w Naszym known_hosts) to znaczy to, iż wszystko jest na swoim miejscu. W innym wypadku prawdopodobnie staliśmy się celem ataku - szybko skontaktuj się z administratorem serwera w celu zmiany hasła bądź ewentualnego wyjaśnienia przyczyny zmiany kluczy publicznych bez wcześniejszego powiadomienia Nas o tym. Należy także zaznaczyć, iż będąc zwykłym "userem" z kontem shell na jakimś serwerze masz zapewniony dostęp do plików *.pub w /etc/ssh i komendy ssh-keygen. Tak więc jest dana Tobie możliwość SAMODZIELNEGO sprawdzenia czy stałeś się ofiarą hackera czy też nie... Hacking zmorą usera Opisany wyżej sposób "detekcji powłamaniowej" działa jeżeli atak był przeprowadzany przez niedoświadczonych hackerów/script-kiddiez. Jest wiele bardziej zawiłych technik, dzięki którym taka detekcja jest ograniczona lub niemożliwa. Podczas wielu takich prób wykonywanych przeze mnie wystarczy wspomnieć chociaż o analizie pakietów odbieranych przez hackera a wysyłanych potem do serwera ze szczególnym naciskiem na pochodne logout, ssh-keygen bazujące na połączeniu in-out (tak aby fingerprint usługi zwracany był z serwera a nie usługi na komputerze hackera), etc. Dlatego należy zdać sobie sprawę z tego, iż nigdy nie będziemy w 100% bezpieczni. Jednak dobrą przeszkodą dla włamywacza będzie stosowanie się do paru zasad: UNIKANIE logowania w wypadku, gdy klucz się nie zgadza ręczne wpisywanie kluczy do known_hosts i tylko z pierwszej ręki (np. admin, serwisant; jeżeli administrator zdaje sobie sprawę z tego, iż prawdopodobnie nie będzie miał czasu na każdorazowe podawanie *fingerprint klucza powinien postarać się o wcześniej wspomniane wystawienie klucza na szyfrowanej via SSL stronie www bądź rozważenie możliwości użycia /etc/motd jako "informatora") ustawienie opcji StrictHostKeyChecking= w pliku konfiguracyjnym klienta (/etc/ssh/ssh_config lub w konfiguracji w $HOME/.ssh) tak aby wskazywała na yes (w takim wypadku zły klucz lub jego brak uniemożliwi logowanie -- dzięki temu zyskamy ochronę przed Naszą własną głupotą/nieuwagą a nawet więcej); ochrona taka została zaprezentowana na Rysunku4 (możliwość zalogowania/połączenia została Nam "odebrana").