APP下载

典型内部网络SQL注入攻击与防范

2020-12-31

网络安全技术与应用 2020年2期
关键词:服务器端攻击者语句

(国防科技大学信息通信学院 湖北 430010)

当前,企业内部网、医疗信息网等典型内部网络中的Web应用系统普遍采用基于B/S模式的网络服务构架技术[1]。在此基础上设计的Web应用程序大都需与用户输入信息进行交互,以完成程序功能。SQL 查询是Web应用程序进行数据层操作的常用方式,通常由程序中可信的常量字符串和用户输入等不可信的外来数据动态拼接而成。SQL注入攻击就是利用Web应用程序中可能存在的输入合法性校验漏洞,通过精心构造巧妙的用户输入,绕过应用程序净化、过滤,使得用户输入的不可信数据可被数据库解析执行,从而获取数据层信息或权限[2]。根据开放式Web应用程序安全项目组织(Open application security project,OWASP)对近年来Web 安全威胁的评估分析显示,SQL注入攻击一直是Web应用最严重安全威胁之一[3]。

1 SQL注入攻击机理

SQL注入攻击的本质是攻击者通过精心构造,将用户输入与原有结构语句混合在一起,使得用户输入作为SQL 代码片段被数据引擎执行,从而进行恶意操作。

1.1 攻击机理

SQL注入攻击机理可结合具体实例予以说明:在Web系统后台数据库中,常含有名为users的数据表,用来存储系统用户相关信息,数据表中通常含有userID和password 两个字段,分别对应用户账户和密码,不同用户在系统中具有不同的操作权限。当用户使用账户密码登录Web系统时,身份验证模块常使用的以下两个SQL 查询语句,从users数据表中查询记录:

select*from users;返回查询记录

select count(*)from users;返回记录数量

在Web系统前台登录页面中,用户输入的账户(userID)和密码(password)后会作为查询值,成为SQL 语句的一部分,被执行后返回查询结果,从而判定用户是否存在。假如用户名为test,密码为test123,上面两条查询语句则将变为:

(1)select*from users where userID='test 使用账户密码登录使得用户输入的不可信数据可被数据库

(2)select count(*)from users where userID=账户密码登录使and password=)from user

正确登录情况下,语句(1)会返回一条查询记录,反之则身份验证失败。同理,正常登录情况下,语句(2)返回值为1,如果返回记录数量为0 或者大于1,则身份验证失败。如果攻击者输入通过精心构造数据,将userID和password 两个字段赋予特殊字符串,如账户值随机输入abc,密码输入构造的字符串’密码输入‘1 密码输入,则语句(1)变为:

(3)select * from users where userID=userID=账户密码登录使and pas’or‘1or ct;

根据逻辑操作符的优先级顺序,上述语句where后的查询条件分为userID=为优先级顺序,上述语句s where use’和1=1 两个逻辑式,且两个逻辑式通过运算符or 连接,只要有一个条件为真,即可满足查询条件。显然1=1为永真逻辑式,无论前一个逻辑式是否为真,均可通过身份验证。攻击者构造的恶意输入,使用单引号’闭合password 字段的查询值,且引入or‘1r 查询与原有的单引号’拼接成永真逻辑式,改变原有SQL 语句含义,从而绕过登录验证,可继续进行数据查询、添加、删除、更新等危险操作。

1.2 攻击技术

在上例中,攻击者通过精心构造用户输入,改变原有SQL 语句含义实施注入攻击,也被称为重言式SQL注入,除此之外,SQL注入还有以下几种常用的攻击方法:

(1)注释符攻击。攻击者在用户输入中插入注释符,过滤部分查询条件,可使得查询语句返回正常值。上例中,用户账户输入test--,查询语句①会变为select*from users where userID=得查询语句返回,关于密码的查询条件被--注释后不会被数据引擎执行,因此可在缺少密码的情况下完成身份认证。

(2)逻辑错误查询攻击。在这种攻击中,攻击者构造的语句不会被正确执行,但出现错误后,数据库的版本、类型、参数等信息可能会显示在返回的错误提示信息中,攻击者可借此收集有用信息,为进一步攻击做准备。

(3)盲注式攻击。如果返回错误信息被开发人员过滤了,攻击者可通过构造不同参数,根据页面反馈情况来收集信息。例如在网页URL地址后添加and 1=1 时,页面可正常显示,添加and 1=2 时页面不能正常显示,说明构造的参数能够被数据引擎执行,存在注入点,可进行注入攻击。

(4)附带查询攻击。在支持多语句查询的数据库中,攻击者可以在不改变原有语句含义的情况下,在后面加入新的语句,从而完成数据查询、添加、删除、更新等操作。与此类似,还有通过union 关键词构造联合查询的攻击方式。

(5)存储过程攻击。如果数据库开启了默认的存储过程,攻击者可借此实现SQL注入攻击,如使用SP_OACreate 创建ActiveX对象,实现对Asp 脚本的注入攻击。

(6)编码替换攻击。如果开发人员对逻辑运算符or、注释符--等进行了过滤,直接在输入数据中插入这些字符不能直接被数据引擎执行,可将这些字符经过URL、unicode 等编码方式编码后插入,通过编码替换的方式规避过滤,从而插入SQL 语句中被执行。

1.3 攻击特性

作为一种常用的网络数据库攻击技术,SQL注入具有以下攻击特性:

(1)隐蔽性。SQL注入使用正常的服务端口对服务器进行访问,访问语句与一般的页面访问请求高度相似,攻击隐蔽性强,难以被发现。

