标题 | 软件安全课程教学方法探究 |
范文 | 傅建明 彭国军 严飞
摘 要:从软件安全的基础知识、工具实践、编程实践3方面介绍课程教学思路。理论教学采用循序渐进的思路讲授软件安全相关知识点,同时配合工具实践使学生加深对理论知识的理解,熟练掌握工具,最后学生通过编程实践提升动手实践能力,培养软件安全的攻防博弈思维。近五年的教学实践证实了该方法的有效性,可提升学生的代码逆向分析能力与漏洞机理验证能力。 关键词:信息安全;软件安全;教学方法;实践教学 DOI:10. 11907/rjdk. 192205 开放科学(资源服务)标识码(OSID): 中图分类号:G434 文献标识码:A 文章编号:1672-7800(2020)002-0226-04 英标:Research on Teaching Methods of the Course of Software Security 英作:FU Jian-ming, PENG Guo-jun, YAN Fei 英单:(School of Cyber Science and Engineering,Wuhan University,Wuhan 430072,China) Abstract:This paper introduces the teaching ideas from three aspects including basic knowledge of software security, tool practice and programming practice. The knowledge of the course of software security has been presented from six stages step by step, and deep understanding of software security has been obtained by a way of tool practices. Finally, it is proved that code practice improves assimilation of software security, and students ability of code reverse analysis and vulnerability mechanism verification. Key Words:information security;software security;teaching method; practice teaching 0 引言 目前,软件安全正面临严峻挑战。一方面,随着软件规模的不断扩大,软件的开发、集成与演化变得越来越复杂,导致软件产品在推出时总会含有很多已知或未知缺陷。另一方面,软件运行与开发环境已从传统的静态封闭状态转变为互联网环境下的动态开放状态,因此越来越多软件漏洞和缺陷被发现。另外APT(Advanced Persistent Threat)攻击逐渐利益化、集团化与专业化,触及国家各类重要的信息系统,攻击手段防不胜防,对国家信息安全造成了巨大威胁。习近平总书记提出:“没有网络安全,就没有国家安全”。因此,作为本科阶段的软件安全课程,本科生通过该课程学习可以更好地理解软件缺陷,及时应对软件威胁,如软件漏洞、恶意代码、勒索软件等。 在信息安全专业建设初期,计算机病毒[1]、网络安全是两门基础安全课程。其中,计算机病毒课主要讲授计算机威胁、计算机病毒机理,以及计算机病毒防御与检测等。在近六年的教学中,发现学生可以基本理解计算机病毒机理,但仍缺乏对计算机病毒的全面认识,加上计算机病毒植入与远程感染沒有列入教学规范中,为此,2012年结合信息安全教学指导委员会制定的信息安全专业规范[2],我院将计算机病毒课程更名为软件安全课程[3],同时对软件缺陷与漏洞相关知识进行了扩充。 本文主要从软件安全基础知识、工具实践、编程实践3方面介绍课程教学思路,如图1所示。 1 相关文献综述 针对信息安全与网络空间安全教学的研究文献有很多。如文献[4]概述了国内外信息安全专业建设现状和不足,介绍了网络安全管理、系统安全工程、应用安全服务3个专业方向及其课程设置;文献[5]探索了信息安全专业的知识体系和能力体系;文献[6]讨论了网络空间安全的内涵和外延,比较国内外网络空间安全人才培养体系,从国家统筹规划、学历教育、职业培训与认证、专才发现与培养等4个方面给出了人才培养规划建议;文献[7]从自然语言处理角度分析近20年的网络安全教学相关论文,并利用共现与频率构建知识图谱。以上研究可从整体上为信息安全教学规划提供指导。 针对单个课程教学及其改革的文献也有很多,包括信息内容安全、计算机病毒、网络安全、操作系统、信息系统安全等课程。如文献[8]给出信息内容的定义,讨论了信息内容获取、识别、控制与阻断技术;文献[9]首次从病毒编写角度看待病毒机理,寻找病毒检测与防御方法;文献[10]对网络安全课程内容及教学方法进行优化,如将密码学、操作系统安全、数据库安全等内容分离为其它课程,实时更新教学内容,采用案例教学、启发式教学等改进教学方法,并取得了较好效果;文献[11]采用科研课题、互助小组、信息安全竞赛、系统设计等多种方式将学生与多种教学内容有效组织起来,从而优化教学效果;文献[12]从计算机病毒、木马、进程监控等方面对操作系统教学内容作进一步深化,利用课外实践和竞赛提高学生学习兴趣;文献[13]为适应军队对信息安全应用型高级工程人才的需求,采用CDIO工程教育理念,构建工程型信息系统安全课程教学体系。以上文献可为软件安全课程教学规划与实践提供支持,但尚没有单独的有关软件安全教学改革相关研究。因此,本文在计算机病毒课程基础上,阐述软件安全课程知识点和实践大纲构建过程。 2 软件安全基础知识 高级语言程序设计、编译原理、操作系统、密码学、计算机网络等都是软件安全课程的基础,同时软件安全课程与网络安全、内容安全、信息系统安全等课程可以实现无缝联接。从设备、数据、服务、用户的角度看,用户通过服务实现数据操纵,相关服务都是通过软件实现的。因此,软件安全是信息安全的基础课程。 软件安全涉及的知识点非常多,图2从6个方面介绍教学内容,每个板块序号表示授课顺序。攻击者利用物理植入、诱骗植入、漏洞植入等方式给计算机安装各种恶意代码,但不管是恶意代码还是正常代码都需遵循基本代码格式。其中,基本结构部分从系统角度介绍磁盘分区、文件系统与内存系统,接着是可执行文件结构,如PE结构、ELF结构等,最后是可执行代码在内存中操作的栈和堆。网络攻防战场已从过去的磁盘逐渐延伸到内存,因此需要了解软件代码在内存的布局以及内存页管理。教学时要注意32位系统和64位系统的差异,包括可执行文件结构、寄存器、函数调用方式等。 软件安全威胁主要包括两种:一种是具有完整格式的恶意代码,如计算机病毒、网络蠕虫、特洛伊木马、后门、Rootkit、流氓软件、勒索软件、广告软件等;另一种是因软件缺陷或漏洞而引入的代码片断(Code snippet),如Shellcode、ROP(Returned-Oriented Programming)等。恶意代码威胁如今已从地下隐藏方式发展为公开方式,如勒索软件。恶意代码部分主要讲授恶意代码的功能实现、威胁持续保持、安全检测对抗、安全工具兼容及用户免打扰等内容,相关检测技术包括特征值检测、启发式扫描、主动防御、虚拟机检测、云查杀、蜜罐等。讲授时需要区分检测技术动态性与静态性、误报与漏报以及对不同未知恶意代码的检测能力等。 漏洞威胁是目前网络攻防的焦点,攻击者利用未知漏洞可以在对方不知情的情况下安装恶意代码,而防御者可以提前发现漏洞,做到未雨绸缪。该部分主要介绍栈溢出、堆溢出、空指针、释放后引用、整数/浮点数溢出、竞争条件缺陷、格式化输出缺陷等安全缺陷引发的数据劫持与控制劫持,并讲授缺陷与漏洞原理、可能的代码模式,以及漏洞危害、缓解措施等。讲授时可以结合文献[14]、[15]中的源码进行,以增强学生的感性认识。由于攻击者会利用这些缺陷和漏洞设计用于攻击的POC(Proof of Code),其典型代码包括Shellcode和ROP两类,讲授这类代码的特征以及可能的检测点。 漏洞防御是目前学术界研究的热点,企业界称为黑客攻击防御。在主要采用的防御方法中,混淆加壳主要是对抗代码分析,而访问控制是从资源角度约束用户访问,降低攻击危害。其它防御方法包括DEP(Data Execution Prevention)、GS、ASLR(Address Space Layout Randomization)、safeSEH(safe Structured Exception Handling)、CFG(Control Flow Guard)、CIG(Code Integrity Guard)、ACG(Arbitrary Code Guard)等,其主要目的是阻止非授权的外部模块、外部代码、内部重构代码执行等。 漏洞分析包括源代码设计、静态分析、动态分析、逆向分析、Fuzzing、代码切片、符号执行、污点传播等。另外,Web安全内容建议在网络安全课程中进行讲授,包括SQL注入、XSS、CSRF、点击劫持、目录遍历、文件上传等。 3 软件安全工具实践 软件安全课程具有很强的实践性,通过掌握相关软件安全工具,便于理解上述基础知识。微软工具套件[16]提供对磁盘、文件、进程、注册表与网络的监视,表1给出了课程教学中的常用工具。 為了更好地理解基础知识,本文设计了一组实验验证上述知识点,实验课程见表2。其中,实验1考查学生利用工具查看程序加载的模块链,了解数字签名对软件的保护作用;实验2考查学生利用Winhex对磁盘分区,以及文件系统结构的理解程度;实验3利用OD等工具查看软件调用外部模块的方式,重点是IAT与EAT的关联;实验4利用Winhex等工具学习内存页管理与页权限分配;实验5考查学生手工注入代码的能力;实验6、7考查学生手动分析木马与安全软件的能力;实验8使学生加深对堆和栈的认识;实验9认识编译器安全指示的作用及其对软件的影响;实验10是metasploit测试。 4 软件安全编程实践 软件安全编程实践重在将软件安全知识融入到编程中,以提高学生的编程能力,并使其更好地理解安全威胁,增强安全防御能力。表3给出了软件安全编程实例。其中,实验1考查学生对磁盘分区以及文件系统关联数据结构的应用能力;实验2对给定文件进行感染;实验3学习Hooking的实现,并培养学生跨进程的内存访问能力;实验4模仿木马对系统资源的访问与网络交互;实验5模仿安全工具对系统资源的访问监视与访问控制,锻炼学生设计访问控制策略的能力;实验6模仿对栈(堆)的利用;实验7模仿安全工具对黑客攻击的检测。编程实践通过模拟攻击者的漏洞利用过程以及防御者的资源监管过程,提高学生的攻防博弈思维能力。 5 结语 本文主要从软件安全的基础知识、工具实践、编程实践3方面介绍课程教学思路。理论教学分为基本结构、恶意代码解析、恶意代码检测、漏洞实例分析、漏洞攻击检测、漏洞分析技术6个阶段,采用循序渐进的思路讲授软件安全相关知识点,同时配合工具实践使学生加深对理论知识的理解,熟练掌握工具,最后通过编程实践提高动手能力。近五年的教学实践证实了该方法的有效性,通过对软件运行环境、代码文件结构与内存结构、代码与操作系统接口等内容的综合学习及实践,提升学生的代码逆向分析能力和漏洞机理验证能力,为培养其软件安全的攻防博弈思维奠定了坚实基础。如何将软件安全课程知识拓宽到多平台、多系统上,将是未来的研究方向。 参考文献: [1] 傅建明. 计算机病毒分析与对抗[M]. 武汉:武汉大学出版社, 2009. [2] 教育部高等学校. 高等学校信息安全专业指导性专业规范[M]. 北京:清华大学出版社,2014. [3] 彭国军,傅建明,梁玉. 软件安全[M]. 武汉:武汉大学出版社, 2015. [4] 王练,陈龙. 信息安全专业课程体系设置的探讨[J]. 计算机教育,2009(24):108-110. [5] 杜瑞颖,张焕国,王丽娜,等. 本科信息安全专业课程体系研究[J].? 计算机教育,2011,150(18):1-3. [6] 张宏莉,于海宁,翟健宏,等. 网络空间安全人才培養的规划建议[J]. 网络与信息安全学报,2016, 2(3):1-9. [7] 努尔布力. 国内网络安全教学研究脉络和现状的知识图谱分析(1997~2016)[J]. 伊犁师范学院学报(自然科学版),2016,10(3):86-92. [8] 张宏莉,翟健宏,胡铭曾. 信息内容安全的主要技术及国内外对比[J]. 计算机教育,2005(1):74-76. [9] 彭国军,张焕国. 关于计算机病毒教学的几点建议[J]. 计算机教育,2006(7):30-31. [10] 周由胜,罗文俊,陈龙.? 《网络安全》课程教学创新初探[J]. 现代计算机,2012(3):35-37. [11] 周艺华,杨宇光,侍伟敏. 基于融合机制的计算机网络安全教学模式探索[J]. 计算机教育,2016(11):20-23. [12] 唐作其,叶洁,武彤,等. 面向信息安全专业的操作系统教学改革[J].? 计算机教育,2012(1):83-85. [13] 陈萍,于晗,赵敏. 面向卓越工程师培养的“信息系统安全”课程建设[J]. 计算机工程与科学,2014,36(s2):49-51. [14] 塞克德卢涛. C和C++安全编码 :Secure coding in C and C++[M]. 北京:机械工业出版社,2014. [15] CWE. 2011 CWE/SANS top 25 most dangerous software errors[EB/OL]. http://cwe.mitre.org/top25/index.html. [16] MICROSOFT. Windows sysinternals[EB/OL]. https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx. (责任编辑:黄 健) |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。