Fråga:
Dekryptera TLS-paket mellan Windows 8-appar och Azure
Bill Sempf
2013-03-24 04:42:30 UTC
view on stackexchange narkive permalink

I Windows Store-applikationsutveckling för Windows 8 finns det en klass som heter remoteSettings som låter en utvecklare lagra partier av data så att användaren får tillgång till den på flera maskiner, så länge de är inloggade med samma konto .

Jag kopplade ihop WireShark och upptäckte att paketet lagras i Azure och är säkrat med TLS. Jag vill MITM själv så att jag kan dekryptera paketet och se om data är krypterade på Azure.

Jag har uppenbarligen inte den privata nyckeln för Azure, så jag skulle vilja veta om någon har en idé om hur man gör MITM-analysen.

Fem svar:
Brendan Dolan-Gavitt
2013-03-27 20:52:26 UTC
view on stackexchange narkive permalink

En annan sak som du kan göra, som kanske är överdriven men som är användbar i andra scenarier, är att fånga upp skapandet av TLS-masterhemligheten med 48 byte. För många Windows-applikationer (inklusive IE) händer detta i lsass.exe i följande funktion (hämtad från Win7 SP1 32-bit):

  Samtal: ncrypt! _Tls1ComputeMasterKey @ 32 + 0x57 EIP: ncrypt! _PRF @ 40 + 0x11a  

Du kan sedan dekryptera de fångade paketen efter det faktum i Wireshark genom att ställa in (Pre) -Master-Secret-logg filnamn i SSL inställningarna till en fil som ser ut som:

  RSA session-ID: 87492B3586DE289FAE1598B0A19CC7BCCB69371993F2C0DF32438034E06FE3FBMaster-Key: F58C0EFA2BF87602646B318400DFEB0C8CCDE59408C9F13C6D923F6208743BD34EA8BA17BCE02B9BD8DFED5A58036068  

sessionen ID här hittar du i TLS-rubrikerna (okrypterad) för den ström du är intresserad av. (Låt dig inte luras av RSA - det här fungerar för alla TLS-anslutningar oavsett vilken chiffer som används.)

Fördelen med den här metoden är att eftersom du inte gör en man i mitten, behöver klientapplikationen inte lita på din CA, är särskilt praktiskt om du försöker vända skadlig kod som faktiskt gör krypto rätt.

Nackdelen är att du måste kunna felsöka lsass.exe , vilket kan vara knepig; det finns lite information om hur du gör det här.

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

Om data skickas som HTTPS kan du prova det klassiska Fiddler man-in-the-middle-tillvägagångssättet. Jag är inte säker på om Windows-butiken respekterar proxyinställningarna eller om den har ett fäst certifikat. Om den respekterar proxyinställningarna, vilket den borde, och den inte har ett fäst certifikat, bör du kunna trivialt man-i-mitten med Fiddler.

Om data inte är ' t HTTPS och certifikatet är inte fäst, ett alternativ är att proxysäkra den säkra anslutningen med SSLNetcat. Vad du gör är att du ändrar din värdfil så att Store-körningen ansluter till SSLNetcat som körs lokalt, och sedan ställer du in SSLNetcat så att den använder ett certifikat som du har den privata nyckeln för. Då har du bara SSLNetcat att vidarebefordra data direkt till ett program som du väljer eller ange de privata nycklarna i Wireshark och använda den för att sniffa trafiken.

Om data inte är HTTPS, om certifikatet i om binärfilmen är fäst och inte lagrad i en fil kan du antingen korrigera Windows Store-körbar och ersätta certifikatet med ditt eget som du har den privata nyckeln till. OpenSSL borde enkelt kunna skapa ett ersättningscertifikat åt dig. Den här privata nyckeln kan sedan matas in i Wireshark som sedan dekrypterar trafiken.

Du är ganska nära kopieringsskyddsområdet så att du kan stöta på ett antal komplikationer.

Låt mig vara tydlig - jag gör detta till min egen app för att se om data i Azure lagras krypterade eller inte. Bryter inte någon annans app. Jag försökte Fiddler, men jag kan ha gjort det fel, så jag ska undersöka det. Jag kände inte till SSLNetcat, så tack för det också. Fantastiskt svar.
Jag antog lika mycket. Jag menade bara att du kunde stöta på problem där kommunikationen är starkt skyddad på grund av kopieringsskydd. Det komplicerar sakerna lite eftersom du är mer benägna att stöta på fästa certifikat, självverifierande körbara filer och till och med kärnnivåintegritetskontroller. Jag känner inte till Microsoft Store så jag kan inte ge råd mer än generaliseringar.
Ditt råd är dock ganska fantastiskt. Jag kommer till jobbet när jag är klar att titta på basket här ...
ŹV -
2013-03-24 07:01:47 UTC
view on stackexchange narkive permalink

Det finns ett antal tillvägagångssätt du kan ta när du extraherar den lokala nyckeln som används av Windows Store och matar in den i Wireshark, men jag tror att din bästa insats är att injicera en DLL som hakar i nätverks-IO-funktionerna skicka () och recv () ur processen.

Du kan försöka göra detta på en "låg nivå" själv, men av pragmatismens intresse skulle du vara klokt att undersöka Microsoft Detours för anslutning, det finns så många exempel som använder det - det är enkelt tillräckligt nu att kunskap om din funktionsprototyp är det enda väsentliga kravet.

Inte säker på att jag kan komma till IO-nätverksfunktionerna i WinRT - kanske med lite C ++ -hackning eftersom detta inte exakt går igenom certifiering. Hade inte hört talas om omvägar än - tack för det.
0xea
2013-03-27 16:38:37 UTC
view on stackexchange narkive permalink

Du kan också prova oSpy som i grunden kopplar in lämpliga API-samtal och låter dig se data före och efter att den har krypterats / dekrypterats.

oSpy är ett verktyg som hjälper till omvänd teknik som körs på Windows-plattformen. [...] när sniffningen är klar på API-nivån tillåter det en mycket mer detaljerad bild av vad som händer. [...] om ett program använder krypterad kommunikation är det enkelt att fånga upp dessa samtal också. oSpy avlyssnar redan ett sådant API och är det API som används av MSN Messenger, Google Talk etc. för kryptering / dekryptering av HTTPS-data.

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

Förmodligen använder Windows 8 WinINet för att ansluta till App Store. Om så är fallet kan du se de okrypterade strömmarna ansluter till wininet.dll istället för att använda en proxy. HookME gör detta och det presenterades förra året i BlackHat.

Förmodligen måste du göra några mindre ändringar för att kompilera och använda det under Windows 8.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...