Raffaele RialdiRaffaele RialdiMicrosoft C# MVPMicrosoft C# MVP http://mvp.support.microsoft.comhttp://mvp.support.microsoft.comMVP ProfileMVP Profile http://snipurl.com/f0cvhttp://snipurl.com/f0cvBlogBlog http://blogs/ugidotnet.org/raffaelehttp://blogs/ugidotnet.org/raffaele
[email protected]@vevy.comVevy Europe SpAVevy Europe SpA
La sicurezza in SQL Server La sicurezza in SQL Server
AgendaAgenda
IntroduzioneIntroduzione Architettura e servizi di SQL Server 2000Architettura e servizi di SQL Server 2000 L’architettura di sicurezza in SQL Server 2000L’architettura di sicurezza in SQL Server 2000 Login e Database User AccountLogin e Database User Account Permission e RuoliPermission e Ruoli Security IssuesSecurity Issues EncryptionEncryption Best practicesBest practices
Sicurezza applicativaSicurezza applicativa
Controllare SEMPRE l’input dell’utenteControllare SEMPRE l’input dell’utente Per evitare attacchi di tipo SQL Injection o Cross-scriptingPer evitare attacchi di tipo SQL Injection o Cross-scripting
Eseguire i servizi con account utente con solo i Eseguire i servizi con account utente con solo i privileggi strettamente necessariprivileggi strettamente necessari Per contrastare attacchi di tipo escalation dei privilegiPer contrastare attacchi di tipo escalation dei privilegi
Mai mantenere le password degli utenti in chiaroMai mantenere le password degli utenti in chiaro Utilizzare tecniche di hashingUtilizzare tecniche di hashing
Operare con i database server utilizzando Operare con i database server utilizzando connessioni a bassi privilegiconnessioni a bassi privilegi
ConsiderazioniConsiderazioni sullasulla protezioneprotezione inin aziendeaziende didi piccolepiccole ee mediemedie dimensionidimensioni
Server con più ruoli
Minaccia interna o accidentale
Risorse limitate per l'implementa-zione di soluzioni
di protezione
Mancanza di esperienza sulla
protezione
Utilizzo di sistemi non aggiornati
Conseguenze legaliL'accesso fisico impedisce molte
misure di protezione
PrincipiPrincipi delladella protezioneprotezione deidei serverserver
LaLa riservatezzariservatezza assicuraassicura lala protezioneprotezione dell'accessodell'accesso allealle informazioniinformazioni
L'integritàL'integrità assicuraassicura l'assenzal'assenza didi modifichemodifiche nellenelle informazioniinformazioni
LaLa disponibilitàdisponibilità assicuraassicura lala possibilitàpossibilità didi accessoaccesso allealle informazioniinformazioni
Riservatezza
Integrità Disponibilità
Principi della
protezione
DifesaDifesa aa piùpiù livellilivelli L'utilizzoL'utilizzo didi unun approccioapproccio aa piùpiù livellilivelli offreoffre unauna serieserie didi vantaggi,vantaggi, tratra
cui:cui: AumentaAumenta ilil rischiorischio perper unun hackerhacker didi essereessere rilevatorilevato ee scopertoscoperto RiduceRiduce lele probabilitàprobabilità didi successosuccesso didi unun attaccoattacco
Criteri, procedure e consapevolezzaCriteri, procedure e consapevolezza
Firewall,Firewall, VPN di quarentenaVPN di quarentena
PersonalePersonale didi sicurezza,sicurezza, serrature serrature ee dispositividispositivi didi monitoraggiomonitoraggio
SegmentiSegmenti didi rete,rete, IPSec,IPSec, NIDSNIDS
ProtezioneProtezione avanzataavanzata didi applicazioni,applicazioni, antivirusantivirus
ElenchiElenchi didi controllocontrollo dell'accesso,dell'accesso, crittografiacrittografia
FormazioneFormazione deglidegli utentiutenti
Sicurezza fisicaSicurezza fisica
PerimetroPerimetro
Rete internaRete interna
HostHost
ApplicazioneApplicazione
DatiDati
Il servizio SQL ServerIl servizio SQL Server
Relational DatabaseManagement System
SQL ServerClient
ResultsResultsResults
Applicazione Client
OLAPOLAP
OLTPOLTPQueryQueryQuery
Componenti Client-ServerComponenti Client-Server
Applicazione ClientApplicazione Client
Client Net-LibraryClient Net-Library
Client
SQL ServerSQL Server
Relational Engine
Relational Engine
Storage EngineStorage Engine
Server
DatabaseLocale
Database API(OLE DB, ODBC,
DB-Library)
Database API(OLE DB, ODBC,
DB-Library)
ProcessoreProcessore
MemoriaMemoria
Open Data ServicesOpen Data Services
Server Net-LibrariesServer Net-Libraries
Servizi di SQL ServerServizi di SQL Server
Microsoft DistributedTransaction Coordinator
ServizioMSSQLServer
ServizioSQLServerAgent
Microsoft Search
Server
Gestione dati Elaborazione
transazioni e Query Integrità dei dati
Lavori Allarmi Operatori
Cataloghi Full-Text Indici Full-Text
Gestione transazionidistribuite
L’architettura di sicurezzaL’architettura di sicurezza Sql Server implementa le due principali Sql Server implementa le due principali
funzionalità di sicurezzafunzionalità di sicurezza AutenticazioneAutenticazione
Chi sono gli utenti che tentano di connettersiChi sono gli utenti che tentano di connettersi
AutorizzazioneAutorizzazione Che diritti hanno sui datiChe diritti hanno sui dati
Autenticazione integrata con WindowsAutenticazione integrata con Windows Sql non “riconosce” gli utenti ma demanda al S.O. Sql non “riconosce” gli utenti ma demanda al S.O.
questa operazionequesta operazione
Autenticazione standardAutenticazione standard Architettura obsoleta, meno sicuraArchitettura obsoleta, meno sicura
Windows AuthenticationWindows Authentication
La connessione viene stabilita con le credenziali della loginLa connessione viene stabilita con le credenziali della login
Connessione al computer che ospita SQL ServerConnessione al computer che ospita SQL Server
Verifica dei permessi per i vari comandi sugli oggetti del dbVerifica dei permessi per i vari comandi sugli oggetti del db
Connessione di rete/pre-login handshake
Richiesta di autenticazione della login a SQL Server
Richiesto switch nel contesto del db + autorizzazione
Esecuzione di comandi sugli oggetti
Viene stabilito un contesto di databaseViene stabilito un contesto di database
SecuritySecurity Security all’installazioneSecurity all’installazione
Dir e Files, Registry, sa passwordDir e Files, Registry, sa password
La modalità di security di default per La modalità di security di default per l’installazione di l’installazione di SQL Server 2000 SQL Server 2000 è è “Autenticazione Integrata”“Autenticazione Integrata”
MS la consiglia come l’unica veramente sicura, MS la consiglia come l’unica veramente sicura, insieme all’installazione su NTFSinsieme all’installazione su NTFS
Solo gli account con cui girano i servizi e i Solo gli account con cui girano i servizi e i local administrator avranno qualche local administrator avranno qualche permission sulle risorse utilizzatepermission sulle risorse utilizzate
Durante il setup è possibile impostare una Durante il setup è possibile impostare una password per password per sasa Vivamente consigliato Vivamente consigliato
Login e User AccountLogin e User Account
Una login da il diritto di aprire una connessione tra Una login da il diritto di aprire una connessione tra un’applicazione e il serverun’applicazione e il server È contenuta nella sysxlogins del masterÈ contenuta nella sysxlogins del master Si applica a tutti i db dell’istanzaSi applica a tutti i db dell’istanza Non ha permessi di accesso ai dbNon ha permessi di accesso ai db
tranne per i SysAdmintranne per i SysAdmin
Un “database user account” da l’accesso alla login al Un “database user account” da l’accesso alla login al contesto di sicurezza del databasecontesto di sicurezza del database I permessi di accesso nel db sono dati ai database users, non I permessi di accesso nel db sono dati ai database users, non
alle loginsalle logins Sono specifici per singolo databaseSono specifici per singolo database
PermissionPermission
SQL Server gestisce le permission di accesso SQL Server gestisce le permission di accesso agli oggetti con tre comandi:agli oggetti con tre comandi: GRANT concede un permessoGRANT concede un permesso DENY nega esplicitamente un permessoDENY nega esplicitamente un permesso REVOKE toglie una condizione precedenteREVOKE toglie una condizione precedente
GrantGrant
Revoke [deny]Revoke [deny]
DenyDeny
DENYDENY
RevokeRevoke
GrantGrant
- +
Ruoli in SQL ServerRuoli in SQL Server Fixed server roleFixed server role
Semplificano l’amministrazione del serverSemplificano l’amministrazione del server
Fixed database roleFixed database role Semplificano l’amministrazione del databaseSemplificano l’amministrazione del database
Custom database roleCustom database role Semplificano la gestione delle permission degli Semplificano la gestione delle permission degli
utenti nel database utenti nel database
Application roleApplication role Permettono di dare le permission alle applicazioni Permettono di dare le permission alle applicazioni
indipendentemente dagli utenti che le utilizzanoindipendentemente dagli utenti che le utilizzano
Ruoli in SQL Server 2000Ruoli in SQL Server 2000
SQL Server assegna le Login agli User Accounts e ai Roles
DatabaseUser
Database Role
Windows 2000Group User
SQL ServerLogin Account
SQL Server verifica la Trusted Connection
SQL Serververifica Login e Password
SQL Server
Server Role
SecuritySecurity Security basata sui ruoli migliorataSecurity basata sui ruoli migliorata
Nuovo ruolo Nuovo ruolo BulkAdminBulkAdmin Può eseguire statement Può eseguire statement BULK INSERTBULK INSERT
SecurityAdmin SecurityAdmin può cambiare le passwordpuò cambiare le password Eccetto per i membri del ruolo Eccetto per i membri del ruolo sysadminsysadmin
ServerAdmin ServerAdmin può controllare tutti gli aspetti dei messaggi sul può controllare tutti gli aspetti dei messaggi sul serverserver Ora può utilizzare Ora può utilizzare sp_addmessage, sp_dropmessage, sp_addmessage, sp_dropmessage, ee
sp_altermessagesp_altermessage
Certificazione C2 ottenuta dal Certificazione C2 ottenuta dal National Computer National Computer Security Center (NCSC), una divisione della National Security Center (NCSC), una divisione della National Security Agency (NSA)Security Agency (NSA) http://www.microsoft.com/technet/archive/security/news/c2eval.mspxhttp://www.microsoft.com/technet/archive/security/news/c2eval.mspx
Security issuesSecurity issues
La password di sa rimane vuota quando durante il La password di sa rimane vuota quando durante il setup si sceglie Windows Onlysetup si sceglie Windows Only Meglio impostarla comunqueMeglio impostarla comunque
Il gruppo Builtin\Administrators Il gruppo Builtin\Administrators è SysAdmin di defaultè SysAdmin di default
Meglio toglierlo e rimpiazzarlo con Meglio toglierlo e rimpiazzarlo con [NT Authority\System] (per MsSearch) [NT Authority\System] (per MsSearch)
e con gli account con i quali girano i servizi.e con gli account con i quali girano i servizi. Quando è in cluster, anche il service account del clusterQuando è in cluster, anche il service account del cluster
Mai lasciare la password vuota per saMai lasciare la password vuota per sa Eseguire I servizi con account a bassa priorità limita I Eseguire I servizi con account a bassa priorità limita I
danni in caso di attacco danni in caso di attacco
Network SecurityNetwork Security Le caratteristiche di sicurezza di SQL Server Le caratteristiche di sicurezza di SQL Server
non sostituiscono la classica network securitynon sostituiscono la classica network security Es. da SQL Server non è possibile restringere Es. da SQL Server non è possibile restringere
l’accesso dei client per IPl’accesso dei client per IP
Firewall, IPSec, o altri network layer filter Firewall, IPSec, o altri network layer filter permettono di agire su indirizzi e porte TCP permettono di agire su indirizzi e porte TCP consentiteconsentite
Se la macchina è esposta, spostare le porte di Se la macchina è esposta, spostare le porte di defaultdefault TCP 1433, UDP 1434TCP 1433, UDP 1434
Network SecurityNetwork Security EncryptionEncryption
Le netlibs possono criptareLe netlibs possono criptare Informazioni di login e i dati della sessioniInformazioni di login e i dati della sessioni
utilizzando SSL/TLSutilizzando SSL/TLS La fase di handshake durante il logon viene sempre La fase di handshake durante il logon viene sempre
criptatacriptata È possibile criptare tutto il trafficoÈ possibile criptare tutto il traffico Le nuove funzioni interne chiamano le Crypto API di Le nuove funzioni interne chiamano le Crypto API di
Win2KWin2K Occore un certificato sul server per utilizzare la Occore un certificato sul server per utilizzare la
encryption SSLencryption SSL Il client deve accettare il certificatoIl client deve accettare il certificato
File EncryptionFile Encryption
E’ possibile proteggere i file di SQL ServerE’ possibile proteggere i file di SQL Server Utilizzando Windows Encrypted File Utilizzando Windows Encrypted File
System (EFS)System (EFS) Windows 2000 o successiviWindows 2000 o successivi
Prodotti di terze partiProdotti di terze parti http://www.netlib.comhttp://www.netlib.com
C’è un overhead sul sistemaC’è un overhead sul sistema < 5% solitamente< 5% solitamente
Pienamente supportato da SQL ServerPienamente supportato da SQL Server Previene la copia fisica dei file datiPreviene la copia fisica dei file dati
Permission StandardPermission Standard Ogni Database User Account appartiene Ogni Database User Account appartiene
inevitabilmente al ruolo Publicinevitabilmente al ruolo Public Il ruolo Public per default può accedere ad una Il ruolo Public per default può accedere ad una
serie di informazioniserie di informazioni In alcuni db di sistema è abilitato l’utente In alcuni db di sistema è abilitato l’utente guestguest
Realmente necessario solo in Realmente necessario solo in mastermaster e in e in tempdbtempdb
Togliere l’accesso al gruppo public sugli Togliere l’accesso al gruppo public sugli oggetti per i quali è assolutamente necessariooggetti per i quali è assolutamente necessario In Yukon sarà disabilitato di default, compreso In Yukon sarà disabilitato di default, compreso
l’accesso ai metadatil’accesso ai metadati
AuditingAuditing Auditing architectureAuditing architecture
Basato sulle funzionalità di SQL ProfilerBasato sulle funzionalità di SQL Profiler L’architettura del Profiler è cambiataL’architettura del Profiler è cambiata
SQL Trace – motore di trace lato serverSQL Trace – motore di trace lato server SQL Profiler – componente di UISQL Profiler – componente di UI
Vengono tracciate 19 tipologie di eventiVengono tracciate 19 tipologie di eventi Logon/logoffLogon/logoff, , GGant ant RRevoke evoke DDeny ,eny ,Modify logon Modify logon
propertyproperty, , Password change eventPassword change event, , Add/remove from Add/remove from fixed server role fixed server role , , Server shutdown/pause/startServer shutdown/pause/start , , ecc.ecc.
È implementato attraverso un file di trace È implementato attraverso un file di trace Può essere gestito come buffer circolarePuò essere gestito come buffer circolare
Extended Stored ProcedureExtended Stored Procedure Sono lo strumento per estendere le funzionalità Sono lo strumento per estendere le funzionalità
di SQL Server attraverso funzioni scritte in C e di SQL Server attraverso funzioni scritte in C e C++ in DLL esterneC++ in DLL esterne
Normalmente vengono eseguite in-process con Normalmente vengono eseguite in-process con il servizio SQL Serveril servizio SQL Server
Alcune di queste consentono all’intruso di Alcune di queste consentono all’intruso di eseguire privilege escalationeseguire privilege escalation
XP_CMDSHELL XP_CMDSHELL
Di default solo i sysadmin possono eseguirlaDi default solo i sysadmin possono eseguirla Viene eseguita nel contesto di sicurezza del Viene eseguita nel contesto di sicurezza del
servizio o con il proxy account se l’utente che servizio o con il proxy account se l’utente che la lancia non è sysadminla lancia non è sysadmin
NON concedere l’accesso se non giustificatoNON concedere l’accesso se non giustificato Evitare di fare girare il servizio come Evitare di fare girare il servizio come
amministratore della macchinaamministratore della macchina MAI eseguire SQL Server su un domain MAI eseguire SQL Server su un domain
controller e permettere xp_cmdshellcontroller e permettere xp_cmdshell
Security Best PracticesSecurity Best Practices SQL Server AgentSQL Server Agent
Di default, le SP per la creazione di job possono Di default, le SP per la creazione di job possono essere chiamate da essere chiamate da publicpublic
Il meccanismo di sicurezza dei job di per sé evita Il meccanismo di sicurezza dei job di per sé evita che qualcuno possa eseguire operazioni di tipo che qualcuno possa eseguire operazioni di tipo ActiveX script o Operative System Command ma…ActiveX script o Operative System Command ma…
E’ possibile sfruttare altre vulnerabilità per eseguire E’ possibile sfruttare altre vulnerabilità per eseguire codice nel contesto di sicurezza del serviziocodice nel contesto di sicurezza del servizio
Best PracticesBest Practices
Se è possibile evitare di fare girare il Se è possibile evitare di fare girare il servizio come amministratore o servizio come amministratore o LocalSystemLocalSystem Anche se complica la gestione della sicurezzaAnche se complica la gestione della sicurezza Ma Enterprise Manager ci viene incontro…Ma Enterprise Manager ci viene incontro…
Rimuovere BUILTIN\administrators dai Rimuovere BUILTIN\administrators dai sysadminssysadmins
Se per forza devo andare in Mixed modeSe per forza devo andare in Mixed mode Configurare password sensateConfigurare password sensate MAI usare password blankMAI usare password blank Utilizzare SSLUtilizzare SSL
Best PracticesBest Practices Applicare sempre le ultime security patch Applicare sempre le ultime security patch
[Q316333][Q316333]
Abilitare l’auditing e il tracing in modo Abilitare l’auditing e il tracing in modo appropriatoappropriato
Monitorare i log e gli alert relativi alla sicurezzaMonitorare i log e gli alert relativi alla sicurezza Non utilizzare il ruolo sysadmin Non utilizzare il ruolo sysadmin
applicativamente e concedere solo se applicativamente e concedere solo se necessarionecessario
Rimuovere Rimuovere xp_cmdshellxp_cmdshell, se non utilizzata, se non utilizzata
Client connectionClient connection E’ sempre il client che decide il tipo di security da E’ sempre il client che decide il tipo di security da
utilizzare per la connessioneutilizzare per la connessione Il server può solo rifiutarsi di accettare le credenziali Il server può solo rifiutarsi di accettare le credenziali
non validenon valide Utilizzare la sicurezza integrata con WindowsUtilizzare la sicurezza integrata con Windows
“…“….Integrated Security=SSPI; …”.Integrated Security=SSPI; …”
Non cablare nome utente e password nel codiceNon cablare nome utente e password nel codice Utilizzare i tanti metodi disponibili nelle varie piattaforme di Utilizzare i tanti metodi disponibili nelle varie piattaforme di
svilupposviluppo
Non utilizzare la login Non utilizzare la login sasa Scrivere codice security-awareScrivere codice security-aware
Data EncryptionData Encryption
Microsoft non la fornisce in SQL ServerMicrosoft non la fornisce in SQL Server Problemi di performance e di recuperabilità Problemi di performance e di recuperabilità
dei datidei dati Problema aperto per le prossime versioni del Problema aperto per le prossime versioni del
prodottoprodotto Esistono soluzioni di terze partiEsistono soluzioni di terze parti
http://www.protegrity.comhttp://www.protegrity.com
Limita la possibilità di sottrazione fisica delle Limita la possibilità di sottrazione fisica delle informazioniinformazioni
Sviluppatori, Sistemisti o DBA?Sviluppatori, Sistemisti o DBA? Cosa abbiamo capito?Cosa abbiamo capito? Nel rendere sicura una piattaforma basata su Nel rendere sicura una piattaforma basata su
SQL Server occorre la partecipazione di tutte SQL Server occorre la partecipazione di tutte queste figurequeste figure
Se in una di queste aree qualcuno lascia degli Se in una di queste aree qualcuno lascia degli spazi aperti…spazi aperti…
SQL Server può diventare una piattaforma SQL Server può diventare una piattaforma potente per altri tipi di attacchi all’interno della potente per altri tipi di attacchi all’interno della reterete
Sviluppatori, Sistemisti o DBA?Sviluppatori, Sistemisti o DBA? SistemistaSistemista
Organizzazione di utenti e gruppi di dominoOrganizzazione di utenti e gruppi di domino Configurazione dei security account dei serviziConfigurazione dei security account dei servizi Implementazione di KerberosImplementazione di Kerberos Configurazione di firewall, IPSec e IP FilteringConfigurazione di firewall, IPSec e IP Filtering Configurazione encryption con SSLConfigurazione encryption con SSL File encryptionFile encryption Configurazione di SQLXML (parte IIS)Configurazione di SQLXML (parte IIS)
Sviluppatori, Sistemisti o DBA?Sviluppatori, Sistemisti o DBA? DBADBA
Gestione utenti e ruoli nel DB serverGestione utenti e ruoli nel DB server Configurazione dei database user account e delle Configurazione dei database user account e delle
loro permission loro permission Configurazione dei ruoli nei databaseConfigurazione dei ruoli nei database Modifica delle impostazioni di default per Extended Modifica delle impostazioni di default per Extended
Stored ProcedureStored Procedure Configurazione dell’AuditingConfigurazione dell’Auditing Configurazione di SQLXML (parte SQL)Configurazione di SQLXML (parte SQL)
Sviluppatori, Sistemisti o DBA?Sviluppatori, Sistemisti o DBA? SviluppatoreSviluppatore
Sviluppo di Stored Procedure che verificano sempre Sviluppo di Stored Procedure che verificano sempre i parametri in inputi parametri in input
Sviluppo del codice client che utilizza correttamente Sviluppo del codice client che utilizza correttamente la security per le connessionila security per le connessioni
Utilizzo di Trusted Connection dove possibileUtilizzo di Trusted Connection dove possibile Encryption di codice T-SQL per nascondere la Encryption di codice T-SQL per nascondere la
logica applicativalogica applicativa Encryption dei dati nelle tabelle, solo se è Encryption dei dati nelle tabelle, solo se è
necessarionecessario
Link utiliLink utili [Q316333][Q316333]
http://www.microsoft.com/technet/treeview/default.asp?url=/technhttp://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/MS02-043.aspet/security/bulletin/MS02-043.asp
[Q321911][Q321911] http://www.microsoft.com/technet/treeview/default.asp?url=/technhttp://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/MS02-030.aspet/security/bulletin/MS02-030.asp
http://www.sqlsecurity.comhttp://www.sqlsecurity.com http://www.nextgenss.comhttp://www.nextgenss.com
RisorseRisorse AcademicAcademic
http://www.msdnaa.nethttp://www.msdnaa.nethttp://www.microsoft.com/italy/msdn/studentihttp://www.microsoft.com/italy/msdn/studenti
User GroupsUser Groupshttp://www.ugiss.orghttp://www.ugiss.org
http://www.sqlpass.orghttp://www.sqlpass.org
http://www.ugidotnet.orghttp://www.ugidotnet.org
MicrosoftMicrosofthttp://www.microsoft.com/sqlhttp://www.microsoft.com/sqlhttp://www.microsoft.com/italy/sqlhttp://www.microsoft.com/italy/sql
http://msdn.microsoft.com/sqlhttp://msdn.microsoft.com/sql
http://www.microsoft.com/TechNet/prodtechnol/sqlhttp://www.microsoft.com/TechNet/prodtechnol/sql
RisorseRisorse NewsgroupsNewsgroups
news://msnews.microsoft.comnews://msnews.microsoft.commicrosoft.public.it.sqlmicrosoft.public.it.sqlmicrosoft.public.sqlserver.*microsoft.public.sqlserver.*
Non vi fanno uscire via NNTP ?Non vi fanno uscire via NNTP ?http://msdn.microsoft.com/newsgroupshttp://msdn.microsoft.com/newsgroups
Novità!Novità!http://www.microsoft.com/italy/sql/support/newsgroup/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 Per sfatare qualche luogo comune…comune…
Windows non è sicuro!!Windows non è sicuro!! From January 2002 through November 2002, these were the From January 2002 through November 2002, these were the
number of security advisories issued (fonte ISS – X Data):number of security advisories issued (fonte ISS – X Data): Debian: 124Debian: 124 Mandrake: 86Mandrake: 86 Red Hat 7.2: 87Red Hat 7.2: 87 Sun Solaris: 68Sun Solaris: 68 Windows 2000 Server: 36Windows 2000 Server: 36 Windows XP Pro: 28Windows XP Pro: 28
CERT advisoriesCERT advisories SUN OS: 12SUN OS: 12 Red Hat Linux: 9Red Hat Linux: 9 Microsoft : 4Microsoft : 4
Per sfatare qualche luogo Per sfatare qualche luogo comune…comune…
Windows non è affidabile!!Windows non è affidabile!! Windows Server 2003Windows Server 2003
System uptime > 99.999%System uptime > 99.999%
Operations & best practicesOperations & best practices Windows Reliability StrategyWindows Reliability Strategy Case studiesCase studies
NASDAQ Stock Market IncNASDAQ Stock Market Inc London Stock ExchangeLondon Stock Exchange Lockheed MartinLockheed Martin Pirelli SpaPirelli Spa Ecc.Ecc.
Per sfatare qualche luogo Per sfatare qualche luogo comune…comune…
Windows non è scalabile!!Windows non è scalabile!! Bechmark TPC-C (Bechmark TPC-C (www.tpc.orgwww.tpc.org))
Windows Server 2003 Enterprise Edition 64-bit e SQL Windows Server 2003 Enterprise Edition 64-bit e SQL Server 2000 Enterprise Edition 64-bitServer 2000 Enterprise Edition 64-bit 786.646 tpmC786.646 tpmC
Benchmark SAPBenchmark SAP Windows 2000 DataCenter Edition e SQL Server 2000 Windows 2000 DataCenter Edition e SQL Server 2000
Enterprise EditionEnterprise Edition 26.000 utenti concorrenti26.000 utenti concorrenti
© 2003-2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
AppendiceAppendice
SQL InjectionSQL Injection Un intruso può devastare il db ...Un intruso può devastare il db ...
Select * from authors where au_lname like ' Select * from authors where au_lname like ' ' ; drop authors - - ' ; drop authors - - ' 'Select * from authors where au_lname like ' Select * from authors where au_lname like ' ' ; drop authors - - ' ; drop authors - - ' '
string strSql = "Select * from authors where au_lname like '" + TextBox1.Text + "'";
SqlCommand cmd = new SqlCommand(strSql, Cnn);SqlDataReader dr = cmd.ExecuteReader();
string strSql = "Select * from authors where au_lname like '" + TextBox1.Text + "'";
SqlCommand cmd = new SqlCommand(strSql, Cnn);SqlDataReader dr = cmd.ExecuteReader();
Prima queryPrima queryPrima queryPrima query Seconda querySeconda querySeconda querySeconda query
ScartatoScartatoScartatoScartato
SQL InjectionSQL Injection... usare i parameters!!! ...... usare i parameters!!! ... I Parameters incrementano anche le performance:I Parameters incrementano anche le performance:
non c'è conversione da string a tipo sul dbnon c'è conversione da string a tipo sul db la query rimane compilata e preparata sul db serverla query rimane compilata e preparata sul db server
exec sp_executesql N'Select * from authors exec sp_executesql N'Select * from authors
where au_lname like @au_lname', where au_lname like @au_lname',
N'@au_lname varchar(40)', @au_lname =N'@au_lname varchar(40)', @au_lname = '' '' ' ; drop authors - - ' ' ; drop authors - - '
exec sp_executesql N'Select * from authors exec sp_executesql N'Select * from authors
where au_lname like @au_lname', where au_lname like @au_lname',
N'@au_lname varchar(40)', @au_lname =N'@au_lname varchar(40)', @au_lname = '' '' ' ; drop authors - - ' ' ; drop authors - - '
apice raddoppiato da ADO.NETapice raddoppiato da ADO.NETapice raddoppiato da ADO.NETapice raddoppiato da ADO.NET
Gli apici non sono l'unico problema:Gli apici non sono l'unico problema:select * from titles where royalty = select * from titles where royalty = 0 ; drop authors0 ; drop authorsGli apici non sono l'unico problema:Gli apici non sono l'unico problema:select * from titles where royalty = select * from titles where royalty = 0 ; drop authors0 ; drop authors
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();
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();
Autenticazione in SQL Autenticazione in SQL Server 2000Server 2000
sysxloginssysxloginssysxloginssysxlogins
Windows 2000Windows 2000 Group or User
SQL ServerLogin Account
sysxloginssysxloginssysxloginssysxlogins
Verifica la che esista il SID nellatabella sysxlogins;Windows 2000 ha già verificatola password al logon
Verifica la che esista il SID nellatabella sysxlogins;Windows 2000 ha già verificatola password al logon
Verifica che logine pwd esistanoIn sysxlogins
SQL Server
Se non uso SSL o MultiProtocol encryption tutto passa in chiaro
Autorizzazione in SQL Autorizzazione in SQL Server 2000Server 2000
Northwind..sysusersNorthwind..sysusersNorthwind..sysusersNorthwind..sysusers
uiduid namename
0137
0137
publicdboINFORMATION_SCHEMApayroll
publicdboINFORMATION_SCHEMApayroll
Qui vengono mappatele login nel DB
Qui vengono mappatele login nel DB
Qui si trovanoi permessi sugli
oggetti
Qui si trovanoi permessi sugli
oggetti
Northwind..sysprotectsNorthwind..sysprotectsNorthwind..sysprotectsNorthwind..sysprotects
idid
1977058079197705807919770580791977058079
1977058079197705807919770580791977058079
uiduid
0007
0007
actionaction
193195196193
193195196193
protecttypeprotecttype
205205205205
205205205205
Kerberos e DelegationKerberos e Delegation
Kerberos è un protocollo di autenticazione Kerberos è un protocollo di autenticazione supportato in Windows Server 2003supportato in Windows Server 2003 Molto più sicuro di NTLMMolto più sicuro di NTLM
Necessario per supportare la delegationNecessario per supportare la delegation La capacità di far fare alle credenziali di un client La capacità di far fare alle credenziali di un client
più hop di retepiù hop di rete
Windows 2003 può limitare l'uso di delegation Windows 2003 può limitare l'uso di delegation applicazione per applicazioneapplicazione per applicazione
A Server2 arriva MIESTAFF\raffaele
ClientClientEUROPE \EUROPE \
raffaeleraffaeleServer1Server1 Server2Server2
Kerberos e SQL ServerKerberos e SQL Server SSupportupporto al modello di autenticazione di o al modello di autenticazione di Win2KWin2K,,
Kerberos:Kerberos: Durante la fase di logon SQL esegue una richiesta di Durante la fase di logon SQL esegue una richiesta di
validazione tramite SSPI (security integrata)validazione tramite SSPI (security integrata) Per tutte le connessioni con lPer tutte le connessioni con linked serverinked server vengono utilizzate le vengono utilizzate le
vere credenziali del clientvere credenziali del client Deve essere un dominio nativo Win2000 con ADDeve essere un dominio nativo Win2000 con AD Gli account devono essere settati per supportare la delegationGli account devono essere settati per supportare la delegation Il server deve essere settato in AD per supportare la Il server deve essere settato in AD per supportare la
delegationdelegation Occorre registrare in AD il Service Principal Name per l’utente Occorre registrare in AD il Service Principal Name per l’utente
con il quale gira SQL Servercon il quale gira SQL Server Utilizzare l’utility Utilizzare l’utility setspnsetspn nel ResourceKit di W2K nel ResourceKit di W2K
Network SecurityNetwork Security Occorre configurare il certificato utilizzando Occorre configurare il certificato utilizzando
Internet ExplorerInternet Explorer O l’applet di gestione dei certificatiO l’applet di gestione dei certificati
Attenzione al nome Attenzione al nome DNSDNS fully-qualified fully-qualified durante durante la richiesta del certificatola richiesta del certificato
Per criptare le comunicazioni client/server Per criptare le comunicazioni client/server basta settare labasta settare la checkbox checkbox nellanella client network client network utilityutility e nella server network utility e nella server network utility
Se il certificato non èSe il certificato non è trusted trusted dal client la dal client la connessione fallisceconnessione fallisce[Microsoft][ODBC SQL Server Driver][DBNETLIB]Encryption [Microsoft][ODBC SQL Server Driver][DBNETLIB]Encryption
not supported on SQL Servernot supported on SQL Server
AuditingAuditing È possibile attivare l’auditing attraverso una È possibile attivare l’auditing attraverso una
stored procedurestored procedure ccreate proc p_audittrace with encryption asreate proc p_audittrace with encryption as
Exec sp_trace_create @traceid output, 2, Exec sp_trace_create @traceid output, 2, n‘d:\n‘d:\temp\mytrace.trctemp\mytrace.trc’, 500’, 500
Aggiungere gli eventi che interessa catturareAggiungere gli eventi che interessa catturaresp_trace_setevent @traceid, @eventid,@columnid, @onsp_trace_setevent @traceid, @eventid,@columnid, @on
Ed eventualmente farle partire in autostart Ed eventualmente farle partire in autostart insieme a SQL Serverinsieme a SQL Server Exec sp_procoption ‘p_audittrace’, ‘startup’, ‘on’Exec sp_procoption ‘p_audittrace’, ‘startup’, ‘on’
Extended Stored ProcedureExtended Stored Procedure Queste ad esempio consentono di eseguire Queste ad esempio consentono di eseguire
query nel contesto di sicurezza del servizioquery nel contesto di sicurezza del servizio xp_execresultset, xp_printstatements, xp_execresultset, xp_printstatements,
xp_displayparamstmt xp_displayparamstmt
Eventualmente, rimuovere quelle che non Eventualmente, rimuovere quelle che non servonoservono Il rischio è di perdere alcune funzionalità ad Il rischio è di perdere alcune funzionalità ad
esempio nei tool di amministrazioneesempio nei tool di amministrazione Testare prima su una macchina non di produzioneTestare prima su una macchina non di produzione
Security Best PracticesSecurity Best Practices-- Chiunque può creare il job-- Chiunque può creare il jobEXEC sp_add_job @job_name = 'GetSystemOnSQL', @enabled = EXEC sp_add_job @job_name = 'GetSystemOnSQL', @enabled =
1, @description = ‘', @delete_level = 1 1, @description = ‘', @delete_level = 1
-- Chiamo un extended SP che ha un buco di sicurezza-- Chiamo un extended SP che ha un buco di sicurezzaEXEC sp_add_jobstep @job_name = 'GetSystemOnSQL', EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
@step_name = 'Exec my sql', @subsystem = 'TSQL', @step_name = 'Exec my sql', @subsystem = 'TSQL', @command = 'exec master..xp_execresultset N''select @command = 'exec master..xp_execresultset N''select ''''exec master..xp_cmdshell "dir > c:\agent-job-''''exec master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master''' results.txt"'''''',N''Master'''
EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL', EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL', @server_name = 'SERVER_NAME' @server_name = 'SERVER_NAME'
-- Eseguo il job e il gioco è fatto-- Eseguo il job e il gioco è fattoEXEC sp_start_job @job_name = 'GetSystemOnSQL' EXEC sp_start_job @job_name = 'GetSystemOnSQL'
Security Best PracticesSecurity Best Practices ReplicationReplication
Su un distributor è possibile eseguire privilege Su un distributor è possibile eseguire privilege escalation attraverso la SP escalation attraverso la SP sp_MScopyscriptsp_MScopyscript che che di default è accessibile al ruolo di default è accessibile al ruolo publicpublic
Internamente richiama Internamente richiama xp_cmdshellxp_cmdshell per eseguire la per eseguire la copia di un file di script sui subscribers, ma anche copia di un file di script sui subscribers, ma anche di eseguire comandi di sistema operativodi eseguire comandi di sistema operativo Es. creare un utente e farlo diventare AdministratorEs. creare un utente e farlo diventare Administrator
Configurare il servizio con un account che non Configurare il servizio con un account che non abbia privilegi amministrativi e sulla reteabbia privilegi amministrativi e sulla rete(può essere utile anche per i backup schedulati)(può essere utile anche per i backup schedulati)
Security Best PracticesSecurity Best Practices-- Il codice interno alla SP-- Il codice interno alla SPselect @cmd = N'copy "' + @scriptfile + N'" "' select @cmd = N'copy "' + @scriptfile + N'" "'
+ @directory + N'"' + @directory + N'"' exec @retcode = master..xp_cmdshell @cmd, exec @retcode = master..xp_cmdshell @cmd,
NO_OUTPUTNO_OUTPUT
-- Utilizzo non proprio ‘legale’ della SP-- Utilizzo non proprio ‘legale’ della SPuse masteruse masterdeclare @cmd nvarchar(4000)declare @cmd nvarchar(4000)exec sp_MScopyscriptfile N'c:\autoexec.bat" c:\exec sp_MScopyscriptfile N'c:\autoexec.bat" c:\
cp.txt&echo hello > c:\ccc.bbb & echo cp.txt&echo hello > c:\ccc.bbb & echo "hello',@cmd OUTPUT print @cmd"hello',@cmd OUTPUT print @cmd
Eseguire SQL dinamicoEseguire SQL dinamico
Il codice SQL eseguito internamente ad una stored Il codice SQL eseguito internamente ad una stored proc viene eseguito nel contesto di sicurezza proc viene eseguito nel contesto di sicurezza dell’esecutore e non dell’ownerdell’esecutore e non dell’owner Protegge da tentativi di eseguire operazioni non permesseProtegge da tentativi di eseguire operazioni non permesse Es.Es. Create proc myproc @p1 nvarchar(500) asCreate proc myproc @p1 nvarchar(500) as
Exec (@p1) return 0Exec (@p1) return 0
Exec myproc “sp_addlogin ‘raffaele’ exec Exec myproc “sp_addlogin ‘raffaele’ exec sp_addsrvrolemember sp_addsrvrolemember
‘raffaele’,’sysadmin’”‘raffaele’,’sysadmin’”
e io sarei sysadmin… e io sarei sysadmin…
Meta Data ObfuscationMeta Data Obfuscation Capacità di poter nascondere cifrandole:Capacità di poter nascondere cifrandole:
Stored procedureStored procedure TriggerTrigger ViewView
Non è possibile utilizzarla per altri scopiNon è possibile utilizzarla per altri scopi Es. datiEs. dati
Previene la copia delle logiche applicativePreviene la copia delle logiche applicative
Sviluppo e securitySviluppo e security SQL Injection consente all’instruso diSQL Injection consente all’instruso di
Fare seri danni ai datiFare seri danni ai dati Sfruttare altre vulnerabilità per ottenere privilegi più Sfruttare altre vulnerabilità per ottenere privilegi più
elevatielevati Creare nuovi utenti nel serverCreare nuovi utenti nel server Ottenere l’accesso a dati protettiOttenere l’accesso a dati protetti Modificare o cancellare oggetti nel databaseModificare o cancellare oggetti nel database Se l’account con il quale viene eseguito il servizio Se l’account con il quale viene eseguito il servizio
SQL Server ha privilegi amministrativi sul serverSQL Server ha privilegi amministrativi sul server L’intruso li può acquisire ed utilizzare il server come base L’intruso li può acquisire ed utilizzare il server come base
per altri attacchiper altri attacchi
Security Best PracticesSecurity Best Practices SQLXML SQLXML [Q321911][Q321911]
Sono possibili due tipi di attacchiSono possibili due tipi di attacchi Buffer overrun sulla estensione ISAPIBuffer overrun sulla estensione ISAPI Script injection attraverso un tag XML che consente Script injection attraverso un tag XML che consente
l’esecuzione di codice durante una trasformazione XSLTl’esecuzione di codice durante una trasformazione XSLT
Disabilitare la possibilità di eseguire query dirette Disabilitare la possibilità di eseguire query dirette via HTTP (di default è così)via HTTP (di default è così)
Utilizzare piuttosto la tecnica dei template XML per Utilizzare piuttosto la tecnica dei template XML per eseguire l’accesso ai datieseguire l’accesso ai dati