基于WebGoat靶场的软件安全测试案例库应用研究

(整期优先)网络出版时间:2020-11-07
/ 3

基于 WebGoat靶场的软件安全测试案例库应用研究

张伟

中国劳动关系学院 应用技术学院

摘要:软件安全测试是发现软件安全漏洞的有效手段,在软件上线之前,必须对系统进行严格的软件安全测试,以确定软件是否存在安全漏洞以及既定的安全策略是否有效。本文利用WebGoat靶场,结合burpsuite等安全测试工具,设计了若干个软件安全测试案例,并选取部分案例,对其攻击方式和修复建议进行了介绍。

关键安全测试;Webgoat;案例库

0引言

进入21世纪以来,软件安全事件层出不穷,如政府网站信息被恶意篡改、知名酒店过亿开房数据被脱库、微盟删库跑路事件、敏感信息泄露、越权访问关键性信息等等。软件安全问题关系到企事业单位的信息资源和资产风险,也关系到政府和企业的声誉。因此,在软件在交付或上线之前,需要经过严格的软件安全测试,以发现软件是否存在安全漏洞以及既定的安全策略是否生效等。目前,软件安全测试已成为热门研究和人才需求的新领域。靶场是初学者练习软件安全测试的一个漏洞环境,在漏洞环境内集成了具有多种漏洞测试的网站,常用的靶场包括:WebGoat、DVWA、SQLol、hackxor等,其中WebGoat靶场所包含的漏洞较多,涵盖了目前常见的漏洞。本文选择Webgoat系统作为靶场,利用其中所集成的数十个网站作为目标软件,定制软件安全测试攻防案例。

1 常见软件安全漏洞

应用软件方面的安全问题非常多,而且涌现出很多新的安全问题,也是软件研制企业、软件使用企业以及软件使用人员比较关心、需要防范和解决的问题。根据权威机构OWASP基金会发布的2013版TOP10和2017版TOP10显示,目前出现频率较多的漏洞如下(按照漏洞发生频率排名):1. 注入型漏洞, 这类攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候,如SQL注入、OS注入等。2. 失效的身份认证和会话管理,此项漏洞对应着Web应用程序与身份认证和会话管理相关组件的功能,由于在实现的过程中存在缺陷,使得攻击者能够通过破坏或者绕过授权认证等方式,获得会话接入的能力来假冒被授权用户的行为。3. 跨站脚本攻击,恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。4. 直接引用不安全的对象,不安全的直接对象引用通常由开发者将文件、路径、数据库记录作为URL或表单的一部分,暴露给用户一个引用,导致攻击者能够通过更改此参数,尝试访问原本其并没有得到授权的对象,如目录遍历漏洞、文件上传攻击。5. 安全配置错误,攻击者通过访问默认账户、未使用的网页、未安装补丁的漏洞、未被保护的文件和目录等,以获得对系统未授权的访问。6. 敏感信息泄露,用户账号、个人信息、系统记录等敏感数据一旦泄露,会导致攻击者能够盗取或篡改机密的或私有的信息、使企业丧失品牌信誉等危害。7. 功能级访问控制失效,如果服务器没有或者错误验证访问者权限,会导致攻击者能够伪造请求从而在未经适当授权访问功能,如越权攻击。8. 跨站请求伪造攻击,攻击者盗用了用户身份,以用户的名义向存在漏洞的网站发送恶意请求,使用户在不知不觉中遭受恶意行为的侵害。9. 使用含有已知漏洞的组件,Openssl的心脏出血漏洞。10. 未验证的重定向和转发, 应用程序经常将用户重定向到其他网页,或以类似的方式进行内部转发,当目标网页是通过一个未验证的参数来指定时,就容易被攻击者利用。11. XXE注入型,攻击者利用XML中的System命令取得内部文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。12.不安全的反序列化,不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。13. 不足的日志记录和监控,使攻击者能够进一步攻击系统,并篡改、提取或销毁数据。

2.安全测试平台和工具

依据1中的常见软件安全漏洞,本文选取Kali Linux、burpsuite等安全测试平台和工具来定制软件安全测试案例库。

Kali Linux Kali 是软件安全测试初学者必用的一个信息安全工具平台,对于尚未有信息安全实践经验的学生来讲,避免了很多环境部署方面的麻烦。Kali Linux预装了300多种入侵和渗透的工具和软件,减轻了渗透测试工程师部署工具的压力,包含常用到的nmap、Sqlmap、 Metasploit、 BurpSuite、 wireshark、 Aircrack-ng等渗透测试工具。

burpsuite是定向抓数据、改数据、重发数据的最常用工具,包括:Burp Target、Proxy、Spider、Scanner、Intruder、Repeater、Sequencer、Decoder、Comparer等模块。Burp Suite的模块几乎包含整个安全测试过程,从最初对目标程序的信息采集,到漏洞扫描及其利用,多模块间高融合的配合,使得安全测试的过程更加高效。

2 软件安全测试案例库建设

