频道栏目
首页 > 安全 > 系统安全 > 正文

Web-Server安全设置及针对数据入侵的安全策略

2004-11-28 19:03:10           
收藏   我要投稿
周敏 姚进 李生 杨齐寿
(四川大学,制造科学与工程学院,成都 610065)

摘 要:本文应用多种网络安全技术,对典型配置(Win 2000 SERVER+SQL+IIS5.0)的安全隐患进行分析,并提出了相应的对策。重点讨论了针对系统的安全配置及针对数据的SQL Injection防范,
关键词:网络安全; SQL Injection ; 系统 ; 数据

一. 引言
随着网络的普及和发展,基于Internet的各种系统也在各行各业中发挥着日益重要的作用。但由于计算机网络具有连接形式多样性、终端分布不均匀性和网络的开放性、互联性等特征,致使WEB系统易受黑客,恶意软件和其它不轨行为的攻击。而且,当其中涉及有关个人身份的隐私资料,或公司、学校等各种团体的敏感数据,甚至商业数据时,提高网络安全性尤为重要。本文将以WEB系统中的典型配置(Win2000 server+SQL+IIS5.0)为例,着重讨论WEB服务器的系统安全设置与SQL Injection的安全策略。

二. 网络安全隐患分析及安全技术
通常,我们所说的网络安全是指:网络系统的硬件、软件及其系统中的数据受到保护,不会因为偶然或者恶意的攻击而遭到破坏、更改、泄漏,系统能够连续、可靠、正常地运行,网络服务不中断。因此,通常网络安全包括了系统安全和数据安全两个部分。同样,对网络地恶意攻击行为也可大致分为系统型攻击和数据型攻击。在网络安全中,各种硬件设施,防火墙都是必不可少的。除此之外,系统的安全设置及代码的数据安全性也是其中不可忽视的一部分,本文将对此作深入的讨论。具体分析如下:
1.系统安全设置
以Windows 2000 server + SQL Server 2000 + IIS5.0为例:相对而言,这是我们最常用的网络服务器配置。但是微软的漏洞层出不穷,补丁一个接一个。因此,加固系统安全就显得异常重要。
首先,应尽可能选择专用的Web Server服务器,在安装系统时应断开服务器的网络连接,并在此基础上安装Service Pack 3的补丁程序。
打完补丁后修改注册表,首先禁止默认共享。在Windows 2000中,有一个"默认共享",这是在安装服务器的时候,把系统安装分区自动进行共享,虽然对其访问还需要超级用户的密码,但这是潜在的安全隐患,从服务器的安全考虑,最好关闭这个"默认共享",以保证系统安全。将键值:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparametersautoshareserver修改为0。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters autosharewks修改为0。如果没有这两个键值,新建即可。注意,新建时选择"双字节值"。
此外应禁止IPC$空连接,将键值
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa estrictanonymous修改为1。
IPC$(Internet Process Connection)是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,主机必须开了ipc$共享,否则是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表。
其次,针对IIS,要尽量避免把IIS安装在网络中的主域控制器上。因为在安装完IIS后,会在所安装的计算机上生成IUSR_Computername的匿名账户。这个账户会被添加到域用户组中,从而把应用于域用户组的访问权限提供给访问Web服务器的每个匿名用户,这样不仅不能保证IIS的安全性,而且会威胁到主域控制器。在安装完后,应运行IISLOCKD.EXE,该软件是微软发行的用于填补IIS漏洞的软件。但这并不足以保证IIS的安全,应对IIS做进一步的加固:
a. 删除和停用IIS的示范程序和目录,这是IIS自带的程序和文件,也是进攻者对web系统进行攻击的一个途径。

Click to Open in New Window

b. 为防止进攻者利用服务器的FTP设置和发送MAIL的功能对网站内容进行修改,如果服务器不需要FTP和发送MAIL, 可以删掉ftproot和mailroot 两个文件夹,并关掉相关服务。
c. 为避免日志文件被修改或覆盖,需要设置IIS日志文件的访问控制权限:默认情况下,IIS的日志会在"%systemroot%system32logfiles"目录下。如果可能,可以将日志的路径换一个地方。推荐访问控制权限:Administrators (Full Control) ;System (Full Control) ;Everyone (RWC). 这个步骤将防止一些有恶意的用户通过删除日志信息来掩盖他的记录。
d. 删除危险的脚本影射:
例如:对.htr文件的映射,请求处理存在堆溢出漏洞,远程攻击者可以利用此漏洞得到主机本地普通用户访问权限。而对idq.dll,在处理某些URL请求时存在一个未经检查的缓冲区,如果攻击者提供一个特殊格式的URL,就可能引发一个缓冲区溢出。通过精心构造发送数据,攻击者可以改变程序执行流程,执行任意代码。成功地利用这个漏洞,攻击者可以远程获取"Local System"权限。因此,删除一些并不需要的脚本影射,可以将利用漏洞攻击的可能性降至最低:

