[ 代码审计篇 ] Java web 代码审计 详解(一)

简介: 之前写了一篇关于代码审计流程的文章,有小伙伴私聊我说不太好理解,这里开始介绍 Java web 的代码审计,同样的来捋一捋审计思路,这就相对要具体一些。

🍬 博主介绍


👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~

✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】

🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋

🎉欢迎关注💗一起学习👍一起讨论⭐一起进步📝文末有彩蛋

🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


一、代码审计是什么



代码审计(Code Audit)是一种以发现安全漏洞、程序错误和程序违规为目标的源代码分析技能。在实践过程中,可通过人工审查或者自动化工具的方式,对程序源代码进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议

是上线之前必须要做的一个工作,防止产生一些可以避免的安全漏洞。


二、为什么要学 Java web 代码审计



Java 越来越火,Java web 应用的越来越广泛

Php 在一些中小型企业任占有一席之地,但是在主流的大型应用中,java任是首选。

作为安全行业从事者的,掌握 java 代码审计已经成为关键性的一环。


三、代码审计常见思路



image.png


1. 概述:

首先使用工具对代码进行扫描,然后根据设定好的一些规则进行一个匹配,从而找到可能存在漏洞的一些地方,然后结合人工审查匹配,确定这个地方是不是有漏洞。


代码里我们使用工具能发现一些常规的漏洞,但不是所有的漏洞都能找得到,所以还需要结合人工审计的方式来对代码进行审计。


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


2. 接口排查("正向追踪")

先找出从外部接口接收的参数,并跟踪其传递程,观察是否有参数校验不严的变量传入

高危方法中,或者在传递的过程中是否有代码逻辑漏洞(为了提高排查的全面性代码审计人员可以向研发人员索要铵以检查敏感方法的参数并查看参数的传选的单。


扫描出来了,这里可能存在一个漏洞,例如:这个项目做了一个前后端分离。我就找后端代码发生的一个原因,首先就要去找他的接口,然后通过接口传递的方式一步一步往后面找,发现到底是哪一个方法出现了这个漏洞,然后我们再进行一个修复。


3. 危险方法溯源("逆向追踪")

处理判断变量是否可控并且已经过严格的过滤。

根据我们的经验,我们可以找到哪一些方法是有危险的,我们重点排查和这些方法。


4. 功能点定向审计:

根据经验判断该类应用通常会在哪些功能中出现漏洞。


5. 第三方组件、中间件版本比对:

检查Web应用所使用的第三方组件或中间直接审计该类功能的代码。件的版本是否受到已知漏洞的影响。


很多的第三方组件都是存在漏洞的。所以就必须知道怎么去审查这个第三方组件,必须知道哪些第三方组件已经存在漏洞,我们不能去使用它。


6. 补丁比对:

通过对补丁做比对,反推漏洞出处。

第三方补丁不能保证它百分之白没有漏洞


7. "黑盒测试"+"白盒测试"

虽然代码审计的过程须以"白盒测试"为主,但是在过程中辅以"黑盒测试"将有助于快速定位到接口或做更全面的分析判断。


交互式应用安全测试技术IAST就结合了"黑盒测试" "白盒测试"的特点。

代码审计往往会结合黑盒测试和白盒测试来进行审计。


8. "代码静态扫描工具"+ "人工研判"

对于某些漏洞使用代码静态扫描工具代替人工漏洞挖掘可以显著提高审计工作的效率。

然而,代码静态扫描工具也存在"误报率高"等缺陷,具体使用时往往需要进一步研判


9. 开发框架安全审计:

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


四、黑盒测试和白盒测试



1. 黑盒测试

黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。

在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。

image.png


2. 白盒测试

白盒测试也称为结构测试,主要用于检测软件编码过程中的错误。

程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。

image.png


3. 举例说明


1. 黑盒测试:

相当于你去验收一个工程,比如:强能防爆多少顿炸药,我们就拿多少的炸药试一下就行了,墙被炸了,就不合格。

可以使用任何方式对这个项目来进行渗透和测试。


2. 白盒测试:

假如我作为一个甲方人员来进行测试,开发方就必须把所有资料给到我,设计图纸,那一块多少混泥土,多少钢筋,用的是什么型号都要告诉我。


那我就知道这个墙能够承受多少,力学模型都知道了,我结合所有的资料就可以知道你这个工程是不是合格的。或者说那些地方可能存在哪些问题。


就是给你源代码,你结合工具或者经验对代码进行分析。


五、代码审计和渗透测试的关系



1. 渗透测试优点:

高速提交测试参数,通过前端进行渗透,通过发送数据包到后台服务器。

快速发现多层结构的漏洞,根据漏铜的分类,大概能判断是哪一层结构的问题。


2. 代码审计优点:

全面,深入的发现漏洞。


3. 两者之间的关系:

相互补充,彼此强化。

代码审计发现问题,渗透测试确定可利用性。

渗透测试发现问题,代码审计确定成因。


六、代码审计的优势



1、提高代码质量

2、降低成本

如果在项目上线后才发现bug开发人员可能以及调离到其他的项目,协调成本太高。

上线后被白帽子发现成本也很高,黑客利用,数据丢失,成本更高。


七、代码审计的工作流程



1. 配置分析环境

2. 熟悉业务流程

3. 分析程序架构

4. 工具自动化分析

5. 整理审计报告

6. 整理审计报告image.png

相关文章
|
10天前
|
SQL Java
20:基于EL与JSTL的产品管理页-Java Web
20:基于EL与JSTL的产品管理页-Java Web
21 5
|
4天前
|
前端开发 JavaScript Java
Java与Web开发的结合:JSP与Servlet
Java与Web开发的结合:JSP与Servlet
8 0
|
10天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
20 4
|
10天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
25 4
|
10天前
|
SQL Java 数据库连接
17:数据库连接池与Servlet整合-Java Web
17:数据库连接池与Servlet整合-Java Web
22 3
|
10天前
|
存储 前端开发 搜索推荐
13:Session机制实现用户登录与注销功能-Java Web
13:Session机制实现用户登录与注销功能-Java Web
25 3
|
10天前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
13 2
|
10天前
|
缓存 前端开发 Java
15:Servlet 3.0文件上传与下载-Java Web
15:Servlet 3.0文件上传与下载-Java Web
24 5
|
10天前
|
存储 缓存 前端开发
14:Servlet中的页面跳转-Java Web
14:Servlet中的页面跳转-Java Web
26 6
|
10天前
|
存储 前端开发 安全
13:会话跟踪技术Session的深度应用与实践-Java Web
13:会话跟踪技术Session的深度应用与实践-Java Web
25 3