Gå direkte til indhold

SQL Server säkerhet – Revision av Login del 2

lästid I minuter: 2

Att revidera login på en instans manuellt är tidsödande. Insamlingen av data går mestadels att göra via skript, det förenklar en del men analysen måste göras manuellt.

Ofta måste flera team och intressenter vara inblandade i arbetet t ex Windowsteam och ägare av säkerhetsgrupper.

Medlemmar i server roller
EXEC master.sys.sp_helpsrvrolemember

 

Validera alla Windowslogin

EXEC master.sys.sp_validatelogins

Listar alla Windowslogin som inte längre finns på servern eller i Active Directory.


Lista Windowsgrupper med medlemmar
DECLARE @members table(accountName nvarchar(255), type nvarchar(55), 
privilege nvarchar(55), mappedLoginName nvarchar(255), permissionPath nvarchar(255))
DECLARE @groups table(name nvarchar(255))
DECLARE @inValidGroups table(SID uniqueidentifier, name nvarchar(255))
DECLARE @groupName nvarchar(255)
INSERT INTO @inValidGroups
EXEC master.sys.sp_validatelogins
INSERT INTO @groups
SELECT p.name FROM sys.server_principals p WHERE p.type = 'G' AND p.name NOT LIKE 'NT SERVICE%'
DELETE FROM @groups
WHERE name IN (SELECT name FROM @inValidGroups)
WHILE EXISTS (SELECT 1 FROM @groups)
BEGIN
SELECT TOP 1 @groupName = name FROM @groups
INSERT INTO @members
EXEC master.sys.xp_logininfo @groupName,'members'
DELETE FROM @groups WHERE name = @groupNam
END
SELECT * FROM @members

 

Kontrollera BuiltinAdministrators

SELECT r.name AS Roll, u.name AS loginNamn 
FROM sys.server_role_members m JOIN
sys.server_principals r ON m.role_principal_id = r.principal_id JOIN
sys.server_principals u ON m.member_principal_id = u.principal_id
WHERE u.name = 'BUILTINAdministrators'

Om gruppen har rättigheter på instansen visas de i listan ovan.

  • Lista och kontrollera användarna i local administrator
  • Normal ligger detta utanför vårt ansvar och kontrolleras av de som är ansvariga för OS men det kan göras manuellt eller via t ex PowerShell skript.
  • Kontrollera status för sa
SELECT p.name,
CASE WHEN p.name = 'sa' THEN 'Nej' ELSE 'Ja' END [Ändrat namn],
CASE WHEN p.is_disabled = 0 THEN 'Aktivt' ELSE 'Ej Aktivt' END AS [Status]
FROM sys.server_principals AS p
WHERE p.sid = 0x01
AND p.type = 'S'

Kontrollera lösenordskrav för alla SQL login
SELECT name FROM sys.sql_logins 
WHERE is_policy_checked=0

Lista SQL login som har svaga lösenord

För att kontrollera vilka SQL login som har svaga lösenord använder vi skriptet nedan. Det bygger på en lista med svaga lösenord, de som är med i listan nedan är de som vi vanligen stöter på och går att utöka om man vill.
     DECLARE @weakPwdList nvarchar(155)
SET @weakPwdList =
'123,1234,12345,abc,default,guest,123456,|Login|123,|Login|,|Login||Login|,admin,Administrator,admin123,,'
SELECT name AS [Login att kontrollera],
CASE WHEN PWDCOMPARE(REPLACE(wPwd.pwd,'|Login|',REVERSE(name)),password_hash) = 0 THEN
REPLACE(wPwd.pwd,'|Login|',name)
    ELSE REPLACE(wPwd.pwd,'|Login|',REVERSE(name))
END AS [Svagt lösenord]
FROM sys.sql_logins INNER JOIN
(
    SELECT SUBSTRING(@weakPwdList, [number]+1, CHARINDEX(',', @weakPwdList, [number]+1)-[number]-1) AS pwd
    FROM master.dbo.spt_values s
    WHERE s.type='P'
    AND s.Number < LEN(@weakPwdList)
    AND SUBSTRING(@weakPwdList, [number], 1) = ','
) AS wPwd ON (PWDCOMPARE(wPwd.pwd, password_hash) = 1 OR
PWDCOMPARE(REPLACE(wPwd.pwd,'|Login|',name),password_hash) = 1 OR
PWDCOMPARE(REPLACE(wPwd.pwd,'|Login|',REVERSE(name)),password_hash) = 1)
ORDER BY name

Sedan är det bara att börja gå igenom allt…
/Björn

Ska vi träffas och prata om vad vi konkret kan göra för dig?