前言
在撰写本书前,我们团队内部讨论了关于本书的定位——面向哪些人?最终,我们决定写一本真正意义上的入门级别的Java代码安全审计图书,即面向的人群是没有安全开发意识或经验的Java安全开发人员、没学过Java安全的网络安全从业者以及Java代码审计爱好者,所以我们相信这本书对他们一定有所帮助。
那么代码审计对攻防研究有着怎样重要的意义?
在“攻”方面,传统的通过扫描器扫描站点或利用 NDay来渗透的方式已经受到了很大的制约,现在及未来的典型渗透测试流程是:确定站点指纹→通过旁站扫描备份或开源程序得到源代码→代码审计→利用审计出来的漏洞制定修订措施,所以代码审计能力也越发重要。
在“防”方面,国内有大量网站都曾遭到过拖库,其中相当一部分漏洞是因为代码导致的。如果企业安全人员具备代码审计的能力,能够提前做好代码审计工作,在黑客发现系统漏洞之前找出安全隐患,提前部署相应安全防御措施,可落实“安全左移”,提高应用系统的安全性,从而“治未病”。
在主流的大型应用中,Java俨然成为了首选开发语言。目前国内外大型企业大多采用Java作为核心的开发语言,因此对于安全从业者来说,Java代码审计已经成为了自身应该掌握的关键技能。但目前市面上并没有关于Java代码安全审计方面的图书,这也是我们撰写本书的出发点,希望能为网络安全行业贡献自己的一份微薄之力。
本书是MS08067安全实验室推出的继《Web安全攻防:渗透测试实战指南》《内网安全攻防:渗透测试实战指南》《Python安全攻防:渗透测试实战指南》后又一本网络安全领域的力作,建议读者联合阅读。建议关注MS08067安全实验室公众号或官网,学习实验室出品的其他各类最新图书和技术文章、视频。
本书特点
(1)市面上缺乏关于Java代码安全审计图书品种,本书的出版是对其的补充。
(2)从理论到实践,非常适合Java 代码审计的入门学习。
(3)对结构的划分较为合理,可帮助读者由“单点到代码全局”了解漏洞,并达到“从入门到适度提高”的学习目的。
(4)对初学者较为“友好”,可帮助安全人员或研发人员补充实用的预备知识。
(5)设置的案例较为丰富、详实,利于读者掌握较全面的系统知识。
(6)对案例的讲解较为详细,方便读者同步进行实际操作,扎实地掌握知识和技能。
本书结构
在本书编写过程中,遵从的主旨是“通过较详细的漏洞点剖析以及代码审计实战演示帮助读者朋友初步了解Java代码审计,夯实Java代码审计的基本功,并迈入Java代码审计的大门”。为此,我们对内容结构做了如下组织。
(1)第1~4章介绍Java代码审计预备知识。
(2)第5章和第6章介绍典型的Java Web漏洞。
(3)第7章介绍Java EE开发框架安全审计。
(4)第8章介绍开源Java Web应用代码审计实战知识。
(5)第9章介绍“交互式应用程序安全测试”与“运行时应用自保护”的相关知识。
(6)附录帮助读者了解Java安全编码规范。
本书将理论讲解和实验操作相结合,深入浅出、循序渐进,并通过大量的图文解说,方便初学者快速掌握Java代码安全审计的具体方法和流程,并逐步建立对Java代码安全审计的系统性认知。
第1章 初识Java代码审计
本章简单介绍了Java代码安全审计的基本范畴、代码审计的意义、代码审计所需的基础以及Java代码审计的常用思路。
第2章 代码审计环境搭建
本章介绍了Java代码审计环境的搭建方法,主要包括:JDK的下载与安装、Docker的漏洞验证环境搭建、对Weblogic和Tomcat进行远程调试以及项目构建工具的使用等基本知识。
第3章 代码审计辅助工具简介
本章简单介绍了在代码审计过程中需要用到的工具或平台,包括代码编辑器、测试工具、反编译工具、Java代码静态扫描工具以及漏洞信息公开平台。
第4章 Java EE基础知识
本章介绍了Java EE基础知识,主要包括Java EE 分层模型、MVC模式与MVC框架的定义、主流Java MVC框架简介、Servlet知识点、filter知识点、反射机制、ClassLoader类加载机制、Java动态代理和Java Web安全开发框架等基础知识。
第5章 “OWASP Top 10 2017”漏洞的代码审计
本章介绍了“OWASP Top 10 2017”十大Web 应用程序安全风险列表中的典型Java代码审计案例(注入、失效的身份认证、敏感信息泄露、XML外部实体注入、失效的访问控制、安全配置错误、跨站脚本攻击、不安全的反序列化、使用含有已知漏洞组件以及不足的日志记录和监控),这些案例可帮助读者在较短时间内理解并掌握高频漏洞的代码审计关键问题。
第6章 “OWASP Top 10 2017”之外常见漏洞的代码审计
本章主要介绍CSRF 漏洞的原理和实例、SSRF 漏洞的原理和实例、URL 跳转与钓鱼漏洞讲解、文件包含漏洞讲解、文件上传讲解、文件下载讲解、文件写入讲解、文件解压讲解、Web后门讲解、逻辑漏洞讲解、CORS/SCP 介绍、拒绝服务攻击原理和实例、点击劫持漏洞原理和实例、HPP漏洞介绍等知识点,这些知识点能够帮助读者了解漏洞的形成原因,理解漏洞的利用方式以及漏洞修复方法。
第7章 Java EE开发框架安全审计
Java EE开发框架虽然极大提高了生产效率,却可能为Web应用带来致命的危害。本章主要通过详细的代码审计过程讲解SSM、Struts2、Spring Boot等框架的代码审计技巧,以及Struts2远程代码执行漏洞开发框架的错误使用案例。
第8章 Jspxcms代码审计实战
实践是检验漏洞挖掘学习效果的最好方式,通过实践审计,能够帮助审计者了解真实环境中的审计情形,方便审计者体验真实场景。本章主要通过Jspxcms源程序实例讲解了SQL注入、XSS、SSRF以及RCE漏洞的审计过程。
第9章 小话IAST与RASP
IAST是“交互式应用程序安全测试”对代码审计有所补益,RASP(运行时应用自保护)是动态防御的有效技术。本章的主要内容是对IAST与RASP进行简要介绍,并对二者共同的核心模块Java-agent进行实验探究和原理浅析。
附录 Java安全编码规范索引
Java安全编码的核心基础是一系列的编码指南和安全规范。本章的主要内容是向读者朋友分享一些Java 安全编码规范。
关于下一本书
本书作为入门级别的Java 代码安全审计图书,对于已经有一定基础,但是Java代码安全审计能力还需要提升的人群来说,帮助不是很大,他们需要更深层次的内容。所以我们有计划编写《Java 代码审计(进阶篇)》,在进阶版中,我们会详细介绍在本书中未加入的诸如 JNDI、RMI、LDAP、Java 反序列化gadget 链构造方法、Ysoserial中的 CC 链以及其他链的分析等内容;也会拓展由于受篇幅限制,本书中对一些知识点未做展开介绍,包括:反序列化链、认证鉴权(整合JWT、Spring Security、Shiro)、Java开发框架安全漏洞(如Struts2)、Java中间件安全漏洞(如JBoss)、微服务架构Web应用代码审计等。敬请期待!
特别声明
本书仅限于讨论网络安全技术,请勿作非法用途,严禁利用本书所提到的漏洞和技术进行非法攻击,否则后果自负,本人和出版商不承担任何责任!
读者服务
本书的同步公众号为“MS08067安全实验室”,读者可通过搜索公众号号码Ms08067_com或扫描下方二维码添加关注,公众号可提供以下资源。
本书列出的脚本源代码及环境工具。
本书讨论的所有资源的下载或链接。
关于本书内容的勘误更新。
关于本书内容的技术交流。
阅读本书过程中任何问题或意见的反馈。
致谢
感谢人民邮电出版社策划编辑为本书的出版做出的大量工作;感谢李韩﹑王康对本书配套网站的维护。感谢陈奋﹑王伟﹑丁勇﹑phith0n﹑部分土豆进城﹑oldjun﹑兜哥﹑御剑﹑王任飞﹑lake2﹑赵弼政百忙之中抽空为本书作序并推荐。
MS08067安全实验室是一个低调潜心研究技术的团队,衷心感谢团队的所有成员,包括那些曾经和我们一起战斗过的兄弟姐妹,也欢迎更多的志同道合的小伙伴加入我们!感谢你们!
感谢我的父母﹑妻子和最爱的女儿徐晞溪,我的生命因你们而有意义!
感谢身边每一位亲人﹑朋友和同事,谢谢你们一直以来对我的关心照顾和支持。
最后,我们衷心希望广大信息安全从业者、爱好者以及安全开发人员能够在阅读本书的过程中有所收益。在此感谢读者朋友们对于本书给予的支持!
念念不忘,必有回响!
徐焱
2020年12月于北京
感谢我的父母、妻子和“东发一号”与“怀亲恩”的家人们,你们给予我温暖的关怀和源源不断的支持;感谢安全狗为我创造钻研和发展的平台;感谢我的恩师周豫苹、康恺和Steve Ling,你们给予我关爱与教诲;感谢给予我帮助的朋友、贵人,您们给予我“阳光雨露”。最后感谢徐焱老师以及柯俊、小宇、国宝三位师傅,我很幸运能在共事中向你们学习。
Carpe Diem!
陈俊杰
2020年12月于厦门
首先感谢我的父母和家人们,感谢他们为我提供了一个可以全心投入工作和学习中,而没有后顾之忧的一个家庭环境。同时感谢天融信阿尔法实验室,在这里工作让我接触并学习到了大量的知识和前沿的技术。最后感谢MS08067实验室给了我这样一个展示自己学习成果的机会。
李柯俊
2020年12月于北京
感谢安全狗海青实验室的每一位同事,曾给予了我许多的帮助,感谢安全狗提供了我成长的平台和资源,这让我得到了不少锻炼。感谢我的家人和朋友的支持与帮助。感谢周豫苹老师的指引,让我有幸步入安全这条道路。感谢徐焱老师提供了这次机会,能够与大家分享交流。最后还要感谢叶花的陪伴与理解。
章宇
2020年12月于福州
首先感谢我的家人对我的支持和鼓励,感谢我的老师们对我的指导和关怀,其次感谢带我迈入安全圈的 Lyon前辈以及在我初入安全圈给我很多帮助的xiaochu师傅,是他们给了我正确的方向,让我深深热爱上这个行业。最后感谢所有帮助过我的人(包括但不仅限于郑伟、胡湘君、一木、振宇、秀清、唐彧、王秀友、韩天鹏、周静、孙刚等人),是你们让我披荆斩棘,勇往直前。
道阻且长,行则将至,行而不辍,未来可期。
蔡国宝
2020年12月于桂林