确认已经安装了NT/和SQL Server的最新补丁程序不用说大家应该已经安装好了但是我觉得最好还是在这里提醒一下
评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议 多协议是明智的选择 但是它有时不能在异种的环境中使用
给 sa 和 probe 帐户设定强壮的密码来加强其安全性设定一个强壮的密码并将其保存在一个安全的地方 注意: probe帐户被用来进行性能分析和分发传输 当在标准的安全模态中用的时候 给这个帐户设定高强度的密码能影响某些功能的使用
使用一个低特权用户作为 SQL 服务器服务的查询操作账户不要用 LocalSystem 或sa 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击 注意当使用企业管理器做以上设置时 文件注册表和使用者权利上的 ACLs同时被处理
确定所有的 SQL 服务器数据而且系统文件是装置在 NTFS 分区且appropraite ACLs 被应用 如果万一某人得到对系统的存取操作权限该层权限可以阻止入侵者破坏数据避免造成一场大灾难
如果不使用Xp_cmdshell就关掉 如果使用 SQL 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell
在任何的 isql/ osql 窗口中( 或查询分析器):
use master
exec sp_dropextendedprocxp_cmdshell
对 SQLExecutiveCmdExec 的详细情况请查看下列文章:
如果你不需要 xp_cmdshell 那请停用它请记住一个系统系统管理员如果需要的话总是能把它增加回来这也好也不好 一个侵入者可能发现它不在只需要把他加回来考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用 要找到其他的程序是否使用相同的 dll:
首先得到该 dll
select onamectext from dbosyscomments c dbosysobjects o where cid=oid and oname=xp_cmdshell
其次使用相同的 dll发现其他的扩展储存操作是否使用该dll
select onamectext from dbosyscomments c dbosysobjects o where cid=oid and ctext=xplogdll
用户可以用同样的办法处理下面步骤中其他你想去掉的进程
如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 当这些储存程序被停用的时候 一些企业管理器功能可能丢失) 这些包括:
Sp_OACreate
Sp_OADestroy
Sp_OAGetErrorInfo
Sp_OAGetProperty
Sp_OAMethod
Sp_OASetProperty
Sp_OAStop
如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 记住 我们在这里正在做的是锁定一个应用程序的功能 你的开发平台应该放到其他机器上
禁用你不需要的注册表存取程序(同上面的警告)这些包括:
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regremovemultistring
注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装所以他们的移除不被推荐
移除其他你认为会造成威胁的系统储存进程 这种进程是相当多的而且他们也会浪费一些cpu时间 小心不要首先在一个配置好的服务器上这样做首先在开发的机器上测试确认这样不会影响到任何的系统功能在下面是我们所推荐的有待你评估的一些列表:
sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_enumqueuedtasks
xp_eventlog
xp_findnextmsg
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
xp_makewebtask
xp_msver xp_perfend
xp_perfmonitor
xp_perfsample
xp_perfstart
xp_readerrorlog
xp_readmail
xp_revokelogin
xp_runwebtask
xp_schedulersignal
xp_sendmail
xp_servicecontrol
xp_snmp_getstate
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_sscanf
xp_startmail
xp_stopmail
xp_subdirs
xp_unc_to_drive
xp_dirtree
在企业管理器中安全选项 之下禁用默认登录(只有SQL ) 当使用整合的安全时候这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器
除去数据库的guest账户把未经认可的使用者据之在外 例外情况是master和 tempdb 数据库因为对他们guest帐户是必需的
若非必须请完全地禁用SQL邮件功能它的存在使潜在的攻击者递送潜在的 trojans 病毒或是简单实现一个DOS攻击成为可能
检查masterSp_helpstartup看有无可疑的木马进程 确定没有人已经在这里放置秘密的后门程序 使用 Sp_unmakestartup 移除任何可疑进程
检查masterSp_password看有无trojan代码比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存
记录所有的用户存取访问情况 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:
xp_instance_regwrite NHKEY_LOCAL_MACHINE NSOFTWARE\ Microsoft\MSSQLServer\MSSQLServerNAuditLevelREG_DWORD
重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升
除去不需要的网络协议
注意SQL 服务器的物理安全把它锁在固定的房间里并且注意钥匙的安全只要有机会到服务器面前就总是会找到一个方法进入
建立一个计划的任务运行:
findstr/C: Login Failed\mssql\log\**
然后再重定向输出到一个文本文件或电子邮件因此你监测失败的登录尝试这也为系统管理员提供一个好的记录攻击的方法 也有很多用来分析NT日志事件的第三者工具 注意: 你可能需要将路径换成你安装SQL的路径
设定非法访问和登陆失败日志警报到 企业管理器中的Manager SQL Server Messages 搜寻任何有关无权访问的消息 ( 从查找login failed和denied开始) 确定你所有感兴趣的信息被记录到事件日志然后在这些信息上设定警报 发送一个电子邮件或信息到一个能够对问题及时响应的操作员
确定在服务器和数据库层次上的角色都只被授给了需要的用户 当 SQL Server 安全模型 有许多增强的时候 它也增加额外的许可层我们必须监控该层确定没有人被授予了超过必需的权限
经常检查组或角色全体会员并且确定用组分配权限这样你的审计工作能够简化 确定当你在的时候 公众的组不能从系统表执行选择操作
花些时间审计用空密码登陆的请求 使用下面的代码进行空密码检查:
使用主体
选择名字
password
from syslogins
where password is null
order by name
如果可能在你的组织中利用整合的安全策略 通过使用整合的安全策略你能够依赖系统的安全最大简化管理工作从维护二个分开的安全模型中分离开来这也不让密码接近连接字串
检查所有非sa用户的存取进程和扩充存储进程的权限 使用下面的查询定期的查询哪一个进程有公众存储权限(在SQL Server中 使用 type 而不是 xtype):
Use master
select sysobjectsname
from sysobjectssysprotects
where sysprotectsuid=
AND xtype 在 (XP)
AND sysobjectsid=sysprotectsid
Order by name
当时用企业管理器的时候使用整合的安全策略 过去企业管理器被发现在标准的安全模态中储存 sa 密码在注册表的 plaintext 中 注意: 即使你改变模态密码也会留在注册表中 使用 regedit 而且检查键:
HKEY_CURRENT_USER\SOFTWARE\Microsoft
MSSQLServer\SQLEW\ Regedi
SQL
现在数