SQL Server安全基线

SQL Server安全基线

支持SQL Server 2012

访问控制

1.高危 -确保Sysadmin角色中所有经过SQL身份验证的登录名的“ CHECK_EXPIRATION”选项都设置为“ ON”

描述:

将Windows中使用的相同密码过期策略应用于SQL Server内部使用的密码。 确保SQL登录名符合Windows Server Benchmark所应用的安全密码策略,将确保频繁更改具有sysadmin特权的SQL登录名的密码,以帮助防止通过蛮力攻击造成的损害。 CONTROL SERVER是sysadmin的等效权限,并且还应该要求具有该权限的登录名具有到期的密码。

加固建议:

运行以下T-SQL语句,以CHECK_EXPIRATION = OFF查找sysadmin或等效登录名。 不应返回任何行。

SELECT l.[name], 'sysadmin membership' AS 'Access_Method'
FROM sys.sql_logins AS l
WHERE IS_SRVROLEMEMBER('sysadmin',name) = 1
AND l.is_expiration_checked <> 1
UNION ALL
SELECT l.[name], 'CONTROL SERVER' AS 'Access_Method'
FROM sys.sql_logins AS l
JOIN sys.server_permissions AS p
ON l.principal_id = p.grantee_principal_id
WHERE p.type = 'CL' AND p.state IN ('G', 'W')
AND l.is_expiration_checked <> 1;

对于审核程序发现的每个<login_name>,执行以下T-SQL语句:

ALTER LOGIN [login_name] WITH CHECK_EXPIRATION = ON;

服务配置

2.高危-确保“启用CLR”服务器配置选项设置为“ 0”

描述:

clr enabled选项指定用户程序集是否可以由SQL Server运行。 启用CLR程序集的使用会扩大SQL erver的攻击面,并使它受到疏忽和恶意程序集的威胁。

加固建议:

运行以下T-SQL命令:

EXECUTE sp_configure 'clr enabled', 0;
RECONFIGURE;

3.高危-确保“跨数据库所有权链接”服务器配置选项设置为“ 0”

描述:

跨数据库所有权链接选项控制实例(或服务器)级别上所有数据库之间的跨数据库所有权链接。 启用后,此选项允许数据库中db_owner角色的成员访问任何其他数据库中的登录名所拥有的对象,从而导致不必要的信息泄露。 必要时,跨数据库所有权链接仅应为 通过使用ALTER DATABASE <database_name> SET DB_CHAINING ON命令为需要它的特定数据库启用了该功能,而不是在所有数据库的实例级别启用了该功能。 不能在master,model或tempdb系统数据库上更改此数据库选项

加固建议:

运行以下T-SQL命令:

EXECUTE sp_configure 'cross db ownership chaining', 0;
RECONFIGURE;
GO

4.高危-确保“'Database Mail XPs ”服务器配置选项设置为“ 0”

描述:

Database Mail XPs XPs选项控制从SQL Server生成和传输电子邮件的功能。 禁用数据库邮件可减少SQL Server的使用面,消除DOS攻击媒介和渠道,以将数据从数据库服务器泄漏到远程主机

加固建议:

运行以下T-SQL命令:

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;

5.高危-确保“远程管理连接”服务器配置选项设置为“ 0”

描述:

远程管理员连接选项控制远程计算机上的客户端应用程序是否可以使用专用管理员连接(DAC)。 专用管理员连接(DAC)使管理员可以访问运行中的服务器以执行诊断功能或Transact-SQL语句,或对服务器上的问题进行故障排除,即使服务器被锁定或处于异常状态并且未响应SQL 服务器数据库引擎连接。 在群集方案中,管理员实际上可能未登录到当前托管SQL Server实例的同一节点,因此被视为“远程”。 因此,通常应启用此设置(1)用于SQL Server故障转移群集; 否则应将其禁用(0),这是默认设置。

加固建议:

运行以下T-SQL命令:

EXECUTE sp_configure 'remote admin connections', 0;
RECONFIGURE;
GO

6.高危-确保“可信任”数据库属性设置为“关”

描述:

TRUSTWORTHY数据库选项允许数据库对象在某些情况下访问其他数据库中的对象。 提供针对恶意CLR程序集或扩展过程的保护。

加固建议

执行命令获取需要进行操作的数据库名称:

SELECT name
FROM sys.databases
WHERE is_trustworthy_on = 1
AND name != 'msdb';

对数据库执行以下T-SQL语句(替换命令中的<database_name>):

ALTER DATABASE [<database_name>] SET TRUSTWORTHY OFF;

7.高危-确保将“ sa”登录帐户设置为“已禁用”

描述:

