图书前言

前言

在信息安全专业的课程体系中,信息安全技术相关的开发实践是非常重要的环节。这类开发实践不仅能够培养学生的动手实践能力,激发对学习和钻研信息安全技术的兴趣和热情,还能在很大程度上加深对信息安全基本原理和技术的理解。

编者近年来负责上海交通大学信息安全专业软件课程设计的教学工作,该课程设计旨在通过进行相应的信息安全技术开发实践,来提高与信息安全相关的实践动手能力,从而加深对信息安全技术和相应信息安全工具的理解和掌握。在课程施教过程中,编者发现目前介绍信息安全原理和技术的书籍和教材很多,涉及信息安全技术和信息安全工具实现过程的书籍或教材却很少。难以找到一本合适的教材或参考书,指导学生顺利完成某类信息安全工具的开发,也不能在较短时间内搜集到进行信息安全技术开发实践所必备的知识。为了提高教学质量,帮助学生在较短时间内真正入手并顺利完成有关的信息安全技术开发实践,编者在综合多年科研及教学经验和成果的基础上撰写了本书,希望能够推动和促进国内信息安全专业在信息安全技术开发实践上的本科教育和课程建设。

信息安全是一门外延很广的学科,所涉及的信息安全技术众多。本书从中挑选出具有代表性且经常涉及到的四类信息安全技术进行实现解析和开发过程的探讨,这四类信息安全技术包括: Linux内核级安全技术、网络防火墙技术、安全脆弱性检测技术、攻击检测技术。

本书分为上下两篇,上篇为“技术解析篇”,下篇为“开发实践篇”。“技术解析篇”重点介绍这四类信息安全技术的基本概念和原理,并对进行相关信息安全技术开发实践所需要的关键方法和技术措施进行详细的探讨。“技术解析篇”是本书进行相关信息安全技术开发实践的基础,该篇内容与其他介绍信息安全技术原理的书籍明显不同在于,本书以引导读者进行相应的信息安全技术开发实践为目标导向,围绕如何开发相应的信息安全原型系统编写。

“技术解析篇”共包含7章,第1章“Linux内核级安全开发基础”和第2章“Linux内核级安全机制实现解析”系统性地阐述进行Linux内核级安全机制开发的基本原理和技术基础。第3章“网络防火墙功能与结构解析”、第4章“网络防火墙的技术类型”及第5章“各类型防火墙实现解析”从原理、技术到实现全面阐述开发实现目前主要类型网络防火墙所需的各种知识。第6章“系统脆弱性检测技术及实现解析”对安全脆弱性检测的作用和技术分类进行了详细的介绍,重点分析两种典型的脆弱性检测技术(即端口扫描技术和弱口令扫描技术)的原理及实现方法。第7章“入侵检测技术及实现解析”对入侵检测的主要技术和方法、入侵检测系统的工作原理和组成结构,以及入侵检测系统的实现技术进行详细的阐述。

“开发实践篇”以实例方式阐述如何实现信息安全技术和原型系统的开发实践,本篇共包含10章,每章阐述一个信息安全相关原型系统的具体开发过程。与“技术解析篇”对应,这10个开发实践分属于“技术解析篇”介绍的4类信息安全技术。“开发实践篇”中的第8章“基于LSM的文件访问控制原型实现”和第9章“基于系统调用重载的文件访问日志原型实现”属于Linux内核级安全机制开发类。第10章“内核模块包过滤防火墙的原型实现”、第11章“基于队列机制的应用层包过滤防火墙原型实现”、第12章“应用代理防火墙的原型实现”和第13章“透明代理防火墙的原型实现”属于网络防火墙开发类。第14章“端口扫描工具的原型实现”和第15章“弱口令扫描工具的原型实现”属于脆弱性检测技术开发类。第16章“基于特征串匹配的攻击检测系统原型实现”以及第17章“端口扫描检测系统的原型实现”则属于入侵检测系统开发类。本书中所有原型系统(或工具)的源代码均在Linux操作系统中调试通过,涉及到内核模块开发的原型系统对Linux内核版本有特定要求,在Linux系统的其他内核版本运行时需要进行相应的修改,对此有明确的说明。

