一本真正入门级别的Java代码安全审计专业技术图书上架啦!

在“攻”方面,传统的通过扫描器扫描站点或利用 NDay来渗透的方式已经受到了很大的制约,现在及未来的典型渗透测试流程是:确定站点指纹→通过旁站扫描备份或开源程序得到源代码→代码审计→利用审计出来的漏洞制定修订措施,所以代码审计能力也越发重要。

在“防”方面,国内有大量网站都曾遭到过拖库,其中相当一部分漏洞是因为代码导致的。如果企业安全人员具备代码审计的能力,能够提前做好代码审计工作,在黑客发现系统漏洞之前找出安全隐患,提前部署相应安全防御措施,可落实“安全左移”,提高应用系统的安全性,从而“治未病”。

在主流的大型应用中,Java俨然成为了首选开发语言。目前国内外大型企业大多采用Java作为核心的开发语言,因此对于安全从业者来说,Java代码审计已经成为了自身应该掌握的关键技能。

市面上最新上架的一本关于Java代码安全审计方面的图书:

Java代码审计(入门篇)

本书是一本Java代码审计入门图书,通过大量的示例介绍代码审计的常用入门知识。全书内容分为9章,主要介绍了代码审计的基础知识、代码审计的环境搭建、辅助工具简介、Java EE基础知识补充、OWASP Top十 2017内外的代码审计经验介绍、JSPXCMS代码审计实战以及IAST与RASP技术的介绍等内容,另外,本书还对Java安全编码规范索引进行了简单的介绍。

本书适合安全从业人员、软件开发人员以及对代码安全感兴趣的读者阅读。

本书内容:

  • 初识Java代码审计;
  • 代码审计环境搭建;
  • 代码审计辅助工具简介;
  • Java EE基础知识;
  • “OWASP Top 十 2017”漏洞的代码审计;
  • “OWASP Top 十 2017”之外常见漏洞的代码审计;
  • Java EE开发框架安全审计;
  • Jspxcms代码审计实战;
  • 小话IAST与RASP。

本书特点

(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代码审计 学习路径

细节展示


代码审计的意义

2020年10月的CNVD安全月报显示,Web应用程序的漏洞占比34%,显而易见,Web应用程序仍然是安全防御的重中之重,因此对业务代码进行安全审计是十分重要的,如图1-1所示。

图1-1 Web应用程序漏洞影响重大

随着Java Web应用越来越广泛,安全审计已经成为安全测试人员需要直面的工作。虽然PHP在中小型互联网中仍占据一席之地,但在主流的大型应用中,Java仍是首选的开发语言,国内外大型企业大多以Java作为核心的开发语言。因此对于安全从业者来说,Java代码审计已经成为需要掌握的关键技能。

代码审计对攻防研究有着重要的意义。在“攻”方面,如果渗透测试人员、漏洞研究人员不了解代码审计,则在渗透测试的实战过程中难以“细致入微”,可能遇到的麻烦包括但不限于以下几种。

  • 遗漏在网站代码里的潜在漏洞。
  • 盲目测试,做无用功。

举例说明,以往的通过扫描器扫描站点或利用NDay进行渗透测试的方式已经受到了很大的制约,现在及未来比较典型的渗透测试流程是:确定站点指纹→通过旁站扫描备份或开源程序得到源代码→代码审计→利用审计出来的漏洞。因此对于渗透测试人员而言,代码审计能力也显得越发重要。

在“防”方面,国内有大量网站曾遭到拖库,其中相当一部分漏洞就是因为代码导致的。本书作者也曾经帮助多家企业开展过Java代码审计项目以及Java安全开发培训。在工作中发现,即使对于有着雄厚的研发能力、完备的安全合规要求以及明确的人员分工的IT巨头,其应用系统的源码也可能存在“阿喀琉斯之踵”般的致命弱点;而小型单位则经常有着“重业务,轻安全”或者“对Web安全漏洞了解得不全面、深入”的通病(这在注入、越权、反序列化、应用程序依赖库等漏洞类型显得较为明显)。如果企业安全人员具备代码审计的能力,就能提前做好代码审计工作,在黑客发现系统漏洞之前找出安全隐患,提前部署好相应的安全防御措施,落实“安全左移”,提高应用系统的安全性,从而“治未病”。

唯一不变的是变化本身,随着云计算技术的蓬勃发展,传统上云实践中的应用升级缓慢、架构臃肿、无法快速迭代等“痛点”日益明显。基于此,云原生技术蓬勃发展;变化中亦有不变,通过分析云原生的代表技术微服务和声明式 API的安全风险可以发现,应用安全仍是其中的防护重点。因而,若在云原生安全建设初期践行“源代码安全审计”,将安全投资更多地放到开发安全,包括安全编码、供应链(软件库、开源软件)安全、镜像(仓库)安全等,可起到减少安全投资、增加攻击难度的效果。代码安全审计在当下以至未来均可对Web应用安全的防护重要作用。

术业有专攻。安全人员与研发、测试人员看代码的视角也往往不同。基于此,我们认为从安全人员的角度帮助对Java安全经验有所欠缺的研发、测试人员快速地了解并掌握高频且重要的Java代码审计知识、搭建知识技能框架,亦或是帮助已具备相关经验的人士进行查缺补漏均具有重要意义。

2 Java代码审计所需的基础能力

Java代码审计要求代码审计人员能够“动静结合”。在“动”方面,要求代码审计人员具备调试程序的能力。若代码逻辑比较复杂,则可以通过多次调试或关键位置设置断点辅助理解。在“静”方面,要求代码审计人员具备一定的编程基础,了解基本语法与面向对象思想。若代码审计人员能够通过阅读代码理解代码逻辑,并善于查阅文档和资料,就能解决大多数问题。

本书将在第4章介绍部分Java EE的知识作为铺垫,以便帮助读者理解漏洞的形成和漏洞利用的方法。

3 代码审计的常用思路

为了在应用代码中寻找目标代码的漏洞,需要有明确的方法论做指导。方法论的选择则要视目标程序和要寻找的漏洞类型而定,以下是一些常用思路。

(1)接口排查(“正向追踪”):先找出从外部接口接收的参数,并跟踪其传递过程,观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞(为了提高排查的全面性,代码审计人员可以向研发人员索要接口清单)。  

(2)危险方法溯源(“逆向追踪”):检查敏感方法的参数,并查看参数的传递与处理,判断变量是否可控并且已经过严格的过滤。

(3)功能点定向审计:根据经验判断该类应用通常会在哪些功能中出现漏洞,直接审计该类功能的代码。

(4)第三方组件、中间件版本比对:检查Web应用所使用的第三方组件或中间件的版本是否受到已知漏洞的影响。

(5)补丁比对:通过对补丁做比对,反推漏洞出处。

(6)“黑盒测试”+“白盒测试”:我认为“白盒测试少直觉,黑盒测试难入微”。虽然代码审计的过程须以“白盒测试”为主,但是在过程中辅以“黑盒测试”将有助于快速定位到接口或做更全面的分析判断。交互式应用安全测试技术IAST就结合了“黑盒测试”与“白盒测试”的特点。

(7)“代码静态扫描工具”+“人工研判”:对于某些漏洞,使用代码静态扫描工具代替人工漏洞挖掘可以显著提高审计工作的效率。然而,代码静态扫描工具也存在“误报率高”等缺陷,具体使用时往往需要进一步研判。

(8)开发框架安全审计:审计Web应用所使用的开发框架是否存在自身安全性问题,或者由于用户使用不当而引发的安全风险。

Guess you like

Origin blog.csdn.net/epubit17/article/details/119445044