“软件漏洞分析与防范”课程建设
2018-03-26曹晓梅朱枫沙乐天
曹晓梅 朱枫 沙乐天
摘要:
我国网络空间安全面临严峻考验,软件漏洞是其根源之一,因而培养掌握漏洞分析与挖掘技术,具备扎实安全编程技能的信息安全人才刻不容缓。“软件漏洞分析与防范”是信息安全专业本科生的一门专业课,根据课程特点在教学内容安排上注重与时俱进、理论结合实践,培养学生的动手能力,同时采用案例式教学和基于竞争机制的启发式教学,以增强学生的学习主动性和创新能力。实践证明,课程建设取得了良好效果,学生的专业知识水平和综合能力得到了较大提高。
关键词:
软件安全;漏洞分析;漏洞挖掘;安全编程;课程建设
DOIDOI:10.11907/rjdk.172504
中图分类号:G434
文献标识码:A文章編号文章编号:16727800(2018)003021704
英文摘要Abstract:China′s cyberspace security is facing a severe test and software vulnerability is one of the root causes. It is urgent to cultivate information security talents who master vulnerability analysis and mining technology, and can fundamentally improve software security in the process of development. Software vulnerability analysis and prevention is a specialized course for undergraduates majoring in information security. According to the characteristics of the course, the arrangement of the teaching content emphasizes on keeping pace with the times, combining theory with practice, and cultivating students′ practical ability. Case based teaching and heuristic teaching based on competition mechanism are adopted to enhance students′ initiative and creativity. Practice has proved that the construction of the curriculum has achieved good results, and the level of students' professional knowledge and comprehensive ability has been effectively improved.
英文关键词Key Words:software security; vulnerability analysis; vulnerability mining; security programming; course construction
0引言
软件是计算机系统的灵魂、信息化的核心以及互联网应用的基石。现代社会对信息系统的依赖主要体现为对软件的依赖,信息系统缺陷在很大程度上是因为软件问题产生的。随着软件规模不断扩大,软件的开发、集成变得越来越复杂,新型应用软件数量急剧增加,导致软件产品在推出时总会存在很多对系统安全可靠运行构成严重威胁的软件漏洞。与此同时,软件运行和开发环境从传统的静态封闭状态变为互联网环境下的动态开放状态,越来越多软件漏洞被发现与利用,恶意代码急剧增加,且传播速度大大加快。软件安全面临着前所未有的严峻挑战,对我国网络空间安全甚至国家安全造成巨大威胁[1]。不论是对于国家的国防和基础设施建设,还是国民经济、百姓生活各个方面,都迫切需要具有高度安全意识,精通软件漏洞挖掘和分析技术,能在开发全过程中从根本上提高软件安全性的信息安全应用型人才。
在教育部信息安全专业类教学指导委员会于2010年提出的《信息安全类专业的专业指导规范》[2]中,信息安全学科的研究方向被分为密码学、网络安全、信息系统安全和信息内容安全,软件安全隶属于信息系统安全,是信息安全专业的核心和主干课程之一。目前,国内数所开办信息安全专业的高校开设了软件安全相关课程,如武汉大学、北京邮电大学、中国地质大学的“软件安全”,中国科学技术大学的“软件安全与测试”,中南大学的“安全编程技术”,华中科技大学研究生课程“漏洞分析与发现技术”等,但整体而言,相比于密码学和网络安全领域较为成熟的信息安全专业课程,软件安全类课程尚属新兴课程,对这类课程教学内容、教学方式、教学效果等方面的综合研究仍处于初级阶段。
南京邮电大学是江苏省高校中最早设置信息安全专业的学校,2002年开始招收本科生,2007年被教育部评定为国家特色专业,在密码学、网络安全、系统安全等方面具有近10年的课程建设和授课经验。目前,南京邮电大学在软件安全领域共开设了“逆向分析技术”、“软件漏洞分析与防范”和“计算机病毒防治”3门信息安全本科生专业课。3门课程各有侧重,相辅相成,根据学校本科培养计划分别在第四、五、六学期逐次展开。“软件漏洞分析与防范”课程始建于2013年,课程围绕Windows平台上软件漏洞的分析、利用、防范与挖掘等内容展开。本文首先介绍课程的教学目标、定位和特点,然后结合多年教学实践经验,着重从教学内容、教学模式两方面对课程建设成果进行梳理和总结。
1课程教学目标、定位与特点
“软件漏洞分析与防范”是信息安全专业本科生的一门专业课,共32学时,含24学时理论课和8学时实验课。通过课程学习,使学生对漏洞产生的原因和危害有着深刻认识,在编程时具有高度的安全意识和扎实的安全编程技能;充分了解漏洞分析与挖掘技术在信息与网络社会中的地位和作用,增强信息安全意识和自觉维护信息安全的社会责任感;在学习知识和技术的同时,培养学生思考、分析和解决漏洞问题的能力,满足社会对网络空间安全应用型人才的需求。课程还可进一步拓展为面向全校的任选课,为软件工程、计算机科学与技术等相关专业有兴趣的学生提供安全编程的基础课程,使学生能够在软件开发全过程中,从根本上提高软件的健壮性和安全性,使其在遭受恶意攻击时依然能够安全可靠地运行。
“軟件漏洞分析与防范”课程呈现覆盖面广、实践性强、技术更新换代快3个突出特点:
(1)涵盖面广。课程涵盖汇编语言、高级程序设计语言、计算机组成原理、操作系统、逆向分析等多个方面,与此同时,不同的软硬件系统与不同编程语言漏洞的成因、利用和防范机制也存在较大区别,决定了教学内容的选取和教学过程的实施必须脉络分明、有的放矢。
(2)实践性强。课程对调试技术、逆向技术、漏洞利用和挖掘等实践能力有较高要求。因此,除理论知识外,更要注重对学生应用能力的培养,学用结合,切实提高学生的动手实践能力。
(3)技术更新换代快。在不断的博弈中,软件漏洞的相关知识体系和技术手段更新换代较快,对漏洞问题的研究必须跟踪当前计算机系统及其安全问题的最新发展动态。
2教学内容设置
2.1教学内容及教材选取
“软件漏洞分析与防范”课程覆盖面广,需要事先掌握较多的计算机专业基础知识,为此其在本科培养计划被列为高年级的专业限选课。与此同时,漏洞具有系统相关性,只能针对目标系统的操作系统版本、其上运行的软件版本以及服务运行设置等实际环境,具体谈论其中可能存在的漏洞及可行的解决办法,在课堂上难以兼顾不同种类的硬件平台、操作系统或编程语言。因此,必须做到目标明确、有的放矢。本专业着重介绍了Windows操作系统的软件漏洞分析、利用与防范,其原因在于两点:一方面Windows系统普及率高,占有约90%的市场份额;另一方面Windows平台具有众多功能强大的调试工具和反汇编软件,方便对运行于其上的软件进行漏洞分析和研究。
软件漏洞利用与分析的相关书籍在国内并不多见,这些书籍有的侧重于对软件安全知识体系的全面介绍,软件漏洞仅作为其组成部分[14],有的侧重于从技术层面对漏洞进行剖析[57],有的侧重于软件安全开发[89],虽有收获,但均无法有效地切合本课程授课内容。当前,本专业暂时选用武汉大学彭国军等老师的《软件安全》作为教材,侧重介绍其中软件漏洞利用与防护部分,并选用王清的《0day安全:软件漏洞分析技术》作为指定教学参考书。与此同时,从国家信息安全漏洞共享平台等官方漏洞发布网站,以及看雪、i春秋、红黑联盟等热点网站获取本领域的最新发展动态,作为对课程内容的补充。目前,课题组正在筹划本课程的教材建设,希望通过3~5年的教学实践完成一部相关教材编写。
2.2教学安排
课程教学内容主要包括两部分:第一部分为第1~3章,主要致力于漏洞分析,着重介绍Windows平台下软件漏洞的成因、原理与利用,使学生对软件漏洞的产生和危害有深刻的认识和理解;第二部分为第4~7章,重点介绍漏洞防范措施,包括微软的漏洞防护机制、软件安全开发以及漏洞挖掘等,最后简单介绍软件漏洞的发展趋势。教学内容及课时分配如表1所示。
各章基本教学内容如下:
第1章:了解漏洞相关概念与Windows平台下二进制文件结构和内存方面的基础知识,熟悉漏洞分析中OllyDbg、IDA Pro等常用软件工具,了解常见的漏洞分析方法。
第2章:掌握栈溢出漏洞、堆溢出漏洞的成因、原理和危害,了解格式化串漏洞、整数漏洞、双重释放漏洞、释放重引用漏洞的成因和危害。通过实验1,加深学生对缓冲区溢出漏洞原理及危害的理解。
第3章:了解漏洞利用的具体技术以及exploit的结构,了解Shellcode的编写语言和关键技术,熟悉Metasploit漏洞利用框架。通过经典案例分析进一步掌握漏洞利用的原理、方法和危害。
第4章:掌握Windows的栈保护机制、数据执行保护机制,以及地址空间布局随机化机制的原理和使用方法。了解Windows对异常处理过程的保护机制结构化异常处理覆盖保护(Structured Exception Handler Overwrite Protection, SEHOP)的原理。通过实验2掌握利用MSF(Metasploit Framework)验证、调查和利用漏洞的具体过程和方法,分析在具备数据执行保护 (Data Execution Prevention, DEP )及地址空间布局随机化(Address Space Layout Randomization, ASLR)等机制保护环境系统下的漏洞利用情况。
第5章:了解软件安全开发生命周期模型的概念,了解微软SDL ( Security Development Lifecycle)模型的起源和发展,熟悉SDL模型的7个阶段和其中的主要安全活动。了解软件安全开发的通则,掌握编程时防御缓冲区溢出漏洞的常用方法。
第6章:了解漏洞挖掘技术的发展和种类,熟悉静态代码审计的原理和主要工具软件,了解软件的动态挖掘方法。通过实验3利用静态审计工具对源代码进行安全性分析和测试,系统、深入地理解C语言的安全编码准则,提出针对性的改进措施;通过实验4使用fuzz工具对文件或协议进行模糊测试,掌握模糊测试的步骤,对Peach进行深入剖析,了解模糊测试软件的实现原理。
第7章:了解软件漏洞领域的新挑战,了解移动终端、云计算平台以及物联网等漏洞的发展趋势。
具体实验内容及要求如表2所示。
3教学模式探索
大学教育的目标不仅在于知识的传授,更在于能力和素质的培养[10]。为了提高学生的学习能力、分析能力和知识综合运用能力,激发学生学习兴趣,挖掘学生潜力,采用案例式教学以及引入竞争机制的启发式教学两种方法,并通过课程考核引导学生重视理论知识应用能力以及独立创新能力的学习和锻炼。
3.1学用结合的案例式教学
“软件漏洞分析与防范”课程的实践性很强,除在4次实验课上引导学生提升动手能力外,在理论课上采用案例式教学方法,通过对多个经典CVE( Common Vulnerabilities and Exposures )漏洞案例进行分析,以加深对重点知识的理解和领会。例如,通过 CVE-2010-3333 Microsoft RTF剖析栈溢出漏洞、通过CVE-2010-2553 Microsoft Cinepak Codec CVDecompress加深学生对堆溢出的理解、通过CVE-2012-0809 Sudo_sudo_debug和 CVE-2011-0065 Firefox mChannel直观介绍格式化字符串漏洞和释放重引用漏洞等。
实践证明,采用专业知识与案例设计紧密结合的方式,可加强学生对漏洞相关知识的感性认识和兴趣,加深学生对理论知识的理解。
3.2引入竞争机制的启发式教学
漏洞攻防知识体系和技术手段的更新换代较快,在课堂上很难面面俱到,在传授知识的同时,更要充分挖掘学生的潜能和主观能动性。在实际教学中,由任课教师根据课程重点内容,结合现阶段国内外漏洞攻防博弈的热点问题设定不同专题,列出参考资料,指导学生以组为单位进行自主研究。每组设一个组长和一个评委,在课堂上给予各组展示机会。为了保证组内每个学生都能准备充分,讲解员在讲解前从组内随机抽取。在讲解过程中,由任课教师和其它组的学生评委从内容的深度和广度、PPT格式的规范性和美观性,以及讲解过程中的逻辑性和清晰性等3方面进行打分。整个评比过程公平公开,各组专题成绩在课后直接公布,每个小组的分数与个人成绩挂钩,计入总评成绩。
多轮教学实践表明,这种引入竞争机制的启发式教学取得了事半功倍的效果,促进了学生、教师和课程的共同进步:一方面提高了学生的研究兴趣、研究能力、表达能力和合作精神,另一方面一些能力出众的学生所展示的研究成果可为教学提供更多素材,进一步促进了课程自身的发展。
3.3考核机制
课程采用的考核方式为大作业,总评成绩由平时成绩、专题讨论课成绩和大作业成绩组成,平时成绩侧重对学生学习态度的考量,专题讨论课成绩和大作业成绩则着重反映学生的综合能力。
(1)平时成绩占总评成绩的30%,从作业、上课出勤率、实验等几方面进行考核。
(2)专题讨论成绩占总评成绩的30%,从PPT内容、格式以及讲解效果等多方面对各组进行评比。
(3)大作业成绩占总评成绩的40%,其是根据教师讲授的基本理论、专题报告积累的素材和实际操作完成的一份报告。报告由每个学生独立完成,根据题目难度系数、功能完成情况、大作业撰写情况、验收答辩情况等进行综合打分。任务包括5类:①逆向分析、软件破解及其防护;②基于模糊测试的软件漏洞挖掘;③针对Web平台的渗透测试;④移动终端APP安全测试;⑤其它与“软件漏洞”相关的实践类、设计型报告。
4结语
“软件漏洞分析与防范”是一门技术性要求很高的课程,除打好理论基础外,更重要的是培养学生的实际动手能力。此外,在软件漏洞相关的教学和研究中,必须认识到漏洞的系统相关性和时间特性:一方面只能针对目标系统的操作系统版本、其上运行的软件版本以及服务运行设置等实际环境具体谈论其中可能存在的漏洞及可行的解决办法;另一方面随着时间推移,旧漏洞会不断消失,新漏洞会不断出现,对漏洞问题的研究必须跟踪计算机系统及安全问题的最新发展动态。软件漏洞的技术性、系统相关性、时间特性等对课程建设提出了更高要求,必须加强师资力量和教学团队建设,分工明确,沟通及时,协同发展。同时,加强学生能力培养是本科教学的重点,在授课内容和授课安排上要留出足够空间,以培养学生的动手能力、研究能力和创新能力。
参考文献参考文献:
[1]彭国军,傅建明,梁玉.软件安全[M].武汉:武汉大学出版社,2015.
[2]《信息安全专业指导性專业规范》项目组.信息安全类专业的专业指导规范[EB/OL].http://ishare.iask.sina.com.cn/f/17806091.html.
[3]任伟.软件安全[M].北京:国防工业出版社,2010.
[4]刘哲理,李进,贾春福.漏洞利用及渗透测试基础[M].北京:清华大学出版社,2017.
[5]王清,张东辉,周浩,等.0day安全:软件漏洞分析技术[M].第2版.北京:电子工业出版社,2011.
[6]林桠泉.漏洞战争:软件漏洞分析精要[M].北京:电子工业出版社,2016.
[7]爱甲健二.有趣的二进制:软件安全与逆向分析[M].周自恒,译.北京:人民邮电出版社,2015.
[8]张剑,丁锋,周福才,等.软件安全开发[M].成都:电子科技大学出版社,2015.
[9]ROBERT C SEACORD. C安全编码标准 [M].第2版.卢涛,译.北京:机械工业出版社,2015.
[10]高玉蓉,李晓培.博克的大学教育目标及其对我国高等教育质量研究的启示[J].东莞理工学院学报,2012,19(4):103109.
责任编辑(责任编辑:黄健)