2.1定制目标系统

本文选用在WebGoat靶场上来定制软件安全攻防案例。WebGoat是由OWASP负责维护的一个包含很多安全漏洞网站的靶场,这些漏洞并非程序中的bug,而是故意设计用来讲授Web应用程序安全课程的一个逼真的教学环境。WebGoat的配置主要包含两部分的工作:一是,配置Webgoat运行环境;二是配置Webgoat开发环境。

在本文所设计的案例库中,Webgoat运行环境所选用的是win7+JDK1.8+Webgoat7.1;Webgoat开发环境使用maven、eclipse等工具定制Webgoat系统内软件的代码。

2.2定制攻防案例

结合1中常见软件安全漏洞,利用已经搭建好的平台、测试工具以及定制好的目标系统,设计攻防实验,每个实验包含实验指导文档,每个实验指导文档包含:课程介绍、分析功能、实施攻击、分析代码、修复建议及验证5部分。本案例库共定制实验15个,分别是利用访问控制矩阵遍历所有的用户请求(爬虫机制)、绕过路径访问控制方案、基于角色的放开控制(越权)、Dom跨站脚本攻击、json注入攻击、不安全的客户端存储、并发缺陷、存储型跨站脚本攻击、OS命令注入、sql注入攻击、拒绝服务攻击、敏感数据泄露、WebShell恶意执行、会话管理缺陷、WebServics组件漏洞。由于篇幅所限,下面仅给出攻SQL注入攻击、DOM型跨站脚本攻击、越权攻击和目录遍历攻击的攻击过程和修复建议。

SQL Injection(数值型)的攻击实施过程:①在Numeric SQL injection页面选择某气象站,并使用BurpSuite收集http通信数据包;②将BurpSuite中选择气象站的post数据放入到Repeater中;③在Repeater界面修改发送数据为【station=101 or 1=1&SUBMIT=Go!】,显示除了执行参数中的sql语句外,还执行了一个or 1=1的表达式;④因为1=1结果为True,True跟任何值进行or运算结果都是True,因此将所有气象站的数据显示出来。修复建议:使用PreparedStatement方法对Sql语句进行预处理,先将sql String query = "SELECT * FROM weather_data WHERE station = ?"整体编译,“?”作为一个占位符,传递参数替换占位符,而不再进行编译,即可有效防止Sql注入攻击。

DOM型跨站脚本攻击的攻击过程:①在LAB:DOM-Based cross-site scripting页面的Enter your name文本框输入html脚本,如:World或x或Please enter your password:
Submit















;②在页面上看到html脚本执行后的结果,即应该作为输入字符串的内容被电脑当作命令给执行了。修复建议:使用escapeHTML方法对<、>、&、‘、“、空格等特殊字符进行转义替换,破坏了html语法节后,输入的内容就不能被当作命令执行了。

基于角色的放开控制(越权攻击)的攻击过程:纵向越权攻击,①在LAB:Role Based Access Control页面中使用普通权限的Larry用户登录,查看个人信息,并使用Burpsuite将查看个人信息的Post数据包放到Repeater中;②使用admin权限的John用户登录,删除某个用户,并使用Burpsuite将删除用户的Post数据包放到Repeater中;③经过对比发现,查询数据包和删除数据包的区别在于“employee_id=103&action=ViewProfile”中的action取值不同,④在Repeater中,将Larry查询数据包中的ViewProfile改为DeleteProfile,重发该数据报,employee_id为103的用户被删除了。横向越权攻击,①使用普通权限的Larry用户登录,查看个人信息,并使用Burpsuite将查看个人信息的Post数据包放到Repeater中;②在Repeater中,将employe_id改为非Larry,重放该数据包,非Larry的用户信息也Larry用户被查看到了;③可以使用Burpsuite的intruder功能遍历各种employe_id的信息,以便查看所有用户的信息。

绕过路径访问控制方案(目录遍历攻击)的攻击过程:①在Bypass a Path Based Access Control Scheme页面中,选择某个html文件通过view File查看其内容,并使用Burpsuite将该操作的Post数据包放到Repeater中;②在Repeater中查看到该html文件的目录为: F:\WebGoat\.extract\webapps\WebGoat\plugin_extracted\plugin\AccessControlMatrix\lessonPlans\en\PasswordStength.html,③将上述目录改为:/../../../../../WEB-INF/spring-security.xml,即可利用目录遍历漏洞查看spring-security.xml文件的内容。修复建议:将目录中的\\\\/:*?\"<>|过滤掉。

3结束语

基于Webgoat靶场的软件安全测试案例库非常适合初级软件安全测试工程师使用和学习。初学者可以从常见安全漏洞的攻击过程开始学起,逐步提升自己的代码阅读能力和代码防御能力。

基金:中国劳动关系学院2020年校级科研项目(编号:20XYJS002)

作者简介:张伟(1982, 10-),男,山东威海人,硕士,副教授,研究方向:软件测试、网络安全。