MSSQL 防御

1. MSSQL自身防御

1.1. 身份验证与授权

  • 使用 Windows Authentication 而非 SQL Server Authentication ,因为其采用 Kerberos 安全协议、具备额外的密码策略,以及使用户管理更为简化
  • 在授予登录和用户权限时,应采用最小权限原则。其核心思想是所有用户应仅被授予执行任务所需的最低权限。
  • 通过密码策略设置强密码

其他的

  • 不为 public 服务器角色分配任何额外权限
  • 如果不需要,撤销 guest 数据库用户的 CONNECT 权限
  • 禁用并移除未分配给任何登录名的数据库用户
  • 撤销 sysadmin 组对 BUILTIN\Administrators 的访问权限(安装时默认授予,通常是用不到的)相关文章

需要注意的:

  • serveradmin 应被视为与 sysadmin 相同(因为提升权限很简单)
  • db_securityadmin 应被视为与 db_owner 相同 同上
  • db_owner 可以删除数据库,如果被分配到 TRUSTWORTHY 数据库,则可以升级为 sysadmin

1.2. 攻击面配置

建议保持所有未使用功能的禁用状态,以最小化攻击面

我们可以启用 advanced options ,然后使用 sp_configure 存储过程来枚举功能列表

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;

EXEC sp_configure;

EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;

Pasted image 20260316163446.png
在所有返回的配置设置中,只应启用服务器运行所严格必需的项目

特别注意一下配置:

show advanced options 本身也是一个配置设置,除非必要,否则应保持禁用状态。

1.2.1. 扩展存储过程

Microsoft 慷慨提供的大量(扩展)存储过程,某些过程如 xp_dirtree 、 xp_fileexist 和 xp_subdirs 可能被用于捕获服务器的 NetNTLMv2 哈希值

从技术上讲,这些存储过程无法被禁用,但可以撤销其执行权限,我们可以撤销公共角色的访问权限,使普通用户无法执行 xp_dirtree 存储过程

REVOKE EXECUTE ON xp_dirtree TO public;

然后普通用户就无法执行 xp_dirtree 存储过程了
Pasted image 20260316164006.png

1.2.2. 更新与补丁

  • Cumulative Update :一个累积更新,包含迄今为止所有先前关键按需热修复。
  • Service Pack :一套经过测试的累积性补丁集,包含所有热修复、安全更新、关键更新和常规更新。

建议保持 MSSQL Server 实例处于最新状态。话虽如此,在更新生产环境之前,在测试环境中验证更新不会破坏任何内容同样重要

2.  一般注意事项

2.1.1. 服务器安全

  • 保持服务器操作系统处于最新状态,以防止未修补的漏洞被利用
  • 在授予服务器访问权限时使用 Principle of Least Privilege 
  • 通过设置正确的文件权限来限制对物理 MSSQL Server 文件的访问
  • 使用适当的用户来运行 MSSQL Server 服务

2.1.2. 应用程序安全

攻击者与 MSSQL Server 实例交互的最常见方式之一是通过应用程序中的 SQL injection 漏洞
建议站库分离

2.1.3. 防火墙配置

限制对 MSSQL Server 实例的网络访问,不允许从公共互联网连接到 MSSQL Server

2.1.4. 定期安全审计

可以用 PowerUpSQL中的Invoke-SQLAudit