【Java代码审计】代码审计的方法及常用工具

【Java代码审计】代码审计的方法及常用工具

  • 代码审计的常用思路
  • 代码审计辅助工具
    • 代码编辑器
    • 测试工具
    • 反编译工具
    • Java 代码静态扫描工具

代码审计的常用思路

1、接口排查(“正向追踪”):先找出从外部接口接收的参数,并跟踪其传递过程,观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞

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

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

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

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

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

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

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


代码审计辅助工具

代码编辑器

1、Sublime

Sublime 是一款轻量级的、功能强大的代码及文本编辑器,允许用户以插件的形式拓展功能

2、IDEA (推荐)

IntelliJ IDEA 是由 Jetbrains 公司开发的一款 Java IDE,自带反编译、动态调试以及代码搜索等功能,为漏洞定位和挖掘提供了极大的便利。相比 Eclipse 需要安装相关插件才可以完成反编译等工作,IntelliJ IDEA 自带的强大功能更有利于我们进行代码审计

image.png

3、Eclipse

Eclipse 是 Java 开发者非常喜欢的工具之一,它具有强大的编辑、调试功能,允许开发人员安装不同的插件,从而拓展不同的功能。例如,基于 Eclipse 的 FindBugs漏洞扫描插件可以帮助开发者寻找应用程序中的各种 Bug

测试工具

1、Burp Suite

Burp Suite 是渗透测试工作者必备的一款工具,同时对于代码审计者和安全研究人员来说,这也是一款比较重要的测试工具,其跨平台、便捷、强大的功能以及丰富的插件,深受信息安全从业者的喜爱

2、SwitchyOmega

SwitchyOmega 是一款代理管理插件,支持 Firefox 和 Chrome 浏览器,并支持HTTP、HTTPS、socket4 和 socket5 协议。在日常实际测试工作中,常需要切换代理,SwitchyOmega 可以方便、快速地完成代理设置的切换

image.png

3、Postman

Postman 是一款功能强大的网页调试工具,能够为用户提供强大的 Web API &HTTP 请求调试功能。Postman 能够发送任何类型的 HTTP 请求,方便测试人员观察响应的内容

image.png

4、Postwomen

Postman 是一款便捷的 API 接口调试工具,但是由于其高级功能需要付费,因此 Postwomen 应运而生。Postwomen 是一个用于替代 Postman 且免费开源、轻量级、快速且美观的 API 调试工具。Postwomen 由 Node.js 开发,除支持主流的Restful 接口调试外,还支持 GraphQL 和 WebSocket

5、Ysoserial

Ysoserial 是一款开源的 Java 反序列化测试工具,内部集成有多种利用链,可以快速生成用于攻击的代码,也可以将新公开的反序列化漏洞利用方式自行加入 Ysoserial 中

image.png

6、Marshalsec

Marshalsec 是一款开源的 Java 反序列化测试工具,不仅可以生成各类反序列化利用链,还可以快速启动恶意的 RMI 服务等

7、Beyond Compare

Beyond Compare 是由 Scooter Software 推出的文件比较工具,主要对比两个文件夹或者文件,并以颜色标示差异,比较范围包括目录、文档内容等。使用该工具可以方便代码审计人员快速地比对两个版本代码的差别

反编译工具

1、JD-GUI

JD-GUI 是一款具有 UI 界面的反编译工具,界面简洁大方,使用简单方便

2、FernFlower

FernFlower 反编译工具的功能比 JD-GUI 更强大。该工具虽然没有 UI 界面,但可以配合系统指令完成批量反编译的工作

3、CFR

CFR 也是功能强大的反编译工具,支持主流 Java 特性 - Java 8 lambda 表达式,以及 Java 7 字符串切换。在某些 JD-GUI 无法反编译的情况下,CFR 仍然能完美地进行反编译,也可以像 FernFlower 那样配合系统指令进行批量反编译

4、IntelliJ IDEA

IntelliJ IDEA 反编译工具能够自动解包已添加依赖的 Jar 包,并对其内容进行反编译。该工具拥有强大的动态调试和字符串匹配和搜索功能,为审计和调试漏洞的工作提供了极大便利

Java 代码静态扫描工具

1、Fortify SCA

Fortify SCA 是获得业界认可的静态代码检查工具,但它是收费的。Fortify SCA的核心在于规则库,用户可以自定义规则库,减少误报

