全力打造安全主机保护企业网站安全


在多数的企业部署SQL Server时考虑最多的往往是数据库资源的扩展性和适用性,一直忽略了SQL Server部署中重要的因素——安全性。如果说篡改主页是黑客的一种发泄,获取企业的重要数据才是“商业黑客”的最终目的,而这也是最可怕的一件事情。

本文的内容将对SQL Server 2000 加固和防止主机入侵做一些技术上的交流。

数据库安全概念

1. 安全模型

关于数据库安全模型的讨论的一直就没有停止过,其中把SQL Server安装到本机还是采用防火墙隔离模式(如图1)的话题是最为激烈的。尽管后者是比较麻烦的一种方法,但还是网络安全人士钟爱的安全模型。



图1 数据库安全设置


作为一个全面的服务器管理平台,将负责管理服务器和应用基础设施的整个生命周期。而安全管理方面包括以下一些内容:管理操作系统、应用、补丁和配置中不断出现的变化;保证服务器、安全和应用配置策略的连续性。一个安全的数据中心必须在安全管理平台上自动实现软件升级、补丁和深层漏洞扫描及修复。数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。

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 协议,同时禁用所有其它协议(如图2)。



图2 保留TCP/IP为惟一指令


5. NTFS权限的运用

限制Everyone组对“Program Files\Microsoft SQL Server\MSSQL”目录的写入权限。

6. 激活SQL Server的身份验证审核日志

执行“企业管理器→SQL Server 组→SQL Server→右键选属性→安全性”选项卡进行配置,将审核级别设置为“全部”或“失败”。这些设置的应用对象是SQL Server 实例中所有的数据库(如图3)。



图3 激活身份验证


7. 最小权限原则

针对于不同的数据库管理账户设计不同访问权限,比如我们建立了一个ylc的用户可以访问ylc数据库,那么微软推荐将“服务器角色”选项为空,在“数据库访问”选项中只选“ycl”库,数据库角色中允只选默认的“public”。

(T117) >

INSERT INTO table_name (column1, column2, ...) 
SELECT columnx, columny, ... 
FROM another_table

说明:也可以经过一个子查询(subquery)把别的表格的资料填入

2 查询资料

1) 基本查询

SELECT column1, columns2, ... 
FROM table_name

说明:把table_name的特定栏位资料全部列出来

SELECT *
FROM table_name
WHERE column1 = xxx 
[AND column2 > yyy] [OR column3 <> zzz]

说明:

1. '*'表示全部的栏位都列出来

2. WHERE之后是接条件式,把符合条件的资料列出来

SELECT column1, column2
FROM table_name
ORDER BY column2 [DESC]

说明:

ORDER BY是指定以某个栏位做排序,[DESC]是指从大到小排列,若没有指明,则是从小到大排列

2) 组合查询

组合查询是指所查询的资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。

SELECT *
FROM table1,table2
WHERE table1.colum1=table2.column1

说明:

1. 查询两个表格中其中column1值相同的资料

2. 当然两个表格相互比较的栏位,其资料形态必须相同

3. 一个复杂的查询其动用到的表格可能会很多个

3) 整合性的查询

SELECT COUNT (*) 
FROM table_name
WHERE column_name = xxx

说明:

查询符合条件的资料共有几条

SELECT SUM(column1)
FROM table_name

说明:

1. 计算出总和,所选的栏位必须是可数的数字形态

2. 除此以外还有AVG()是计算平均,MAX()、MIN()计算最大最小值的整合性查询

bordercolorlight = "black" bordercolordark = "#FFF