[ 代码审计篇 ] 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

相关文章
|
16天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
18天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
40 4
|
18天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
36 0
WK
|
24天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
38 0
|
1月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
26 1
|
1月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
55 2
|
1月前
|
SQL 安全 Java
代码审计-JAVA----javaweb代码审计思路
代码审计-JAVA----javaweb代码审计思路
|
2月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
71 1
|
2月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
34 1
下一篇
无影云桌面