raffaele rialdi microsoft c# mvp mvp profile blog [email protected]

59
Raffaele Rialdi Raffaele Rialdi Microsoft C# MVP Microsoft C# MVP http://mvp.support.microsoft.com http://mvp.support.microsoft.com MVP Profile MVP Profile http://snipurl.com/f0cv http://snipurl.com/f0cv Blog Blog http://blogs/ugidotnet.org/raffaele http://blogs/ugidotnet.org/raffaele [email protected] [email protected] Vevy Europe SpA Vevy Europe SpA La sicurezza in SQL La sicurezza in SQL Server Server

Upload: arianna-verde

Post on 01-May-2015

228 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 2: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 3: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 4: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 5: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 6: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 7: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

Il servizio SQL ServerIl servizio SQL Server

Relational DatabaseManagement System

SQL ServerClient

ResultsResultsResults

Applicazione Client

OLAPOLAP

OLTPOLTPQueryQueryQuery

Page 8: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 9: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 10: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 11: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 12: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 13: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 14: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

- +

Page 15: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 16: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 17: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 18: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 19: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 20: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 21: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 22: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 23: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 24: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 25: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 26: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com
Page 27: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 28: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 29: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 30: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 31: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 32: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 33: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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)

Page 34: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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)

Page 35: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 36: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 37: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.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

Page 38: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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/

Page 39: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

© 2003-2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Page 40: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 41: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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.

Page 42: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 43: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

© 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

Page 44: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 45: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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();

Page 46: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 47: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 48: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 49: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 50: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 51: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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’

Page 52: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 53: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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'

Page 54: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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)

Page 55: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 56: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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…

Page 57: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 58: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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

Page 59: Raffaele Rialdi Microsoft C# MVP MVP Profile Blog malta@vevy.com

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