TLS
Transport Layer Security (TLS) zapewnia bezpieczeństwo w komunikacji między dwoma hostami. Zapewnia integralność, uwierzytelnianie i poufność. Jest najczęściej używany w przeglądarkach internetowych, ale może być używany z dowolnym protokołem, który używa TCP jako warstwy transportowej.
Secure Sockets Layer (SSL) jest poprzednikiem protokołu TLS. Nazwy te są często używane zamiennie, co może prowadzić do nieporozumień:
-
konfiguracja korzystająca z protokołu SSL (SSLv2/SSLv3) jest niepewna. Zamiast tego należy użyć protokołu TLS.
-
certyfikaty X. 509 do uwierzytelniania są czasami nazywane również certyfikatami SSL.
-
niektóre aplikacje (takie jak poczta e-mail) używają jednego portu zarówno dla niezaszyfrowanych, jak i zaszyfrowanych sesji. Aby zmienić z niezaszyfrowanego na zaszyfrowany, używany jest (START)TLS. Gdy pojedynczy port bezpośrednio korzysta z protokołu TLS, jest on często określany jako SSL.
- ze względów historycznych, oprogramowanie (w tym Wireshark) odnosi się do SSL lub SSL / TLS, podczas gdy w rzeczywistości oznacza protokół TLS, ponieważ jest to obecnie, czego wszyscy używają.
zależności protokołu
-
TCP: Zazwyczaj TLS używa TCP jako protokołu transportowego.
rozszyfrowanie TLS w Wireshark
rozszyfrowanie TLS jest w pełni funkcjonalne, a nawet obsługuje zaawansowane funkcje, takie jak odszyfrowanie TLS, jeśli dostępne są odpowiednie sekrety (#TLS_Decryption).
od wersji Wireshark 3.0 zmieniono nazwę modułu TLS z SSL na TLS. Użycie filtra wyświetlacza ssl spowoduje wyświetlenie Ostrzeżenia.
deszyfrowanie TLS
Wireshark obsługuje deszyfrowanie TLS, gdy są dostępne odpowiednie sekrety. Dwie dostępne metody to:
-
Key log file using per-session secrets (#Using_the_.28Pre.29-Master-Secret).
- deszyfrowanie przy użyciu klucza prywatnego RSA.
plik dziennika kluczy jest uniwersalnym mechanizmem, który zawsze umożliwia odszyfrowanie, nawet jeśli używana jest wymiana kluczy Diffie-Hellman (DH). Klucz prywatny RSA działa tylko w ograniczonej liczbie przypadków.
plik dziennika kluczy jest plikiem tekstowym generowanym przez aplikacje takie jak Firefox, Chrome i curl, gdy ustawiona jest zmienna środowiskowa SSLKEYLOGFILE. Aby być dokładnym, ich podstawowa biblioteka (NSS, OpenSSL lub boringssl) zapisuje wymagane sekrety sesji do pliku. Plik ten można następnie skonfigurować w Wireshark (#Using_the_.28Pre.29-Master-Secret).
plik klucza prywatnego RSA może być użyty tylko w następujących okolicznościach:
- pakiet szyfrów wybrany przez serwer nie używa (EC)DHE.
-
wersja protokołu to SSLv3, (D)TLS 1.0-1.2. Nie działa z TLS 1.3.
-
klucz prywatny pasuje do certyfikatu serwera. Nie działa z certyfikatem klienta ani certyfikatem urzędu certyfikacji.
-
sesja nie została wznowiona. Handshake musi zawierać wiadomość clientkeyexchange handshake.
plik dziennika kluczy jest ogólnie zalecany, ponieważ działa we wszystkich przypadkach, ale wymaga ciągłej możliwości eksportu tajemnic z aplikacji klienckiej lub serwerowej. Jedyną zaletą klucza prywatnego RSA jest to, że musi być skonfigurowany tylko raz w Wireshark, aby umożliwić deszyfrowanie, z zastrzeżeniem powyższych ograniczeń.
Ustawienia preferencji
przejdź do edycji- > Preferencje. Otwórz drzewo protokołów i wybierz TLS. Alternatywnie wybierz pakiet TLS z listy pakietów, kliknij prawym przyciskiem myszy warstwę TLS w widoku Szczegóły pakietu i otwórz menu Preferencje protokołu.
godne uwagi preferencje protokołu TLS to:
- (Pre)-Master-Secret log filename (tls.keylog_file): ścieżka do odczytu pliku dziennika kluczy TLS w celu odszyfrowania.
-
lista kluczy RSA: otwiera okno dialogowe do konfiguracji kluczy prywatnych RSA do odszyfrowania. Przestarzałe na korzyść preferencji- > okno dialogowe kluczy RSA.
- Pre-Shared-Key: używany do konfiguracji klucza deszyfrującego dla pakietów szyfrów PSK. Zazwyczaj nie używane.
- plik debug TLS (tls.debug_logfile): ścieżka do zapisu wewnętrznych szczegółów procesu deszyfrowania. Będzie zawierać wyniki deszyfrowania i klucze, które zostały użyte w tym procesie. Można to wykorzystać do zdiagnozowania, dlaczego deszyfrowanie nie powiedzie się.
następujące preferencje protokołu TCP są również wymagane do włączenia deszyfrowania TLS:
- Zezwalaj subdissektorowi Na ponowne składanie strumieni TCP. Domyślnie włączone.
- ponownie zmontuj nieaktualne segmenty (od Wireshark 3.0, domyślnie wyłączone).
zaczynając od Wireshark 3.0, nowe okno dialogowe kluczy RSA można znaleźć pod adresem Edit – > Preferences -> Klucze RSA. W tym oknie dialogowym użyj opcji Dodaj nowy plik kluczowy… przycisk, aby wybrać plik. W razie potrzeby zostaniesz poproszony o podanie hasła. Dodaj nowy token… przycisk może być używany do dodawania kluczy z HSM, które mogą wymagać użycia Add new provider… aby wybrać Wybierz plik DLL/. so I dodatkową konfigurację specyficzną dla dostawcy.
plik klucza RSA może być kluczem prywatnym w formacie PEM lub magazynem kluczy PKCS#12 (zazwyczaj Plik zpfx lub .rozszerzenie p12). Klucz PKCS # 12 jest plikiem binarnym, ale format PEM jest plikiem tekstowym, który wygląda następująco:
-
-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDReQzlKVeAK8b5TRcRBhSi9IYwHX8Nqc8K4HeDRvN7HiBQQP3bhUkVekdoXpRLYVuc7A8h1BLr93Qw...KOi8FZl+jhG+p8vtpK5ZAIyp-----END PRIVATE KEY-----
przestarzałe okno dialogowe listy kluczy RSA może zostać usunięte w pewnym momencie. Aby skonfigurować klucze, użyj okna dialogowego klucze RSA. Aby zmienić protokół dla odszyfrowanych danych sieciowych, kliknij prawym przyciskiem myszy pakiet TLS i użyj Decode, aby zmienić bieżący protokół dla portu TLS. Pola Adres IP i Port są nieużywane.
przykładowy plik przechwytywania
Zobacz także Samplecapttures#SSL_with_decryption_keys.
-
pcapng TLSv1.2 Przechwytywanie z 73 pakietami szyfrów, potrzebujesz tego premastera.plik txt do odszyfrowania ruchu. (link z https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)
- tls12-dsb.PCAPNG-TLS 1.2 trace z wbudowanymi kluczami deszyfrującymi.
-
https://github.com/wireshark/wireshark/blob/master/test/captures – pakiet testowy zawiera różne ślady TLS.
wyświetl Filtr
pełna lista pól filtra wyświetlacza TLS znajduje się w odnośniku filtra wyświetlacza
Pokaż tylko ruch oparty na TLS:
-
tls
Filtr przechwytywania
nie można bezpośrednio filtrować protokołów TLS podczas przechwytywania. Jeśli jednak znasz używany port TCP (patrz wyżej), możesz filtrować na tym porcie, na przykład używając portu tcp 443.
używając (Pre)-Master-Secret
master secret umożliwia odszyfrowanie TLS w Wireshark i może być dostarczony za pomocą pliku dziennika kluczy. Sekret pre-master jest wynikiem wymiany klucza i może zostać przekształcony w sekret master przez Wireshark. Ten sekret Pre-master można uzyskać, gdy dostarczony jest klucz prywatny RSA i używana jest wymiana kluczy RSA.
instrukcje krok po kroku, aby odszyfrować ruch TLS z Chrome lub Firefox w Wireshark:
- zamknij przeglądarkę całkowicie (sprawdź Menedżera zadań dla pewności).
-
ustawia zmienną środowiskową SSLKEYLOGFILE na bezwzględną ścieżkę do zapisywalnego pliku.
- Uruchom przeglądarkę.
- sprawdź, czy Lokalizacja z kroku 2 została utworzona.
-
w Wireshark przejdź do Preferencje- > protokoły- > TLS i zmień preferencję (Pre)-Master-Secret log filename na ścieżkę z kroku 2.
- Uruchom przechwytywanie Wireshark.
-
Otwórz stronę internetową, na przykładhttps://www.wireshark.org/
-
sprawdź, czy odszyfrowane dane są widoczne. Na przykład przy użyciu filtra tls i (http lub http2).
dla systemu Windows zmienna środowiskowa może być ustawiona globalnie, jak opisano w tym opisie, ale nie jest to zalecane, ponieważ łatwo o tym zapomnieć i może być problemem bezpieczeństwa, ponieważ umożliwia odszyfrowanie całego ruchu TLS. Lepszym sposobem ustawienia zmiennej środowiskowej jest plik wsadowy. Utwórz plik start-fx.cmd z:
-
@echo offset SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txtopen firefox
zmień ścieżkę pliku SSLKEYLOG w razie potrzeby i zastąp Firefoksa chrome dla Google Chrome. Mechanizm ten obecnie (2019) nie działa dla Safari, Microsoft Edge i innych, ponieważ ich biblioteki TLS (Microsoft SChannel/Apple SecureTransport) nie obsługują tego mechanizmu. Mechanizm ten działa również dla aplikacji innych niż przeglądarki internetowe, ale zależy od biblioteki TLS używanej przez aplikację.
przykłady innych aplikacji:
-
aplikacje korzystające z OpenSSL mogą używać triku GDB lub LD_PRELOAD, aby wyodrębnić sekrety. Dotyczy to również Pythona.
-
dla solucji dla serwera HTTP Apache przy użyciu tego libsslkeylog.so biblioteka, zobacz ten post.
-
- w przypadku programów Java sekrety można wyodrębnić z preferencji dziennika debugowania TLS lub wydrukować bezpośrednio w formacie wymaganym przez Wireshark za pośrednictwem Agenta Java. Dwa podobne projekty:
-
jSSLKeyLog: http://jsslkeylog.sourceforge.net/
-
extract-TLS-secrets: https://github.com/neykov/extract-tls-secrets
-
-
Skrypty Pythona mogą być również edytowane w celu zrzutu kluczy.
aby zapoznać się z przeglądem obsługiwanych aplikacji i bibliotek TLS, Zobacz także stronę 19 prezentacji Peter Wu na temat SSL / TLS Decryption SHARKFEST’18 EU.
osadzanie sekretów deszyfrowania w pliku pcapng
od wersji Wireshark 3.0 można osadzać plik dziennika kluczy TLS w pliku pcapng. Znacznie ułatwia to dystrybucję plików przechwytywania z sekretami deszyfrowania i ułatwia przełączanie między plikami przechwytywania, ponieważ preferencja protokołu TLS nie musi być aktualizowana. Aby dodać zawartość kluczy plików dziennika.txt do przechwytywania pliku.pcap i zapisz wynik na out-dsb.pcapng:
-
editcap –inject-secrets tls,keys.TXT w.PCAP out-dsb.pcapng
przyrostek dsb oznacza blok sekretów deszyfrowania (Decryption Secrets Block, DSB) i jest częścią specyfikacji pcapng.
plik dziennika kluczy może zawierać klucze, które nie są powiązane z plikiem przechwytywania. Aby upewnić się, że niepotrzebne klucze nie wyciekły, możesz użyć inject-tls-secrets.py skrypt z https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 do filtrowania pliku dziennika klawiszy i dodawania wymaganych sekretów do pliku przechwytywania. Skrypt powłoki został przetestowany z Linuksem i macOS, ale wersja Python 3 jest również dostępna dla wszystkich platform, w tym Windows. Przykład:
-
git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its~/its/inject-tls-secrets.py keys.txt some.pcap
Zobacz także
niektóre inne protokoły pochodzą z TLS. Obejmuje to:
-
DTLS jest oparty na standardzie TLS i działa w oparciu o UDP jako protokół transportowy.
-
QUIC jest protokołem używającym TLS do szyfrowania, Status Wireshark można śledzić pod adresem https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.
-
https://en.wikipedia.org/wiki/Transport_Layer_Security artykuł Wikipedii dla TLS
-
https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdf Prezentacja SharkFest’16 EU przez Sake Blok na temat rozwiązywania problemów z SSL za pomocą Wireshark/Tshark (lub obejrzyj film z prezentacji pod adresem https://youtu.be/oDaDY9QCnXk)
-
https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf prezentacja sharkfest’18 eu autorstwa Petera Wu na temat odszyfrowywania TLS (wideo do wcześniejszego wystąpienia w Azji pod adresem https://youtu.be/bwJEBwgoeBg)
-
https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf prezentacja sharkfest’19 US autorstwa Petera Wu opisująca deszyfrowanie TLS i wykorzystanie wbudowanego deszyfrowania sekrety (https://youtu.be/Ha4SLHceF6w).
-
jak działa SSL/TLS? – Information Security Stack Exchange
-
Keyless SSL: Nitty Gritty szczegóły techniczne z dobrym wprowadzeniem w TLS
-
PolarProxy z Netresec to przezroczysty serwer proxy SSL / TLS stworzony dla osób reagujących na incydenty i badaczy złośliwego oprogramowania, który został zaprojektowany głównie do przechwytywania i deszyfrowania zaszyfrowanego ruchu TLS ze złośliwego oprogramowania. PolarProxy odszyfrowuje i ponownie szyfruje ruch TLS, jednocześnie zapisując odszyfrowany ruch w pliku PCAP, który można załadować do Wireshark lub systemu wykrywania włamań (IDS).
-
CategoryHowTo