Click to Open in New Window

2.数据攻击
以下主要总结了针对SQL Injection 的安全防范策略及对SQL Server的设置。所谓SQL Injection,就是指利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。在利用Web 脚本语言(ASP,PHP)做前台+数据库做后台的WEB系统中,为达到与用户交互的目的,就不可避免的有一些东西是来自用户提交的信息,如用户的登陆信息,查询字符串,或用户可以远程修改的资料等等。这些信息往往可能被攻击者利用,将SQL语句篡改成其它组合语句,以达到其攻击目的。
这里,我们举一个简单的例子:
<html><head>
<title>text</title>
</head>
<body>
<%
dim conn
dim rst
username=request.querystring("username")
password=request.querystring("password")
set conn=Server.createObject("ADODB.Connection")
conn.open strConn 数据库连接字符串略
set rst=conn.execute("select * from login where username=" & username & " and password="
& password "")
if not rst.eof then
response.write "log in"
else
response.write "failed"
end if
rst.close
conn.close
%>
</body>
</html>

其中,实施SQL Injection的关键代码如下:
set rst=conn.execute("select * from login where username=" & username & " and password=" & password "")
在数据库中,我们在表login中定义username=user , password= pwd。如果在登录界面输入正确,则username , password 嵌入到SQL语句中,组成的URL为:
h t t p : / / localhost / test.asp ? username=username&password=password
如果,入侵者提交这样的URL又会怎样呢?
h t t p : / / localhost / test.asp ? username=username&password=any or 1=1--
结果,组成的SQL为:
select * from login where username=username and password=any or 1=1--
而1=1永远成立,--后面的东西将被忽略。所以,不管正确的密码是什么,这个语句返回的都将是login.
这就是最典型的SQL Injection,也是较为简单的一种。SQL Injection的威胁性也不止于此,还有诸如:得到后台数据库信息、读取数据库中的数据,甚至获取系统信息,修改注册表等。
根据以上特点,我们提出如下的防范措施:
首先,SQL Injection通常在与用户交互时发生,那么对用户的输入进行严格的过滤是非常重要的,尤其是对单引号、双引号以及"――"等符号。而且不仅是对QUERY_STRING环境变量的过滤,还要对所有的表单提交的数据以及用户可以通过修改来控制的下拉菜单、按钮等所有的交互数据进行过滤。同时,考虑到很多恶意的攻击可能会结合一些数据的组合来绕开这种过滤方法。因此,可以采用一种更安全的方法,进行一些安全替换等。比如:将单引号替换为两个单引号
input = replace (input," "," ")
但是,仅从程序的角度来过滤是不够的,还需要结合其它的安全手段,比如:使用防火墙过滤掉进入80端口的单引号、双引号以及"――"等特殊符号。
此外,还要对SQL Server 进行必要的安全配置,删除一些存储过程:
1.直接运行系统命令的存储过程:xp_cmdshell 。xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。
2. 删除访问注册表的存储过程,某些注册表存储过程甚至能够读出操作系统管理员的密码来:xp_regaddmultistring, xp_regdeletekey, xp_regdeletevalue, xp_regenumvalues, xp_regread, xp_regremovemultistring, xp_regwrite 。
3. OLE存储过程:Sp_OAcreate, Sp_OADestroy, Sp_OAGetErrorInfo, Sp_OAGetProperty, Sp_OAMethod, Sp_OASetProperty, Sp_OAStop
4. 其他有一定安全隐患的存储过程:如xp_servicecontrol, xp_stopmail, xp_startmail, xp_perfmonitor, xp_unc_to_drive, xp_perfend, sp_sdidebug, xp_availablemedia, xp_deletemail, xp_dirtree, xp_dropwebtask, xp_dsninfo,等。
其实在多数应用中根本用不到多少系统
相关TAG标签 策略 数据
上一篇:脚本攻击防范策略完全篇
下一篇:Linux下用gdb检测内核rootkit
相关文章
图文推荐
文章
推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站