为突出每种信息安全技术和原型系统实现的核心技术,“开发实践篇”中的每个开发实践过程都具有如下特点: ①全部采用标准的C语言实现,不进行任何类库的封装,全面展示信息安全原型系统的底层核心实现技术; ②开发实践中的源代码都经过针对性地提炼,尽可能精简读者比较熟悉且与核心技术关系不太密切的部分,如所有的原型系统全部采用最简单的命令行界面; ③每个开发实践的C语言源代码控制在200行左右,同时配以详尽的注释,甚至包括函数间的调用关系图。

“开发实践篇”所实现的每个信息安全原型系统“刻意”包含最原始、最基本的安全功能,如对包过滤防火墙原型系统而言,只能支持一条包过滤规则,且该过滤规则只涉及源IP地址和目标IP地址。这一方面是因为本书旨在提高读者进行信息安全开发实践的动手能力,而不是向读者展示和提供一个功能完善的信息安全系统。另一方面,希望读者以本书的原型系统为基础进行相应的扩展开发实践,以切实提高自己的动手实践能力,为此本书特意对在原型系统上所能进行的后继扩展开发实践进行针对性阐述(见每章中的“扩展开发实践”部分),以引导读者在这些原型系统的基础上完成相应的扩展开发实践。

本书首要用途为信息安全技术开发实践或课程设计的教材,这也是作者撰写本书的初衷。任课教师可在讲解完原型系统的实现后,让学生在原型系统的基础上自行进行相关的扩展开发实践。因此本书在附录A中对所有的扩展开发实践题目进行了汇总,以方便任课教师组织学生选择他们感兴趣的扩展开发实践。本书也可作为信息安全原理和技术相关课程的参考书,通过研读本书中信息安全原型系统的实现技术及相关源代码,可加深学生对信息安全基本技术和原理的理解和掌握。

在阐述信息安全技术的具体开发实践过程中,本书以实例的形式向读者展示了十几种操作系统和网络相关的常用开发技术,因此本书也适合从事相关软件开发的工程师和技术人员参阅。这些开发技术主要包括Linux的内核模块开发、Linux的字符设备驱动开发、Linux安全模块(即LSM)开发、Linux的系统调用重载、基于Netlink通信的编程、基于Netfilter机制截获和控制IP报文、原始套接字编程、基于Libpcap的IP报文获取技术、基于Libnet的底层协议报文组装技术、多线程编程技术、Web代理服务器实现技术以及透明代理服务器实现技术等。

本书由訾小超主持编写和统稿,李建华教授主审。本书中的开发实践题目和章节结构由薛质教授精选及确定,訾小超负责完成第1~5章、第8~13章的编写,姚立红负责完成第6~7章、第14~17章的编写,薛质、蒋兴浩、潘理分别协助完成第8~9章、第10~13章及第14~15章的编写。蒋璐瑶、蔡汶楷、许可同学分别协助进行第10~11章、第16章、第17章的程序调试和材料整理。另外,夏业添同学参与了开发技术细节的程序验证工作。

本书编写过程得到上海交通大学信息安全工程学院领导和老师的大力支持,他们就本书的内容组织提出了很多宝贵的建议,在此深表感谢。本书的开发实践基本都源自于信息安全专业本科生的课程设计作业或科研创新项目,一些开发实践的源程序是在学生作业的基础上完善、修改而成。特别感谢修读软件课程设计的05、06、07级本科学生,以及参加编者指导的各类科研创新项目的同学。另外,个别原型系统的实现借鉴信息安全论坛一些开源软件的技术思路,在此一并致谢。

由于编者水平有限,再加上国内的信息安全开发实践课程和教材建设尚处于探索阶段,以及信息安全技术的快速发展,书中难免会存在一些错误和不足,恳请各位学者及读者批评指正,编者不胜感激。

编者

2011年5月