PHP反序列化函数模糊测试技术解析

本文深入探讨PHP反序列化函数的安全漏洞问题,详细介绍了使用AFL进行模糊测试的技术方案,包括环境搭建、种子文件选择和字典配置等核心内容,帮助开发者有效发现和防范反序列化相关安全风险。

模糊测试PHP的反序列化函数

最近,PHP开发团队决定不再将反序列化函数实现中的错误视为安全问题。本文旨在说明为何这一决策欠妥,并提供一个针对反序列化功能的模糊测试/持续质量保证方案,因为该功能似乎是无底洞般的漏洞来源。

背景分析

变更分类的论点有两点。首先,他们认为反序列化本质上是一个对不可信源数据不安全的函数。 essentially,他们表示无需将反序列化实现中的错误视为安全问题,因为应用程序将不可信数据传递给该函数本身就意味着其安全性已受损。其次,他们认为将反序列化错误视为安全问题会鼓励开发者对其使用不可信数据。个人认为这一论点相当薄弱。相关文档已明确警示反序列化不安全,如果连这一警告都无法传达信息,那么PHP问题追踪器中分类变更更难以奏效。

让我们更详细地讨论第一点,因为实际情况更为复杂。通常,在不攻击反序列化实现本身的情况下,利用不可信数据的反序列化相对容易。但这有一些要求。特别是,攻击者必须能在目标应用程序或其使用的库中找到包含PHP魔术方法的类,例如__destruct函数。此外,如果向反序列化提供了allowed_classes参数,则包含魔术方法的类必须在此列表中。这些条件并非总是成立。如果应用程序是闭源的,攻击者将无法直接找出此类类的名称,而如果allowed_classes是空列表,则他们无论如何也无法利用这些类。

上述并非纯假设场景。这篇优秀的分析文章记录了PornHub

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计