La sicurezza in SQL Server - Microsoft Center

La sicurezza in SQL Server
Raffaele Rialdi
Microsoft C# MVP
MVP Profile
Blog
[email protected]
Vevy Europe SpA
http://mvp.support.microsoft.com
http://snipurl.com/f0cv
http://blogs/ugidotnet.org/raffaele
Agenda








Introduzione
Architettura e servizi di SQL Server 2000
L’architettura di sicurezza in SQL Server 2000
Login e Database User Account
Permission e Ruoli
Security Issues
Encryption
Best practices
Sicurezza applicativa

Controllare SEMPRE l’input dell’utente


Eseguire i servizi con account utente con solo i
privileggi strettamente necessari


Per contrastare attacchi di tipo escalation dei privilegi
Mai mantenere le password degli utenti in chiaro


Per evitare attacchi di tipo SQL Injection o Cross-scripting
Utilizzare tecniche di hashing
Operare con i database server utilizzando
connessioni a bassi privilegi
Considerazioni sulla protezione
in aziende di piccole e medie
dimensioni
Server con più ruoli
Risorse limitate
per l'implementazione di soluzioni
di protezione
Utilizzo di
sistemi non
aggiornati
Conseguenze legali
Minaccia interna
o accidentale
L'accesso fisico
impedisce molte
misure di protezione
Mancanza di
esperienza sulla
protezione
Principi della protezione dei
server
Riservatezza
Principi
della
protezione
Integrità



Disponibilità
La riservatezza assicura la protezione
dell'accesso alle informazioni
L'integrità assicura l'assenza di modifiche
nelle informazioni
La disponibilità assicura la possibilità di
accesso alle informazioni
Difesa a più livelli

L'utilizzo di un approccio a più livelli offre una serie di vantaggi, tra
cui:


Aumenta il rischio per un hacker di essere rilevato e scoperto
Riduce le probabilità di successo di un attacco
Dati
Applicazione
Elenchi di controllo dell'accesso,
crittografia
Protezione avanzata di applicazioni,
antivirus
Host
Rete interna
Perimetro
Sicurezza fisica
Criteri, procedure
e consapevolezza
Segmenti di rete, IPSec, NIDS
Firewall, VPN di quarentena
Personale di sicurezza, serrature e
dispositivi di monitoraggio
Formazione degli utenti
Il servizio SQL Server
SQL Server
Client
Results
Results
Query
Query
OLTP
OLAP
Applicazione Client
Relational Database
Management System
Componenti Client-Server
Applicazione
Applicazione Client
Client
Database
Database API
API
(OLE
DB,
ODBC,
(OLE DB, ODBC,
DB-Library)
DB-Library)
Client
Client Net-Library
Net-Library
Client
SQL
SQL Server
Server
Server
Server Net-Libraries
Net-Libraries
Open
Open Data
Data Services
Services
Relational
Relational
Engine
Engine
Server
Storage
Storage Engine
Engine
Processore
Processore
Memoria
Memoria
Database
Locale
Servizi di SQL Server
L’architettura di sicurezza

Sql Server implementa le due principali
funzionalità di sicurezza

Autenticazione


Autorizzazione


Che diritti hanno sui dati
Autenticazione integrata con Windows


Chi sono gli utenti che tentano di connettersi
Sql non “riconosce” gli utenti ma demanda al S.O.
questa operazione
Autenticazione standard

Architettura obsoleta, meno sicura
Windows Authentication
Connessione di rete/pre-login handshake
Connessione al computer che ospita SQL Server
Richiesta di autenticazione della login a SQL Server
La connessione viene stabilita con le credenziali della login
Richiesto switch nel contesto del db + autorizzazione
Viene stabilito un contesto di database
Esecuzione di comandi sugli oggetti
Verifica dei permessi per i vari comandi sugli oggetti del db
Security

Security all’installazione





Dir e Files, Registry, sa password
La modalità di security di default per
l’installazione di SQL Server 2000 è
“Autenticazione Integrata”
MS la consiglia come l’unica veramente sicura,
insieme all’installazione su NTFS
Solo gli account con cui girano i servizi e i
local administrator avranno qualche
permission sulle risorse utilizzate
Durante il setup è possibile impostare una
password per sa

Vivamente consigliato 
Login e User Account

Una login da il diritto di aprire una connessione tra
un’applicazione e il server



È contenuta nella sysxlogins del master
Si applica a tutti i db dell’istanza
Non ha permessi di accesso ai db


