Pytanie w sprawie .net-4.0, ssl, c#, encryption, fiddler – Co to jest punkt SSL, jeśli fiddler 2 może odszyfrować wszystkie połączenia przez HTTPS?

45

Znowu zadałem pytanie tutaj, jak ukryć moje żądania HTTP i uczynić je bezpieczniejszymi w mojej aplikacji. Nie chciałem, aby ludzie używali fiddlera 2, aby zobaczyć połączenie i skonfigurować automatyczną odpowiedź. Wszyscy kazali mi iść na SSL, a rozmowy będą ukryte, a informacje bezpieczne.

Kupiłem i zainstalowałem certyfikat SSL i skonfigurowałem wszystko. Uruchomiłem fiddlera 2 i uruchomiłem aplikację testową, która łączy się z usługą internetową https, a także łączy ze skryptem php https.

Fiddler 2 był w stanie nie tylko wykryć oba żądania, ale także je odszyfrować! Udało mi się zobaczyć wszystkie informacje wracające i czwarte, co prowadzi mnie do mojego pytania.

Jaki jest sens korzystania z SSL, jeśli nie miało to wpływu na bezpieczeństwo. Z protokołem SSL lub bez niego widzę wszystkie informacje cofające się i czwarte, a STILL tworzy automatyczną odpowiedź.

Czy jest coś w .NET brakuje, aby lepiej ukryć moje połączenia wychodzące przez SSL?

EDYTOWAĆ

Dodałem nową część do tego pytania ze względu na niektóre odpowiedzi, które otrzymałem. Co zrobić, jeśli aplikacja łączy się z usługą internetową, aby się zalogować. Aplikacja wysyła usłudze internetowej nazwę użytkownika i hasło. Następnie usługa internetowa wysyła dane z powrotem do aplikacji, mówiąc dobrze lub źle. Nawet jeśli przejdziesz przez SSL, osoba używająca fiddlera 2 mogłaby po prostu skonfigurować automatyczną odpowiedź, a aplikacja zostanie „złamana”. Rozumiem, jak przydatne może być wyświetlanie danych w debugowaniu, ale moje pytanie brzmi, co dokładnie należy zrobić, aby upewnić się, że SSL łączy się z tym, którego żądał. Zasadniczo mówiąc, nie może być człowieka średniego.

To prawda - jest podobny do każdego innego serwera proxy do debugowania stron internetowych - jak wspomniano w odpowiedzi Aleksieja poniżej, takie serwery proxy sprawdzają tylko informacje przeznaczone dla Twojej maszyny, pomagając w ten sposób w debugowaniu (stąd nazwa 'proxy debugowania'), ale nie zezwalając na to. arbitralnie odszyfrować połączenia z innych komputerów. W związku z tym protokół SSL jest nadal bezpieczny, ale można go obserwować lokalnie, dzięki czemu można skuteczniej debugować. waxspin
Twoja modyfikacja pytania stawia zupełnie inne pytanie niż pierwotne. Musisz potwierdzić poprawność certyfikatu wysłanego przez serwer. Sposób zrobienia tego zależy od tego, jak się łączysz (jakie klasy są używane itp.). Eugene Mayevski 'Allied Bits
wierzę, że może odszyfrować tylko informacje przeznaczone dla twojego komputera, ponieważ masz już klucz prywatny Mark

Twoja odpowiedź

3   odpowiedź
49

Jest to omówione tutaj:http://www.fiddlerbook.com/fiddler/help/httpsdecryption.asp

Fiddler2 opiera się na podejściu „man-in-the-middle” do przechwytywania HTTPS. W przeglądarce internetowej Fiddler2 twierdzi, że jest bezpiecznym serwerem internetowym, a na serwerze WWW Fiddler2 naśladuje przeglądarkę internetową. Aby udawać serwer WWW, Fiddler2 dynamicznie generuje certyfikat HTTPS.

Zasadniczo ręcznie ufasz dowolnemu certyfikatowi udostępnianemu przez Fiddlera, tak samo będzie w przypadku ręcznego zaakceptowania certyfikatu od przypadkowej osobynie pasuje Nazwa domeny.