image.png

2、 FindBugs(SpotBugs) 与 FindSecBugs 插件

FindBugs 是一款 Bug 扫描插件,在 IDEA 和 Eclipse 中都可进行安装。FindBugs可以帮助开发人员发现代码缺陷,减少 Bug,但其本身并不具备发现安全漏洞的能力,需要安装 FindSecBugs 拓展发现安全漏洞的能力

SpotBugs是Findbugs的继任者(Findbugs已经于2016年后不再维护),所以二者用法基本一样,可以独立使用,也可以作为插件使用。SpotBugs 需要运行在 JDK1.8 以上的版本,可以分析 JDK1.0~1.9版本编译的 Java 程序

IDEA安装SpotBugs插件:

image.png

下载https://find-sec-bugs.github.io/download.htm,用于安全检测的支持:

image.png

SpotBugs添加FindSecBugs规则库:

image.png

添加成功:

image.png

可根据需求选取要扫描的相关主题,风险警告和准确率,如图配置选择进行安全漏洞扫描。我们这里关注安全类型的 bug,所以勾选 “Security” 选项。默认报告配置最低风险警告(Minimum rank)是20,准确率(Minimum confidence)是 Medium

image.png

在项目目录右键会发现多了一个 “SpotBugs” 选项,可以选择分析某个模块或者整个项目。选择如下所示选项后便开始进行安全扫描:

image.png

扫描结果:

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL基本查询(下)】

文章目录 一、update案例 二、Delete案例注意:delete 全表数据的行为慎用!truncate 三、插入查询结果案例 四、了解一些函数1.count函数2.sum函数3. avg函数4.max函数5. min函数 五、group by子句的使用案例having和where 一、update 该关键字的功能就是…

如何在40分钟之内,又快又准完成四六级阅读柯桥考级英语培训

答题步骤和技巧 1 选词填空 选词填空部分字数在200~300之间,设有10个空,提供15个备选项,从中选出最合适答案。选词填空题相对于普通的完型题简单,但是考察内容基本一致。集中考察的点有语法现象,逻辑衔接和搭配。每空…

纯血鸿蒙APP实战开发——数字滚动动效实现

