題:
解密Windows 8應用和Azure之間的TLS數據包
Bill Sempf
2013-03-24 04:42:30 UTC
view on stackexchange narkive permalink

在Windows 8的Windows Store應用程序開發中,有一個名為remoteSettings的類,開發人員可以使用該類存儲批量數據,以便用戶可以使用多台計算機訪問這些數據,只要它們使用同一帳戶登錄即可。 。

我連接了WireShark,發現該數據包存儲在Azure中,並使用TLS保護。我想自己進行MITM,以便我可以解密數據包,並查看Azure上的數據是否已加密。

我顯然沒有Azure的私鑰,所以我想知道是否任何人都有關於如何完成MITM分析的想法。

五 答案:
Brendan Dolan-Gavitt
2013-03-27 20:52:26 UTC
view on stackexchange narkive permalink

您可能要做的另一件事是攔截48字節TLS主密鑰的創建,這可能有點過頭,但在其他情況下很有用。對於許多Windows應用程序(包括IE),這發生在以下功能(取自Win7 SP1 32位)中的 lsass.exe 中:

 調用者:ncrypt! _Tls1ComputeMasterKey @ 32 + 0x57 EIP:ncrypt!_PRF @ 40 + 0x11a  

然後您可以在Wireshark中通過設置(Pre)-Master-Secret log對解密的數據包進行解密SSL偏好設置中的文件名到如下所示的文件文件:

  RSA會話ID:87492B3586DE289FAE1598B0A19CC7BCCB69371993F2C0DF32438034E06FE3FBMaster-Key:F58C0EFA2BF87602646B318400DFEB0C8CCDE9B4EC9B4EC9BED4B9E4B4E3B9E8B9E8B9E8B9E8B9E8B8E8B8E8B9E8B9E8E8B8E8B8E8B9E8B8E8B8E8B8E8B3E8B8E8B3E8E8B3E8E8B8E8B8E8B9E8B9E8B9E8B8E8B9E8B9E8B8E8B9E8B8E8B8E8B9E8B9E8B9E8B9B&E&F&C此處的ID可以在您感興趣的流的TLS標頭中找到(未加密)。(不要被RSA欺騙-這適用於所有TLS連接,而與使用的密碼套件無關。) 

此方法的優點在於,由於您不在中間做人,因此客戶端應用程序不必信任您的CA,如果您想逆轉某些確實具有加密權限的惡意軟件,則特別方便。

缺點是您需要能夠調試 lsass.exe ,這可以棘手的這裡

Peter Andersson
2013-03-24 13:55:46 UTC
view on stackexchange narkive permalink

如果數據通過HTTPS傳遞,則可以嘗試使用經典的 Fiddler中間人方法。我不確定Windows應用商店是否尊重代理設置或它是否具有固定證書。如果它確實遵守應有的代理設置,並且沒有固定的證書,則應該可以使用Fiddler輕鬆地將其居中。

如果數據是“ t HTTPS且證書未固定,一種選擇是使用 SSLNetcat代理安全連接。您要做的是更改主機文件,以使Store可執行文件連接到本地運行的SSLNetcat,然後設置SSLNetcat,以使其使用具有私鑰的證書。然後,您要么讓SSLNetcat直接將數據轉發到您選擇的程序,要么將私鑰輸入Wireshark並使用它來嗅探流量。如果二進製文件固定並沒有存儲在文件中,則可以修補Windows Store可執行文件,並用具有私鑰的證書替換證書。 OpenSSL應該能夠輕鬆為您生成替換證書。然後可以將此私鑰輸入到Wireshark中,然後解密該流量。

您距離複製保護區域很近,因此可能會遇到許多麻煩。

請讓我清楚-我正在對自己的應用程序執行此操作,以查看Azure中的數據是否已加密存儲。不破壞別人的應用程序。我嘗試了Fiddler,但可能做錯了,因此我將對其進行研究。我對SSLNetcat並不熟悉,因此也感謝您。很棒的答案。
哦,我承擔了很多。我的意思是,您可能會遇到由於復制保護而導致通信受到嚴格保護的問題。由於您更容易碰到固定證書,自我驗證的可執行文件甚至內核級完整性檢查,因此事情變得有些複雜。我不熟悉Microsoft Store,因此除了概括之外,我無法提供其他建議。
您的建議雖然很棒。我在這裡看完籃球後就去上班...
ŹV -
2013-03-24 07:01:47 UTC
view on stackexchange narkive permalink

您可以採用多種方法來提取Windows Store使用的本地密鑰並將其輸入到Wireshark中,但是,我認為最好的選擇是注入一個掛接Network IO功能的DLL send () recv()

您可以嘗試自己“低級”執行此操作,但是出於實用主義的考慮,明智的做法是檢查Microsoft Detours是否具有鉤子功能,有很多示例可以利用它-很簡單知道函數原型是唯一必要的條件。

不確定我能否使用WinRT中的網絡IO功能-可能會受到一些C ++黑客的攻擊,因為這並沒有完全通過認證。還沒有聽說過Detours-謝謝。
0xea
2013-03-27 16:38:37 UTC
view on stackexchange narkive permalink

您還可以嘗試 oSpy,它基本上掛接了適當的API調用,並允許您在加密/解密之前和之後查看數據。

oSpy是一個工具,可以對在Windows平台上運行的軟件進行逆向工程。 [...]在API級別上進行嗅探時,它可以讓您更精細地了解正在發生的事情。 [...]如果應用程序使用加密的通信,也很容易攔截這些調用。 oSpy已經攔截了一個這樣的API,它是MSN Messenger,Google Talk等用於加密/解密HTTPS數據的API。

sw.
2014-06-10 17:44:58 UTC
view on stackexchange narkive permalink

很可能Windows 8正在使用 WinINet與App Store連接。在這種情況下,您可以看到未加密的流掛接到wininet.dll,而不是使用代理。 HookME就是這樣做的,它是去年在BlackHat中發布的。

可能您需要進行一些小的更改才能在Windows 8下編譯和使用它。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...