2012-05-30 27 views
44

我在這裏問了一個問題,然後回顧一下如何隱藏我的http請求調用,並使它們在我的應用程序中更安全。我不希望人們使用fiddler 2來查看電話並設置自動回覆。每個人都告訴我要使用SSL,電話會被隱藏起來,並保持信息安全。如果fiddler 2可以通過HTTPS解密所有呼叫,SSL的意義何在?

我購買並安裝了SSL證書並設置了一切。我啓動了fiddler 2並運行了一個測試應用程序,該應用程序連接到https web服務並連接到https php腳本。

Fiddler 2不僅能夠檢測到這兩個請求,還能解密它們!我能夠看到所有信息回到第四位,這使我想到了我的問題。

如果SSL對安全性沒有影響,那麼使用SSL有什麼意義呢?無論是否使用SSL,我都可以看到所有信息都回到第四位,並且仍然設置了自動回覆。

.NET中是否存在某些內容我錯過了可以更好地隱藏通過SSL進行的通話?

編輯

我由於一些我所收到的答覆中增加一個新的組成部分這一問題。如果應用程序連接到Web服務進行登錄會怎麼樣?應用程序向Web服務發送用戶名和密碼。然後,Web服務將數據發送迴應用程序,說明登錄數據良好或不好。即使通過SSL,使用小提琴手2的人也可以設置一個自動應答器,然後應用程序被「破解」。我明白如何在調試中看到數據是有用的,但我的問題是應該如何確保SSL連接到正在請求的數據。基本上說不能有中間人。

+3

我相信它只能解密給你機器的信息,因爲你已經有了私鑰 – Mark

+0

這是正確的 - 它和其他網絡調試代理類似 - 就像在下面的Alexei的回答中提到的那樣,這樣的代理檢查用於你的機器的信息,從而幫助調試(因此稱爲「調試代理」),但不允許任意解密來自其他機器的調用。因此,SSL仍然是安全的,但是可以在本地觀察,以便更有效地進行調試。 – waxspin

+2

對問題的修改提出了與原來完全不同的問題。您需要正確驗證服務器發送的證書。這樣做的方式取決於你如何連接(使用哪些類等)。 –

回答

48

這是這裏介紹:http://www.fiddlerbook.com/fiddler/help/httpsdecryption.asp

Fiddler2依賴於「人在中間人」的方式來HTTPS攔截。對於您的網絡瀏覽器,Fiddler2聲稱是安全的Web服務器,而對於Web服務器,Fiddler2模仿Web瀏覽器。爲了裝扮成Web服務器,Fiddler2動態生成HTTPS證書。

基本上你手動信任任何證書提琴手提供,同樣會是真實的,如果你手動接受素不相識的人證書不匹配域名。

編輯: 有辦法阻止Fiddler/man-in-the-middle攻擊 - 即在使用SSL的自定義應用程序中,可以要求使用特定證書進行通信。在瀏覽器的情況下,他們有UI來通知用戶證書不匹配,但最終允許這樣的通信。

作爲公開可用的顯式證書示例,您可以嘗試使用Azure服務(即使用適用於Azure的PowerShell工具),並使用Fiddler嗅探流量。它由於明確的證書要求而失敗。

+0

我在我的問題中添加了一些信息,如果您可以請擴展您對我的新信息有什麼幫助。 –

+1

已更新。請注意,我並非SSL /安全通信方面的專家,如果您想要執行比SSL更嚴格的安全保護,則需要與經過明確培訓的人員交談(請注意,對於銀行交易,SSL被認爲是很好的,所以可能會你也可以)。 –

+3

需要了解的一個關鍵是,如果軟件在用戶的計算機上運行,​​他可以在運行時簡單地更改內存中的指令以繞過檢查。正如Andrew Cooper指出的那樣,DRM面臨着同樣的挑戰 - 「不可信的客戶端」問題。 – EricLaw

7

您可以將您的Web服務設置爲需要SSL身份驗證的客戶端認證以及服務器端。這樣Fiddler將無法連接到您的服務。只有具有所需證書的應用程序才能夠連接。

當然,那麼你有如何保護應用程序內的證書的問題,但你現在用你的用戶名&密碼,現在有這個問題。真正想要破解你的應用的人可能會用Reflector,或者甚至在內存中搜索與客戶端證書相關的私鑰。

沒有真正的方法來做這100%防彈。電影行業在保護DVD內容方面也存在同樣的問題。如果您有能夠解密DVD並播放內容的軟件,則有人可以在該軟件正在運行時執行內存轉儲,並找到解密密鑰。

6

SSL/TLS的一般意義在於,Wireshark的偶爾竊聽者無法看到您的有效載荷。 Fiddler/Burp意味着你與系統進行了交互。是的,這是一個非常簡單的交互,但它確實需要(一個)系統受到危害。

如果您想通過渲染這些MITM程序來提高安全性,您需要客戶端證書身份驗證(雙向SSL)並鎖定服務器和客戶端證書(例如僅要求特定證書對通信有效)。您還可以使用各方的公鑰加密在線路上傳輸的有效負載,並確保私鑰僅駐留在它們所屬的系統上。這樣,即使一方(鮑勃)受到攻擊,攻擊者也只能看到發送給Bob的內容,而不是Bob發送給Alice的內容。 然後,您將採取加密的有效載荷並使用可驗證的證書對數據簽名,以確保數據未被篡改(關於是先加密還是先簽名,還有許多爭論)。 最重要的是,你可以使用sha2之類的幾個遍來散列簽名,以確保簽名是'as-sent'(儘管這在很大程度上是一個模糊的步驟)。

當你不控制(一個)通信系統時,這會使你在安全方式上達到合理可實現的程度。

正如其他人提到的,如果攻擊者控制系統,他們控制RAM並且可以修改內存中的所有方法調用。