最近都在做系统安全加固,今天跟大家分享下 sqlserver的加固建议
PS:生产系统加固前,一定要进行验证后再上线
1. 【高危】确保将“ sa”登录帐户设置为“已禁用”|服务配置
描述
sa帐户是sysadmin中一个广为人知且经常使用的SQL Server特权帐户。 这是安装期间创建的原始登录,并且始终具 Principal_id = 1,sid = 0x01。实施此控制可降低攻击者对众所周知的主体执行暴力攻击的可能性。
加固建议:加固后sa不允许登录
USE [master]
GO
DECLARE @tsql nvarchar(max)
SET @tsql = 'ALTER LOGIN ' + SUSER_NAME(0x01) + ' DISABLE'
EXEC (@tsql)
GO
2. 【高危】确保“sa”登录账户已重命名|服务配置
描述
sa帐户是具有sysadmin特权的众所周知且经常使用的SQL Server登录。 sa登录名是安装期间创建的原始登录名,并且始终具有principal_id = 1和sid = 0x01。 如果名称未知,则对sa登录名发起密码猜测和蛮力攻击更加困难。
加固建议
ALTER LOGIN sa WITH NAME = <different_user>;
3. 【高危】确保“ xp_cmdshell”服务器配置选项设置为“ 0”|入侵防范
描述
xp_cmdshell选项控制经过身份验证的SQL Server用户是否可以使用xp_cmdshell扩展存储过程来执行操作系统命令Shell命令并以SQL客户端内的行形式返回结果。
攻击者通常使用xp_cmdshell过程向数据库服务器的底层操作系统读取数据或从中读取数据。
加固建议
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
4. 【高危】确保所有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;```
对于审核过程发现的每个,执行以下T-SQL语句
```sql
ALTER LOGIN [login_name] WITH CHECK_POLICY= ON;
5. 【中危】确保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;
对于审核程序发现的每个,执行以下T-SQL语句:
ALTER LOGIN [login_name] WITH CHECK_EXPIRATION = ON;
6. 【中危】确保将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。