tranne per i SysAdmin
Un “database user account” da l’accesso alla login al
contesto di sicurezza del database


I permessi di accesso nel db sono dati ai database users, non
alle logins
Sono specifici per singolo database
Permission

SQL Server gestisce le permission di accesso
agli oggetti con tre comandi:



GRANT concede un permesso
DENY nega esplicitamente un permesso
REVOKE toglie una condizione precedente
Grant
-
Revoke
Revoke [deny]
+
DENY
Grant
Deny
Ruoli in SQL Server

Fixed server role


Fixed database role


Semplificano l’amministrazione del database
Custom database role


Semplificano l’amministrazione del server
Semplificano la gestione delle permission degli
utenti nel database
Application role

Permettono di dare le permission alle applicazioni
indipendentemente dagli utenti che le utilizzano
Ruoli in SQL Server 2000
Windows 2000
Group User
SQL Server
verifica la
Trusted Connection
SQL Server assegna le
Login agli User Accounts
e ai Roles
Database
User
Server Role
SQL
Server
Database Role
SQL Server
Login Account
SQL Server
verifica Login e
Password
Security

Security basata sui ruoli migliorata

Nuovo ruolo BulkAdmin


SecurityAdmin può cambiare le password


Eccetto per i membri del ruolo sysadmin
ServerAdmin può controllare tutti gli aspetti dei messaggi sul
server


Può eseguire statement BULK INSERT
Ora può utilizzare sp_addmessage, sp_dropmessage, e
sp_altermessage
Certificazione C2 ottenuta dal National Computer
Security Center (NCSC), una divisione della National
Security Agency (NSA)
http://www.microsoft.com/technet/archive/security/news/c2eval.mspx
Security issues

La password di sa rimane vuota quando durante il
setup si sceglie Windows Only


Meglio impostarla comunque
Il gruppo Builtin\Administrators

è SysAdmin di default





Meglio toglierlo e rimpiazzarlo con
[NT Authority\System] (per MsSearch)
e con gli account con i quali girano i servizi.
Quando è in cluster, anche il service account del cluster
Mai lasciare la password vuota per sa
Eseguire I servizi con account a bassa priorità limita I
danni in caso di attacco
Network Security

Le caratteristiche di sicurezza di SQL Server
non sostituiscono la classica network security



Es. da SQL Server non è possibile restringere
l’accesso dei client per IP
Firewall, IPSec, o altri network layer filter
permettono di agire su indirizzi e porte TCP
consentite
Se la macchina è esposta, spostare le porte di
default

TCP 1433, UDP 1434
Network Security

Encryption

Le netlibs possono criptare





Informazioni di login e i dati della sessioni
utilizzando SSL/TLS
La fase di handshake durante il logon viene sempre
criptata
È possibile criptare tutto il traffico
Le nuove funzioni interne chiamano le Crypto API di
Win2K
Occore un certificato sul server per utilizzare la
encryption SSL

Il client deve accettare il certificato
File Encryption


E’ possibile proteggere i file di SQL Server
Utilizzando Windows Encrypted File
System (EFS)


Prodotti di terze parti



http://www.netlib.com
C’è un overhead sul sistema


Windows 2000 o successivi
< 5% solitamente
Pienamente supportato da SQL Server
Previene la copia fisica dei file dati
Permission Standard



Ogni Database User Account appartiene
inevitabilmente al ruolo Public
Il ruolo Public per default può accedere ad una
serie di informazioni
In alcuni db di sistema è abilitato l’utente guest


Realmente necessario solo in master e in tempdb
Togliere l’accesso al gruppo public sugli
oggetti per i quali è assolutamente necessario

In Yukon sarà disabilitato di default, compreso
l’accesso ai metadati
Auditing

Auditing architecture


Basato sulle funzionalità di SQL Profiler
L’architettura del Profiler è cambiata



Vengono tracciate 19 tipologie di eventi


SQL Trace – motore di trace lato server
SQL Profiler – componente di UI
Logon/logoff, Gant Revoke Deny ,Modify logon
property, Password change event, Add/remove from
fixed server role , Server shutdown/pause/start ,
ecc.
È implementato attraverso un file di trace

Può essere gestito come buffer circolare
Extended Stored Procedure



Sono lo strumento per estendere le funzionalità
di SQL Server attraverso funzioni scritte in C e
C++ in DLL esterne
Normalmente vengono eseguite in-process con
il servizio SQL Server
Alcune di queste consentono all’intruso di
eseguire privilege escalation
XP_CMDSHELL





