Vous êtes sur la page 1sur 17

1

Scurisation dune
infrastructure SQL Server (v4.08)

Tutorial conu et rdig par Michel de CREVOISIER Fvrier 2014









2

SOURCES


Best Practices de scurit pour SQL Server :
http://download.microsoft.com/download/8/F/A/8FABACD7-803E-40FC-ADF8-
355E7D218F4C/SQL_Server_2012_Security_Best_Practice_Whitepaper_Apr2012.docx
http://blogs.msdn.com/b/sqlsecurity/
http://cdn.ttgtmedia.com/ITKE/uploads/blogs.dir/113/files/2009/04/chapter-8-sql-server-2008-
management-and-administration.pdf

Scurit et chiffrement de SQL Server :
http://www.greensql.com/content/10-must-do-sql-server-2012-security-tasks

Comptes de service sous SQL Server 2012 :
http://msdn.microsoft.com/en-us/library/ms143504.aspx





ARTICLES RELATIONNES


Vous trouverez galement dautres articles en relation avec SQL Server :
Installation de SQL Server (tuto)
Scurisation dun serveur SQL (tuto)
SQL Server pentesting (tuto)
Outils pour SQL Server (tuto)
Installation de Reporting Services en mode natif (tuto)
Installation de Reporting Services en mode SharePoint (tuto)
Comptes et groupes de service (tuto)

3

INDEX

SOURCES .............................................................................................................................................................. 2
INDEX ................................................................................................................................................................... 3
1. Instance SQL ................................................................................................................................................ 4
1.1 Utilisation dinstances nommes ........................................................................................................ 4
1.2 Dsactivation du service SQL Server Browser...................................................................................... 4
1.3 Masquage des instances ...................................................................................................................... 5
1.4 Utilisation dinstance statique ............................................................................................................. 5
2. Procdures et accs distant ........................................................................................................................ 6
2.1 Dsactivation des procdures ............................................................................................................. 6
2.2 Dsactivation des protocoles non-utiliss ........................................................................................... 6
3. Authentification et accs ............................................................................................................................ 8
3.1 Authentification Windows ............................................................................................................. 8
3.2 Renommage du compte SA ........................................................................................................... 8
3.3 Utilisation de groupes dadministration .............................................................................................. 8
3.4 Suppression du groupe BUILTIN\Administrators .......................................................................... 9
3.5 Activation de laudit des logins ............................................................................................................ 9
4. Comptes de service ................................................................................................................................... 10
4.1 Types de comptes .............................................................................................................................. 10
4.2 Comptes par dfaut ........................................................................................................................... 10
4.3 Recommandations ............................................................................................................................. 11
4.4 Changement de compte .................................................................................................................... 11
5. Systme ..................................................................................................................................................... 13
5.1 Serveur ddi ..................................................................................................................................... 13
5.2 Installation minimale ......................................................................................................................... 13
5.3 Mises jour ....................................................................................................................................... 13
5.4 Serveur Core ................................................................................................................................ 13
5.5 Pare-feu ............................................................................................................................................. 14
6. Outils de scurit ...................................................................................................................................... 15
6.1 SQL Server Label Security Toolkit ................................................................................................... 15
6.2 SQL Server 2008-2012 Best Practices Analyser ............................................................................. 15
6.3 Microsoft Baseline Security Analyser ............................................................................................. 16
Conclusion ......................................................................................................................................................... 17
4

1. Instance SQL

1.1 Utilisation dinstances nommes

Utilisez une instance nomme au dtriment de linstance par dfaut lors de linstallation. En effet,
linstance par dfaut est facilement accessible en raison de son nommage par
dfaut MSSQLSERVER et de son coute sur le port TCP 1433, tous deux bien connus des hackers.

1.2 Dsactivation du service SQL Server Browser

Comme expliqu au point 1.3 de mon tuto, le service SQL Server Browser (anciennement SSRP) a t
implment afin de rpondre aux requtes des clients en leur retournant le numro de port associ
linstance demande. En coute sur le port UDP 1434, ce service est une vraie porte ouverte pour
les hackers puisquil leurs permet de facilement lister les instances hberges sur le serveur.



