Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Correction de l'absence de variante SEL cryptographique de hachage de connexion administrateur système (sa) de SQL Server

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 980671
Symptômes
Dans Microsoft SQL Server 2005 et versions ultérieures, plusieurs instances de SQL Server utilisent le même SEL cryptographique pour la connexion sa intégré. Étant donné que le salt est identique pour toutes les installations, certains types d'attaques en force attaques deviennent plus pratiques si l'attaquant peut tout d'abord accéder au mot de passe haché. Mots de passe hachés sont disponibles uniquement pour les administrateurs de SQL Server.
Cause
Dans SQL Server 2005 et versions ultérieures, le salt cryptographique est généré avec la connexion sa. Si CHECK_POLICY est activé, le salt cryptographique est régénéré pas lorsque l'utilisateur modifie le mot de passe pour être cohérents avec l'historique des mots de passe. Par défaut, CHECK_POLICY est activé pour SQL Server 2005. Lorsque le CHECK_POLICY est désactivée, la cohérence SEL n'est plus nécessaire pour la connexion sa et un sel nouvel régénéré lors du prochain changement de mot de passe.

Bien que cela soit vrai pour tous les comptes, le compte de connexion d'accès sa est généré pendant le processus de génération. Par conséquent, son sel est créé au cours du même processus de génération et est maintenue pendant une instance du programme d'installation de SQL Server.

Remarque Pour SQL Server 2008, ce problème affecte également les connexions d'accès par défaut utilisés par la fonctionnalité de gestion des stratégies de base, mais le risque est réduit. Par défaut, ces connexions sont désactivées.

Facteurs atténuants