Di default solo i sysadmin possono eseguirla
Viene eseguita nel contesto di sicurezza del
servizio o con il proxy account se l’utente che
la lancia non è sysadmin
NON concedere l’accesso se non giustificato
Evitare di fare girare il servizio come
amministratore della macchina
MAI eseguire SQL Server su un domain
controller e permettere xp_cmdshell
Security Best Practices

SQL Server Agent



Di default, le SP per la creazione di job possono
essere chiamate da public
Il meccanismo di sicurezza dei job di per sé evita
che qualcuno possa eseguire operazioni di tipo
ActiveX script o Operative System Command ma…
E’ possibile sfruttare altre vulnerabilità per eseguire
codice nel contesto di sicurezza del servizio
Best Practices

Se è possibile evitare di fare girare il
servizio come amministratore o
LocalSystem




Anche se complica la gestione della sicurezza
Ma Enterprise Manager ci viene incontro…
Rimuovere BUILTIN\administrators dai
sysadmins
Se per forza devo andare in Mixed mode



Configurare password sensate
MAI usare password blank
Utilizzare SSL
Best Practices

Applicare sempre le ultime security patch
[Q316333]




Abilitare l’auditing e il tracing in modo
appropriato
Monitorare i log e gli alert relativi alla sicurezza
Non utilizzare il ruolo sysadmin
applicativamente e concedere solo se
necessario
Rimuovere xp_cmdshell, se non utilizzata
Client connection



E’ sempre il client che decide il tipo di security da
utilizzare per la connessione
Il server può solo rifiutarsi di accettare le credenziali
non valide
Utilizzare la sicurezza integrata con Windows


Non cablare nome utente e password nel codice



“….Integrated Security=SSPI; …”
Utilizzare i tanti metodi disponibili nelle varie piattaforme di
sviluppo
Non utilizzare la login sa
Scrivere codice security-aware
Data Encryption




Microsoft non la fornisce in SQL Server
Problemi di performance e di recuperabilità
dei dati
Problema aperto per le prossime versioni del
prodotto
Esistono soluzioni di terze parti


http://www.protegrity.com
Limita la possibilità di sottrazione fisica delle
informazioni
Sviluppatori, Sistemisti o DBA?




Cosa abbiamo capito?
Nel rendere sicura una piattaforma basata su
SQL Server occorre la partecipazione di tutte
queste figure
Se in una di queste aree qualcuno lascia degli
spazi aperti…
SQL Server può diventare una piattaforma
potente per altri tipi di attacchi all’interno della
rete
Sviluppatori, Sistemisti o DBA?

Sistemista







Organizzazione di utenti e gruppi di domino
Configurazione dei security account dei servizi
Implementazione di Kerberos
Configurazione di firewall, IPSec e IP Filtering
Configurazione encryption con SSL
File encryption
Configurazione di SQLXML (parte IIS)
Sviluppatori, Sistemisti o DBA?

DBA






Gestione utenti e ruoli nel DB server
Configurazione dei database user account e delle
loro permission
Configurazione dei ruoli nei database
Modifica delle impostazioni di default per Extended
Stored Procedure
Configurazione dell’Auditing
Configurazione di SQLXML (parte SQL)
Sviluppatori, Sistemisti o DBA?

Sviluppatore





Sviluppo di Stored Procedure che verificano sempre
i parametri in input
Sviluppo del codice client che utilizza correttamente
la security per le connessioni
Utilizzo di Trusted Connection dove possibile
Encryption di codice T-SQL per nascondere la
logica applicativa
Encryption dei dati nelle tabelle, solo se è
necessario
Link utili

[Q316333]
http://www.microsoft.com/technet/treeview/default.asp?url=/techn
et/security/bulletin/MS02-043.asp

[Q321911]
http://www.microsoft.com/technet/treeview/default.asp?url=/techn
et/security/bulletin/MS02-030.asp


http://www.sqlsecurity.com
http://www.nextgenss.com
Risorse

Academic
http://www.msdnaa.net
http://www.microsoft.com/italy/msdn/studenti

User Groups
http://www.ugiss.org
http://www.sqlpass.org
http://www.ugidotnet.org

Microsoft
http://www.microsoft.com/sql
http://www.microsoft.com/italy/sql
http://msdn.microsoft.com/sql
http://www.microsoft.com/TechNet/prodtechnol/sql
Risorse

Newsgroups