介绍 本示例主要介绍了数字滚动动效的实现方案。 该方案多用于数字刷新,例如页面刷新抢票数量等场景。 效果图预览 使用说明: 下拉页面刷新,数字进行刷新。 实现思路 通过双重ForEach循环分别横向、纵向渲染数字。 Row() {ForEach(this…

Day 29 MySQL的主从复制集群

一:主从复制 1.主从复制概念 什么是主从复制: ​ 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库 主从复制的作用: ​ 做数据的热备&#xf…

GPU云渲染平台选择应该看什么?瑞云渲染带你了解

在选择GPU云渲染平台时,关键的考量因素包括渲染速度、支持的软件兼容性、价格性价比以及用户服务质量。了解这些指标将帮助用户在众多选项中做出明智的选择,以优化渲染效率和成本效益。 一、GPU与渲染有什么关系 GPU与渲染有着密切的关系,在…

springboot增删改查

我的记录 RestController RequestMapping("/user") public class UserController {Autowiredprivate UserService userService;GetMapping("/list")public List<User> list(){return userService.list();}//新增PostMapping("/save")publi…

AS-VJ900实时视频拼接系统产品介绍:两画面视频拼接方法和操作

目录 一、实时视频拼接系统介绍 &#xff08;一&#xff09;实时视频拼接的定义 &#xff08;二&#xff09;无缝拼接 &#xff08;三&#xff09;AS-VJ900功能介绍 1、功能 2、拼接界面介绍 二、拼接前的准备 &#xff08;一&#xff09;摄像机选择 &#xff08;二&a…

基于FPGA实现的HDMI TO MIPI扩展显示器方案

FPGA方案&#xff0c;HDMI IN接收原始HDMI 信号&#xff0c;输出显示到LCD 屏上 客户应用&#xff1a;扩展显示器 主要特性&#xff1a; 1.支持2K以下任意分辨率显示 2.支持OSD 叠加多个图层 3.支持MIPI/EDP/LVDS/RGB屏 4.支持放大缩小匹配屏分辨率 5.零延时&#xff0c;输…

《ESP8266通信指南》15-MQTT连接、订阅MQTT主题并打印消息(基于Lua|适合新手|非常简单)

往期 《ESP8266通信指南》14-连接WIFI&#xff08;基于Lua&#xff09;-CSDN博客 《ESP8266通信指南》13-Lua 简单入门&#xff08;打印数据&#xff09;-CSDN博客 《ESP8266通信指南》12-Lua 固件烧录-CSDN博客 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP826…

【前端基础】CSS样式+Vue中绘制时间轴

深度选择器 在 Vue.js 中&#xff0c;/deep/、>>>、:deep 和 ::v-deep 这些都是深度选择器&#xff0c;用于修改子组件的样式。它们主要用于解决作用域样式和组件样式之间的冲突问题。 1. /deep/ 或 >>> /deep/ 和 >>> 是相同的选择器&#xff0c;…

【智能算法】正切搜索算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年&#xff0c;A Layeb受到正切函数启发&#xff0c;提出了正切搜索算法&#xff08;Tangent Search Algorithm, TSA&#xff09;。 2.算法原理 2.1算法思想 TSAT基于正切函数的数学…

vue3对象数组格式的动态表单校验

如你有一个表单&#xff0c;表单内容是对象&#xff0c;但是对象内还有可动态循环的数组进行动态表单校验。 效果如图&#xff1a;查看源码 页面内容&#xff1a; <div class"arrForm-Box"><el-form :model"state.formData" :rules"rule…

mysql数据库调优篇章1--日志篇

目录 1.认识数据库中日志的作用2.增加mysql数据库中my.ini 基本配置3.增加my.ini中参数配置4.查看已经执行过的sql语句过去执行时间5.找出慢查询的sql6.常用参数查询命令7.认识慢查询日志记录8.认识通用日志记录&#xff08;记录增删改查操作&#xff09;9.认识二进制文件binlo…

一文了解spring事务特性

推荐工具 objectlog 对于重要的一些数据&#xff0c;我们需要记录一条记录的所有版本变化过程&#xff0c;做到持续追踪&#xff0c;为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

数据结构学习/复习12

一、排序概念与应用 二、插入排序 三、希尔排序 当间隔数为1时则为插入排序 1.一组一组排 2.多组并排 3.间隔数变化直至为1 四、性能测速代码

Java类加载器介绍

在Java中&#xff0c;类加载器是一种动态加载类的机制&#xff0c;它负责在运行时查找、加载和链接类文件。当Java应用程序需要创建某个类的对象时&#xff0c;类加载器会在运行时查找该类对应的.class文件&#xff0c;并将其加载到Java虚拟机中。Java类加载器通常分为三层&…

【Android】Kotlin学习之数据容器(数组for循环遍历)

数组遍历 1. for ( item in arr){…} 2. for ( i in arr.indeces ) {…} (遍历下标) 3. for ((index, item) in arr.withInfex()) {…} (遍历下标和元素) 4. arr.forEach {} ( 遍历元素 ) 5. arr.forEachIndexed{index, item -> …}

Python尝试安装 pyaudio 时遇到的错误信息表示安装过程失败,原因是找不到 Python.h 头文件

环境&#xff1a; Python 3.8.10 WSL2 问题描述&#xff1a; 尝试安装 pyaudio 时遇到的错误信息表示安装过程失败&#xff0c;原因是找不到 Python.h 头文件 error: subprocess-exited-with-error Building wheel for pyaudio (pyproject.toml) did not run successfully…

大模型微调之 在亚马逊AWS上实战LlaMA案例(七)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;七&#xff09; 微调SageMaker JumpStart上的LLaMA 2模型 这是在us-west-2的测试结果。 展示了如何使用SageMaker Python SDK部署预训练的Llama 2模型&#xff0c;并将其微调到你的数据集&#xff0c;用于领域适应或指令…

【Nginx】如何在 Nginx 中阻止来自特定国家的 IP 地址访问

文章目录 前言一、准备工作二、查看 Nginx 服务器都拥有哪些模块2.1 先查看本地nginx是否有ngx_http_geoip2模块2.2 安装nginx并配置ngx_http_geoip2模块2.2.1下载所需版本的nginx到服务器2.2.2 先安装所需依赖2.2.3 解压文件2.2.4 下载ngx_http_geoip2模块2.2.5 编译安装nginx…