(2)广泛性。大量数据库软件随着Web应用系统在网络中部署应用,如果使用基于SQL标准语言数据库软件,应用程序缺乏严格的输入验证,这些系统均可能成为SQL注入攻击的攻击对象。

(3)变种多。如前所述,SQL注入攻击具有多样的攻击方式,有经验的攻击者还可能综合使用多种攻击方法,达成攻击目的。通过特征匹配等方法对SQL攻击进行检测识别,往往只能捕获典型的几种攻击,难以实现全面的攻击防护。

(4)门槛低。互联网中存在多种SQL注入工具,这些工具高度自动化,攻击者不需要掌握太多知识,即可实施SQL注入攻击。

(5)危害性大。由于安全力量不足,当前网络中大量Web应用系统存在被注入攻击的可能。一旦注入成功,攻击者可能通过植入木马,控制访问的客户端,进而实施其他攻击,具有高度危害性。

2 SQL注入检测

进行SQL注入攻击检测是完善Web应用系统安全体系,增强系统健壮性的必要环节。由于当前Web应用系统普遍采用基于B/S模式的网络服务构架技术,典型内部网络中Web应用系统SQL注入检测也可从客户端和服务器端进行[4]:

2.1 客户端SQL注入检测

客户端SQL注入检测可通过黑盒测试的方式实现,将Web应用系统下的站点路径导入至SQL注入检测工具软件后,工具软件会对被测站点进行模拟SQL注入攻击,检验Web应用系统中是否存在的SQL注入点。工具软件模拟SQL注入攻击过程是全盲注入,不需要考虑被检系统的实现方式,并且模拟攻击只验证SQL注入攻击的可行性,不会对Web应用系统造成破坏。工具软件进行模拟攻击时,采用的多为已有注入攻击方法,即使是同一种攻击方法,攻击效果也受字典内容、注入方式等多种因素影响,SQL注入攻击的检测效果也随工具软件的选择波动明显。当前,互联网中已有多种SQL注入检测工具,能够检测出典型的SQL注入点。为进一步提高典型内部网络中Web应用系统安全性,我们可借助工具软件对重要系统进行预先检测,及时提醒应用系统所有者进行漏洞修补,防范于未然。

2.2服务器端SQL注入检测

Web应用系统直接部署在后台服务器上,在服务器端可以直接获取到应用系统实现代码、数据库类型等信息。同客户端SQL注入检测相比,服务器端SQL注入检测不仅能检测出SQL注入漏洞,还能进一步分析漏洞产生原因,为漏洞修补提供直接支撑。服务器端SQL注入检测主要通过代码审计的方式实现,通过分析系统实现代码,挖掘其中的逻辑漏洞,分析恶意构造的SQL 语句在数据库中执行的可能性,以达到SQL注入检测的目的。服务器端SQL注入检测能够对应用系统进行全面分析,深度检测,适用于高安全性需求的应用系统,但检测效果依赖于检测人员的安全经验,且时效性较差。对于典型内部网络中的关键Web应用系统,可在专业安全机构进行注入检测,验证安全性后再上线使用,以提高系统抗SQL注入攻击能力,保证系统的正常运行和数据安全。

3 SQL注入攻击防范

SQL注入攻击广泛存在于使用访问数据库的Web应用中,且具有高度的隐蔽性。典型内部网络中的Web应用系统通常会涉及重要内部信息,一旦被攻击者成功注入,将造成严重后果。因此,加强典型内部网络中Web应用系统SQL注入攻击防范具有重要意义,可从技术和管理两个层面展开[5]:

(1)技术防范。在设计Web应用系统时,不仅应关注应用系统的功能性,更应提高系统安全性,设计防范SQL注入安全模块是从技术层面防范SQL注入攻击的常用方法。用户输入是SQL注入攻击的关键之一,在设计安全模块时,可采用黑名单/白名单机制,对用户输入进行验证,设置黑名单可拒绝用户输入已知的危险字符,白名单只接受特定类型的用户输入。白名单对用户输入有效性验证更充分,但可能影响应用系统的正常使用,黑名单效率较高但难以过滤全部危险输入,在实际工作中可结合系统特性灵活选用或综合使用[6]。除此之外,还可以通过信息编码、使用参数化语句等方式,提高SQL注入攻击难度,对可疑数据实施污点跟踪,在危险输入尝试创建SQL查询令牌时立即拒绝。

(2)安全管理。技术防范依赖于应用系统设计人员,加强安全管理是从系统运维保障出发,防范SQL注入攻击的重要工作。在部署应用系统时,需重点对数据库进行安全配置,包括数据库连接方式、账号权限、数据加密存储等,巩固应用系统数据层安全[7]。在系统运行过程中,管理员应通过日志审核等方式,时刻关注系统运行状况,如果出现页面短时间内被密集访问、数据库中存在可疑临时文件、数据信息被篡改等情况,应用系统可能遭受SQL注入攻击,应及时进行处置[8]。此外,管理员还可以通过加载Web 防火墙等方式,防范SQL注入攻击。

4 结束语

SQL注入攻击是典型内部网络中Web应用系统面临的重要安全威胁,随着Web应用系统的使用日益增多,典型内部网络SQL注入攻击与防范也将引起安全防护人员更多研究,探究其攻击机理、特性及检测防范方法,促进Web应用系统设计、开发、运维全周期SQL注入防范,可降低SQL注入攻击危害性,增强典型内部网络中Web应用系统的安全性。

猜你喜欢

服务器端攻击者语句
基于贝叶斯博弈的防御资源调配模型研究
Linux环境下基于Socket的数据传输软件设计
重点:语句衔接
正面迎接批判
正面迎接批判
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
我喜欢
作文语句实录