Il convient donc de dsactiver ce service et dopter pour une configuration statique (point 1.4). Le
script PowerShell ci-dessous permet darrter et de dsactiver le service SQL Browser :

Import-Module "SQLPS" -DisableNameChecking
#Service
$ServicesToDisable="SQLBrowser","SQLSERVERAGENT","MSSQLServerOLAPService "

Foreach($service in $ServicesToDisable)
{
Stop-Service $service
Set-Service $service -startuptype disabled
}

Connexions
entrantes
SQL Server Browser
sur port [1434]
Rponse avec [port]
INSTANCE-1
Rponse avec [port]
INSTANCE-2
5

1.3 Masquage des instances

Si vous persistez maintenir le service SQL Server Browser activ malgr les recommandations du
point prcdent, vous pouvez toujours masquer vos instances SQL. Pour cela :
Ouvrez SQL Server Configuration Manager
Clic droit sur Protocols for instance > Properties > Flags
Dfinissez ensuite loption Hide instance Yes

1.4 Utilisation dinstance statique

Pour les raisons expliques au point 1.2, configurez votre instance en mode statique et non en mode
dynamique. Pour cela, rfrez-vous au point 6 de mon tuto sur SQL Server.

Pour passer le port de votre instance en mode statique via PowerShell :

Import-Module "SQLPS" -DisableNameChecking
#Variables
$SQL_instance_port = "10000"
$SQL_InstanceName='MSSQLSERVER'
$ServerName=gc env:computername

#Objects
$m = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer') $ServerName
$urn =
"ManagedComputer[@Name='$ServerName']/ServerInstance[@Name='$SQL_InstanceName']/ServerPro
tocol[@Name='Tcp']"
$Tcp = $m.GetSmoObject($urn)
$Enabled = $Tcp.IsEnabled

#Enable TCP/IP if not enabled
IF (!$Enabled)
{$Tcp.IsEnabled = $true }

