En esta entrada, vamos a usar una función de SQL Server PWDCOMPARE para testear la seguridad de las contraseñas de nuestros usuarios SQL.
Aquí podéis encontrar toda la documentación oficial de PWDCOMPARE:
https://docs.microsoft.com/en-us/sql/t-sql/functions/pwdcompare-transact-sql?view=sql-server-ver15
Es muy sencilla, admite dos parámetros, el primero es un nvarchar, es decir un texto plano y el segundo el hash encriptado de una contraseña. Como indica Microsoft, el único requisito a nivel de permisos es el permiso CONTROL SERVER para examinar la columna password_hash de sys.sql_logins.
Os dejamos tres ejemplos de qué comprobaciones hemos realizado en nuestras instancias, pero no os limitéis a estos ejemplos, podéis probar con cualquier otra palabra que se os ocurra.
1. Usuarios SQL con contraseña vacía
SELECT name FROM sys.sql_logins
WHERE PWDCOMPARE('', password_hash) = 1 ;
2. Usuarios SQL con contraseña “password”
SELECT name FROM sys.sql_logins
WHERE PWDCOMPARE('password', password_hash) = 1 ;
3. Usuarios de SQL con contraseña igual al nombre de usuario, además añadimos columnas como si es sysadmin o si está deshabilitado y, por último, el nombre de la instancia.
select @@servername as InstanceName,a.name,a.createdate,a.sysadmin,b.is_disabled from sys.syslogins a
inner join sys.server_principals b on a.name = b.name
where pwdcompare (a.name,a.password)=1
Podéis ampliar estos ejemplos con palabras como “Contraseña”, “12345678”, etc.
Es muy importante detectar estos problemas de seguridad ya que son las primeras opciones en un ataque de fuerza bruta, por lo que si llegan a entrar rapidamente no nos daríamos cuenta de estos accesos.
Para evitar que los usuarios puedan establecer estas contraseñas, debéis aplicar la opción de “ENFORCE PASSWORD POLICY”, sobre la cual tenemos una entrada en la que hablamos de esta opción y como funciona:
¿Has encontrado alguno en tus instancias SQL?