news://msnews.microsoft.com
microsoft.public.it.sql
microsoft.public.sqlserver.*

Non vi fanno uscire via NNTP ?
http://msdn.microsoft.com/newsgroups

Novità!
http://www.microsoft.com/italy/sql/support/newsgroup/
© 2003-2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Per sfatare qualche luogo
comune…

Windows non è sicuro!!

From January 2002 through November 2002, these were the
number of security advisories issued (fonte ISS – X Data):







Debian: 124
Mandrake: 86
Red Hat 7.2: 87
Sun Solaris: 68
Windows 2000 Server: 36
Windows XP Pro: 28
CERT advisories



SUN OS: 12
Red Hat Linux: 9
Microsoft : 4
Per sfatare qualche luogo
comune…

Windows non è affidabile!!

Windows Server 2003




System uptime > 99.999%
Operations & best practices
Windows Reliability Strategy
Case studies





NASDAQ Stock Market Inc
London Stock Exchange
Lockheed Martin
Pirelli Spa
Ecc.
Per sfatare qualche luogo
comune…

Windows non è scalabile!!

Bechmark TPC-C (www.tpc.org)

Windows Server 2003 Enterprise Edition 64-bit e SQL
Server 2000 Enterprise Edition 64-bit


786.646 tpmC
Benchmark SAP

Windows 2000 DataCenter Edition e SQL Server 2000
Enterprise Edition

26.000 utenti concorrenti
Appendice
© 2003-2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
SQL Injection

Un intruso può devastare il db ...
string strSql = "Select * from authors where
au_lname like '" + TextBox1.Text + "'";
SqlCommand cmd = new SqlCommand(strSql, Cnn);
SqlDataReader dr = cmd.ExecuteReader();
Select * from authors where au_lname like ' '
Prima query
;
drop authors
-- '
Seconda query
Scartato
SQL Injection
... usare i parameters!!! ...

I Parameters incrementano anche le performance:


non c'è conversione da string a tipo sul db
la query rimane compilata e preparata sul db server
string strSql = "Select * from authors where au_lname
like @au_lname";
SqlCommand cmd = new SqlCommand(strSql, Cnn);
cmd.Parameters.Add("@au_lname", SqlDbType.VarChar,40);
SqlDataReader dr = cmd.ExecuteReader();
exec sp_executesql N'Select * from authors
where au_lname like @au_lname',
N'@au_lname varchar(40)', @au_lname = ' ' ' ; drop authors - - '
apice raddoppiato da ADO.NET
Gli apici non sono l'unico problema:
select * from titles where royalty = 0 ; drop authors
Autenticazione in SQL
Server 2000
Verifica la che
esista il SID nella
tabella sysxlogins;
Windows 2000
ha già verificato
la password al logon
Windows 2000
Group or User
sysxlogins
Windows 2000
Se non uso SSL o
MultiProtocol encryption
tutto passa in chiaro
SQL Server
Verifica che login
e pwd esistano
In sysxlogins
SQL Server
Login Account
sysxlogins
Autorizzazione in SQL
Server 2000
Northwind..sysprotects
Qui si trovano
i permessi sugli
oggetti
id
uid
action
protecttype
1977058079
1977058079
1977058079
1977058079
0
0
0
7
193
195
196
193
205
205
205
205
Qui vengono mappate
le login
nel DB
Northwind..sysusers
uid
name
0
1
3
7
public
dbo
INFORMATION_SCHEMA
payroll
Kerberos e Delegation

Kerberos è un protocollo di autenticazione
supportato in Windows Server 2003


Necessario per supportare la delegation


Molto più sicuro di NTLM
La capacità di far fare alle credenziali di un client
più hop di rete
Windows 2003 può limitare l'uso di delegation
applicazione per applicazione
Client
EUROPE \
raffaele
Server1
Server2
A Server2 arriva MIESTAFF\raffaele
Kerberos e SQL Server

Supporto al modello di autenticazione di Win2K,
Kerberos:






Durante la fase di logon SQL esegue una richiesta di
validazione tramite SSPI (security integrata)
Per tutte le connessioni con linked server vengono utilizzate le
vere credenziali del client
Deve essere un dominio nativo Win2000 con AD
Gli account devono essere settati per supportare la delegation
Il server deve essere settato in AD per supportare la
delegation
Occorre registrare in AD il Service Principal Name per l’utente
con il quale gira SQL Server

Utilizzare l’utility setspn nel ResourceKit di W2K
Network Security

