在多数的企业部署SQL Server时考虑最多的往往是数据库资源的扩展性和适用性,一直忽略了SQL Server部署中重要的因素–安全性。如果说篡改主页是黑客的一种发泄,获取企业的重要数据才是"商业黑客"的最终目的,而这也是最可怕的一件事情。
本文的内容将对SQL Server 2000 加固和防止主机入侵做一些技术上的交流。
数据库安全概念
1. 安全模型
关于数据库安全模型的讨论的一直就没有停止过,其中把SQL Server安装到本机还是采用防火墙隔离模式的话题是最为激烈的。尽管后者是比较麻烦的一种方法,但还是网络安全人士钟爱的安全模型。
作为一个全面的服务器管理平台,将负责管理服务器和应用基础设施的整个生命周期。而安全管理方面包括以下一些内容:管理操作系统、应用、补丁和配置中不断出现的变化;保证服务器、安全和应用配置策略的连续性。一个安全的数据中心必须在安全管理平台上自动实现软件升级、补丁和深层漏洞扫描及修复。数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。
2. 驱动模式
网络驱动库(Network Libraries)是SQL Server服务器为客户端提供数据交换的基础,在这个基础上多个网络驱动库(库)同时响应不同的客户请求,默认情况下SQL Server将使用TCP 1433端口和UDP 1434端口来监听。换句话说如果你通过端口扫描软件扫描的哪台主机开放着1433端口,这台服务器必定运行着SQL Server。
SQL Server 2000 漏洞综述
1. sa账户密码破解
有些管理员和程序员为了省事,SQL Server管理员sa 用的是空口令或弱口令,这样危险性十分巨大,而这些危险往往是初学者意识不到的,殊不知SQL Server的默认用户sa的权限等于Administrator的权限,也就是说没有sa用户做不了的任何事。
举一个例子:首先利用字典暴力破解了sa的密码为12345678,然后利用一些工具就可以直接对服务器进行操作。除了密码过于简单,造成这种漏洞还有一个原因就是因为xp_cmdshell 扩展存储过程可以运行任何操作系统命令,在防止脚本注入的环节中我们将介绍如何修补这一漏洞。
2. SQL Server缓冲区溢出
笔者回忆:2003年3月3号,我又一个难忘的日子,早上上网非常慢,一天的努力(没吃饭)才找出了根源,W32/SQL Slammer蠕虫病毒。
其实微软早在2002年7月就为这个漏洞发布了MS02-039号安全公告,那时的我意识到安全升级的重要性。当我们向一台SQL Server发送一个特定的数据包,服务器会出现缓冲区溢出,导致死机。而SQL Slammer蠕虫病毒正是利用这一漏洞使这些服务器最终成为傀儡,它们向网络发送无效UDP数据包,导致整个网络瘫痪。有一种传闻,微软就因为这个病毒推迟了SQL Server 2003的发布,直到今天才公布初露端倪的SQL Server 2005。
3. 其它
由于篇幅的限制我们不可能把所有的漏洞都一一说明,除了上述两个较为常见的漏洞外还包括:代码注入、跨库提升权限、SQL语句查询滥用、存储过程输入恶意代码等。这些漏洞都可能为黑客留下入侵的机会,一旦将某个普通用户提升为管理员,那么我们之前所作的努力都将付之东流。
建议:请程序员们不要再把sa的口令写在global.asa文件里面了,将sa口令以明文的方式放到Web网站的根目录下真的是一种不太好的办法。
加固步骤
1. sa口令符合复杂性要求
没有必要重复说"复杂性"了,但是,如果你在初始安全的时候没有设置sa的口令或者过于简单,就可以执行"SQL Server 企业管理器→SQL Server组→安全性→sa 账户属性"进行更改。
2. 及时进行安全升级
SQL Server不作为Automatic Updates升级一部分,并且SQL Server、MSDE、Analysis Services 都需要单独更新,这确实是一件比较麻烦的事。
SQL Serve 2000 补丁全集:
http://www.microsoft.com/china/technet/downloads/sqlsrvr.mspx。
★MDAC 升级:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6C050FE3-C795-4B7D-B037-185D0506396C&&displaylang=zh-cn。
手工检查SQL Server安全更新简直是一件痛苦的。还记得我们曾经提到"Microsoft 基准安全分析器"吗?利用它来扫描系统,从每个失败的检查旁边"Result details"(结果详细信息)的链接可查看缺少的安全更新的列表。单击后出现的对话框显示 Microsoft 安全公告参考号,单击该参考可了解公告的详细信息及下载地址。
3. 根据需求禁用不必要 SQL Server 服务
4. TCP/IP 是惟一启用的协议
在 Microsoft SQL Server 程序组中,启动"Server 网络实用工具"。在"常规"选项卡中确保 TCP/IP 是惟一启用的 SQL Server 协议,同时禁用所有其它协议。
5. NTFS权限的运用
限制Everyone组对"Program FilesMicrosoft SQL ServerMSSQL"目录的写入权限。
6. 激活SQL Server的身份验证审核日志
执行"企业管理器→SQL Server 组→SQL Server→右键选属性→安全性"选项卡进行配置,将审核级别设置为"全部"或"失败"。这些设置的应用对象是SQL Server 实例中所有的数据库。
7. 最小权限原则
针对于不同的数据库管理账户设计不同访问权限,比如我们建立了一个ylc的用户可以访问ylc数据库,那么微软推荐将"服务器角色"选项为空,在"数据库访问"选项中只选"ycl"库,数据库角色中允只选默认的"public"。