sa帐户是sysadmin中一个广为人知且经常使用的SQL Server特权帐户。 这是安装期间创建的原始登录,并且始终具 Principal_id = 1,sid = 0x01。实施此控制可降低攻击者对众所周知的主体执行暴力攻击的可能性。

加固建议:

运行以下T-SQL命令:

USE [master]
GO
DECLARE @tsql nvarchar(max)
SET @tsql = 'ALTER LOGIN ' + SUSER_NAME(0x01) + ' DISABLE'
EXEC (@tsql)
GO

8.高危-确保“ sa”登录帐户已重命名

描述:

sa帐户是具有sysadmin特权的众所周知且经常使用的SQL Server登录。 sa登录名是安装期间创建的原始登录名,并且始终具有principal_id = 1和sid = 0x01。 如果名称未知,则对sa登录名发起密码猜测和蛮力攻击更加困难。

加固建议:

在以下语句中用自定义的名称替换<different_user>值,然后执行以重命名sa登录名。

ALTER LOGIN sa WITH NAME = <different_user>;

入侵防范

9.高危-确保将SQL Server配置为使用非标准端口

描述:

如果启用,将为默认SQL Server实例分配默认端口TCP:1433,以进行TCP / IP通信。 管理员还可以将命名实例配置为使用TCP:1433进行通信。 TCP:1433是众所周知的SQL Server端口,应更改此端口分配。使用非默认端口有助于保护数据库免受针对默认端口的攻击。

加固建议:

  1. 在SQL Server配置管理器的控制台窗格中,依次展开“ SQL Server网络配置”,“ <实例名称>的协议”,然后双击TCP / IP或VIA协议。
  2. 在“ TCP / IP属性”对话框的“ IP地址”选项卡上,以IP1,IP2到IPAll的格式显示几个IP地址。 其中之一是用于回送适配器的IP地址127.0.0.1。 在计算机上为每个IP地址显示其他IP地址
  3. 将“ TCP端口”字段从1433更改为另一个非标准端口,或将“ TCP端口”字段保留为空,并将“ TCP动态端口”值设置为0以启用动态端口分配,然后单击“确定”。
  4. 在控制台窗格中,单击“ SQL Server服务”。
  5. 在详细信息窗格中,右键单击SQL Server(),然后单击“重新启动”以停止并重新启动SQL Server。

10.高危-确保“ xp_cmdshell”服务器配置选项设置为“ 0”

描述:

xp_cmdshell选项控制经过身份验证的SQL Server用户是否可以使用xp_cmdshell扩展存储过程来执行操作系统命令Shell命令并以SQL客户端内的行形式返回结果。 攻击者通常使用xp_cmdshell过程向数据库服务器的底层操作系统读取数据或从中读取数据。

加固建议:

运行以下T-SQL命令:

EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;

11.高危-确保在所有SQL中撤消对“来宾用户”的CONNECT权限

描述:

删除来宾用户有权连接到SQL Server数据库,但master,msdb和tempdb除外。 当登录名可以访问SQL Server但不能通过其自己的帐户访问数据库并且该数据库具有一个来宾用户帐户时,登录将采用来宾用户的身份。 撤销来宾用户的CONNECT权限将确保登录名在没有显式访问权限的情况下无法访问数据库信息。

加固建议:

以下代码段吊销了数据库中来宾用户的CONNECT权限。 适当替换<database_name>:

USE [<database_name>];
GO
REVOKE CONNECT FROM guest;

12.高危-确保从SQL Server数据库中删除“孤立的用户”

描述:

未在服务器实例上为其定义相应SQL Server登录名或未正确定义数据库用户的数据库用户无法登录到该实例,并且称为孤立用户,应将其删除。 孤儿用户应被删除,以避免在任何情况下滥用那些坏掉的用户 办法。

加固建议:

如果使用下面引用的Microsoft文档记录的过程,孤立用户无法或不应该与现有或新登录名匹配,请在适当的数据库中运行以下T-SQL查询以删除孤立用户:

USE [<database_name>];
GO
DROP USER <username>;

身份鉴别

13.高危-确保所有SQL身份验证登录名的“ CHECK_POLICY”选项都设置为“ ON”

描述:

将Windows中使用的相同密码过期策略应用于SQL Server内部使用的密码。 确保SQL登录名符合Windows Server Benchmark所应用的安全密码策略,将确保频繁更改具有sysadmin特权的SQL登录名的密码,以帮助防止通过蛮力攻击造成的损害。 控制 SERVER是sysadmin的等效权限,并且还应该要求具有该权限的登录名具有到期的密码。

加固建议:

使用以下代码段确定SQL登录名的状态以及是否强制执行其密码复杂性。

SELECT name, is_disabled
FROM sys.sql_logins
WHERE is_policy_checked = 0;

对于审核过程发现的每个<login_name>,执行以下T-SQL语句

