【数据库】MSSQL等保核查命令大全|亲测有效_+_持续更新_mssql数据库巡检命令
【数据库】MSSQL等保核查命令大全亲测有效 持续更新解决以下3个痛点1️⃣能查到的大部分检查命令没有运行结果的截图无法确定命令是否有效。2️⃣不同版本的被侧目标可能使用不同的命令过时或者较新的命令可能无法有效运行明显降低检查效率**。**3️⃣网络公开的检查方法整体缺乏系统性与持续维护测试环境虚拟机测试镜像版本cn_windows_server_2019_updated_july_2020_x64_dvd_2c9b67da.iso数据库版本Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)目录结构一、身份认证与账户策略* 1.1 认证模式检查 * 1.2 sa 账户状态 * 1.3 空账户 * 1.4 登录失败锁定【未查看】 使用 Windows 身份验证 使用 SQL Server 身份验证 (如sa账户) * 1.5 密码复杂度策略二、权限管理与最小特权* 2.1 sysadmin 成员列表 * 2.2 公共角色权限 (public) * 2.3 Guest 用户状态 * 2.4 xp_cmdshell 状态 * 2.5 其他扩展存储过程状态查询三、网络与表面面积配置* 3.1 端口/IP 查看 * 3.2 检查远程连接开关 * 3.3 加密连接四、审计与日志* 4.1 登录审计 * 4.2 日志轮转 * 4.3 日志信息 * 4.4 默认跟踪配置五、数据保护与加密* 5.1 数据库加密状态 * 5.2 敏感数据列加密六、补丁安全* 6.1 补丁/版本查看一、身份认证与账户策略1.1 认证模式检查1(仅 Windows 认证) 若为混合模式 (0)需确保sa已禁用或强密码。SELECT SERVERPROPERTY(IsIntegratedSecurityOnly);返回值含义身份验证模式1仅集成身份验证Windows 身份验证只能用 Windows 账号登录不支持 SQL Server 独立账号密码0混合模式身份验证SQL Server 和 Windows 身份验证既可以用 Windows 账号也可以用 sa 等独立账号登录1.2 sa 账户状态is_disabled 1(禁用) 若必须启用必须重命名且设置强密码。SELECT name, is_disabled FROM sys.sql_logins WHERE name sa;1.3 空账户默认结果为空严禁存在无密码账户。SELECT name FROM sys.sql_logins WHERE password_hash IS NULL;1.4 登录失败锁定【未查看】使用 Windows 身份验证• 当你使用 Windows 账户如DOMAIN\User登录 SQL Server 时SQL Server 完全依赖 Windows 操作系统进行身份验证。• 如果该 Windows 账户因为在其他服务如远程桌面、文件共享中密码输入错误过多而触发了Windows 账户锁定策略那么该账户在尝试登录 SQL Server 时也会失败并提示账户已锁定。• 此时SQL Server 只是“传递”了 Windows 的锁定状态。使用 SQL Server 身份验证 (如sa账户)•原生行为SQL Server 2019默认没有“连续失败 X 次自动锁定 Y 分钟”的原生配置功能。即使你开启了“强制实施密码策略” (CHECK_POLICY ON)这也只是强制密码符合 Windows 的复杂性要求长度、字符种类等并不包含失败计数锁定功能。•为何会被锁定手动禁用管理员通过ALTER LOGIN [name] DISABLE禁用了账户。映射关系如果该 SQL 登录名实际上映射到了一个 Windows 主体较少见通常 SQL 登录名是独立的则受 Windows 策略影响。误解很多时候应用报错“登录失败”被误认为是“账户锁定”实际上只是密码错误。第三方扩展/审计某些企业安全插件或触发器可能模拟了这种行为但这并非 SQL Server 引擎的标准功能。1.5 密码复杂度策略在Windows Server 2012 及更高版本包括 2016, 2019, 2022上创建新的 SQL 登录名时CHECK_POLICY的默认值通常是ON。如果此策略被启用密码必须满足以下条件不包含用户名密码不能包含用户账户名SAM Account Name或全名的一部分超过两个连续字符。长度至少 6 个字符这是 Windows API 的硬性下限尽管最佳实践建议更长。字符种类必须包含以下四类字符中的三类• 英文大写字母 (A-Z)• 英文小写字母 (a-z)• 数字 (0-9)• 非字母数字符号 (例如! $ # %)SELECT name AS 登录名, is_policy_checked AS 是否启用密码策略, is_expiration_checked AS 是否启用密码过期, type_desc AS 登录类型 FROM sys.sql_logins -- 只查SQL身份验证登录 ORDER BY name;针对单一用户的检查方式SQL Server 2019 Management Studio → 安全性 → 登录名 → 属性二、权限管理与最小特权2.1 sysadmin 成员列表仅限必要管理员加入严禁应用账号、普通用户加入此角色。EXEC sp_helpsrvrolemember sysadmin;2.2 公共角色权限 (public)• 每个数据库都有public角色所有数据库用户包括新建的用户默认自动成为其成员• 给public授权 给所有用户授权因此严禁给 public 分配过高权限如ALTER、CONTROL、DELETE等。• 全新数据库中public仅默认拥有CONNECT连接数据库、VIEW ANY COLUMN ENCRYPTION KEY DEFINITION等基础权限这是正常的• 若输出中出现SELECT、INSERT、EXECUTE等权限说明有人给public额外授权存在权限风险。SELECT * FROM sys.database_permissions WHERE grantee_principal_id 0;2.3 Guest 用户状态排查guest账户数据库默认来宾账户权限风险。SELECT * FROM sys.database_principals WHERE name guest;字段名含义关键说明is_disabledguest 账户是否禁用0 启用高风险1 禁用安全type_desc账户类型固定为SQL_USER是系统内置账户principal_id主体 IDguest 账户的固定 ID 为2不可修改2.4 xp_cmdshell 状态查看 xp_cmdshell 的启用状态run_value 1是高风险状态生产环境必须设为0EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell;2.5 其他扩展存储过程状态查询USE master; GO SELECT sp_OACreate AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name sp_OACreate AND type P AND schema_id 4 -- schema_id4 是 sys 架构 ) THEN 存在 ELSE 已删除 END AS 存在状态, -- 检查 OLE 自动化功能是否启用控制 sp_OACreate 能否执行 (SELECT CAST(value_in_use AS VARCHAR) FROM sys.configurations WHERE name Ole Automation Procedures) AS OLE自动化启用状态, 高风险可创建OLE对象执行系统操作 AS 风险等级 UNION ALL SELECT xp_regread AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name xp_regread AND type P AND schema_id 4 ) THEN 存在 ELSE 已删除 END AS 存在状态, 无独立开关存在即可能执行 AS 启用状态说明, 中高风险可读取注册表敏感配置 AS 风险等级 UNION ALL SELECT xp_dirtree AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name xp_dirtree AND type P AND schema_id 4 ) THEN 存在 ELSE 已删除 END AS 存在状态, 无独立开关存在即可能执行 AS 启用状态说明, 中风险可遍历服务器文件目录泄露路径信息 AS 风险等级 UNION ALL SELECT xp_cmdshell AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name xp_cmdshell AND type P AND schema_id 4 ) THEN 存在 ELSE 已删除 END AS 存在状态, (SELECT CAST(value_in_use AS VARCHAR) FROM sys.configurations WHERE name xp_cmdshell) AS 启用状态, 极高风险执行系统CMD命令 AS 风险等级; GO三、网络与表面面积配置3.1 端口/IP查看• 端口建议修改为非常用高位端口。• IP仅限非公网地址。配置管理器 - SQL server网络配置 - MSSQLSERVER的协议 - 属性 - 强制加密3.2 检查远程连接开关EXEC sp_configure remote access;远程DAC查看run_value 0 → 合规仅本地可用推荐 run_value 1 → 不合规允许远程使用DAC高风险。USE master; GO EXEC sp_configure show advanced options, 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure remote admin connections;3.3 加密连接需要改为 Yes同时需提前配置服务器证书否则用自签名证书。配置管理器 - SQL server网络配置 - MSSQLSERVER的协议 - 属性 - 强制加密四、审计与日志4.1 登录审计数据库管理工具 - 数据库名 - 属性 - 安全性 - 登录审核4.2 日志轮转数据库管理工具 - 管理 - SQL Server 日志 - 右键配置4.3 日志信息查看日志记录了的信息格式数据库管理工具 - 管理 - SQL Server 日志 - 选择对应日期的日志4.4 默认跟踪配置默认跟踪是 SQL Server 最轻量化的审计工具几乎不消耗服务器资源能自动记录以下关键操作安全审计必备• 数据库对象的创建 / 修改 / 删除表、存储过程、视图等• 登录账户的权限变更、创建 / 删除• 数据库备份 / 还原、分离 / 附加操作• 服务器配置选项的修改。status 1(运行中) 用于记录部分 DDL 操作和性能事件。SELECT * FROM sys.traces WHERE is_default 1;五、数据保护与加密5.1 数据库加密状态TDE透明数据加密是 SQL Server 对数据库文件的实时加密 / 解密作用是• 防止攻击者窃取数据库文件.mdf/.ldf后直接附加读取数据• TDE 保护的是数据库文件本身而非传输过程传输加密需配合 “强制加密连接”• 启用 TDE 后务必备份加密证书和私钥这是数据库恢复的关键。SELECT db.name, dek.encryption_state FROM sys.databases db LEFT JOIN sys.dm_database_encryption_keys dek ON db.database_id dek.database_id;进阶版USE master; GO SELECT db.name AS 数据库名, dek.encryption_state, CASE dek.encryption_state WHEN 0 THEN 未加密无加密密钥 WHEN 1 THEN 未加密有密钥但未启用 WHEN 2 THEN 加密进行中 WHEN 3 THEN 已加密合规 WHEN 4 THEN 密钥变更进行中 WHEN 5 THEN 解密进行中 WHEN 6 THEN 保护程序变更进行中 ELSE 未知状态 END AS 加密状态说明, dek.encryptor_type AS 加密器类型 FROM sys.databases db LEFT JOIN sys.dm_database_encryption_keys dek ON db.database_id dek.database_id ORDER BY db.name;字段 / 值含义 合规要求encryption_state 3数据库已启用 TDE 加密合规状态核心业务库推荐配置encryption_state 0/NULL未加密无加密密钥非核心库可接受核心库高风险tempdb加密状态只要实例中有任意数据库启用 TDEtempdb 会自动加密属于正常现象encryptor_type加密器类型CERTIFICATE证书推荐、ASYMMETRIC KEY非对称密钥5.2 敏感数据列加密实机核查密码、电话、身份证等敏感信息是否加密。非通用型手段【根据实际列命名决定】-- 遍历所有用户数据库检查敏感列加密状态 DECLARE DBName NVARCHAR(128); DECLARE SQL NVARCHAR(MAX); -- 创建临时表存储检查结果 CREATE TABLE#SensitiveColumns ( 数据库名 NVARCHAR(128), 表名 NVARCHAR(128), 列名 NVARCHAR(128), 数据类型 NVARCHAR(128), 是否AlwaysEncrypted BIT, 加密类型 NVARCHAR(50), 风险等级 NVARCHAR(10) ); -- 遍历所有用户数据库排除系统库 DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE name NOT IN (master, model, msdb, tempdb) AND state 0; -- 仅检查在线数据库 OPEN db_cursor; FETCH NEXT FROM db_cursor INTO DBName; WHILE FETCH_STATUS 0 BEGIN SET SQL N USE [ DBName N]; INSERT INTO #SensitiveColumns SELECT DBName N AS 数据库名, SCHEMA_NAME(t.schema_id) . t.name AS 表名, c.name AS 列名, ty.name AS 数据类型, CASE WHEN c.encryption_type IS NOT NULL THEN 1 ELSE 0 END AS 是否AlwaysEncrypted, ISNULL(c.encryption_type_desc, 未加密) AS 加密类型, CASE WHEN c.encryption_type IS NULL AND ( c.name LIKE %idcard% OR c.name LIKE %id_number% OR -- 身份证相关列 c.name LIKE %phone% OR c.name LIKE %mobile% OR -- 手机号相关列 c.name LIKE %password% OR c.name LIKE %pwd% OR -- 密码相关列 c.name LIKE %bank% OR c.name LIKE %card_no% -- 银行卡相关列 ) THEN 高风险 ELSE 合规 END AS 风险等级 FROM sys.columns c JOIN sys.tables t ON c.object_id t.object_id JOIN sys.types ty ON c.system_type_id ty.system_type_id WHERE -- 匹配敏感列命名规则可根据业务调整 c.name LIKE %idcard% OR c.name LIKE %id_number% OR c.name LIKE %phone% OR c.name LIKE %mobile% OR c.name LIKE %password% OR c.name LIKE %pwd% OR c.name LIKE %bank% OR c.name LIKE %card_no%;; EXEC sp_executesql SQL; FETCH NEXT FROM db_cursor INTO DBName; END; CLOSE db_cursor; DEALLOCATE db_cursor; -- 输出检查结果 SELECT * FROM#SensitiveColumns WHERE 风险等级 高风险 -- 仅显示未加密的敏感列 ORDER BY 数据库名, 表名, 列名; -- 清理临时表 DROP TABLE#SensitiveColumns;六、补丁安全6.1 补丁/版本查看SELECT VERSION AS 完整版本信息, SERVERPROPERTY(ProductVersion) AS 产品版本号, -- 核心用于匹配补丁 SERVERPROPERTY(ProductLevel) AS 补丁级别, -- RTM/SPx/CUx/GDR SERVERPROPERTY(Edition) AS 版本类型, -- 企业版/标准版/开发版 SERVERPROPERTY(BuildClrVersion) AS CLR版本, SERVERPROPERTY(ComputerNamePhysicalNetBIOS) AS 服务器名;关键标识说明•RTM初始发布版本无补丁必须升级•SPx服务包Service Pack大版本补丁•CUx累积更新Cumulative Update月度安全补丁•GDR安全更新仅修复高危漏洞无功能更新。[]学习资源为了帮助大家更好的塑造自己成功转型我给大家准备了一份网络安全入门/进阶学习资料里面的内容都是适合零基础小白的笔记和资料不懂编程也能听懂、看懂这些资料网络安全/黑客零基础入门【----帮助网安学习以下所有学习资料文末免费领取----】 ① 网安学习成长路径思维导图 ② 60网安经典常用工具包 ③ 100SRC漏洞分析报告 ④ 150网安攻防实战技术电子书 ⑤ 最权威CISSP 认证考试指南题库 ⑥ 超1800页CTF实战技巧手册 ⑦ 最新网安大厂面试题合集含答案 ⑧ APP客户端安全检测指南安卓IOS大纲首先要找一份详细的大纲。学习教程第一阶段零基础入门系列教程该阶段学完即可年薪15w第二阶段技术入门弱口令与口令爆破XSS漏洞CSRF漏洞SSRF漏洞XXE漏洞SQL注入任意文件操作漏洞业务逻辑漏洞该阶段学完年薪25w阶段三高阶提升反序列化漏洞RCE综合靶场实操项目内网渗透流量分析日志分析恶意代码分析应急响应实战训练该阶段学完即可年薪30w面试刷题最后我其实要给部分人泼冷水因为说实话上面讲到的资料包获取没有任何的门槛。但是我觉得很多人拿到了却并不会去学习。大部分人的问题看似是“如何行动”其实是“无法开始”。几乎任何一个领域都是这样所谓“万事开头难”绝大多数人都卡在第一步还没开始就自己把自己淘汰出局了。如果你真的确信自己喜欢网络安全/黑客技术马上行动起来比一切都重要。资料领取上述这份完整版的网络安全学习资料已经上传网盘朋友们如果需要可以微信扫描下方二维码 ↓↓↓或者点击以下链接都可以领取点击领取 《网络安全黑客入门进阶学习资源包》文章来自网上侵权请联系博主结语网络安全产业就像一个江湖各色人等聚集。相对于欧美国家基础扎实懂加密、会防护、能挖洞、擅工程的众多名门正派我国的人才更多的属于旁门左道很多白帽子可能会不服气因此在未来的人才培养和建设上需要调整结构鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”才能解人才之渴真正的为社会全面互联网化提供安全保障。特别声明此教程为纯技术分享本书的目的决不是为那些怀有不良动机的人提供及技术支持也不承担因为技术被滥用所产生的连带责任本书的目的在于最大限度地唤醒大家对网络安全的重视并采取相应的安全措施从而减少由网络安全而带来的经济损失本文转自 https://blog.csdn.net/2402_84205067/article/details/159923264?spm1001.2014.3001.5502如有侵权请联系删除。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2520287.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!