2015-09-29 17 views
5

Sto usando .net 3.5 e sto cercando di rendere compatibile la mia app FIPS. Non uso alcuno degli algoritmi FIPS ma ho ancora questo errore quando lo eseguo sul server di produzione.Come verificare che un'applicazione Asp.NET sia compatibile con FIPS

Questa implementazione non fa parte degli algoritmi di crittografia convalidati dalla piattaforma Windows FIPS.

Ecco l'elenco di algoritmi che ho controllato e sono sicuro di non averli utilizzati.

  • HMACMD5
  • HMACRIPEMD160
  • HMACSHA256
  • HMACSHA384
  • HMACSHA512
  • MD5CryptoServiceProvider
  • RC2CryptoServiceProvider
  • RijndaelManaged
  • RIPEMD160Managed
  • SHA1Managed

Come faccio a sapere esattamente dove il problema è, o altre idee?

+2

Il modo più difficile: collegare un debugger (OllyDbg, ad esempio) al programma prima che si interrompa e cercare nella memoria quel messaggio, quindi impostare un punto di interruzione di lettura della memoria in quella posizione, - si fermerà ogni volta che si accede a quel messaggio, e probabilmente sarete in grado di svolgere lo stack e vedere quali metodi/classi/moduli attivano tale avviso. Tuttavia non aspettatevi che un debugger di codice nativo sia molto dettagliato con il codice gestito. –

risposta

2

Quando si dice "FIPS compliant", presumo che si desideri applicare la conformità FIPS 140 nelle modalità di librerie crittografiche Windows e .NET modificando lo Local Security Policy settings.

La sfida con la conformità FIPS 140 (di solito il livello 1 dell'ultima versione dello standard, FIPS 140-2) utilizzando questo meccanismo, come si è scoperto, è che impedisce l'istanziazione di algoritmi non FIPS 140, anche se essi non sono utilizzati per scopi legati alla sicurezza.

Presumibilmente è stato controllato il codice per eventuali riferimenti ad algoritmi non conformi utilizzando uno strumento come ildasm o Reflector. Altrimenti, esegui il debug del tuo codice e osserva la traccia dello stack del InvalidOperationException generato per vedere dove si trova il problema.

Un modo semplice per ottenere ciò è utilizzare le classi generiche ed evitare di chiamare direttamente i costruttori. Per esempio, se si desidera utilizzare Advanced Encryption Standard (AES), invece di:

// Use the faster .Net implementation of AES. Not FIPS 140 compliant. 
using (AesManaged aesManaged = new AesManaged()) 
{ 
    // Do something 
} 

uso:

// Let .Net workout which implementation of AES to use. Will use 
// a FIPS compliant implementation if FIPS is turned on. 
using (Aes aes = Aes.Create()) 
{ 
    // Do something 
} 

Oltre il codice, controllare librerie di terze parti che si usa. È possibile utilizzare strumenti simili a quanto sopra per verificare eventuali riferimenti dal loro codice. Se hai controllato attentamente il tuo codice, è probabile che questo sia il problema. Si noti che il disassemblaggio del codice di terze parti potrebbe essere una violazione del copyright o degli accordi di licenza.

Controllare anche la configurazione SSL. Ad esempio, il certificato digitale utilizzato per SSL non può utilizzare MD5. È inoltre necessario utilizzare TLS 1.0 o versioni successive.

Tuttavia, forzare la conformità di Windows FIPS 140 lo fa nel modo più difficile. La maggior parte dei clienti, compreso il governo degli Stati Uniti, non richiede solo l'utilizzo di algoritmi FIPS (o tecnicamente, implementazioni di questi algoritmi).Ad esempio, sono perfettamente contenti di utilizzare MD5 per creare una chiave hash di una stringa.

Invece, i clienti desiderano che tutto il prodotto venga protetto mediante crittografia per essere protetto dalle implementazioni dei reclami FIPS 140 degli algoritmi approvati. In altre parole:

  1. Identificare ogni cosa, il prodotto dovrebbe proteggere
  2. proteggerli con FIPS 140 librerie compatibili
  3. Usare utensili (analisi ad esempio statica), revisione del codice e/o di controllo di terze parti per dimostrare l'applicazione.

Si noti inoltre che l'attivazione della modalità FIPS 140 non rende necessariamente Windows o il prodotto più sicuro. La sicurezza è molto più complicata rispetto alla scelta di un algoritmo crittografico rispetto a un altro (o, in particolare, a un'implementazione particolare di un algoritmo rispetto a un'altra implementazione). Microsoft no longer recommends this be turned on by default.

Problemi correlati