Occorre configurare il certificato utilizzando
Internet Explorer




O l’applet di gestione dei certificati
Attenzione al nome DNS fully-qualified durante
la richiesta del certificato
Per criptare le comunicazioni client/server
basta settare la checkbox nella client network
utility e nella server network utility
Se il certificato non è trusted dal client la
connessione fallisce
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Encryption
not supported on SQL Server
Auditing

È possibile attivare l’auditing attraverso una
stored procedure
create proc p_audittrace with encryption as
Exec sp_trace_create @traceid output, 2,
n‘d:\temp\mytrace.trc’, 500

Aggiungere gli eventi che interessa catturare
sp_trace_setevent @traceid, @eventid,@columnid, @on

Ed eventualmente farle partire in autostart
insieme a SQL Server
Exec sp_procoption ‘p_audittrace’, ‘startup’, ‘on’
Extended Stored Procedure

Queste ad esempio consentono di eseguire
query nel contesto di sicurezza del servizio


xp_execresultset, xp_printstatements,
xp_displayparamstmt
Eventualmente, rimuovere quelle che non
servono


Il rischio è di perdere alcune funzionalità ad
esempio nei tool di amministrazione
Testare prima su una macchina non di produzione
Security Best Practices
-- Chiunque può creare il job
EXEC sp_add_job @job_name = 'GetSystemOnSQL', @enabled =
1, @description = ‘', @delete_level = 1
-- Chiamo un extended SP che ha un buco di sicurezza
EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
@step_name = 'Exec my sql', @subsystem = 'TSQL',
@command = 'exec master..xp_execresultset N''select
''''exec master..xp_cmdshell "dir > c:\agent-jobresults.txt"'''''',N''Master'''
EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',
@server_name = 'SERVER_NAME'
-- Eseguo il job e il gioco è fatto
EXEC sp_start_job @job_name = 'GetSystemOnSQL'
Security Best Practices

Replication


Su un distributor è possibile eseguire privilege
escalation attraverso la SP sp_MScopyscript che
di default è accessibile al ruolo public
Internamente richiama xp_cmdshell per eseguire la
copia di un file di script sui subscribers, ma anche
di eseguire comandi di sistema operativo


Es. creare un utente e farlo diventare Administrator
Configurare il servizio con un account che non
abbia privilegi amministrativi e sulla rete
(può essere utile anche per i backup schedulati)
Security Best Practices
-- Il codice interno alla SP
select @cmd = N'copy "' + @scriptfile + N'" "'
+ @directory + N'"'
exec @retcode = master..xp_cmdshell @cmd,
NO_OUTPUT
-- Utilizzo non proprio ‘legale’ della SP
use master
declare @cmd nvarchar(4000)
exec sp_MScopyscriptfile N'c:\autoexec.bat"
c:\cp.txt&echo hello > c:\ccc.bbb & echo
"hello',@cmd OUTPUT print @cmd
Eseguire SQL dinamico

Il codice SQL eseguito internamente ad una stored
proc viene eseguito nel contesto di sicurezza
dell’esecutore e non dell’owner


Protegge da tentativi di eseguire operazioni non permesse
Es.
Create proc myproc @p1 nvarchar(500) as
Exec (@p1) return 0
Exec myproc “sp_addlogin ‘raffaele’ exec
sp_addsrvrolemember ‘raffaele’,’sysadmin’”
e io sarei sysadmin… 
Meta Data Obfuscation

Capacità di poter nascondere cifrandole:




Non è possibile utilizzarla per altri scopi


Stored procedure
Trigger
View
Es. dati
Previene la copia delle logiche applicative
Sviluppo e security

SQL Injection consente all’instruso di






Fare seri danni ai dati
Sfruttare altre vulnerabilità per ottenere privilegi più
elevati
Creare nuovi utenti nel server
Ottenere l’accesso a dati protetti
Modificare o cancellare oggetti nel database
Se l’account con il quale viene eseguito il servizio
SQL Server ha privilegi amministrativi sul server

L’intruso li può acquisire ed utilizzare il server come base
per altri attacchi
Security Best Practices

SQLXML [Q321911]

Sono possibili due tipi di attacchi




Buffer overrun sulla estensione ISAPI
Script injection attraverso un tag XML che consente
l’esecuzione di codice durante una trasformazione XSLT
Disabilitare la possibilità di eseguire query dirette
via HTTP (di default è così)
Utilizzare piuttosto la tecnica dei template XML per
eseguire l’accesso ai dati