2012-05-30 14 views
44

Zadałem tu pytanie, jak ukryć połączenia z żądaniami http i uczynić je bezpieczniejszymi w mojej aplikacji. Nie chciałem, żeby ludzie używali skrzypka 2, aby zobaczyć rozmowę i ustawić autorespondera. Wszyscy mówili mi, żebym korzystał z SSL, a połączenia będą ukryte, a informacje będą bezpieczne.Jaki jest punkt protokołu SSL, jeśli skrzypek 2 może odszyfrować wszystkie połączenia za pośrednictwem protokołu HTTPS?

Kupiłem i zainstalowałem certyfikat SSL i wszystko zostało skonfigurowane. Uruchomiłem program fiddler 2 i uruchomiłem aplikację testową, która łączy się z usługą WWW https, a także jest połączona ze skryptem php.

Fiddler 2 był w stanie nie tylko wykryć oba żądania, ale również odszyfrować je! Byłem w stanie zobaczyć wszystkie informacje wracające i czwarte, co doprowadziło mnie do mojego pytania.

Jaki jest sens posiadania SSL, jeśli nie ma żadnego wpływu na bezpieczeństwo. Z protokołem SSL lub bez niego widzę wszystkie informacje cofnięte i czwarte oraz STILL ustawiają autorespondera.

Czy jest coś w .NET, którego brakuje, aby lepiej ukryć połączenia przechodzące przez SSL?

EDIT

dodaję nową część na to pytanie ze względu na niektóre z odpowiedzi, które otrzymałem. Co się stanie, jeśli aplikacja połączy się z serwisem WWW w celu zalogowania się. Aplikacja wysyła do usługi internetowej nazwę użytkownika i hasło. Usługa internetowa wysyła następnie dane z powrotem do aplikacji, informując o dobrych danych logowania lub o błędach. Nawet jeśli korzystasz z protokołu SSL, osoba korzystająca z fiddlera 2 może po prostu ustawić autoresponder, a następnie aplikacja zostanie "popękana". Rozumiem, jak przydatne może być wyświetlanie danych podczas debugowania, ale moje pytanie brzmi: co dokładnie należy zrobić, aby upewnić się, że protokół SSL łączy się z tym, który żądał. Zasadniczo mówiąc, nie może być człowieka średniego.

+3

Wierzę, że może odszyfrować tylko informacje przeznaczone dla ciebie, ponieważ masz już klucz prywatny – Mark

+0

To prawda - jest podobny do jakiegokolwiek innego serwera proxy do debugowania stron internetowych - jak wspomniano w poniższej odpowiedzi Aleksieja, takie serwery proxy sprawdź informacje przeznaczone dla twojego komputera, wspomagając w ten sposób debugowanie (stąd nazwa "proxy debugowania"), ale nie pozwalając na arbitralne odszyfrowanie połączeń wykonanych z innych maszyn. W związku z tym protokół SSL jest nadal bezpieczny, ale można go obserwować lokalnie, dzięki czemu można skuteczniej debugować. – waxspin

+2

Twoja modyfikacja pytania stawia zupełnie inne pytanie niż oryginalne. Musisz poprawnie sprawdzić certyfikat wysłany przez serwer. Sposób wykonania tej czynności zależy od sposobu połączenia (jakie klasy są używane itp.). –

Odpowiedz

48

To jest pokryta tutaj: http://www.fiddlerbook.com/fiddler/help/httpsdecryption.asp

Fiddler2 opiera się na zasadzie "man-in-the-middle" podejścia do przechwycenia HTTPS. Do przeglądarki internetowej Fiddler2 twierdzi, że jest bezpiecznym serwerem WWW, a na serwer WWW Fiddler2 naśladuje przeglądarkę internetową. Aby udawać, że jest serwerem WWW, Fiddler2 dynamicznie generuje certyfikat HTTPS.

Zasadniczo ręcznie zaufać cokolwiek certyfikat Skrzypek zapewnia, że ​​tak samo będzie mogło być prawdziwe, jeśli ręcznie zaakceptować certyfikat od przypadkowej osoby, która nie pasuje nazwę domeny.

EDYCJA: Istnieją sposoby, aby zapobiec atakowi Skrzypek/człowiek w środku - tj. W niestandardowej aplikacji używającej SSL można wymagać użycia określonych certyfikatów do komunikacji. W przypadku przeglądarek mają one interfejs użytkownika do powiadamiania użytkownika o niedopasowaniu certyfikatu, ale ostatecznie pozwalają na taką komunikację.