EDYCJA: Istnieją sposoby zapobiegania atakowi Fiddler / man-in-the-middle - tj. W niestandardowej aplikacji używającej SSL można wymagać użycia określonych certyfikatów do komunikacji. W przypadku przeglądarek mają interfejs użytkownika, który powiadamia użytkownika o niezgodności certyfikatu, ale ostatecznie umożliwia taką komunikację.

Jako publicznie dostępna próbka certyfikatów jawnych można próbować korzystać z usług Azure (np. Za pomocą narzędzi PowerShell dla platformy Azure) i sniffować ruch za pomocą Skrzypka. Nie działa z powodu wyraźnego wymogu certyfikatu.

Zaktualizowano. Zauważ, że nie jestem ekspertem w dziedzinie komunikacji SSL / bezpiecznej i jeśli chcesz zrobić poważniejszą ochronę niż SSL, musisz porozmawiać z osobami, które są w niej wyraźnie przeszkolone (pamiętaj, że SSL jest uważany za grzywnę dla transakcji bankowych, więc może być ok dla ciebie też). Alexei Levenkov
Dodałem trochę informacji do mojego pytania, jeśli mógłbyś proszę rozszerzyć to, co masz z moich nowych informacji, które byłyby bardzo pomocne. Landin Martens
Kluczową rzeczą do zrozumienia jest to, że jeśli oprogramowanie działa 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, jest to ten sam problem z twarzami DRM - problem „Niezaufany klient”. EricLaw
7

Możesz skonfigurować usługę internetową, aby wymagała certyfikacji po stronie klienta dla uwierzytelniania SSL, a także po stronie serwera. W ten sposób Skrzypek 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 i tak masz problem z nazwą użytkownika i hasłem. Ktoś, kto naprawdę chce złamać twoją aplikację, może skorzystać z Reflectora, a nawet przeprowadzić wyszukiwanie pamięci klucza prywatnego skojarzonego z certyfikatem po stronie klienta.

Nie ma prawdziwego sposobu na wykonanie tego w 100% kuloodpornego. Jest to ten sam problem, który przemysł filmowy ma z zabezpieczaniem zawartości DVD. Jeśli masz oprogramowanie zdolne do odszyfrowania DVD i odtworzenia zawartości, ktoś może wykonać zrzut pamięci podczas działania tego oprogramowania i znaleźć klucz deszyfrujący.

6

Istotą SSL / TLS jest to, że okazjonalny podsłuch z Wireshark nie jest w stanie zobaczyć twoich ładunków. Skrzypek / Burp oznacza, że ​​wchodziłeś w interakcję z systemem. Tak, jest to bardzo prosta interakcja, ale wymaga (jednego) systemu, aby zostać naruszonym.

Jeśli chcesz zwiększyć bezpieczeństwo, czyniąc te programy MITM bezużytecznymi na takim podstawowym poziomie, wymagałoby to uwierzytelnienia certyfikatu klienta (dwukierunkowy SSL) i przypięcia zarówno certyfikatów serwera, jak i klienta (np. Wymagaj, aby tylko określony certyfikat był ważny dla comms). Zaszyfrowałbyś również ładunki przesyłane przewodem za pomocą kluczy publicznych każdej ze stron i upewnił się, że klucze prywatne znajdują się tylko w systemach, do których należą. W ten sposób nawet jeśli jedna ze stron (Bob) zostanie naruszona, atakujący może zobaczyć tylko to, co jest wysyłane do Boba, a nie to, co Bob wysłał do Alice. Następnie pobierałbyś zaszyfrowane ładunki i podpisywał dane weryfikowalnym certyfikatem, aby upewnić się, że dane nie zostały naruszone (jest wiele dyskusji na temat tego, czy najpierw zaszyfrować, czy najpierw podpisać, btw). Ponadto można mieszać sygnaturę za pomocą kilku przejść czegoś takiego jak sha2, aby upewnić się, że podpis jest „taki, jak wysłano” (chociaż jest to w dużej mierze niejasny krok).

To doprowadziłoby cię tak daleko w sposób bezpieczny, jak to możliwe do osiągnięcia, gdy nie kontrolujesz (jednego) systemów komunikacyjnych.

Jak wspominali inni, jeśli atakujący kontroluje system, kontroluje on pamięć RAM i może modyfikować wszystkie wywołania metod w pamięci.

Powiązane pytania