Le
web application, per come le conosciamo, spesso necessitano di nascondere alcuni
dati che possono essere classificati come segreti.
Nel caso in cui essi esistano, è necessario
metterli in sicurezza da (li lascio in inglese perchè fa + figo) :
- rogue administrators
- web malicious users
Le Spie. I Rogue
Administrators
Questi ed altri utenti privi di
scrupoli possono avere la possibilità di leggere segreti.
Per esempio, un
amministratore WebServer non
dovrebbe essere in grado di leggere le
credenziali di accesso al Server SQL della rete
aziendale.
Le mura sono
cadute ma posso difendermi ancora.
Immaginando FileAuthorizaionModule come una reale
protezione alle problematiche relative all'accesso ai files.
Nel caso in cui
un attacco faccia breccia nelle mura dell'applicazione, i dati
segreti devono comunque rimanere tali.. o meglio dovrebbero provarci. Nel
caso in cui l'attacco raggiunga i file di configurazioni, questi non dovrebbero
mai contenere le
informazioni segrete in testo leggibile.
Identificare i
segreti
Tipici
esempi di segreti possono essere:
- SqlConnectionStrings - Un classico; Di solito
queste informazioni di accesso sono in formato plain text, La raccomandazione
primaria è quella di utilizzare sempre il meccanismo di autentificazione
Windows invece di quello Sql Server. Nel caso questo non sia possibile è
possibile applicare altre tecniche che descriverò nei prossimi
post.
- Credenziali di Sql Server usate
per gli application roles - Gli application roles devono essere
sempre attivati da una stored procedure che richiede il nome
del role e la password associata.
- Fixed Identities -
Come descritto nel post precedente, le fixed identities possono essere
decisamente utili, ma queste vanno messe in sicurezza. Ho già parlato di
aspnet_setreg.exe e non mi stancherò
mai di dire di utilizzarlo ogni volta che si utilizzano le
FI.
- Process Identity -
Come per le Fixed Identity, Process Identity (nel machine.config) deve essere
criptato utilizzando aspnet_setreg.exe.
- Chiavi utilizzate per mettere
in sicurezza dati - E' impossibile pensare di nascondere
informazioni all'interno del software. Ma è comunque possibile effettuare
delle operazioni che possono attenuare il rischio. Per esempio
è possibile creare dei custom handler di configurazione che possono
criptare in modo asimmetrico valori session. Così sarà possibile
archiviare la la session in un altro configuration file.
- SQL Server session
state - Utilizzare le session state basate su Sql Server, sempre
ricordando che aspnet_setreg.exe
fornisce supporto anche per stateConnectionString e
sqlConnectionString localizzati nell'elemento
sessionState.
- Password per le Forms
Authentication - Se la nostra applicazione valida le credenziali
degli utenti confrontandole con quelle presenti in un database, non teniamo in chiaro queste password. Usiamo almeno un
algoritmo di hashing per metterle in sicurezza.
I nostri
strumenti
Fortunatamente .NET dispone
diversi tools per nascondere i nostri "segreti". Questi
sono:
- Le classi .NET
Cryptography - Ricordiamo che il Framework contiene classi atte ad
effettuare operazioni di criptaggio e decriptaggio.
- Data Protection API
(DPAPI) - DPAPI è un set di api per win32 che cripta e decripta dati
utilizzando una chiave derivata dalla password dell'utente loggato. Quando si
usa DPAPI, non si ha bisogno di lavorare con set di chiavi. Questa operazione
è gestita direttamente dal sistema operativo.
- CAPICOM - Questo è un oggetto COM di
Microsoft, che mette a disposizione un accesso COM-BASED alle Crypto
API.
- Crpyto API - Sono
delle api Win32 di basso livello che effettuano operazioni di criptaggio e
decriptaggio.
Tip : Hai bucato l'applicazione ma non hai trovato niente.
E' sempre da considerare la possibilità di installare
le WebApplications in volumi logici separati dal sistema operativo. Questo
significa che il machine.config ed altri files, (es: i file UDL) che
possono contenere segreti, sono in altri volumi logici, che risultano essere
irragiungibili dai famigerati Path Bugs.
In questo caso
suggerisco di allegare sempre un file dal nome suck.lamer per i nostri possibili ospiti