“Web安全基础”实验教学探讨
2019-04-23吴建军
吴建军
摘要:Web安全实验体现了网络空间安全的特色,作者围绕网络安全的教学思维,以多门软件开发课程为基础,结合互联网主流安全漏洞的攻防技术,综合成熟的安全攻防实验平台和学生自有的代码项目,实现了进行安全测试与防御,举例解析了实验课程项目。
关键词:Web安全;实验项目;漏洞;攻击;防御
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2019)08-0103-04
引言
“Web安全基础”(Web Security foundation)是网络空间安全专业的主要专业课程之一,笔者所在学校该本科专业的开课时间为第五学期。通过对Web应用系统各层次存在的安全隐患和安全威胁的教学,让学生建立Web安全总体概念,熟悉相关技术的基本原理,掌握相应的方法手段,提高Web安全应用意识和安全开发能力。作为应用型本科专业的培养,该课程配套的实验教学,应注重将Web安全领域的针对主要安全漏洞的攻击技能应用和对应预防安全威胁的安全开发能力培养相结合,也就是既具有一定的Web安全渗透测试能力,也具有较好的安全开发技能,以体现本专业的人才培养特色。
教学资源准备
Web安全实验不同于传统的计算机软件开发类实验,它直接与当前互联网应用的各类安全问题紧密相连,是多门专业课程的综合应用。为此,笔者所在学校首先从教师自身的网络安全实践应用能力培养与提高入手,专门安排该课程相关教师进入国内知名的网络安全公司开展为期半年到一年的实践学习与研究。
同时,与国内多家网络安全公司及安全教育公司密切合作,签署教育部产学研合作协同育人项目,引入多个安全攻防教学平台,为网络安全实践教学提供了较丰富的校内在线资源。
实验课程设计
本课程的主要预修课程包括操作系统、数据库应用、Web系统开发等,基于合作引入的网络安全攻防平台,合理地组织现有资源,并针对本校学生特点,设计具有系统性和开放性的实验课程内容。
“Web安全基础”课程的理论课主要讲述了客户端脚本安全、Web服务端应用安全以及安全运营等内容[1],可供参考的思维导图如下页图1所示。
配套的实验课以上述理论课为线索,参照国际主流的OWASP(Open Web Application Security Project,开放式Web应用程序安全项目)组织公布的Web安全应用Top10文档[2],同步关注Web安全领域的十大威胁,力争构建能激发学生兴趣、培养其安全应用思维和安全开发方法。具体实验内容如下页表所示,每次实验为2课时,共18课时。
实验项目示例
本课程实验的基本過程主要包括如下内容:漏洞现象验证及相关工具应用、安全漏洞利用、漏洞防御、进阶应用。根据理论课已讲述的内容,配合必要的工具软件,完成漏洞现象验证,实现基本的感性认识,结合相关安全事件,认识到漏洞带来的威胁。在配套的安全实验平台,可以完成进一步的漏洞利用(攻击)过程,在模拟的目标平台,实现漏洞利用,如获取Web应用的账户信息。漏洞防御主要与程序开发相关,结合以往专业课,对之前不安全代码进行改进,实现防御目标。进阶应用环节可以在课后继续学习中完成。下面,列举两个实验项目给予分析。
1.XSS漏洞的危害、攻击与防御
(1)XSS漏洞现象验证
①从网络安全实验平台验证。通过平台提供的基础案例,很快能从中验证XSS(Cross-site Scripting)跨站脚本攻击现象,如反射型XSS被执行时的弹窗现象。
②从学生以往课程实验中验证。如前文所述,Web系统开发是前驱课程,学生重新打开之前的实验项目,在调试中输入XSS代码测试,可以更显著地发现跨站脚本执行的结果。例如,一个基于JSP开发的数据库存取实验项目,在提交数据的表单中,填写包含如下脚本:
new Image().src="http://
192.168.0.169:8007/XSS_savecookie.asp?xcookie="+document.cookie;
原代码并未做XSS防御处理,将上述脚本直接保存至数据库。而后,在数据库读取显示的页面中,当访问上述记录时,直接把当前浏览用户的cookie信息发送到了攻击者的指定地址http://192.168.0.169:8007/XSS_savecookie.asp,从而发生了存储型跨站脚本攻击。特意设计了攻击者收集cookie信息的网站使用asp技术,以示接收信息的平台类型不受限制。学生从自己以往的实验项目中发现了Web安全漏洞,体会更加深刻。
(2)利用XSS的攻击
攻击过程可以根据需要,使用合作公司的实验平台或OWASP开放的WebGoat安全测试项目,也可以在学生自建虚拟机环境中测试。通过XSS漏洞利用,获取受害者cookie信息后,攻击者可以无需账号密码直接登录到相关网站。如果该账户权限是管理员,那么攻击者就获取了该网站的最高权限,危害很大。
(3)XSS防御
防御环节是最重要的,发现安全漏洞后,要通过适当的防范给予防御,这是本专业的主要培养方向。例如,在该实验项目中,学生对带有存储型XSS漏洞的Web项目进行了HTTP only设置。之后,在攻击者获取的信息中,就无法读取cookie信息,从而对该项目实现了有效的加固。当然,也让学生意识到防范的措施并不是单一的,也不是不计成本的。
(4)XSS进阶
进阶学习既有攻击方面的内容,也有防御方面的内容。给学生提供适当的进阶学习方向,如构建更隐蔽的XSS代码实现攻击,或采用更先进的Web框架开发技术,都可以有进一步的攻防学习进阶。进阶学习成果可以安排学生在课堂中讨论。
2.SQL注入的危害、攻击与防御
(1)SQL注入现象验证
①从网络安全实验平台验证。通过平台提供的基础案例,可以提供快速验证。例如,可以通过SQL注入,获取数据库中更多的信息显示。
②从学生以往课程实验中验证。与XSS相似,以往Web开发课程中的SQL存取并未注意防范注入问题。如图2所示,结合使用WebScarab拦截工具,对用户登录的密码进行SQL注入,修改password字段内容为“a' or 1=1 --”后提交请求,登录成功。它不仅绕过了用户密码,还避开了网页前端使用JavaScript脚本检测密码字符串规则。
(2)SQL注入的危害分析与注入语句设计
SQL注入直接发生在Web服务器上,可以篡改数据库以及提权等攻击,危害巨大。在学生构建SQL注入语句时,借用SSMS(SQL Server Management Studio)是一个直观的方法。使用SQL Server数据库管理平台,构建实验数据库,在其“新建查询”窗口,可以给予SQL语法,构建各类注入语句,并在实验数据库中完成测试。
在传统的数据库课程学习中,并未构建包含诸如“a' or 1=1 --”的SQL语句,而在当前的SQL注入实验中,需要配合Web页面中的场景,实现注入攻击。在SSMS中调试成功的注入语句,可以更好地让学生理解其中的原理。
(3)SQL注入的防御
同样,SQL注入的防御,也可以在学生自有项目中进行调试,实现加固。例如,在JSP中使用预编译语句:
String name=request.getParameter("curname");
String query="SELECT addr FROM userInfo WHERE username=?";
PreparedStatement pdst=
connection.prepareStatement(query);
pdst.setString(1, name);
ResultSet results=pdst.executeQuery();
使用预编译SQL语句,语义不会发生改变。上述代码中,字段值的变量用“?”表示,攻击者无法改变SQL的结构,即使插入类似于上文“a' or 1=1”的字符串,也只会把该字符串作为username的值进行查询,而不会发生注入攻击。
(4)SQL注入的进阶
SQL注入的基本原理在于开发者违背了“数据与代码分离原则”,在需要“拼接”的地方必须进行安全检查。[3]在进阶攻击中,攻击者可以构建功能更多的SQL语句,实现数据库数据的下载或篡改;还可以通过SQL注入在数据库中创建触发器,实现持续性攻击;还可以通过进一步的手段实现提权,控制整个Web服务器。理解攻击者更多的手段,是安全开发的必要准备。
结语
实验教学是培养学生掌握发现、分析和解決问题能力的重要环节。[4]笔者所在学校的Web安全实验整理了多方面的教学资源,从通用性的网络安全实验平台学习验证问题的现象,结合自身开发的项目代码分析问题的原因与适当的解决方法,进而综合各种资源提升学生的学习兴趣与成效。同时,结合《中华人民共和国网络安全法》的教育,培养有技术、知法守法的专业人才,通过几届学生的教学实践,教学效果良好。
参考文献:
[1][3]吴翰清.白帽子讲Web安全[M].北京:电子工业出版社,2014.
[2]OWASP.OWASP Top 10 2017[EB/OL].http://www.owasp.org.cn/owasp-project/OWASPTop102017v1.3.pdf.
[4]杜晔,陈贺男,黎妹红,等.Web应用安全实验教学探讨与案例评析[J].计算机教育,2015(19):17-19.
基金项目:本文获得浙江师范大学“《软件安全》课程仿真实验项目建设”(SJ201823)资助。