《计算机安全导论:深度实践》是作者结合18年来在计算机安全教育和研发方面的经验编写而成的。《计算机安全导论:深度实践》涵盖计算机和网络空间安全的基础知识,包括软件安全、Web安全和网络安全。
《计算机安全导论:深度实践》旨在帮助读者了解各种各样的攻击和防御的思想与原理。
通过《计算机安全导论:深度实践》,读者可以养成良好的安全思维习惯,正确评估计算机和网络所面临的风险,提升发现和攻破软件及系统安全漏洞的能力,并提高设计实现软件的能力及系统防御能力。
《计算机安全导论:深度实践》的特点是理论与实践相结合。
对于每个涉及的理论,《计算机安全导论:深度实践》都使用一系列实验帮助读者加深对理论的理解,目的是让读者得到亲身体验。这些实验是作者花费16年心血精心设计的,它们已经在世界各地被广泛使用。
《计算机安全导论:深度实践》适用于学生、计算机科学家、计算机工程师、程序员、软件开发人员、网络和系统管理员以及其他对计算机安全感兴趣的读者,可作为本科和研究生的计算机安全教材,也可作为自学者提高计算机安全技能的学习材料。
《计算机安全导论:深度实践》特色:
理论与实践相结合。既讲解攻击原理,又介绍攻击过程,提供完整的实验环境,每章都有对应的SEED实验,使读者身临其境体验攻击及防御过程。
注重构建计算机安全知识体系。深入挖掘知识点的内在关联,深刻阐释攻击发生的共性原因及防御措施的本质特点,帮助读者建立扎实的计算机安全知识体系。
深入细节、讲解透彻。从基础知识点入手,由浅入深、循序渐进地剖析攻击及防御的完整过程,直击重点难点,帮助读者快速提升实践能力。
笔者在普渡大学读博士期间,耳濡目染,除了在研究方面,在教育方面也有幸受到不少优秀教授的影响。当笔者2001年在雪城大学(Syracuse University)开始教学生涯时,很多潜移默化带来的理念就自然在自己的教学中体现出来,其中最大的一点就是理论与实践相结合。这看似老生常谈,但真正做到却不容易。教理论易,。教实践难,设计一套动手实践的教案则更难。没有有效的动手实践,理论与实践相结合就是一句空话。
在普渡大学读书时,笔者学习过的操作系统、编译原理和网络等课程都有非常好的教材,并且每门课程都有精心设计的动手实践环节。这些教材不仅讲授抽象的理论,而且结合了很多与实践密切相关的内容,让学生边学边做,既能学到系统的知识,又能通过实践加深对知识的理解。遗憾的是,在计算机安全领域,能够做到理实交融的教材并不多。从2001年开始教学后,笔者陆续使用过一些教材,但都不满意。笔者一直在教学中贯彻理实交融的理念,但不是按照任何一本书来做的。笔者也曾想自己编写一本教材,但当时没有太多的教学经验,对计算机安全的理解和领悟也还没有达到能够随心所欲写作的地步,因此第1章还未写完,就觉得写不下去了,即使再写下去,也未必能超越其他的教材。于是搁笔,这一搁就是十几年。
这十几年虽然没能写出教材,但笔者精心设计了30多个动手实验,除了自己使用之外,还免费提供给其他教师和学生使用。这些实验弥补了已有教材在实践方面的不足。笔者联系了几乎所有比较有名气的计算机安全方面教材的作者,授权他们免费使用这些实验作为教材的辅助材料。在设计这些实验的过程中,笔者也加深了对计算机安全的领悟,很多看似独立的知识点也因为从这些实验中得到的经验逐步在脑海中形成知识体系。
同时在这十几年中,笔者在教学方面也渐渐成熟,掌握了如何循序渐进地把较难的内容讲清楚讲透彻,如何把实践结合到教学中,如何通过比喻让学生更好地理解抽象的概念和原理,如何举一反三,如何把相关知识点串联起来,如何从不同角度出题看学生是否真正理解了某个知识点,等等。这些积累,使笔者在计算机安全教学方面渐渐形成了一套自己的体系,一套与别人不同、自始至终贯彻理实交融理念的教学体系。
杜文亮,1993年从中国科学技术大学获得学士学位(软件专业),1996年从佛罗里达国际大学获得硕士学位。1996-2001年在普渡大学计算机系攻读博士,并于2001年获得博士学位(计算机安全方向)。毕业后,成为雪城大学(Syracuse University)的助理教授。目前是该校电气工程与计算机科学系教授(终身教授),同时也是浙江大学客座教授。2001年开始一直为本科生和研究生讲授计算机安全和网络安全课程。为了让学生获得动手实践的机会,从2002年起开始研发动手实验,目前已开发30多个名为SEED的动手实验。这些实验目前广为人知,全球有1000多所学校正在使用或已经使用过这些实验。2010年,美国国家科学基金会在递交给国会的报告中把SEED项目作为一个模范项目。该报告名为《新挑战,新战略:在本科STEM教育中追求卓越》,它挑选了“在全国STEM教育中尖端的具有创造力的17个项目”。2017年,由于SEED实验的影响力,获得第21届信息系统安全教育大会颁发的“学术领导”奖。2019年,被雪城大学授予Meredith教授名誉。这是一个终身的名誉,是雪城大学教学奖。在计算机和网络安全领域的研究兴趣主要集中在系统安全方面。研究成果曾10次获得美国国家科学基金会奖,也曾获得一次Google公司的研究奖。先后发表100多篇论文。截至2019年10月,论文总被引用数超过14600次(基于GoogleScholar)。2003年在ACM-CCS学术会议上发表的一篇论文于2013年获得该会议颁发的时间测试奖(Test-of-TimeAward)。该奖项颁发给10年前在该会议上发表的有影响力的文章。目前的研究重点是智能手机安全性,在Android(安卓)的设计和实现中发现了许多操作系统内部存在的安全问题,并开发了新的机制来增强智能手机的系统安全性。
第1部分 软件安全
第1章 Set-UID特权程序原理及攻击方法
1.1 特权程序存在的必要性
1.1.1 密码困境
1.1.2 不同类型的特权程序
1.2 Set-UID机制
1.2.1 超人的故事
1.2.2 特权程序的工作原理
1.2.3 一个Set-UID程序的例子
1.2.4 Set-UID机制的安全性
1.2.5 Set-GID机制
1.3 可能出现的问题:超人的遭遇
j.4 Set-UID程序的攻击面
1.4.1 用户输入:显式输入
1.4.2 系统输入
1.4.3 环境变量:隐藏的输入
1.4.4 权限泄露
1.5 调用其他程序
1.5.1 不安全的方式:使用system()
1.5.2 安全的方式:使用execve()
1.5.3 用其他语言调用外部命令
1.5.4 经验教训:隔离的原则
1.6 最小特权原则
1.7 总结
动手实验
习题
第2章 通过环境变量实现攻击
2.1 环境变量
2.1.1 如何访问环境变量
2.1.2 进程获取环境变量的方式
2.1.3 环境变量在内存中的位置
2.1.4 shell变量和环境变量
2.2 环境变量带来的攻击面
2.3 通过动态链接器的攻击
2.3.1 静态和动态链接
2.3.2 案例分析:LD_PRELOAD和LD_LIBRARY_PATH
2.3.3 案例分析:OSX动态链接器
2.4 通过外部程序进行攻击
2.4.1 两种调用外部程序的典型方式
2.4.2 案例分析:PATH环境变量
2.4.3 减小攻击面
2.5 通过程序库攻击
案例分析:UNIX中的Locale程序
2.6 通过程序本身的代码进行攻击
案例分析:在应用代码中使用getenv()函数
2.7 Set-UID机制和服务机制的比较
2.8 总结
动手实验
习题
第3章 Shellshock攻击
3.1 背景知识:shell函数
3.2 Shellshock漏洞
3.2.1 Shellshock漏洞
3.2.2 Bash源代码中的错误
3.2.3 Shellshock漏洞的利用
3.3 利用Shellshock攻击Set-UID程序
3.4 利用Shellshock攻击CGI程序
3.4.1 实验环境准备
3.4.2 Web服务器调用CGI程序
3.4.3 攻击者向Bash发送数据
3.4.4 实施Shellshock攻击
3.4.5 创建反向shell
3.5 针对PHP的远程攻击
3.6 总结
动手实验
习题
……
第4章 缓冲区溢出攻击
第2部分 Web安全
第3部分 网络安全
参考文献