最新消息:欢迎大家关注安全工具箱微信公众号,域名信息查询,微信搜索安全工具箱添加关注即可,或访问在线安全工具箱

如何自动化捕捉反序列化漏洞

代码审计 ca1n 1848浏览 0评论

 

34444

0x00 前言

2015年晚些时候很多 Java 系的应用被发现有一个因为反序列化使用而产生的 bug. 这个 bug 产生源于一次在 AppSecCali 上的演讲, 演讲者阐述了反序列化用户的输入时和在 classpath 里存在 Apache Commons Collections 时可能存在的风险.

后来 Foxglove 的 Stephen Breen 把 WebLogic, WebSphere, JBoss 和 Jenkins 的反序列化漏洞对外公布, 同时公布的还有待改进的 exploit.

尽管现在很多大厂商已经修复了这个漏洞, 但这并不意味这这个漏洞的结束, 还有很多其他的应用仍然受到该漏洞的影响, 这类的例子在 Foxglove 公布上述漏洞的之后不久就被发现了, 例如 CVE-2015-5254 ActiveMQ 的反序列化漏洞.

当 Foxglove 公布上述漏洞时, 已经详细地阐述了这类漏洞的挖掘和在渗透中的利用, 受到他的启发, 我想到了一种自动检测一些闭源应用的方法, 较之于其他的方法, 此方法只需要检查 jar 文件即可.

0x01 检查指定 Java 库

使用 FindBugs 的命令行界面来检查, 启用的插件是 1.4.5 版本的 Find Security Bugs.

具体命令如下, 这里使用 -hight 选项, 来忽略危害等级为 『中』 的漏洞.

> ./findsecbugs.sh -high libs/esapi-2.1.0.jar

H S SECOBDES: Object deserialization is used in org.owasp.esapi.codecs.Base64.decodeToObject(String)  At Base64.java:[line 1106]
H S SECPTI: File(...) reads a file whose location might be specified by user input  At DefaultEncryptedProperties.java:[line 174]
H S SECPTO: FileOutputStream(...) writes to a file whose location might be specified by user input  At Base64.java:[line 1359]
H S SECPTO: FileOutputStream(...) writes to a file whose location might be specified by user input  At Base64.java:[line 1322]
H S SECPTI: File(...) reads a file whose location might be specified by user input  At EncryptedPropertiesUtils.java:[line 188]
H S SECPTI: FileInputStream(...) reads a file whose location might be specified by user input  At Base64.java:[line 1318]
H S SECPTI: File(...) reads a file whose location might be specified by user input  At EncryptedPropertiesUtils.java:[line 140]
H S SECPTI: FileInputStream(...) reads a file whose location might be specified by user input  At Base64.java:[line 1355]

可以看到, 列出了多个可能存在风险为 high 的漏洞的位置Base64.java:[line 1106], EncryptedPropertiesUtils.java:[line 140] 等.

如果需要检查特定的漏洞位置, 可以在 JD 里直接打开 jar 文件.

222

0x02 检查整个应用

FindBugs 支持很多不同的选项来完成不同的功能, 如果需要检查整个应用是否存在该问题, 那么需要给 FindBugs 提供一个 jar 文件的列表.

查找 jar 文件可以使用以下方法

Linux / OS X
find /some/application/ -name *.jar
Windows
dir "C:/Some/Application/" /s /b | findstr \.jar$ > libs.txt

用上述方法的到所有 jar 文件之后可以整个导入 FindBugs 来进行检测, 方法如下:

  • -xargs: 用来装载包含所有 jar 文件的列表
  • -progress: 用来显示进度, 反馈扫描时的各项信息
  • -html: 扫描完成之后产生 html 格式的报告

具体指令如下:

> cat libs.txt | findsecbugs.sh -xargs -progress -html -output report.htm

Scanning archives (156 / 156)
2 analysis passes to perform
Pass 1: Analyzing classes (16922 / 48118) - 35% complete

The same operation can be done in Windows with the following command. 
> type libs.txt | findsecbugs.bat -xargs -progress -html -output report.htm

0x03

FindBugs 只能简单分析出可能存在漏洞的位置, 为了确认是否存在漏洞还需仔细地分析.
一种检查的方法就是检查是否存在用户的输入进入 ObjectInputStream 类中.

翻译来源:http://blog.h3xstream.com/2016/01/deserialization-vulnerability.html

转载请注明:安全工具箱 » 如何自动化捕捉反序列化漏洞

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址