【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 该关键字的功能就是…

蓝桥杯备战5.图书管理员

[NOIP2017]图书管理员 (nowcoder.com) #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N 2e510,M1e310; int a[N]; int n,q; int check(int l,int x) {int tmppow(10,l);for(int i1;i<n;i){if(a[i]%tmpx){cout<&…

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

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

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

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

MySQL数据库——23.元数据

MySQL 元数据 是关于数据库和表结构的数据&#xff0c;它包含了数据库中的各种信息&#xff0c;例如表的结构、索引、触发器、存储过程等。元数据存储在系统数据库中&#xff0c;主要包括以下几个系统表&#xff1a; information_schema: 这个数据库包含了 MySQL 数据库服务器…

Rancher简介

Rancher是一个容器管理平台&#xff0c;它提供了一套工具和功能来帮助用户轻松部署和管理容器化应用。 以下是Rancher的主要特点和功能&#xff1a; 多集群管理&#xff1a;Rancher能够集中管理多个Kubernetes集群&#xff0c;无论这些集群位于云上还是本地数据中心。认证与权…

Day 29 MySQL的主从复制集群

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

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

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

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…

Linux脚本 -- 监控用户态程序的内存分布

程序内存监控脚本使用说明 本文档旨在详细介绍如何使用特定的Shell脚本来监控Linux环境下一个应用程序的内存使用情况&#xff0c;并记录其变化。 脚本概述 脚本通过不断检测特定应用程序的内存映射&#xff0c;并对比连续两次的结果&#xff0c;如果发现有变化&#xff0c;…

高精度数据采集模块8路16位模拟量输入

M160E以太网远程I/O无线数据采集模块是一款工业级、隔离设计、高可靠性、高稳定性和高精度数据采集模块&#xff0c;嵌入式32位高性能微处理器MCU&#xff0c;集成2路工业10/100M自适应以太网模块里面。提供多种I/O&#xff0c;支持标准Modbus TCP&#xff0c;可集成到SCADA、O…

学习的体会,献给刚刚接触编程的你(7)

距离我上次更新博客时间有一年多了&#xff0c;中间我总是挣扎与颓废&#xff0c;博客一直没有更新。每天的工作占据了自己大量的时间&#xff0c;感觉自己没有生活感&#xff0c;自己就如同一个不能停止的机器一样,内耗严重&#xff0c;同时也没有获得任何成就感。 也许你现在…

基于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;输…

[力扣题解]77. 组合问题

题目&#xff1a;77. 组合 思路 回溯法 调试用代码 // 调试用 // 理解不了减枝那个值怎么设置的 class Solution { private:int order 0;vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtra…

算法训练营day52,204. 计数质数

204. 计数质数 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1…

《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…

Java面试题:什么是栈内存?它在Java中扮演什么角色?

在计算机科学中&#xff0c;栈内存&#xff08;Stack Memory&#xff09;是一种特殊的内存区域&#xff0c;用于存储程序运行时的局部变量、函数参数以及返回地址等信息。栈内存与堆内存&#xff08;Heap Memory&#xff09;相对&#xff0c;后者主要用于存储程序中动态分配的对…

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

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

2024OD机试卷-机器人搬砖 (java\python\c++)

题目:机器人搬砖 题目描述 机器人 搬砖,一共有 N 堆砖存放在 N 个不同的仓库中,第 i 堆砖中有 bricks[i] 块砖头,要求在 8 小时内搬完。 机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格只在这一个小时有效,为使得机…