Comment durcir SQL Server ?
A qui ce destine ce guide ?
Ce référentiel est destiné aux administrateurs de systèmes et d'applications, aux spécialistes de la sécurité, aux auditeurs, au service d'assistance et au personnel chargé du déploiement des platesformes qui prévoient de développer, de déployer, d'évaluer ou de sécuriser des solutions intégrant Microsoft SQL Server 2022 sur une plateforme Microsoft Windows.
Recommandations générales
Maintenir une bonne hygiène
Il est essentiel de garder à l'esprit que le risque zéro n'existe pas dans le domaine de la sécurité informatique. Toutefois, la mise en place de mesures adéquates et une bonne configuration de SQL Server permettront de ralentir les attaquants et de renforcer la résilience de votre système. En suivant les recommandations de ce guide, vous serez en mesure de prendre des mesures préventives efficaces et de protéger votre Active Directory contre les menaces potentielles.
Déployer un environnement de test
La mise en œuvre temporaire d'un environnement de test et l'acquisition temporaire de compétences spécialisées peuvent faciliter l'adoption de ce guide.
Avant toute opération de changement de configuration, de restriction de permissions, ou d'implémentation de nouvelle fonctionnalité, il est vital de s'assurer de disposer d'une sauvegarde saine et dont la restauration est maitrisée.
1 - Installation, mises à jour et correctifs
Cette section contient des recommandations relatives à l’installation et à la correction de SQL Server.
1.1 Assurer les dernières mises à jour cumulatives et de sécurité de SQL Server
Description
Les correctifs SQL Server contiennent des mises à jour de programme qui corrigent la sécurité et les fonctionnalités du produit problèmes trouvés dans le logiciel. Ces correctifs peuvent être installés avec une mise à jour de sécurité, qui est un patch unique, ou une mise à jour cumulative qui est un groupe de patches. La version du serveur et les niveaux de patch doivent être les plus récents compatibles avec le besoins opérationnels des organisations.
Motif
L'utilisation du logiciel SQL Server le plus récent, accompagné de tous les correctifs applicables, peut contribuer à limiter les possibilités de vulnérabilité du logiciel. La version d'installation et/ou les correctifs appliqués lors de l'installation doivent être établis en fonction des besoins de l'organisation.
Vérification
Pour déterminer votre niveau de correctif SQL Server, exécutez l’extrait de code suivant :
SELECT SERVERPROPERTY('ProductLevel') as SP_installed,
SERVERPROPERTY('ProductVersion') as Version,
SERVERPROPERTY('ProductUpdateLevel') as 'ProductUpdate_Level',
SERVERPROPERTY('ProductUpdateReference') as 'KB_Number';
Remédiation
Identifiez la version actuelle et le niveau de patch de vos instances SQL Server et assurez-vous qu'ils contiennent les derniers correctifs de sécurité.
Assurez-vous de tester ces correctifs dans votre test les environnements avant la mise à jour des instances de production.
Les correctifs SQL Server les plus récents se trouvent ici :
- Source : https://learn.microsoft.com/en-us/troubleshoot/sql/releases/download-and-install-latest-updates
- Source : https://support.microsoft.com/en-us/topic/kb4041553-sql-server-service-packs-are-discontinued-starting-from-sql-server-2017-fd405dee-cae7-b40f-db14-01e3e4951169
1.2 S’assurer que les serveurs de membres à fonction unique sont utilisés
Description
Il est recommandé d'installer le logiciel SQL Server sur un serveur dédié. Cette considération architecturale offre une certaine souplesse en matière de sécurité, dans la mesure où le serveur de base de données peut être placé sur un sous-réseau distinct n'autorisant l'accès qu'à partir de certains hôtes et par le biais de certains protocoles. Les degrés de disponibilité sont également plus faciles à atteindre - au fil du temps, une entreprise peut passer d'un serveur de base de données unique à un basculement vers un cluster utilisant l'équilibrage de charge ou à une combinaison des deux.
Motif
Il est plus facile de gérer (c'est-à-dire de réduire) la surface d'attaque du serveur hébergeant le logiciel SQL Server si les seules surfaces à prendre en compte sont le système d'exploitation sous-jacent, le serveur SQL Server lui-même, et tout outil de sécurité/opérationnel qui pourrait être installé en plus. Comme indiqué dans la description, la disponibilité peut être un facteur de risque et la peut-être plus facilement prise en compte si la base de données se trouve sur un serveur dédié
Impact
Il est difficile de voir un impact raisonnablement négatif à ce changement d'architecture, une fois que les coûts de ce changement ont été payés. Il se peut que des applications personnalisées doivent être modifiées pour permettre des connexions de base de données au travers du réseau plutôt que sur l'hôte (c'est-à-dire en utilisant TCP/IP au lieu de Named Pipes). Des licences supplémentaires pour le matériel et le système d'exploitation peuvent être nécessaires pour effectuer ces changements architecturaux.
Vérification
S’assurer qu’aucun autre rôle n’est activé pour le système d’exploitation sous-jacent et que l’outillage excédentaire est installé, conformément à la politique de l’entreprise.
Remédiation
Désinstaller les outils excédentaires et/ou supprimer les rôles inutiles de l’exploitation sous-jacente système.
2 - Réduction de la superficie
SQL Server offre diverses options de configuration, dont certaines peuvent être contrôlées par la procédure stockée sp_configure. Cette section contient la liste des recommandations correspondantes.
2.1 Vérifier la configuration du serveur des requêtes 'distribuées ad hoc' et que L’option est définie sur '0'
Description
L’activation des requêtes distribuées ad hoc permet aux utilisateurs d’interroger les données et d'exécuter des énoncés sur les sources de données externes. Cette fonctionnalité devrait être désactivée.
Motif
Cette fonctionnalité peut être utilisée pour accéder à distance et exploiter des vulnérabilités sur des instances SQL Server distantes et pour exécuter des fonctions Visual Basic for Application non sécurisées.
Vérification
Exécuter la commande T-SQL suivante :
SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as
int) as value_in_use
FROM sys.configurations
WHERE name = 'Ad Hoc Distributed Queries';
Les deux colonnes de valeur doivent afficher 0.
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'Ad Hoc Distributed Queries', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
La valeur par défaut est de 0 (désactivé).
2.2 - S’assurer que l’option de configuration du serveur 'CLR Enabled' est définie sur '0'
Description
L’option clr enabled spécifie si les assemblys utilisateur peuvent être exécutés par SQL Server.
Motif
L'activation de l'utilisation des assemblages CLR élargit la surface d'attaque de SQL Server et l'expose au risque d'assemblages involontaires ou malveillants.
Impact
Si des assemblages CLR sont utilisés, il peut être nécessaire de réarchitecturer les applications pour éliminer leur utilisation avant de désactiver ce paramètre. Par ailleurs, certaines organisations peuvent autoriser l'activation de ce paramètre pour les assemblages créés avec le jeu de permissions SAFE, mais interdire les assemblages créés avec les jeux de permissions UNSAFE et EXTERNAL_ACCESS, plus risqués. Pour trouver les assemblages créés par les utilisateurs, exécutez la requête suivante dans toutes les bases de données, en remplaçant nom_de_la_base_de_données par le nom de chaque base de données
USE [nom_de_la_base_de_données]
GO
SELECT name AS Assembly_Name, permission_set_desc
FROM sys.assemblies
WHERE is_user_defined = 1;
GO
Vérification
Exécuter la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'clr strict security';
Si les deux valeurs sont 1, cette recommandation est sans objet. Sinon, exécutez cette Commande T-SQL :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'clr enabled';
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'clr enabled', 0;
RECONFIGURE;
La valeur par défaut est de 0 (désactivé).
Source : https://learn.microsoft.com/en-us/sql/t-sql/statements/create-assembly-transact-sql
Renseignements supplémentaires
Si clr strict security est mis à 1 cette recommandation n’est pas applicable. Par défaut, clr une sécurité stricte est activée et traite les assemblages SAFE et EXTERNAL_ACCESS comme s’ils ont été marqués DANGEREUX.
Bien que non recommandé, l’option de sécurité stricte clr peut être désactivé pour de la compatibilité descendante. Cette recommandation a été conservée pour l'environnements configurés pour la rétrocompatibilité.
2.3 - S’assurer de la configuration du serveur 'Cross DB Ownership Chaining' que l’option est définie sur '0'
Description
L'option cross db ownership chaining contrôle le chaînage de la propriété de toutes les bases de données au niveau de l'instance (ou du serveur).
Motif
Lorsqu'elle est activée, cette option permet à un membre du rôle db_owner dans une base de données d'accéder à des objets appartenant à un login dans n'importe quelle autre base de données, ce qui entraîne une divulgation inutile d'informations. Lorsque cela est nécessaire, le chaînage de la propriété entre bases de données ne doit être activé que pour les bases de données spécifiques qui le nécessitent plutôt qu'au niveau de l'instance pour toutes les bases de données en utilisant la commande ALTER DATABASE nom_de_la_base SET DB_CHAINING ON. Cette option de base de données ne peut pas être modifiée sur les bases de données système master, model ou tempdb.
Vérification
Exécutez la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'cross db ownership chaining';
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'cross db ownership chaining', 0;
RECONFIGURE;
GO
La valeur par défaut est de 0 (désactivé).
2.4 - Assurez-vous que l’option de configuration du serveur 'Database Mail XPs’applique réglé sur '0'
Description
L’option Database Mail XPs contrôle la possibilité de générer et de transmettre des e-mails messages de SQL Server.
Motif
La désactivation de l'option Database Mail XPs réduit la surface du serveur SQL, élimine un vecteur d'attaque DOS et un canal permettant d'exfiltrer des données du serveur de base de données vers un hôte distant.
Vérification
Exécuter la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'Database Mail XPs';
Les deux colonnes de valeur doivent afficher 0 pour être conformes.
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'Database Mail XPs', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
La valeur par défaut est de 0 (désactivé). Source : https://learn.microsoft.com/en-us/sql/relational-databases/database-mail/database-mail?view=sql-server-ver1
2.5 Vérifier la configuration du serveur des 'Ole automation procedures' que l’option doit etre définie sur '0'
Description
L’option Ole Automation Procedures contrôle si les objets OLE Automation peuvent être instancié dans les lots Transact-SQL. Il s’agit de procédures stockées étendues qui permettent aux utilisateurs de SQL Server d’exécuter des fonctions externes à SQL Server.
Motif
L'activation de cette option augmentera la surface d'attaque du serveur SQL et permettra aux utilisateurs d'exécuter des fonctions dans le contexte de sécurité du serveur SQL.
Vérification Exécuter la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'Ole Automation Procedures';
Les deux colonnes de valeur doivent afficher 0 pour être conformes.
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
La valeur par défaut est de 0 (désactivé).
2.6 S’assurer que l’option de configuration du serveur 'Remote Access' est définie sur « 0 »
Description
L’option d’accès à distance contrôle l’exécution des procédures stockées localement sur serveurs ou procédures stockées à distance sur le serveur local.
Motif
Cette fonctionnalité peut être utilisée de manière abusive pour lancer une attaque par déni de service (DoS) sur des serveurs distants en déchargeant le traitement des requêtes sur une cible.
Impact
Cette fonctionnalité pourrait être supprimée dans une prochaine version de Microsoft SQL Server. N'utilisez pas cette fonctionnalité dans les nouveaux développements et modifiez dès que possible les applications qui l'utilisent actuellement. Utilisez plutôt sp_addlinkedserver.
Vérification
Exécutez la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'remote access';
Les deux colonnes de valeur doivent afficher 0
Remédiation
exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'remote access', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
Redémarrez le moteur de base de données.
La valeur par défaut est de 1 (activé).
2.7 - Vérifier la configuration du serveur 'Remote Admin Connections' que L’option est définie sur '0'
Description
L’option de connexions d’administrateur à distance contrôle si une application cliente sur un ordinateur distant peut utiliser la connexion administrateur dédiée (DAC).
Motif
La connexion administrateur dédiée (DAC) permet à un administrateur d'accéder à un serveur en cours d'exécution pour exécuter des fonctions de diagnostic ou des instructions Transact-SQL, ou pour résoudre des problèmes sur le serveur, même lorsque le serveur est verrouillé ou fonctionne dans un état anormal et ne répond pas à une connexion au moteur de base de données du serveur SQL. Dans un scénario de cluster, l'administrateur peut ne pas être connecté au même nœud que celui qui héberge actuellement l'instance de SQL Server et est donc considéré comme « distant ». Par conséquent, ce paramètre doit généralement être activé (1) pour les clusters de basculement du serveur SQL ; sinon, il doit être désactivé (0), ce qui est la valeur par défaut.
Vérification
Exécuter la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'remote admin connections'
AND SERVERPROPERTY('IsClustered') = 0;
Si aucune donnée n ’est retournée, l’instance est un cluster et cette recommandation n’est pas applicable. Si les données sont retournées, les deux colonnes de valeur doivent afficher 0 pour être conforme.
Remédiation
Exécuter la commande T-SQL suivante sur les installations non groupées :
EXECUTE sp_configure 'remote admin connections', 0;
RECONFIGURE;
GO
Valeur par défaut
Par défaut, cette option est désactivée (0), seules les connexions locales peuvent utiliser le DAC.
Renseignements supplémentaires
S'il s'agit d'une installation en cluster, cette option doit être activée car un serveur SQL en cluster ne peut pas se lier à localhost et le DAC sera indisponible dans le cas contraire. Activez-la pour les installations en cluster. Désactivez-la pour les installations autonomes lorsque cela n'est pas nécessaire.
2.8 Vérifier l’option de configuration du serveur 'Scan For Startup Procs’ est réglé sur '0'
Description
L’option Scan for startup procs, si elle est activée, provoque l’analyse de SQL Server pour exécuter automatiquement toutes les procédures stockées définies pour s’exécuter au démarrage du service.
Motif
L'application de ce contrôle réduit le risque qu'une entité utilise ces installations à des fins malveillantes.
Impact
Définir Scan for Startup Procedures sur 0 empêchera certaines traces d’audit et d’autres procédures de surveillance généralement utilisées sont stockées à partir du redémarrage au démarrage. En outre, la réplication nécessite que ce paramètre soit activé (1) et le changera automatiquement de réglage si nécessaire.
Vérification
Exécuter la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'scan for startup procs';
Les deux colonnes de valeur doivent afficher 0.
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'scan for startup procs', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
Redémarrez le moteur de base de données. Par défaut, cette option est désactivée (0).
2.9 S’assurer que la propriété de base de données 'Digne de confiance' est définie sur 'Éteint’
Description
L’option de base de données 'TRUSTWORTHY' (DIGNE DE CONFIANCE) permet aux objets de base de données d’accéder à des objets dans d’autres bases de données dans certaines circonstances.
Motif
Protection contre les assemblages CLR malveillants ou les procédures étendues.
Vérification
Exécutez la requête T-SQL suivante pour répertorier toutes les bases de données dont la valeur de propriété de base de données digne de confiance est ON :
SELECT name
FROM sys.databases
WHERE is_trustworthy_on = 1
AND name != 'msdb';
Aucune ligne ne doit être retournée.
Remédiation
Exécuter l’instruction T-SQL suivante sur les bases de données (remplacer database_name ci-dessous) renvoyées par la procédure d’audit :
ALTER DATABASE [database_name] SET TRUSTWORTHY OFF;
Par défaut, cette propriété de base de données est OFF (is_trustworthy_on = 0), sauf pour la base de données msdb base de données dans laquelle il doit être activé.
2.10 S’assurer que les protocoles SQL Server inutiles sont définis sur 'Disabled'
Description
SQL Server prend en charge la mémoire partagée, les canaux nommés et les protocoles TCP/IP. Cependant, SQL Server doit être configuré pour utiliser le strict minimum requis en fonction du besoins de l’organisation.
Motif
L'utilisation d'un nombre réduit de protocoles minimise la surface d'attaque du serveur SQL et, dans certains cas, peut le protéger contre les attaques à distance.
Impact
Les services du moteur de base de données (MSSQL et SQLAgent) doivent être arrêtés et redémarrés pour que la modification prenne effet.
Vérification
Ouvrez SQL Server 2022 Configuration Manager ; accédez au réseau SQL Server Configuration. Assurez-vous que seuls les protocoles requis sont activés.
Remédiation
Ouvrez SQL Server 2022 Configuration Manager ; accédez au réseau SQL Server Configuration. Assurez-vous que seuls les protocoles requis sont activés. Désactiver les protocoles nécessaire.
Valeur par défaut
Par défaut, les protocoles TCP/IP et mémoire partagée sont activés sur toutes les applications commerciales éditions
2.11 Assurez-vous que SQL Server est configuré pour utiliser des ports non standard
Description
S’il est installé, une instance SQL Server par défaut se verra attribuer un port par défaut de TCP:1433 pour la communication TCP/IP. Les administrateurs peuvent également configurer manuellement les instances nommées pour utiliser TCP:1433 pour la communication. TCP:1433 est un port SQL Server largement connu et cette affectation de port doit être modifiée. Dans un scénario multi-instance, chaque instance doit se voir attribuer son propre port TCP/IP dédié.
Motif
L'utilisation d'un port autre que le port par défaut permet de protéger la base de données contre les attaques dirigées vers le port par défaut.
Impact
La modification du port par défaut forcera le DAC (Dedicated Administrator Connection) à écouter sur un port aléatoire. En outre, il pourrait faire des applications bénignes, telles que l’application pare-feu, nécessite une configuration spéciale. En général, vous devez définir un port statique pour l'utilisation cohérente par les applications, y compris les pare-feu, au lieu d’utiliser des ports dynamiques qui sera choisi au hasard à chaque démarrage de SQL Server.
Vérification
Exécuter le T-SQL suivant :
IF (select value_data from sys.dm_server_registry where value_name =
'ListenOnAllIPs') = 1
SELECT count(*) FROM sys.dm_server_registry WHERE registry_key = '%IPAll%'
and value_name like '%Tcp%' and value_data='1433'
ELSE
SELECT count(*) FROM sys.dm_server_registry WHERE value_name like '%Tcp%' and
value_data='1433';
Remédiation
- Dans SQL Server Configuration Manager, dans le volet de la console, développez SQL Configuration du réseau du serveur, développer les protocoles pour InstanceName, puis double-cliquez sur le protocole TCP/IP.
-
Dans la boîte de dialogue Propriétés TCP/IP, sous l’onglet Adresses IP, plusieurs adresses IP les adresses apparaissent au format IP1, IP2, jusqu’à IPAll. L’une d’elles est pour l’IP Page 40 adresse de l’adaptateur de bouclage, 127.0.0.1. Des adresses IP supplémentaires apparaissent pour chaque adresse IP sur l’ordinateur.
-
Sous IPAll, changez le champ TCP Port de 1433 à un port non standard ou laisser le champ TCP Port vide et définir la valeur TCP Dynamic Ports sur 0 à activer l’affectation dynamique de port, puis cliquer sur OK.
-
Dans le volet de la console, cliquez sur SQL Server Services.
-
Dans le volet des détails, cliquez avec le bouton droit sur SQL Server (InstanceName), puis cliquez sur Redémarrez, pour arrêter et redémarrer SQL Server.
Valeur par d éfaut
Par défaut, les instances SQL Server par défaut écoutent le trafic TCP/IP sur le port TCP 1433et les instances nommées utilisent des ports dynamiques.
2.12 Assurez-vous que l’option Masquer l’instance est définie sur Oui pour la production d'Instances SQL Server
Description
Les instances SQL Server non mutualisées dans les environnements de production doivent être désigné comme caché pour empêcher la publicité par le service SQL Server Browser.
Motif
Le fait de désigner les instances de production de SQL Server comme étant cachées permet de sécuriser l'installation car elles ne peuvent pas être énumérées. Cependant, les instances en cluster peuvent se briser si cette option est sélectionnée.
Impact
Cette méthode empêche uniquement l’instance d’être répertoriée sur le réseau. Si l’instance est masquée (non exposée par le navigateur SQL), les connexions devront spécifier le serveur et le port pour se connecter.
Il n’empêche pas les utilisateurs de se connecter au serveur s’ils connaissent le nom de l’instance et le port. Si vous masquez une instance nommée en cluster, le service de cluster peut ne pas être en mesure de se connecter à SQL Server. Veuillez consulter la référence de la documentation Microsoft.
Verification
- Dans SQL Server 2022 Configuration Manager, développez SQL Server Network Configuration, cliquez avec le bouton droit sur Protocoles pour InstanceName, puis sélectionnez Propriétés.
- Sous l’onglet Drapeaux, dans la zone Masquer l’instance, si Oui est sélectionné, il est conforme.
Remédiation
- Dans SQL Server 2022 Configuration Manager, développez SQL Server Network Configuration, cliquez avec le bouton droit sur Protocoles pour InstanceName, puis sélectionnez Propriétés.
- Sous l’onglet Flags, dans la zone Hide Instance, sélectionnez Yes, puis cliquez sur OK pour fermer la boîte de dialogue. La modification prend effet immédiatement pour les nouvelles connexions
2.13 Assurez-vous que le compte de connexion 'sa' est défini sur 'Disabled'
Description
Le compte SA est un compte SQL Server largement connu et souvent utilisé avec des privilèges sysadmin. Il s’agit de la connexion d’origine créée lors de l’installation et a toujours les identifiants principal_id=1 et sid=0x01
Motif
L'application de ce contrôle réduit la probabilité qu'un attaquant exécute des attaques par force brute contre un donneur d'ordre bien connu.
Impact
Ce n'est pas une bonne pratique de sécurité que de coder des applications ou des scripts pour qu'ils utilisent le compte sa. Cependant, si cela a été fait, la désactivation du compte sa empêchera les scripts et les applications de s'authentifier auprès du serveur de base de données et d'exécuter les tâches ou les fonctions requises.
Vérification
Utilisez la syntaxe suivante pour déterminer si le compte SA est désactivé. La vérification de sid=0x01 garantit que le compte SA d’origine est vérifié au cas où il aurait été renommé selon les meilleures pratiques.
SELECT name, is_disabled
FROM sys.server_principals
WHERE sid = 0x01
AND is_disabled = 0;
Aucune ligne ne doit être retournée pour être conforme. Une valeur is_disabled de 0 indique que la connexion est actuellement activée et qu’il faut donc remédiation
Remédiation
Exécuter la requête T-SQL suivante :
USE [master]
GO
DECLARE @tsql nvarchar(max)
SET @tsql = 'ALTER LOGIN ' + SUSER_NAME(0x01) + ' DISABLE'
EXEC (@tsql)
GO
Par défaut, le compte de connexion SA est désactivé au moment de l’installation lorsque le mode "authentification Windows" est sélectionné. Si le mode mixte (SQL Server et authentification Windows) est sélectionné lors de l’installation, la valeur par défaut pour la connexion sa est activée.
Sources :
- https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql?view=sql-server-ver16&tabs=sql
- https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-login-transact-sql?view=sql-server-ver16
- https://learn.microsoft.com/en-us/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-ver16
2.14 Assurez-vous que le compte de connexion a été renommé
Description
Le compte SA est une connexion SQL Server largement connue et souvent utilisée avec sysadmin privileges.La connexion sa est la connexion d’origine créée lors de l’installation et a toujours principal_id=1 et sid=0x01
Motif
Il est plus difficile de lancer des attaques par devinette de mot de passe et par force brute contre le login sa si le nom n'est pas connu.
Impact
Il n’est pas recommandé de coder des applications ou des scripts pour utiliser la connexion SA. Cependant, si cela a été fait, renommer la connexion SA empêchera les scripts et des applications allant de l’authentification au serveur de base de données et de l’exécution des tâches requises ou fonctions.
Vérification
Utilisez la syntaxe suivante pour déterminer si le login de sa (principal) est renommé:
SELECT name
FROM sys.server_principals
WHERE sid = 0x01;
Remédiation
Remplacer la valeur different_user dans la syntaxe ci-dessous et exécuter pour renommer la connexion SA.
ALTER LOGIN sa WITH NAME = different_user;
Par défaut, le nom de connexion est 'sa'
2.15 S’assurer que « AUTO_CLOSE » est réglé à « OFF » sur « contenu » bases de données
Description
AUTO_CLOSE détermine si une base de données donnée est fermée ou non après une connexion se termine. Si cette option est activée, les connexions ultérieures à la base de données sont à rouvrir et les caches de procédures pertinentes à reconstruire.
Motif
Étant donné que l'authentification des utilisateurs pour les bases de données de contenu s'effectue dans la base de données et non au niveau du serveur, la base de données doit être ouverte à chaque fois pour authentifier un utilisateur. L'ouverture/fermeture fréquente de la base de données consomme des ressources serveur supplémentaires et peut contribuer à un déni de service.
Vérification
Procéder comme suit pour trouver les bases de données de contenu qui ne sont pas configurées comme prescrit :
SELECT name, containment, containment_desc, is_auto_close_on
FROM sys.databases
WHERE containment <> 0 and is_auto_close_on = 1;
Aucune ligne ne doit être retournée.
Remédiation
Exécuter le T-SQL suivant, en remplaçant database_name par chaque nom de base de données trouvé dans la procédure de Vérification
ALTER DATABASE database_name SET AUTO_CLOSE OFF;
Par défaut, la propriété de base de données AUTO_CLOSE est désactivée, ce qui équivaut à is_auto_close_on = 0.
2.16 Ensure no login exists with the name 'sa' (Automated)
Description
Le login sa (par ex. principal) est un compte SQL Server largement connu et souvent utilisé. Par conséquent, il ne devrait pas y avoir de connexion appelée "sa" même lorsque la connexion d’origine (principal_id = 1) a été renommé.
Motif
L'application de ce contrôle réduit la probabilité qu'un attaquant exécute des attaques par force brute contre un nom de principal bien connu.
Impact
Il n’est pas recommandé de coder des applications ou des scripts pour utiliser le compte SA. Étant donné qu’il est recommandé de renommer et de désactiver le compte SA, certaines applications tierces vérifient l’existence d’un login nommé SA et, s’il n’existe pas, en créent un. La suppression de la connexion SA empêchera ces scripts et applications de s’authentifier sur le serveur de base de données et d’exécuter les tâches ou fonctions requises.
Vérification
Utilisez la syntaxe suivante pour déterminer s’il existe un compte nommé sa.
SELECT principal_id, name
FROM sys.server_principals
WHERE name = 'sa';
Aucune ligne ne doit être retournée.
Remédiation
Exécutez l’instruction ALTER appropriée ci-dessous en fonction du principal_id renvoyé pour remplacer la valeur different_name dans la syntaxe ci-dessous et exécuter pour renommer la connexion SA.
USE [master]
GO
-- If principal_id = 1 or the login owns database objects, rename the sa
login
ALTER LOGIN [sa] WITH NAME = different_name;
GO
Valeur par défaut
La connexion avec principal_id = 1 est nommée sa par défaut
2.17 Assurez-vous que l’option de configuration du serveur 'clr strict security' est définie à 1
Description
L’option de sécurité stricte clr spécifie si le moteur applique le PERMISSION_SET sur les assemblages.
Motif
L'activation de l'utilisation des assemblages CLR élargit la surface d'attaque de SQL Server et l'expose au risque d'assemblages involontaires ou malveillants.
Impact
Si les assemblages CLR sont utilisés, les applications peuvent avoir besoin d’être réécrite pour éliminer leur utilisation avant d’activer ce paramètre. Pour trouver les assemblys créés par l’utilisateur, exécutez la requête dans toutes les bases de données, remplacer database_name par chaque nom de base de données :
USE [database_name]
GO
SELECT name AS Assembly_Name, permission_set_desc
FROM sys.assemblies
WHERE is_user_defined = 1;
GO
Vérification
Exécuter la commande T-SQL suivante :
SELECT name,
CAST(value as int) as value_configured,
CAST(value_in_use as int) as value_in_use
FROM sys.configurations
WHERE name = 'clr strict security';
Les deux colonnes de valeur doivent afficher 1 pour être conformes.
Remédiation
Exécuter la commande T-SQL suivante :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'clr strict security', 1;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
Valeur par défaut
Par défaut, cette option est activée (1) Source : https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/clr-strict-security?view=sql-server-ver16
3 - Authentification et autorisation
Cette section contient des recommandations relatives à l’authentification de SQL Server et des mécanismes d’autorisation
3.1 Assurez-vous que la propriété 'Server Authentication' est définie sur 'Windows Mode d’authentification
Description
Utilise l’authentification Windows pour valider les tentatives de connexion.
Motif
Windows fournit un mécanisme d'authentification plus robuste que l'authentification du serveur SQL.
Impact
La modification de la configuration du mode de connexion nécessite un redémarrage du service
Vérification
Exécuter la syntaxe suivante :
SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') as [login_mode];
Un login_mode de 1 indique que la propriété Server Authentication est définie sur Windows Mode d’authentification. Un login_mode de 0 indique une authentification en mode mixte.
Remédiation
- Ouvrez SQL Server Management Studio.
- Ouvrez l’onglet Explorateur d’objets et connectez-vous à l’instance SQL Server cible.
- Cliquez avec le bouton droit sur le nom de l’instance et sélectionnez Propriétés.
- Sélectionnez la page Sécurité dans le menu de gauche.
- Définissez le paramètre d’authentification du serveur sur Mode d’authentification Windows.
Redémarrez le service SQL Server pour que la modification prenne effet.