陈 辰,张 睿,韩伟力
(复旦大学 计算机国家级实验教学示范中心,上海 200433)
当前飞速发展的信息安全技术和严峻的网络安全形势,都对高校的信息安全人才培养提出了非常高的挑战和要求。为了落实“新工科”建设[1]的教学指导,培养出卓越的信息安全专业人才,必须改革当前本科生实验课程的教学理念和方法,科学设计更加合理、更具挑战性的实验内容以提高实验质量,成为当前教学改革的重点[2]。
在一般的传统安全实验教学中(如全球应用范围较广的安全实验平台Seed Labs[3]),平台给学生提供了较完备的攻击场景,学生在平台上根据预设的漏洞,构建攻击向量,当攻破预设的系统时,分析实验过程和数据,实验过程结束。
传统实验方式的优点是实验过程易于把控,实验内容较为基础,在引导入门型的学习阶段更加适合。但是,在实践中也体现出几点问题:①缺乏正向的防御能力培养,信息系统安全实验侧重培养攻击手段,但学生没有将对攻击方法知识的掌握转化为对正确防御方法的掌握,这些知识体系的培养对于安全技术人员是极为重要的;②限定场景,攻击数据形式受限,在限定好的场景中实验,学生对恶意攻击数据的模式和常见形态了解不足,知识掌握不够全面;③难以调动学生积极性,当面对求知欲强烈、勇于探索的学生时,由于实验过程受限,不易于发挥学生的主观能动性,难以激发学生的求知欲和求胜心理,抑制了人才培养的效果。
对抗式实验教学的特点主要有几点:①能力培养全面完整,实验需要同时锻炼学生的攻击与防御能力,真正做到攻防结合,以攻促防;②锻炼学生团队能力,实验以小组形式完成,锻炼了学生团队协作能力,使学生能够以团队形式完成更大规模的实验;③激发学生动力性,通过引入学生小组之间的对抗攻击和竞争,有利于激发学习热情和动力性,形成以学习者为中心的教学模式;④开放的实验场景,淡化实验内容边界,学生可以在开放的实验场景中主动拓展知识空间。
对抗式实验教学侧重对学生攻防能力兼顾的均衡培养,实验内容丰富且挑战性较高。笔者在实践中,要求学生以3~4 人为一个实验小组,互相配合完成实验任务。实验实施主要分为4 个阶段:①系统构建,各小组按照实验要求在服务器上设计一个预定功能程序,然后对系统做必要的安全防御,教师在软件设计时,可预设一些漏洞,以达到验证攻击有效性的目的;②攻击测试,分析其他小组设计应用,探索可能存在的漏洞,并针对性地来构造攻击向量发起攻击;③系统加固,学生监控、分析自己小组的服务器所受到的攻击流量,对程序进行加固;④交流总结,各组公开设计源码和攻击方法,交流总结实验心得。对抗式实验教学步骤如图1 所示。
图1 对抗式实验教学步骤
在一般的攻防比赛中,往往会预置多个类型漏洞。在实际教学实验中,根据课程要求,可以简单地将漏洞类型限制为某个单一类型,以达到简化实验场景,聚焦实验内容的目的。
对抗式实验的选题非常重要。由于实验教学方式的特殊性,所选的主题需要控制好难易程度,主题内容要聚焦考核的知识点,这都对实验设计提出了较高的要求。SQL 注入攻击在现实网络环境中的重要性和常见性,使其成为信息系统安全实验课程的重要组成部分。笔者以SQL 注入实验为原型,详细介绍基于对抗的实验方案设计。
SQL 注入是一种代码注入技术,在Web 服务中,如果在发送到后端数据库服务器的数据访问中未正确检查用户的输入,则会出现此漏洞[4]。
通过所设计的实验环节,指导学生掌握信息系统安全中的SQL 攻击与防御的理论与实践。按照实验设计步骤,学生依次掌握SQL 注入防御系统构建(正向设计)、恶意注入数据构造(反向攻击)、系统防御补强(正向防御)等知识。
1)系统构建。
对抗式实验教学锻炼学生正向系统设计能力,合理的设计Web 系统中对于数据库访问的方法,设计SQL 操作接口,以及适当的防御措施确保系统安全,如非法字符处理等。
学生小组根据预设场景要求,设计完成一个简单的Web 服务作为靶标系统,该系统可通过Web 页面提供用户访问后台数据库,并实现基本的增加、删除、修改和查询等访问操作。在本实验中,后台数据库包含2 张数据表:用户名和商品信息列表。
数据库中必须要预先存储有指定的数据条目。靶标系统构建结束后,所有源代码需要提交并进行代码冻结。实验环境中,操作系统为Linux、数据库采用MySQL,构建Web 服务的靶标系统设计语言可根据各个学校的实际情况进行选择。
有学生选择在对输入存在有数据库关键字进行过滤的操作中存在的漏洞,如发现有保留字仅删除一次导致的过滤方法不严谨,或对转义字符未做判断造成漏洞存在。预设一个漏洞的目的是构造攻击的得分点。在实验中,各小组可根据课堂讲授的理论知识自由选择漏洞设计方案,一般要求留有的漏洞难度中等、漏洞涉及的知识范围大致在授课范围内。
2)攻击测试。
锻炼学生探索系统漏洞、利用漏洞对Web系统发起攻击的能力。在充分理解的基础上,各组学生针对性地构造恶意输入数据,完成SQL注入攻击。成功注入后,对测试用例进行记录存档,并作为实验文档的组成部分进行提交。将所有的攻击记录进行整理,形成一个检查器,用于系统测试。在图2 中,A、B、C 3 个学生小组通过构造恶意数据,在不同小组之间开展攻击。
图2 实验环境:小组之间发起互相攻击
3)系统加固。
此阶段是为了培养学生通过分析系统受到的攻击数据来加强防御的能力,完成知识的迭代扩展、查漏补缺。收集自己靶标环境实例所受到的攻击数据和记录,发现自己所构建并维护系统的问题与缺陷,修复加固系统,从而实现系统更好的防御SQL 注入攻击的能力,然后使用上一阶段收集到的全部攻击数据进行测试。如果实验课时数充裕,可以做一次攻击迭代,即各小组重新设计攻击向量,对其他小组优化后的系统再做一次攻击测试,以观察攻击和防御的效果。
在实验中,除了预设的漏洞之外,学生经常会发现一些因自己系统设计漏洞而引发的有效攻击,此时就需要对代码进行加固设计。
4)交流总结。
本阶段会开放所有小组提交的程序源代码,学生通过阅读其他小组的源代码理解各种防御机制。通过交流总结,将不同小组的知识和经验分享,从而达到迭代式的学习目的。学生在本组学习经验的基础上,通过学习其他组的漏洞设计思路、攻击方法、安全防御措施,拓宽了思路,全面锻炼了攻防能力。
在实验中,学生可以通过分析系统受到的攻击数据来加强防御能力,从而完成知识的查漏补缺和扩展。学生根据受到的攻击,有针对性地进行系统补强,一方面,掌握了更扎实的攻击方法,另一方面,提高了系统防御SQL 注入攻击能力,这对以后从事正向的系统设计具有很好的帮助。
课后总结对提高实验质量具有重要作用。学生在实验过程中有了许多经验和心得,同时也探索掌握了许多新的知识,这些都需要课后总结来进行交流讨论。课后总结一方面是知识的分享传递,另一方面使学生了解互相之间的能力水平,获得自我激励和被他人认同的成就感,体现了对抗式实验中包含的合作分享精神。教学实践中发现,学生对此环节的技术交流非常积极,讨论热烈。
由于对抗式实验的解法具有开放性,各小组在直接对抗竞争的激励下,会积极探索尝试,发挥空间较大,所以对实验效果的评估需要特别设计。所以,笔者为对抗式实验教学设计了针对性的成绩评定方案,实践表明,该评定方法能够准确表达学生的学习程度,对学生也有很好的激励作用。
每个小组最终实验成绩由攻击有效分、攻击方法分和防御分组成:①基础攻击分(20%),攻击测试阶段,获得预设漏洞的分数;②进阶攻击分(20%),系统强化阶段,重跑所有攻击向量后的有效攻击得分,将各小组所提交攻击数据攻击成功的次数作为进阶攻击得分;③攻击方法分(20%),每个小组提交攻击数据样本,标明每条攻击数据的设计思路和知识点,并根据攻击数据的质量和涉及的知识点进行评分;④系统防御分(40%),对各小组实现的抗攻击的防御方法进行综合评价给分。
以往学生在SQL 注入实验中,能够掌握基础的SQL 攻击向量构造方法。对于系统防御设计方法仅限于理解,并不需要实际动手实践。
改革实验前,教学方法类似于Seed Labs[3]中的SQL 注入实验,学生对于一般的攻击方法能够达到中级掌握程度,对于复杂一些的如盲注利用和自动化注入攻击方法不作要求;在防御方法中,对于过滤器的设计有初步的理解,对于通过使用参数化查询和对象关系映射、转义字符等防御手段,由于不做实践要求,所以学生掌握并不深入。
改革实验后,学生对于攻击方法的掌握有了全面的提升,甚至有约75%的学生主动学习了使用SQLmap 进行自动化攻击的方法;在防御方法建设中,学生在熟练掌握过滤器设计方法的同时,对于数据库系统安全配置(访问控制)、关闭数据库错误提示等也进行了较全面的学习。表1 对笔者所带班级的32 名学生成绩取算术平均值进行统计(满分为5 分),
从表1 可以看出,采用新的实验方法以后,攻击能力中5 项指标的算术平均分从2.4 提升为4.2,成绩提升幅度为72.6%,防御能力的平均分更是从以前的1.9 提升为4.35。学生成绩统计表明了对抗式实验教学方法的有效性,不但在攻击能力上提升明显,对以前薄弱的防御能力也得到了很好的锻炼。
表1 学生掌握知识点比较
1)实验内容准备。
在课程教学中,笔者还设计了文件上传漏洞攻击、栈溢出攻击、弱口令攻击和数据隐写等若干典型的安全实验。在实验设计中发现,已有的实验内容并不能简单地移植到对抗式实验教学模式来完成。开放的实验过程,注重学生自我激励、主动探索的教学理念,小组间竞争对抗的方法,迭代式的知识发现,这些因素都对教师的实验选题、过程把控、实验结果分析总结等能力提出了更高的要求。
在实验中,笔者体会到必要的正向开发环节对学生的学习至关重要。为了启发学生思路,减少不必要的工作量,可以提供事先准备好的若干代码模板、数据记录器、效果验证器等一些必要,但是非核心功能组件供学生参考使用,由学生完成在模板基础上的二次开发,提高开发效率。
2)教师指导的重要性。
在实验结束后笔者对学生进行了实验效果匿名问卷调查,其中在“影响实验效果的外部因素”一题中,81%的同学选择了指导教师的专业辅导,19%的同学选择了实验平台与环境。此外,学生普遍反馈在自我激励学习过程中,同样非常需要教师的帮助和专业指导。调研数据显示,由于实验的开放性,对指导教师的业务能力提出了更高的要求,教师需要在熟悉基本实验内容情况下,对学生提出一些以往认为“超纲”的问题也能做出及时、准确的指导。
由于信息安全类课程自身特点,传统实验对于攻击方法非常重视,容易将攻击方法与正向安全防御设计割裂开,对安全防御设计的方法无法得到实践锻炼。通过本文的对抗式实验设计,一是有效地将攻击方法和防御设计的学习统一起来,重点培养了学生安全系统设计能力,并极大地锻炼了攻击能力;二是通过小组间对抗方法的引入,激发了学习热情和动力性,培养了主动探索知识的能力,促进了团队协作能力。在对抗式实验教学中,明显观察到学生较以往具有更高的主动性和探索性,为了达到更好的实验效果,学生自我驱动,自发投入更多的时间和精力。在完成基本的实验功能以后,会主动学习更多更复杂的攻击方法,再针对这些攻击方法,加强系统的防御设计,迭代发展。对抗式实验教学有助于形成以学习者为中心的工程教育模式,更利于培养出高质量的信息安全人才。