SQL Server säkerhet – Revision av Login del 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 = @groupName 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