[转载]SQL Server安全列表
<p>信息来源: Ring04h blog</p><p>1. 确认已经安装了NT/2000和<a class="bluekey" href="http://www.yesky.com/key/1212/156212.html" target="_blank"><font color="#00007f">SQL Server</font></a>的最新补丁<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。 </p><p> 2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。</p><p> 3. 给 "sa" 和 "probe" 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意: probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。</p><p> 4. 使用一个低特权用户作为 SQL <a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>服务的查询操作账户,不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对<a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>的攻击。 注意当使用企业管理器做以上设置时 , 文件,<a href="http://www.yzcc.com/yzcc/sdfsdfsdfsdf/" target="_blank"><font color="#00007f">注册表</font></a>和使用者权利上的 ACLs同时被处理。</p><p> 5. 确定所有的 SQL <a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>数据,而且<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>文件是装置在 NTFS 分区,且appropraite ACLs 被应用。 如果万一某人得到对<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。</p><p> 6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell.</p><p> 在任何的 isql/ osql 窗口中( 或查询分析器):</p><p> use <a class="bluekey" href="http://www.yesky.com/key/4957/159957.html" target="_blank"><font color="#00007f">master</font></a></p><p> exec sp_dropextendedproc'xp_cmdshell'</p><p> 对 SQLExecutiveCmdExec 的详细情况请查看下列文章:</p><p> [url]http://support.microsoft.com/support/kb/article/Q159/2/21.[/url]</p><p> 如果你不需要 xp_cmdshell 那请停用它。请记住一个<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a><a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>管理员如果需要的话总是能把它增加回来。这也好也不好 - 一个侵入者可能发现它不在,只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>所用。 要找到其他的<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>是否使用相同的 dll:</p><p> 首先得到该 dll 。</p><p> select o.name,c.text from dbo.syscomments c , dbo.sysobjects o <a class="bluekey" href="http://www.yesky.com/key/4154/159154.html" target="_blank"><font color="#00007f">where</font></a> c.id=o.id and o.name='xp_cmdshell'</p><p> 其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。</p><p> select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll'</p><p> 用户可以用同样的办法处理下面步骤中其他你想去掉的进程。</p><p> 7. 如不需要就停用对象连接与嵌入自动化储存<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a> ( 警告 - 当这些储存<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>被停用的时候 , 一些企业管理器功能可能丢失). 这些包括:</p><p> Sp_OACreate</p><p> Sp_OADestroy</p><p> Sp_OAGetErrorInfo</p><p> Sp_OAGetProperty</p><p> Sp_OAMethod</p><p> Sp_OASetProperty</p><p> Sp_OAStop</p><p> 如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。 记住, 我们在这里正在做的是锁定一个应用<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>的功能 - 你的开发平台应该放到其他机器上。</p><p> 8. 禁用你不需要的<a href="http://www.yzcc.com/yzcc/sdfsdfsdfsdf/" target="_blank"><font color="#00007f">注册表</font></a>存取<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>。(同上面的警告)这些包括:</p><p> Xp_regaddmultistring</p><p> Xp_regdeletekey</p><p> Xp_regdeletevalue</p><p> Xp_regenumvalues</p><p> Xp_regremovemultistring</p><p> 注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。</p><p> 9.移除其他你认为会造成威胁的<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>储存进程。 这种进程是相当多的,而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的<a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>上这样做。首先在开发的机器上测试,确认这样不会影响到任何的<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>功能。在下面是我们所推荐的有待你评估的一些列表:</p><p> sp_sdidebug</p><p> xp_availablemedia</p><p> xp_cmdshell</p><p> xp_deletemail</p><p> xp_dirtree</p><p> xp_dropwebtask</p><p> xp_dsninfo</p><p> xp_enumdsn</p><p> xp_enumerrorlogs</p><p> xp_enumgroups</p><p> xp_enumqueuedtasks</p><p> xp_eventlog</p><p> xp_findnextmsg</p><p> xp_fixeddrives</p><p> xp_getfiledetails</p><p> xp_getnetname</p><p> xp_grantlogin</p><p> xp_logevent</p><p> xp_loginconfig</p><p> xp_logininfo</p><p> xp_makewebtask</p><p> xp_msver xp_perfend</p><p> xp_perfmonitor</p><p> xp_perfsample</p><p> xp_perfstart</p><p> xp_readerrorlog</p><p> xp_readmail</p><p> xp_revokelogin</p><p> xp_runwebtask</p><p> xp_schedulersignal</p><p> xp_sendmail</p><p> xp_servicecontrol</p><p> xp_snmp_getstate</p><p> xp_snmp_raisetrap</p><p> xp_sprintf</p><p> xp_sqlinventory</p><p> xp_sqlregister</p><p> xp_sqltrace</p><p> xp_sscanf</p><p> xp_startmail</p><p> xp_stopmail</p><p> xp_subdirs</p><p> xp_unc_to_drive</p><p> xp_dirtree</p><p> 10. 在企业管理器中"安全选项" 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的<a class="bluekey" href="http://www.yesky.com/key/4018/159018.html" target="_blank"></a><a href="http://www.yzcc.com/yzcc/sj/" target="_blank"><font color="#00007f">数据库</font></a>服务器。</p><p> 11. 除去<a href="http://www.yzcc.com/yzcc/sj/" target="_blank"><font color="#00007f">数据库</font></a>的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb <a href="http://www.yzcc.com/yzcc/sj/" target="_blank"><font color="#00007f">数据库</font></a>,因为对他们guest帐户是必需的。</p><p> 12. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,<a href="http://www.yzcc.com/yzcc/bd/" target="_blank"><font color="#00007f">病毒</font></a>或是简单实现一个<a href="http://www.yzcc.com/yzcc/dos/" target="_blank"><font color="#00007f">DOS</font></a>攻击成为可能</p><p> 13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>。 使用 Sp_unmakestartup 移除任何可疑进程。</p><p> 14. 检查master..Sp_pass<a href="http://www.yzcc.com/yzcc/wo/" target="_blank"><font color="#00007f">word</font></a>看有无trojan代码。比较你的产品scripts和一个新安装的<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>的默认scripts而且方便的保存。</p><p> 15. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:</p><p> xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer',N'AuditLevel',REG_DWORD,3</p><p> 16. 重写应用<a href="http://www.yzcc.com/yzcc/dsfe/" target="_blank"><font color="#00007f">程序</font></a>使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。</p><p> 17. 除去不需要的网络协议。</p><p> 18. 注意SQL <a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>的物理安全。把它锁在固定的房间里,并且注意钥匙的安全。只要有机会到<a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>面前,就总是会找到一个方法进入。</p><p> 19. 建立一个计划的任务运行:</p><p> findstr/C:" Login Failed"\mssql7\log\*.*'</p><p> 然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。这也为<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。</p><p> 20. 设定非法访问和登陆失败日志警报。到 企业管理器中的"Manager SQL Server Messages "搜寻任何有关无权访问的消息 ( 从查找"login failed"和"denied"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。</p><p> 21. 确定在<a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>和<a href="http://www.yzcc.com/yzcc/sj/" target="_blank"><font color="#00007f">数据库</font></a>层次上的角色都只被授给了需要的用户。 当 SQL Server 安全模型 7 有许多增强的时候, 它也增加额外的许可层,我们必须监控该层,确定没有人被授予了超过必需的权限。</p><p> 22. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>表执行选择操作。</p><p> 23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:</p><p> 使用主体</p><p> 选择名字,</p><p> pass<a href="http://www.yzcc.com/yzcc/wo/" target="_blank"><font color="#00007f">word</font></a></p><p> from syslogins</p><p> where pass<a href="http://www.yzcc.com/yzcc/wo/" target="_blank"><font color="#00007f">word</font></a> is null</p><p> order by name</p><p> 24. 如果可能,在你的组织中利用整合的安全策略。 通过使用整合的安全策略,你能够依赖<a href="http://www.yzcc.com/yzcc/cxd/" target="_blank"><font color="#00007f">系统</font></a>的安全,最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。</p><p> 25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(<a class="bluekey" href="http://www.yesky.com/key/4177/159177.html" target="_blank"><font color="#00007f">在SQL</font></a> Server中 使用 "type" 而不是 "xtype"):</p><p> Use master</p><p> select sysobjects.name</p><p> from sysobjects,sysprotects</p><p> where sysprotects.uid=0</p><p> AND xtype 在 ('X','P')</p><p> AND sysobjects.id=sysprotects.id</p><p> Order by name</p><p> 26. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 "sa" 密码在<a href="http://www.yzcc.com/yzcc/sdfsdfsdfsdf/" target="_blank"><font color="#00007f">注册表</font></a>的 plaintext 中。 注意: 即使你改变模态,密码也会留在<a href="http://www.yzcc.com/yzcc/sdfsdfsdfsdf/" target="_blank"><font color="#00007f">注册表</font></a>中。 使用 regedit 而且检查键:</p><p> HKEY_CURRENT_USER\SOFTWARE\Microsoft\</p><p> MSSQLServer\SQLEW\ Regedi\</p><p> SQL 6.5</p><p> 现在数据被隐藏在</p><p> HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group</p><p> ("SQL server组" 是默认值但是你可能已建立用户组因此相应地改变其位置)</p><p> 27. 发展一个审核计划而且订定每月的安全报告,对IT主管可用的报表包括任何的新exploit,成功的攻击 , 备份保护 , 和对象存取失败统计。</p><p> 28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的<a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>。 一旦一个使用者能够交互式进入一个<a href="http://www.yzcc.com/yzcc/hwq/" target="_blank"><font color="#00007f">服务器</font></a>之内,就有能用来获得管理员的存取特权得到管理员权限。</p><p> 30. 尽力限制对SQL Server的查询与存取操作。 用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会</p>页:
[1]