ALTER LOGIN [login_name] WITH CHECK_POLICY= ON;

14.高危-SQL Server弱口令检查

描述:
若系统使用弱口令,存在极大的被恶意猜解入侵风险,需立即修复。

加固建议:
登录sqlserver,执行以下命令:

exec sp_password '<oldpassword>','<newpassword>','<user>'
其中为旧口令,为新口令,为用户名;如果以windows认证登录,在sqlserver客户端依次选择“安全性 ”>“登录名 ”,选中用户后将弱口令修改为复杂口令。 新口令应符合复杂性要求:

  1. 长度8位以上
  2. 包含以下四类字符中的三类字符:
  • 英文大写字母(A 到 Z)
  • 英文小写字母(a 到 z)
  • 10 个基本数字(0 到 9)
  • 非字母字符(例如 !、$、#、%、@、^、&)
  1. 避免使用已公开的弱口令,如:abcd.1234 、admin@123等

用户权限分配

15.高危-确保仅将Microsoft指定的默认权限授予公共服务器角色

描述:

public是包含所有登录名的特殊固定服务器角色。 与其他固定服务器角色不同,可以更改公共角色的权限。 遵循最小特权原则,不应将公共服务器角色用于在服务器范围内授予权限,因为这些权限将被所有用户继承。 每个SQL Server登录名都属于公共角色,不能从该角色中删除。 因此,授予该角色的任何权限将对所有登录名可用,除非已明确拒绝特定登录名或用户定义的服务器角色。

加固建议:

  1. 将在“审核”查询结果中找到的多余权限添加到需要访问权限的用户定义服务器角色的特定登录名上。
  2. 从公共角色撤消<permission_name>,如下所示
USE [master]
GO
REVOKE <permission_name> FROM public;
GO

16.高危-确保Windows本地组不是SQL登录名

描述:

本地Windows组不应用作SQL Server实例的登录名。 允许本地Windows组作为SQL登录名提供了一个漏洞,任何具有操作系统级别管理员权限(但没有SQL Server权限)的人都可以将用户添加到本地Windows组中,从而使他们自己或其他人可以访问SQL Server实例

加固建议

  1. 对于每个LocalGroupName登录名,如果需要,请创建一个等效的AD组,其中包含 仅所需的用户帐户。
  2. 添加AD组或单个Windows帐户作为SQL Server登录名并授予它 所需的权限。 3.替换<名称>后,使用以下语法删除LocalGroupName登录名。
USE [master]
GO
DROP LOGIN [<name>]
GO

安全审计

17.高危-确保将“登录审核”设置为“失败”和“成功登录”

描述:

设置日志记录成功和失败的登录SQL Server身份验证尝试。 记录成功和失败的登录信息可提供关键信息,这些信息可用于检测/确认密码猜测攻击。 此外,记录成功的登录尝试可用于在司法调查期间确认服务器访问。

加固建议

执行以下步骤来设置审核级别:

  1. 打开SQL Server Management Studio。
  2. 右键单击目标实例,然后选择“属性”并导航到“安全性” 标签。
  3. 在“登录审核”下选择选项“成功登录失败和成功登录” 部分,然后单击确定。
  4. 重新启动SQL Server实例。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Microsoft SQL Server 数据库系统配置安全基线是指为保护 SQL Server 数据库系统的安全性和稳定性,应当遵循的最佳实践和建议。 首先,配置强密码策略。管理员应该采用复杂、随机的密码,并禁止使用弱密码。此外,应定期更换密码以保持安全性。 其次,限制访问权限。管理员应根据需要为每个用户或角色分配适当的权限,只授权其必要的操作。定期审计和调整权限,以确保合适的用户访问权限。 再者,启用安全连接。通过启用 SSL/TLS 加密连接,数据在传输过程将得到有效的保护,提高数据库系统的安全性。 另外,进行及时更新和补丁。定期检查 Microsoft 官方发布的安全更新和补丁,并及时应用到 SQL Server 数据库系统,以防止已知漏洞被利用。 此外,限制网络访问。应仅允许授权的用户或远程 IP 地址访问数据库服务器,防止未授权的网络访问。 再者,启用审计功能。通过启用 SQL Server 的审计功能,可以监控和记录用户的数据库活动,以便及时检测和防止潜在的安全威胁。 最后,定期备份和恢复数据。管理员应定期备份 SQL Server 数据库,并确保备份文件的安全存储。此外,经常进行数据恢复测试,以确保在出现数据丢失或损坏时能够及时恢复。 通过遵循以上安全基线配置,可以增强 Microsoft SQL Server 数据库系统的安全性,降低数据泄露和风险的可能性。然而,每个组织和环境的需求可能有所不同,因此还应根据具体情况和安全策略进行适当的定制和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值