Właśnie zdałem sobie sprawę, że ataki typu man-in-the-middle SSL są znacznie częstsze niż myślałem, szczególnie w środowiskach korporacyjnych. Słyszałem o kilku przedsiębiorstwach, które mają przezroczysty serwer proxy SSL. Wszyscy klienci są skonfigurowani do zaufania certyfikatu tego serwera proxy. Zasadniczo oznacza to, że pracodawca teoretycznie może przechwytywać nawet ruch szyfrowany za pomocą protokołu SSL bez wyskakujących ostrzeżeń w przeglądarce. Jak wspomniano powyżej, klienci pochodzą z zaufanym certyfikatem. Można to ujawnić jedynie poprzez ręczne sprawdzenie poprawności używanego certyfikatu.
Wydaje mi się, że pracodawca wykorzystuje swoją wyższą pozycję do szpiegowania ruchu SSL pracownika. Dla mnie powoduje to, że cała koncepcja SSL jest niewiarygodna. Z powodzeniem przetestowałem podobną konfigurację za pomocą mitmproxy i byłem w stanie odczytać komunikację między klientem a moim serwerem bankowości elektronicznej. To informacje, których nikomu nie należy ujawniać.
Zatem moje pytanie jest raczej proste: jak mogę zweryfikować łańcuch zaufania po stronie serwera? Chcę się upewnić, że klient korzysta z certyfikatu mojego serwera i tylko jednego łańcucha zaufania. Zastanawiam się, czy można to osiągnąć dzięki konfiguracji SSL Apache? Byłoby to wygodne, ponieważ można je łatwo zastosować do wielu aplikacji. Jeśli nie jest to możliwe, czy ktoś wie, jak to zrobić w PHP? Czy masz jakieś inne sugestie?
źródło
Odpowiedzi:
Myślę, że to pytanie byłoby bardziej odpowiednie dla security.stackexchange.com, gdzie temat MITM jest omawiany w wielu pytaniach. Ale w każdym razie:
Sprawdzanie poprawności certyfikatu serwera odbywa się tylko na kliencie i nie można go w jakiś sposób przenieść na serwer, ponieważ sprawdzanie poprawności certyfikatu u klienta polega na tym, że klienci muszą upewnić się, że rozmawia z właściwym serwerem i nie mogą zaufać (niezaufany) serwer, aby podjąć decyzję dla klienta.
W przypadku przechwytywania SSL klient TLS z perspektywy serwera to zapora przechwytująca SSL / AV. Dlatego problemem po stronie serwera jest wykrycie, czy rozmawia on z oczekiwanym klientem (przeglądarką), czy nie (firewall / AV). Najbezpieczniejszym sposobem na to jest użycie certyfikatów klienta do uwierzytelnienia klienta - w rzeczywistości przechwytywanie protokołu SSL nie będzie działać, jeśli zostanie użyte uwierzytelnienie klienta, tzn. Uzgadnianie TLS nie powiedzie się, ponieważ MITM nie jest w stanie dostarczyć oczekiwanego certyfikatu klienta.
Tylko certyfikaty klienta są rzadko używane. Niepowodzenie uzgadniania TLS nie oznacza, że klient może komunikować się z serwerem bez przechwytywania protokołu SSL, ale że klient nie może w ogóle komunikować się z serwerem. Alternatywnym sposobem byłoby użycie pewnej heurystyki do wykrycia rodzaju klienta TLS na podstawie odcisku palca uzgadniania TLS, tj. Rodzaju i kolejności szyfrów, użycia określonych rozszerzeń ... Podczas gdy proxy przechwytujące SSL mógłby teoretycznie naśladować oryginał ClientHello doskonale nie. Zobacz także Wykrywanie człowieka po środku dla serwera dla HTTPS lub sekcję III Heurystyka implementacji TLS w Wpływ na przechwytywanie HTTPS dla bezpieczeństwa .
źródło
Problemem nie jest koncepcja SSL ani implementacja techniczna, ale raczej to, że ktoś inny ma pełną kontrolę nad jednym punktem końcowym połączenia, tj. Twoją stacją roboczą.
To jest podstawa rzeczywistego ryzyka bezpieczeństwa ...
Z punktu widzenia bezpieczeństwa zagrożona jest twoja stacja robocza, która przerywa łańcuch zaufania, który w normalnych okolicznościach uniemożliwia sukces MITM.
Nie możesz Odbywa się to po stronie klienta.
W zależności od przypadku użycia można zastosować przypinanie klucza publicznego HTTP RFC 7469, w którym wysłano dodatkowy nagłówek do klienta z listą (skrótami) rzeczywistych certyfikatów SSL lub używanych przez siebie urzędów certyfikacji.
źródło
To zły sposób. Nie serwer sprawdza łańcuch zaufania. To jest klient. Dlatego powodem, dla którego firma korzysta z tego sposobu, jest zabezpieczenie środowiska firmy i sprawdzenie, co robi pracownik w swoim czasie pracy.
źródło
Państwo mogłoby (niby), ale prawdziwe pytanie brzmi, czy POWINIEN .
Ale uwaga, nie jest to tak proste jak zmiana flagi w apache.conf.
Ponadto, ponieważ „atakujący” (np. Pracodawca) kontroluje komputer kliencki, zawsze może udaremnić twoje próby, jeśli są skłonni do zainwestowania wystarczającego wysiłku (z drugiej strony, chyba że jesteś bardzo dużą rybą, najprawdopodobniej nie są skłonni, abyś osiągnął swój cel, że Twoi użytkownicy nie będą mogli się z Tobą połączyć, chyba że będzie to bezpieczne))
możesz ponownie wdrożyć TLS w javascript i sprawdzić tam, czy certyfikat klienta jest połączony z certyfikatem twojej witryny.
jeśli masz szczęście , użytkownik może korzystać z przeglądarki, w której skrypt JavaScript po stronie klienta może uzyskać informacje o używanym certyfikacie zdalnym (a tym samym łatwo zweryfikować go na podstawie zakodowanej wartości certyfikatu serwera).
możesz użyć JavaScript, aby uruchomić niestandardowe szyfrowanie . Tak więc, nawet jeśli zła firma TLS MiTM odniosła sukces, nadal nie zapewniłaby jej dostępu do twoich danych. Oczywiście, jeśli są wystarczająco zainteresowani (a ponieważ kontrolują klienta), mogą po prostu w locie zastąpić bezpieczny skrypt javascript własnym, który również rejestruje (lub zmienia) wszystkie przesyłane informacje.
Ponadto, ponieważ firmy korzystające z serwerów proxy TLS MiTM zwykle również całkowicie kontrolują komputer kliencki, mogą równie łatwo zainstalować ekran i keylogger, aby po prostu nagrywać wideo wszystkiego, co widzi użytkownik, i rejestrować wszystkie naciśnięcia klawiszy (i ruchy myszy) tego typu użytkownika. Jak widać, gdy atakujący JEST klientem, nie ma absolutnie bezpiecznego sposobu na oszukanie go. To naprawdę tylko pytanie, jak bardzo będą zawracać sobie głowę ... A niektóre z powyższych rozwiązań mogą być dla Ciebie wystarczające.
źródło