java代码审计之反序列化(静态内部类)

探讨了非静态内部类序列化的潜在问题,包括平台依赖性、敏感数据泄露风险及NotSerializableException异常。介绍了静态内部类序列化的正确用法,并提出了审计与修复策略。

对非静态内部类的序列化依赖编译器,且随着平台的不同而不同,容易产生错误。
对内部类的序列化会导致外部类的实例也被序列化。这样有可能泄露敏感数据。

public class DistributeData implements SerializedName{
public class CodeDetail {...}
}

CodeDetail 并不会被序列化。

public class DistributeData implements SerializedName{
public class CodeDetail implements SerializedName{...}
}

报NotSerializableException,查错误, CodeDetail 这个类虽然实现了 Serializable 接口,但
CodeDetail 在项目中是以内部类的形式定义的。

public class DistributeData implements SerializedName{
public static class CodeDetail implements SerializedName{...}
}

上面的这种形式可以被序列化但是容易造成敏感信息泄露。

审计策略

人工查找 implements Serializable 的所有内部类

修复方案

class ${InnerSer} {}
去除内部类的序列化。
static class ${InnerSer} implements Serializable {}
把内部类声明为静态从而被序列化。但是要注意遵循示例三中的敏感信息问题
 

### 代码审计中的反序列化漏洞检测工具 #### 静态分析工具 静态分析工具可以在不运行程序的情况下扫描源码,查找可能存在的反序列化漏洞。 - **FindBugs/SpotBugs** FindBugs及其后续版本SpotBugs是一款流行的Java静态分析工具。该工具能识别多种类型的编程错误,其中包括可能导致反序列化的危险模式[^1]。 - **SonarQube** SonarQube是一个用于持续监测代码质量的平台,支持多语言开发环境下的代码审查工作。对于Java应用程序而言,其内置插件可有效定位存在风险的对象流操作,从而辅助开发者预防因不当处理而引发的安全隐患[^2]。 #### 动态分析工具 动态分析工具则侧重于实际执行过程中捕捉异常行为,适用于更深入的功能验证阶段。 - **GadgetInspector** GadgetInspector由OWASP社区维护,专为评估Java应用内的潜在反序列化攻击路径设计。此工具允许用户加载目标JAR文件集,并自动解析其中定义的所有类成员关系图谱;一旦发现可疑链条,则会立即发出警告提示[^3]。 - ** ysoserial** `ysoserial` 是一款著名的开源框架,专门用来生成可用于测试目的的有效载荷(Payload),以模拟真实的恶意企图场景。尽管本身并不直接充当检测手段,但在配合其他调试设施时却显得尤为有用——比如结合Burp Suite代理服务器截获HTTP请求包后植入自定义命令行指令等动作前后的变化情况对比研究[^4]。 ```bash java -jar ysoserial.jar CommonsCollections1 "touch /tmp/poc" | base64 - ``` 上述命令展示了如何利用 `ysoserial` 创建一个简单的POC (Proof Of Concept) 来触发表面无害的操作系统调用事件作为示范用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值