Jako publicznie dostępna próbka dla jawnych certyfikatów możesz spróbować użyć usług Azure (np. Z narzędziami PowerShell dla Azure) i sniffować ruch z Fiddler. Nie działa z powodu wyraźnego wymagania certyfikatu.

+0

Dodałem trochę informacji do mojego pytania, jeśli mógłbyś rozszerzyć to, co masz z moich nowych informacji, które byłyby bardzo pomocne. –

+1

Zaktualizowana. Zauważ, że nie jestem ekspertem w dziedzinie SSL/bezpiecznej komunikacji i jeśli chcesz zrobić coś poważniejszego niż SSL, musisz porozmawiać z ludźmi, którzy są wyraźnie przeszkoleni w tym zakresie (pamiętaj, że protokół SSL jest uważany za prawidłowy w przypadku transakcji bankowych, więc może być ok też dla ciebie). –

+3

Kluczową sprawą do zrozumienia jest to, że jeśli oprogramowanie jest uruchomione na komputerze użytkownika, może po prostu zmienić swoje instrukcje w pamięci w czasie wykonywania, aby ominąć czek. Jak zauważa Andrew Cooper, to jest to samo wyzwanie, z jakim spotyka się DRM - problem "Niezaufanego klienta". – EricLaw

7

Możesz skonfigurować swoją usługę internetową, aby wymagała certyfikacji po stronie klienta w celu uwierzytelnienia SSL, a także po stronie serwera. W ten sposób Fiddler nie będzie mógł połączyć się z twoją usługą. Tylko twoja aplikacja, która ma wymagany certyfikat, będzie mogła się połączyć.

Oczywiście, masz problem z ochroną certyfikatu w aplikacji, ale teraz masz problem z nazwą użytkownika, w każdym razie, z hasłem użytkownika: &. Ktoś, kto naprawdę chce złamać twoją aplikację, może pójść z Reflectorem, a nawet wyszukać pamięć dla klucza prywatnego związanego z certyfikatem po stronie klienta.

Nie ma sposobu, aby uczynić to w 100% odpornym na kule. Ten sam problem dotyczy branży filmowej z zabezpieczeniem zawartości dysków DVD. Jeśli masz oprogramowanie zdolne do odszyfrowania DVD i odtwarzania zawartości, to ktoś może zrobić zrzut pamięci podczas działania tego oprogramowania i znaleźć klucz odszyfrowywania.

6

Zasadniczo protokół SSL/TLS polega na tym, że okazyjny podsłuch z programem Wireshark nie jest w stanie zobaczyć Twoich danych. Fiddler/Burp oznacza interakcję z systemem. Tak, jest to bardzo prosta interakcja, ale wymaga ona (jednego) z systemów do przejęcia.

Jeśli chcesz zwiększyć bezpieczeństwo, czyniąc te programy MITM bezużytecznymi na tak podstawowym poziomie, potrzebujesz uwierzytelniania za pomocą certyfikatu klienta (dwukierunkowego SSL) i przypiąć zarówno certyfikat serwera, jak i klienta (np. certyfikat jest ważny dla komunikatów). Szyfrujesz również ładunki przesłane na drucie za pomocą kluczy publicznych każdej ze stron i upewnij się, że klucze prywatne znajdują się tylko w systemach, do których należą. W ten sposób, nawet jeśli jedna strona (Bob) zostanie zaatakowana, atakujący może zobaczyć tylko to, co jest wysyłane do Boba, a nie to, co Bob wysłał do Alice. Następnie wziąłbyś zaszyfrowane ładunki i podpisałeś dane za pomocą możliwego do zweryfikowania certyfikatu, aby upewnić się, że dane nie zostały zmienione (jest dużo debaty na temat tego, czy najpierw zaszyfrować, czy najpierw podpisać, btw). Co więcej, możesz mieszać podpis za pomocą kilku przebiegów czegoś takiego jak sha2, aby podpis był "wysyłany" (chociaż jest to w dużej mierze niejasny krok).

W ten sposób uzyskasz tak daleko w zakresie bezpieczeństwa, jak to możliwe, gdy nie kontrolujesz (jeden) z systemów komunikacyjnych.

Jak wspomnieli inni, jeśli atakujący kontroluje system, kontrolują pamięć RAM i mogą modyfikować wszystkie wywołania metod w pamięci.

Powiązane problemy