Link copiato negli appunti
Una implementazione ideale di SQL Server in un sistema operativo Windows
NT/2000 contempla l'applicazione delle seguenti misure di sicurezza:
- restringere l'accesso fisico al sistema che ospita il processo SQL Server al
fine di eliminare la possibilità di far partire il server mediante l'uso di un
floppy disk guadagnando in tal modo l'accesso indiscriminato al file system; - installare sul sistema un antivirus e mantenerne costantemente aggiornati i
file delle definizioni; - utilizzare sempre il file system NTFS poichè quest'ultimo possiede
caratteristiche di sicurezza e di controllo degli accessi molto avanzate; - applicare pemessi NTFS rigorosi a tutti i file dati e di log nonchè ai file
eseguibili ed alle DLL di SQL Server; in particolare verificare che il controllo
completo di queste risorse sia garantito soltanto all'account prescelto per far
partire il servizio SQL Server ed eventualmente agli utenti amministratori (di
regola queste impostazioni vengono effettuate in automatico dalla procedura di
installazione del software); - proteggere adeguatamente la porta TCP 1433 sulla quale SQL Server rimane in
ascolto per default da eventuali attacchi esterni ed anche da semplici tentativi
di scansione; - assicurarsi che tutte le condivisioni di sistema siano read-only oppure
consentirne l'accesso in scrittura in modo molto restrittivo; - abilitare l'auditing dei login non soltanto a livello di sistema operativo
ma anche di SQL Server ed esaminare periodicamente il log degli eventi in modo
da individuare per tempo gli eventuali tentativi di intrusione; - rinominare l'account di amministratore sulla macchina che ospita SQL Server
ed utilizzare comunque password robuste non basate su dizionario per scoraggiare
i tentativi di attacco a forza bruta tendenti ad indovinare le password degli
utenti amministrativi; - mantenersi sempre aggiornati con le informazioni riguardanti i service pack
e le patch di sicurezza rilasciate da Microsoft (http://www.microsoft.com/security); - disabilitare l'account guest a livello di sistema operativo ed eliminarlo da
tutti i database di produzione mediante l'Enterprise Manager oppure con la
procedura registrata sp_dropuser; - proteggere adeguatamente le chiavi del registro di sistema
HKEY_LOCAL_MACHINESOFTWAREMICROSOFTMSSQLSERVER nel caso di
una istanza di default oppure
HKEY_LOCAL_MACHINESOFTWAREMICROSOFTMICROSOFT SQL
SERVERNOME_ISTANZA nel caso di una istanza personalizzata. In
particolare dai permessi concessi su queste chiavi deve essere rimosso
completamente il gruppo Everyone mentre il controllo completo
deve essere attribuito soltanto all'account prescelto per far partire il
servizio di SQL Server ed eventualmente agli utenti ammistratori (anche di
queste impostazioni si preoccupa la procedura di installazione del software); - utilizzare sempre l'autenticazione Windows al posto di quella mista poichè
la prima è di per sè più sicura in quanto sfrutta le capacità del sottostante
strato costituito dal sistema operativo per l'autenticazione delle varie
richieste di connessione. Nel caso in cui sia invece necessario fare uso
dell'autenticazione mista è fortemente consigliato impostare una password
robusta per l'account di login sa. Peraltro questa impostazione
dovrebbe essere eseguita anche nel caso di autenticazione Windows dal momento
che è sufficiente una piccola modifica a livello di registro di sistema per
cambiare la modalità di sicurezza del processo di autenticazione e nel caso in
cui l'account sa non possieda una password questo comporterebbe per chiunque una
estrema facilità di accesso a SQL Server; - semplificare la gestione delle autorizzazioni degli utenti traendo vantaggio
dall'uso dei ruoli di database e fixed server oppure creandone di nuovi; - scegliere con particolare cura gli utenti ai quali attribuire il ruolo di
sysadmin poichè quest'ultimo comporta dei poteri pressocchè
illimitati. A tale proposito la Microsoft raccomanda di garantire a tutti gli
amministratori di database l'accesso a SQL Server non in modo diretto ma per
mezzo della loro appartenenza ad un gruppo del sistema operativo conferendo
successivamente a tale gruppo il ruolo di sysadmin; - impostare il servizio di SQL Server in modo che esso venga eseguito nel
contesto di un account avente il minimo dei privilegi necessari a garantire il
corretto funzionamento dei processi; - in ambienti Web adottare una configurazione di tipo three-thier con il
database residente su un sistema diverso da quello che ospita l'application
server; - nascondere il servizio SQL Server dalle eventuali richieste di enumerazione
utilizzando l'opzione /HIDDEN:YES del comando NET CONFIG SERVER del sistema
operativo; - negare il permesso di esecuzione di alcune procedure registrate di sistema
(ad es. xp_cmdshell) nonchè delle procedure registrate che
implementano l'automazione OLE a tutti gli utenti/ruoli per i quali esso non sia
assolutamente necessario; - restringere l'accesso diretto degli utenti alle tabelle facendo in modo che
i dati vengano letti e scritti mediante l'utilizzo di viste e procedure
registrate. Inoltre evitare, ove non sia strettamente indispensabile,
l'esecuzione di istruzioni sql dinamiche poichè ciò richiede inevitabilmente
l'accesso diretto alle tabelle ed introduce dei potenziali rischi; - impedire alle applicazioni di accettare ed eseguire incondizionatamente
stringhe di comandi costruite ad hoc poichè un utente con un minimo di
conoscenza potrebbe in tal modo guadagnare un accesso illecito a dati sensibili
(questa tecnica è nota come SQL Injection); - proteggere ove necessario il codice delle procedure registrate, dei
triggers, delle viste e delle funzioni definite dall'utente adottando nelle
apposite istruzioni sql la clausola WITH ENCRYPTION; - nel caso di database contenenti informazioni sensibili potrebbe essere
opportuno criptare i dati a livello di tabelle facendo uso di librerie di terze
parti oppure sviluppandone di proprie tramite le CryptoAPI messe a disposizione
dal sistema operativo; - fare uso delle caratteristiche di criptazione del filesystem EFS (Encrypted
File System) fornite dal sistema operativo Windows 2000 per proteggere le
cartelle dove risiedono i file di dati e di log della istanza di SQL Server; - eseguire periodicamente le opportune procedure di backup dei dati sfruttando
la possibilità offerta da SQL Server di fornire una password per il backup ed
assicurando le copie su supporti fisicamente sicuri;