Sådan sikres en statisk streng i en Windows. Net app?

Indlæg af Hanne Mølgaard Plasc

Problem



Vi forbereder os på at distribuere en Windows .NET-klientapp, der gør opkald til webservice tilbage til vores centrale server. Vi har fået kravet om at validere, at alle opkald til webtjenesten kommer fra vores klientapplikationer og ikke fra nogen andre opkaldere. Det er blevet foreslået, at vi sender et sikkerhedstoken, som er fælles for alle installationer af vores ansøgning . Men vi har nu denne fælles streng at sikre inden for applikationsinstallationen. Er der en effektiv måde at rimeligt beskytte en sådan streng mod at blive opdaget af en hacker?


Tak for alle råd.

Bedste reference



  • Brug SecureString til at håndtere token til enhver tid. På denne måde vil det være meget sværere at hente token fra hukommelsen.

  • Gem symbolet som en forbindelsesstreng i app.config og krypter 'connectionStrings' sektionen. På denne måde vil symbolet blive sikret fra alle undtagen brugerens konto (via DPAPI).

  • Brug SslStream til at gøre kundeservice kommunikation. På denne måde bliver din forbindelse krypteret. Sammen med tokenet vil dine meddelelser nu blive autentificeret (dvs. du kender din klient) og sikret.


Andre referencer 1


Autentificering og autorisation i WCF Services - Del 1 [4]

Andre referencer 2


Det hedder offentlig nøgle kryptering.



  • din app sender sin offentlige nøgle til serveren

  • serveren giver tilbage krypteret streng, som skal tilføjes til et bestemt præfiks

  • Din app beder serveren sin offentlige nøgle

  • du app dekrypterer strengen, tilføj præfikset

  • krypterer med serverens offentlige nøgle

  • send nøglen til serveren

  • Server validerer



Hvis hackeren kender dit præfiks, der er i din binære fil, ved det ikke nok det suffiks, som serveren giver, og vil ikke kunne dekryptere, hvad du sender tilbage til serveren, fordi hackeren ikke har serverens private nøgle. Sårbarhed er det hackeren kunne udtrække den private nøgle i appen for at dekryptere suffixet.Men serveren kan ændre det hvert par sekunder om nødvendigt eller det kan være tidsbegrænset. Men tidsafhængig kan udnyttes, det er bedre at have en variabel tidsafhængig suffixændring hvis du vælger dette. På et tidspunkt og med en stor indsats og en supercomputer til rådighed kunne hackeren også hackere det ved at søge efter en nøgle, der kan dekryptere alle de resulterende strings, der sendes tilbage, derfor bør du ikke generere tilfældige suffiks på serveren, men genbruge få af dem.


Hvis du mener, at der er for meget arbejde, kan du bruge SecureString og krypterede forbindelsesstreng. Men det er sikkert hackable med nogen tid til disposition, fordi alt der er brug for er på klientsiden, og hackeren behøver ikke x * 2 bruteforce dekrypteringsioner.