逻辑访问的安全管理
由于现代信息系统都是处在网络环境中,因此,存在非法用户通过网络进行非法访问的风险,非法用户的非法访问有可能造成敏感数据泄露、系统瘫痪、业务中断等严重后果。非法逻辑访问往往通过假冒主机或用户进行非授权访问,达到对信息完整性攻击和对服务干扰的目的。非法逻辑访问的手段和方法很多,如:SQL注入攻击、特洛伊木马、计算机病毒、蠕虫、逻辑炸弹、口令入侵、拒绝服务攻击(DOS)等,下面就以一种“黑客”们常用的且危害极大的攻击方法——SQL注入攻击做具体分析,找出具体对策。
1.SQL注入攻击的原理与危害
SQL是结构化查询语言(Structured Query Language)的缩写,是标准的数据库操作语言,当今的信息系统都离不开数据库,因此,也离不开SQL。SQL注入攻击(SQL Injection Attack)是攻击者应用http(Hypertext Transfer Protocol,超文本传输协议)的请求向B/S模式的信息系统发送恶意的SQL脚本,探测出信息系统开发者编程过程中的漏洞,然后利用这些漏洞对信息系统的数据库内容进行直接检索或修改。
大家都知道,信息系统基本上都是靠数据库来支撑的,尽管现用的数据管理系统种类较多(如Oracle,MS SQL Server,Sybase,DB2,MySQL,Access等),但是,他们基本上都支持SQL。虽然针对各种数据库管理系统的SQL语法不尽相同,但基本上是大同小异,易于区分和掌握,并且对于绝大多数防火墙来说,这种攻击是“合法”的,因此,SQL注入攻击易于实施,具有广泛性。一旦攻击成功,信息系统所用数据库中的数据可以任由攻击者查看和修改,攻击者可以直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限,其危害是极其严重的:如果信息系统中存放有秘密数据,则造成秘密泄露;如果攻击者修改数据库中的数据,要么造成系统的瘫痪,要么使系统中的数据以假乱真,误导系统的使用者做出错误的决策,从而造成更大的危害。
当今的数据库管理系统都有一些工具和功能组件,可以直接与操作系统及网络连接。这就意味着攻击者通过SQL注入攻击一个信息系统后,其危害就不只局限于存储在数据库中的数据,攻击者还可以设法获得对DBMS(数据库管理系统)所在的主机的交互式访问,使其危害从数据库向操作系统,甚至整个网络蔓延。因此,我们不仅应当将SQL注入攻击看作是一个对存储在数据库上数据的威胁,而且应当看作是对整个网络的威胁。
值得注意的是,专门进行SQL注入攻击的黑客工具早就出现了,利用这些黑客工具来进行攻击可能只需要几分钟时间就能成功,攻击者可能轻易获得数据库和信息系统的管理权限,甚至获得整个服务器的管理权限,其危害程度是可想而知的。
2.SQL注入攻击的防范对策
要有效防范SQL注入攻击,需要同时采取多种措施,可从应用系统编程防范、安全配置数据库管理系统、安全配置操作系统等方面进行。
(1)编程防范
编程防范就是在编写的程序中加强安全防范,堵塞漏洞。编程防范总的原则是少特权、多检验。
少特权就是不要给数据库连接或数据库用户太多的权限,应为不同类型的操作建立和使用不同的账户,其权限与其操作相匹配,不要给它授予多余的权限。有些编程者为了方便,直接使用超级用户的连接数据库,这样就给系统带来了很大的安全隐患,一旦攻击者攻击成功,系统就会任其摆布,危害极大。编程中应尽量多采用存储过程,如果一定要使用SQL语句,那么用标准的方式组建SQL语句,比如可以利用parameters对象,避免用字符串直接拼写SQL命令。
多检验就是对用户输入从多方面检验其合法性,如检验数据中是否包含单引号、双引号、分号、逗号、冒号、连接号等特殊字符或SQL语句、函数、数据类型等保留字符串,数据类型是否与预期类型匹配,数据长度是否超长等,一旦发现与预期不符的情况应放弃执行。检验用户输入数据的合法性应在客户端和服务端进行,两端的检验函数大体相同。在客户端检查没有通过就不提交到服务器端执行,这样可以降低服务器负荷,减少网络流量。当然,攻击者可以绕过客户端检验,直接将攻击代码提交到服务器端,因此,服务器端的检验更为重要。
此外,还要注意,当SQL语句执行出错时,不要直接将数据库返回的错误信息显示给用户,因为数据库返回的错误信息往往会透露一些数据库设计的细节(如表名、字段名等),攻击者往往故意设计一些使数据库报错的SQL语句来了解数据库的设计细节,达到进一步攻击的目的。
(2)数据库配置防范
数据库管理系统往往提供一些安全方面的配置项,如果将这些配置项配置准确,可以大幅度提高防范攻击能力。下面以MicroSoft SQL Server为例,讲讲如何进行安全配置。
①使用安全的账号和密码策略
大家都知道,SQL Server具有一个超级用户账号,其用户名称是sa,该用户名不能被修改也不能被删除,所以,必须对这个账号进行最强的保护。不在数据库应用中直接使用sa账号,新建一个(而且只建一个)与sa一样权限的超级用户来管理数据库,其他用户根据实际需要分配仅仅能够满足应用要求的权限,不要赋予多余的权限,所有用户(特别是超级用户)都要使用复杂的密码,同时养成定期修改密码的好习惯。
②使用Windows身份验证模式
SQL Server的认证模式有Windows身份认证和混合身份认证两种。应该使用Windows身份验证模式,因为它通过限制对Microsoft Windows用户和域用户账户的连接,保护SQL Server免受大部分Internet工具的侵害,而且,服务器也可以从Windows安全增强机制中获益。例如,Windows的身份验证协议以及强制的密码复杂性和过期时间提示。在客户端,Windows身份验证模式不再需要存储密码,存储密码是使用标准SQL Server登录应用程序的主要漏洞之一。
③管理扩展存储过程
存储过程是SQL Server提供给用户的扩展功能,其实很多存储过程在多数应用中根本用不到,而有些系统的存储过程很容易被黑客用来攻击或破坏系统,所以,需要删除不必要的存储过程。比如:xp_cmdshell存储过程就需要禁用,因为xp_cmdshell存储过程可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出,是一个功能非常强大的扩展存贮过程。一般的黑客攻击SQL Server时,首先采用的方法是执行master扩展存储过程xp_cmdshell命令来破坏数据库。一般情况下,xp_cmdshell对管理员来说也不是必需的,xp_cmdshell的禁用不会对Server造成任何影响。为了数据库安全起见,最好禁用xp_cmdShell。
(3)操作系统配置防范
操作系统一般都提供一些安全功能,如果配置好这些安全功能就能对攻击起到一定的防范作用。
①选择安全的文件系统
安全的文件系统可以对文件或文件的访问权限进行有效控制。如果服务器安装的是Windows系列操作系统,在硬盘分区时就应该选择NTFS作为文件系统的格式,因为它比FAT文件系统更安全。NTFS文件系统在性能、安全、可靠性方面提供了很多高级功能,通过它可以实现任意文件及文件夹的加密和权限设置,磁盘配额和压缩等高级功能。
②对数据库文件进行权限设置与加密
数据库文件是攻击者的重要目标,因此需要重点保护。我们可以利用操作系统提供的文件权限设置和加密功能保护数据库文件。比如:将SQL Server数据库系统安装到NTFS上,SQL Server将在注册表键和文件上设置合适的ACL(Access Control List),应用这些访问控制列表可实现权限控制。通过操作系统提供的加密文件系统EFS,数据库文件可在运行SQL Server的账户身份下进行加密,只有这个账户才能解密这些文件,使数据库更加安全。
③对应用系统文件进行权限设置与加密
应用系统所在的文件夹及文件也是攻击者的重要目标,我们同样可以利用操作系统提供的文件权限设置和加密功能对其进行保护。比如:如果应用系统采用IIS提供信息服务,就需要对Web站点目录设置合适的访问权限。一般情况下,不要给予目录以写入和允许目录浏览权限,只给予.ASP文件目录以脚本的权限,而不要给予执行的权限等。
以上通过对SQL注入攻击分析后在应用系统编程、数据库系统设置、操作系统设置三个层次提出的防范对策,对防范其他非法逻辑访问也同样具有参考价值。