#Set to listen
$m.GetSmoObject($urn + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value =
$SQL_instance_port
$TCP.alter()


6

2. Procdures et accs distant

2.1 Dsactivation des procdures

Apparu avec SQL Server 2005, Surface Area Configuration Manager tait lorigine prsent sous
forme de console part entire et permettait dadministrer de nombreux paramtres de scurit.
Avec larrive de SQL Server 2008, il fut directement intgr au sein dSQL Server Management Studio.
Pour des raisons de scurit, il convient de dsactiver certaines procdures dangeureuses . Pour
cela :
Clic droit sur votre instance > Facets > Surface Area Configuration

Et dsactivez les procdures suivantes :
o XP_CMDSHELL (permet dexcuter une commande directement dans le systme)
o XP_SEND_DBMAIL
o OPENROWSET
o OPENDATASET
o OLE AUTOMATION

2.2 Dsactivation des protocoles non-utiliss

2.2.1 Protocoles daccs

Dsactivez les protocoles activs par dfaut lexception de TCP/IP. Si vous souhaitez uniquement
fournir un accs local aux bases de donnes, activez le protocole Shared Memory (plus de dtails au
point 1.4 de mon tuto sur SQL Server). Pour information, le protocole VIA nest plus disponible depuis
SQL Server 2012.


7

Le script PowerShell suivant permet de dsactiver ces protocoles :

Import-Module "SQLPS" -DisableNameChecking
$ServerName=gc env:computername
$SQL_InstanceName='MSSQLSERVER'

$wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $ServerName
$wmi.ServerInstances[$SQL_InstanceName].ServerProtocols['Tcp'].IsEnabled = $True #TCP/IP
$wmi.ServerInstances[$SQL_InstanceName].ServerProtocols['Tcp'].Alter() | out-null
$wmi.ServerInstances[$SQL_InstanceName].ServerProtocols['Np'].IsEnabled = $False #Pipes
$wmi.ServerInstances[$SQL_InstanceName].ServerProtocols['Np'].Alter() | out-null
$wmi.ServerInstances[$SQL_InstanceName].ServerProtocols['Sm'].IsEnabled = $False #Memory
$wmi.ServerInstances[$SQL_InstanceName].ServerProtocols['Sm'].Alter() | out-null


2.2.2 SQL Native client

Dsactivez les protocoles associs cet utilitaire si vous nen avez pas lutilit. Vous trouverez plus
dinformations son sujet au point 7.3 de mon tuto sur SQL Server.

Le script PowerShell suivant devrait thoriquement permettre de dsactiver ces protocoles, mais il
ne fonctionne pas. A toutes fins utiles, je vous le poste quand mme :
Import-Module "SQLPS" -DisableNameChecking
$ServerName=gc env:computername

$wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $ServerName
$wmi.ClientProtocols['Tcp'].IsEnabled = $False
$wmi.ClientProtocols['Tcp'].Alter()
$wmi.ClientProtocols['Np'].IsEnabled = $False
$wmi.ClientProtocols['Np'].Alter()
$wmi.ClientProtocols['Sm'].IsEnabled = $False
$wmi.ClientProtocols['Sm'].Alter()

Note : test sous Server 2008 R2 SP1 avec SQL Server 2008 R2 SP2 et Server 2012 avec SQL Server
2012 SP1


8

3. Authentification et accs

3.1 Authentification Windows

Prfrez lutilisation dune authentification Kerberos (alias Windows) au dtriment dune
authentification Mixte (Windows + SQL). En effet le compte SA, encore une fois bien connu des
hackers, peut facilement tre compromis sil ne dispose pas dun mot de passe complexe. Ce mode
dauthentification est dfini lors des tapes dinstallation mais peut facilement tre modifi par la
suite.

Note : en authentification SQL, les credentials sont envoyes sur le rseau pour lauthentification.
Ce mode peut donc tre sujet une attaque de type Man In the Middle

3.2 Renommage du compte SA

En accord avec le point prcdent, dsactivez le compte SA si vous nen avez pas lutilit. Sil vous est
absolument ncessaire, renommez-le (uniquement possible depuis SQL Server 2008). Cela
compliquera la tche dans le cas dune attaque par brutforce. Par ailleurs, il nest pas recommand
dutiliser ce compte pour ladministration du serveur SQL.

3.3 Utilisation de groupes dadministration

Il est recommand dadministrer les accs aux instances SQL au travers de groupes de scurit et
non via des comptes utilisateurs individuels. En attribuant des rles spcifiques chaque groupe,
vous serez en mesure de mieux administrer les accs tout en conservant une politique de gestion
globale des autorisations. Vous pourrez par exemple crer un groupe membre du groupe SYSADMIN
afin dautoriser vos administrateurs grer le serveur SQL. Vous pourrez galement crer un groupe
destin vos dveloppeurs, offrant un accs uniquement certains rles ou certaines tables. Le
script PowerShell ci-dessous permet dajouter un groupe AD avec le rle SYSADMIN :


9

Import-Module "SQLPS" -DisableNameChecking
$SQLAdminGroup="SG_SQL_Admin"
$DomainName="lab" # Without .com, .local, ...

Invoke-SqlCmd -Query "EXEC sp_addsrvrolemember '$DomainName\$SQLAdminGroup', 'sysadmin'"
-ServerInstance "."

3.4 Suppression du groupe BUILTIN\Administrators

Jusqu SQL Server 2005, le groupe BUILTIN\ Administrators possdait le privilge sysadmin.
De facto, lensemble des administrateurs locaux disposaient des droits complets sur lensemble des
instances hberges. Pour supprimer ce privilge, excutez la commande T-SQL ci-dessous :
Use Master
IF EXISTS (SELECT * FROM sys.server_principals
WHERE name = NBUILTIN\Administrators)
DROP LOGIN [BUILTIN\Administrators]
GO

3.5 Activation de laudit des logins

Activez laudit des logins failed et successfull afin dauditer les comptes stant connect
votre serveur :

10

4. Comptes de service

Lutilisation dun compte permettant lexcution dun service SQL doit faire lobjet dun choix attentif.
En effet, plus ce dernier disposera de privilges levs, plus le service et donc le serveur seront
exposs des risques de scurit inutiles. Les lignes qui suivent ont donc pour objectifs de vous
prsenter les diffrents comptes utilisables afin de dterminer le plus adapt votre infrastructure.

4.1 Types de comptes

Ces huit types de comptes sont disponibles pour lexcution des diffrents services lis SQL Server:
Compte local :
o Local user
o Local user (Windows administrator)
o Network Service account (NT AUTHORITY\NETWORK SERVICE)
o Local System account (NT AUTHORITY\SYSTEM)
Compte utilisateur du domaine :
o Domain user
o Domain user (Windows administrator)
Comptes de service (cf. mon tuto consacr ce sujet) :
o Managed Service account (MSA) - support partir de SQL Server 2012
o Virtual Service account (VSA)

4.2 Comptes par dfaut

Les tableaux ci-dessous synthtisent les comptes par dfaut utiliss avec SQL Server 2012 :
Component (Stand-alone SQL) Windows Server 2008 Windows Server 2008 R2
Database Engine NETWORK SERVICE Virtual Account (VSA) *
SQL Server Agent NETWORK SERVICE Virtual Account (VSA) *
SSAS NETWORK SERVICE Virtual Account (VSA) *
SSIS NETWORK SERVICE Virtual Account (VSA) *
SSRS NETWORK SERVICE Virtual Account (VSA) *
SQL Server Distributed Replay Controller NETWORK SERVICE Virtual Account (VSA) *
SQL Server Distributed Replay Client NETWORK SERVICE Virtual Account (VSA) *
FD Launcher (Full-text Search) LOCAL SERVICE Virtual Account (VSA)
SQL Server Browser LOCAL SERVICE LOCAL SERVICE
SQL Server VSS Writer LOCAL SYSTEM LOCAL SYSTEM

Component (Failover instance) Windows Server 2008 Windows Server 2008 R2
Database Engine Provide a domain user act. Provide a domain user act.
SQL Server Agent Provide a domain user act. Provide a domain user act.
SSAS Provide a domain user act. Provide a domain user act.
SSIS NETWORK SERVICE Virtual Account
SSRS NETWORK SERVICE Virtual Account
FD Launcher (Full-text Search) LOCAL SERVICE Virtual Account
SQL Server Browser LOCAL SERVICE LOCAL SERVICE
SQL Server VSS Writer LOCAL SYSTEM LOCAL SYSTEM
11

* Si des ressources extrieures au serveur SQL sont ncessaires, Microsoft recommande lutilisation
dun MSA (point 4.1)

Ci-dessous, la liste des comptes VSA (6/7) utiliss nativement par SQL Server 2012 sous Server 2012 :

4.3 Recommandations

SQL Server 2012 est la premire version supporter les comptes MSA (point 4.1) pour lexcution de
ses services. De facto, il convient dopter pour ce type de compte ds quil en est possible,
notamment pour linstance SQL. Si ce choix ne vous est techniquement pas possible, optez pour un
VSA ou un compte utilisateur du domaine avec une restriction daccs au travers de la GPO Deny
log on locally . Notez par ailleurs que les VSA et MSA ne peuvent pas tre utiliss pour des instances
en cluster en raison de leurs SID diffrents.

Pour information, il nest pas recommand dutiliser des comptes built-in (Local Service, Local
System et Network Service) tant donn quils hritent de certains privilges levs lis lActive
Directory :
Le compte Network Service intgre le mme niveau daccs qui est attribu au groupe
Utilisateurs . Il est autoris sauthentifier sur lensemble du rseau en utilisant le compte
ordinateur et peut de ce fait interagir avec dautres services sur le rseau
Le compte Local System confre les pleins droits lutilisateur sur lordinateur local. Il
possde le privilge de pouvoir crer ou supprimer ses propres SPNs. En revanche, il ne peut
en aucun cas saccorder de droits sur le rseau
Le compte Local Service possde le mme niveau daccs que les membres du groupe de
lutilisateur. Cet accs limit lui confre une protection contre les violations de service

4.4 Changement de compte

Important : vous devez toujours utilisez la console SQL Server Configuration Manager (ou PowerShell)
pour changer un compte ou un mot de passe associ un service SQL. En effet, en dehors du
changement de compte, lapplication effectue des modifications supplmentaires telles que la mise
jour du magasin local de scurit qui protge la master key du moteur de la base de donnes.
12



Le script PowerShell ci-dessous permet de modifier le compte dexcution dun service (ici celui de
linstance SQL) en utilisant un compte du domaine (ne fonctionne pas avec un compte MSA):
Import-Module "SQLPS" -DisableNameChecking
$SQL_InstanceName='MSSQLSERVER' # Use simple ''
$SQLSvcAccountPassword = 'Password123'
$DomainName="domain" # Without .com, .local, ...
$SQLSvcAccountUsername = "$DomainName\sql-account"

$service="name='$SQL_InstanceName'" #Getting SQL Service name
$svc=gwmi win32_service -filter $service
$svc.StopService() | out-null
$svc.change($null,$null,$null,$null,$null,$null,$SQLSvcAccountUsername,$SQLSvcAccountPass
word,$null,$null,$null) | out-null
$svc.StartService() | out-null





13

5. Systme

5.1 Serveur ddi

Hbergez toujours vos serveurs SQL sur un serveur ddi et non sur un serveur hbergeant dautres
ressources (SSAS, serveur web IIS, logiciels mtier, AD ).

5.2 Installation minimale

Installez votre instance SQL avec le minimum de fonctionnalits. En rgle gnrale, linstance ainsi
que les outils de management suffisent largement. Cela permet de rduire les fonctionnalits
actives tout limitant lutilisation de ressources inutiles. Par ailleurs, vitez absolument les
installations par dfaut .

5.3 Mises jour

Maintenez jour votre systme dexploitation en appliquant les dernires mises jour et correctifs
de scurit. Appliquez galement les Service Pack et Cumulative Update propres SQL Server.

5.4 Serveur Core

Une des principales nouveauts de SQL Server 2012 est le support de la version Core sur les systmes
Server 2008 R2 et 2012. Lintrt dun tel mode est avant tout de rduire la surface dexposition de
votre serveur afin de restreindre son champ dattaque. Par la mme occasion, cela permet de rduire
la consommation de ressources tout en limitant les oprations de maintenance. Notez toutefois que
certaines fonctionnalits ne sont pas supportes avec ce mode (dtails et installation dtaille ici).



14

5.5 Pare-feu

Pour terminer, il convient de crer ses rgles de pare-feu en entre afin de pallier dventuelles
maladresses :
Configuration dynamique (SQL Browser activ) : bloquez le port TCP 1433
Configuration statique : bloquez le port TCP 1433 et le port UDP 1434. Vous pouvez
galement dsactiver le service SQL Browser (point 1.2)

Pour crer ces rgles en PowerShell sous Windows Server 2012 ou suprieur :
#Variables
$SQL_path="C:\Program Files\Microsoft SQL
Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" #Path for SQL Server 2012 (not 2014)
$SQL_instance_port = "11000"

#Rules
New-NetFirewallRule -DisplayName "SQL instance" -Direction Inbound -LocalPort
$SQL_instance_port -Protocol TCP -Action Allow -program $SQL_path -group "SQL Server" |
out-null
New-NetFirewallRule -DisplayName "Block SQL Browser" -Direction Inbound -LocalPort 1434 -
Protocol UDP -Action Block -group "SQL Server" | out-null
New-NetFirewallRule -DisplayName "Block Default instance" -Direction Inbound -LocalPort
1433 -Protocol TCP -Action Block -group "SQL Server" | out-null



15

6. Outils de scurit

6.1 SQL Server Label Security Toolkit

Il sagit dun outil permettant dimplmenter des rgles de type Row-level security (RLS) et Cell-
level security (CLS) bases sur les labels de scurit. Tlchargement ici.

6.2 SQL Server 2008-2012 Best Practices Analyser

Cet outil requiert linstallation pralable de Microsoft Baseline Configuration Analyser 2.0
(tlchargement). Loutil est disponible ici pour SQL Server 2008 R2 et ici pour SQL Server 2012.


16

Ci-dessous les rsultats dune analyse :

6.3 Microsoft Baseline Security Analyser

Au mme titre que Baseline Configuration Analyser, cet outil vous fournira dautres informations
(encore plus pertinentes) lies la scurit de votre serveur SQL.








17

Conclusion



Grce ces recommandations visant scuriser vos serveurs SQL, vous tes maintenant en mesure
de rduire leur surface dexposition de faon limiter les vecteurs potentiels dintrusion.





Nhsitez pas menvoyer vos commentaires ou retours ladresse suivante :
m.decrevoisier A-R-0-B-A-5 outlook . com


Soyez-en dores et dj remerci