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;
在所有返回的配置设置中,只应启用服务器运行所严格必需的项目
特别注意一下配置:
- xp_cmdshell 可用于执行代码。
- Ole Automation Procedures 可用于与 COM 对象交互并可能执行代码。
- clr enabled 可用于运行用户程序集
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 存储过程了
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