Même si le salt cryptographique reste la même dans plusieurs installations, il ne serait pas suffisant pour compromettre le hachage du mot de passe. Pour exploiter ce problème, l'utilisateur malveillant devrait être accès administratif à une instance de SQL Server afin d'obtenir le hachage du mot de passe. Si pratiques recommandées sont appliquées, les utilisateurs ordinaires sera impossible d'extraire le hachage du mot de passe. Par conséquent, ils seraient pas exploiter l'absence de variation SEL cryptographique.
Contournement
Pour SQL Server 2005 Service Pack 2 ou versions ultérieures, vous pouvez exécuter le script suivant pour réinitialiser le salt cryptographique du compte de connexion sa. Pour exécuter le script, vous devez ouvrir une session avec un compte disposant des autorisations CONTROL SERVER, ou le compte doit être membre du rôle de serveur sysadmin. You should be aware that, after you reset the cryptographic salt, the password history for the sa login will also be reset.
-- Work around for SQL Server 2005 SP2+---- Sets the password policy check off for [sa]-- Replaces [sa] password with a random byte array-- NOTE: This effectively replaces the sa password hash with -- a random bag of bytes, including the salt,-- and finally sets the password policy check on again---- After resetting the salt, -- it is necessary to set the sa password,-- or if preferred, disable sa--CREATE PROC #sp_set_new_password_and_set_for_sa(@new_password sysname, @print_only int = null)AS	DECLARE @reset_salt_pswdhash nvarchar(max)	DECLARE @random_data varbinary(24)	DECLARE @hexstring nvarchar(max)	DECLARE @i int	DECLARE @sa_name sysname;		SET @sa_name = suser_sname(0x01);	SET @random_data = convert(varbinary(16), newid()) + convert(varbinary(8), newid())	SET @hexstring = N'0123456789abcdef'	SET @reset_salt_pswdhash = N'0x0100'	SET @i = 1	WHILE @i <= 24	BEGIN		declare @tempint int		declare @firstint int		declare @secondint int		select @tempint = convert(int, substring(@random_data,@i,1))		select @firstint = floor(@tempint/16)		select @secondint = @tempint - (@firstint*16)		select @reset_salt_pswdhash = @reset_salt_pswdhash +			substring(@hexstring, @firstint+1, 1) +			substring(@hexstring, @secondint+1, 1)		set @i = @i+1	END	DECLARE @sql_cmd nvarchar(max)	SET @sql_cmd = N'ALTER LOGIN ' + quotename(@sa_name) + N' WITH CHECK_POLICY = OFF;	ALTER LOGIN ' + quotename(@sa_name) + N' WITH PASSWORD = ' + @reset_salt_pswdhash + N' HASHED;	ALTER LOGIN ' + quotename(@sa_name) + N' WITH CHECK_POLICY = ON;	ALTER LOGIN ' + quotename(@sa_name) + N' WITH PASSWORD = ' + quotename(@new_password, '''') + ';'	IF( @print_only is not null AND @print_only = 1 )		print @sql_cmd	ELSE		EXEC( @sql_cmd )go----------------------------------------------------------------------------------------- Usage example:--DECLARE @new_password sysname -- Use tracing obfuscation in order to filter the new password from SQL traces-- http://blogs.msdn.com/sqlsecurity/archive/2009/06/10/filtering-obfuscating-sensitive-text-in-sql-server.aspx--SELECT @new_password = CASE WHEN 1=1 THEN     -- TODO: replace password placeholder below with a strong password    --   ##[MUST_CHANGE: replace this placehoder with a new password]##:   ELSE EncryptByPassphrase('','') ENDEXEC #sp_set_new_password_and_set_for_sa @new_passwordgoDROP PROC #sp_set_new_password_and_set_for_sa go
Pour SQL Server 2008, vous pouvez exécuter le script suivant. Pour exécuter le script, vous devez ouvrir une session avec un compte disposant des autorisations CONTROL SERVER, ou le compte doit être membre du rôle de serveur sysadmin.
-- Work around for SQL Server 2008---------------------------------------------------------------------------- Set the password policy check off for [sa]-- Reset the password-- Set the password policy check on for [sa] once again-- -- NOTE: The password history will be deleted--CREATE PROC #sp_set_new_password_and_set_for_sa(@new_password sysname, @print_only int = null) AS	DECLARE @sql_cmd nvarchar(max);	DECLARE @sa_name sysname;	-- Get the current name for SID 0x01. 	-- By default the name should be "sa", but the actual name may have been chnaged by the system administrator	--	SELECT @sa_name = suser_sname(0x01);	-- NOTE: This password will not be subject to password policy or complexity checks	-- if desired, this step can be replaced with a "throw away" password for 	-- and set the real password after the check policy setting has been set	--	SELECT @sql_cmd = 'ALTER LOGIN ' + quotename(@sa_name) + ' WITH CHECK_POLICY = OFF;	ALTER LOGIN ' + quotename(@sa_name) + ' WITH PASSWORD = ' + quotename(@new_password, '''') + ';	ALTER LOGIN ' + quotename(@sa_name) + ' WITH CHECK_POLICY = ON;'	IF( @print_only is not null AND @print_only = 1 )		print @sql_cmd	ELSE		EXEC( @sql_cmd )go----------------------------------------------------------------------------------------- Usage example:--DECLARE @new_password sysname-- Use tracing obfuscation in order to filter the new password from SQL traces-- http://blogs.msdn.com/sqlsecurity/archive/2009/06/10/filtering-obfuscating-sensitive-text-in-sql-server.aspx--SELECT @new_password = CASE WHEN 1=1 THEN     -- TODO: replace password placeholder below with a strong password    --   ##[MUST_CHANGE: replace this placehoder with a new password]##:   ELSE EncryptByPassphrase('','') ENDEXEC #sp_set_new_password_and_set_for_sa @new_passwordgoDROP PROC #sp_set_new_password_and_set_for_sa go
In SQL Server 2008, the cryptographic salt for the Policy Based Management logins can be reset by using the following script. Pour exécuter le script, vous devez ouvrir une session avec un compte disposant des autorisations CONTROL SERVER, ou le compte doit être membre du rôle de serveur sysadmin.
-------------------------------------------------------------------------- Set the password policy check off for the Policy principals-- Reset the password-- Set the password policy check on for them once again---- NOTE: -- These principals are not intended to establish connections to SQL Server-- So this SP will also make sure they are disabled--CREATE PROC #sp_reset_password_and_disable(@principal_name sysname, @print_only int = null) AS	DECLARE @random_password nvarchar(max)		SET @random_password = convert(nvarchar(max), newid()) + convert(nvarchar(max), newid())	DECLARE @sql_cmd nvarchar(max)	SET @sql_cmd = N'ALTER LOGIN ' + quotename(@principal_name) + N' WITH CHECK_POLICY = OFF;	ALTER LOGIN ' + quotename(@principal_name) + N' WITH PASSWORD = ''' + replace(@random_password, '''', '''''') + N''';	ALTER LOGIN ' + quotename(@principal_name) + N' WITH CHECK_POLICY = ON;	ALTER LOGIN ' + quotename(@principal_name) + N' DISABLE;'	IF( @print_only is not null AND @print_only = 1 )		print @sql_cmd	ELSE		EXEC( @sql_cmd )goEXEC #sp_reset_password_and_disable '##MS_PolicyEventProcessingLogin##';EXEC #sp_reset_password_and_disable '##MS_PolicyTsqlExecutionLogin##';goSELECT name, password_hash, is_disabled FROM sys.sql_loginsgo
Statut
Ce problème sera résolu dans les prochains service packs pour SQL Server 2005, SQL Server 2008 et dans les futures versions de SQL Server.
Plus d'informations
Microsoft thanks les informations suivantes pour collaboré avec nous afin de protéger les clients :
sql2008 SQL2005

Avertissement : cet article a été traduit automatiquement

Propriétés

ID d'article : 980671 - Dernière mise à jour : 03/02/2010 23:15:17 - Révision : 1.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup

  • kbmt kbpasswords kbexpertiseadvanced kbsurveynew kbprb KB980671 KbMtfr
Commentaires
cript type="text/JavaScript" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("