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

Posted 黑客工具箱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何自动捕捉反序列化漏洞相关的知识,希望对你有一定的参考价值。

安全工具箱博客已发布,请大家访问

http://tools.pwn.ren/

欢迎大家关注安全工具箱,每天分享最新最好玩最实用的安全检测工具和安全技巧。

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 文件.


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

以上是关于如何自动捕捉反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章

如何防止反序列化期间运行一段代码?

Dubbo爆反序列化漏洞,赶快升级到稳定版本!

美国法院系统存在跨站请求伪造漏洞近30年 .NET编码库存在严重的反序列化漏洞

ThinkPHP5.1.x 反序列化

Java反序列化漏洞通用利用分析

Java反序列化安全漏洞怎么回事