博客

程序员攻克安全:分享与学习系列 - 不安全反序列化

September 20, 2019
Jaap Karan Singh

根据应用程序的不同,序列化过程可能随时发生。它描述了将数据结构或对象状态转换为可存储或可传输格式的过程。反序列化则是这一过程的逆过程,即将结构化数据还原为存储前的对象或数据字符串。

当应用程序将反序列化过程中的数据视为可信时,就会发生不安全的反序列化。如果用户能够修改新重构的数据,他们就可以执行各种恶意活动,例如代码注入、拒绝服务攻击,或者仅仅通过修改数据来获取应用程序内的优势,比如降低商品价格或提升自身权限。

在本期节目中,我们将学习:

  • 攻击者如何利用不安全的反序列化
  • 为什么不安全的反序列化很危险
  • 修复此漏洞的技术手段。

攻击者如何利用不安全的反序列化?

如今,最流行的数据序列化格式是 JSON,XML 紧随其后。许多编程语言也提供了各自的序列化方法,这些方法通常比 JSON 或 XML 包含更多功能。无论如何,如果开发人员将反序列化数据视为可信输入,而不是遵循本系列其他博客中提到的准则——即“永远不要信任用户输入!”——问题就会随之而来。

用户输入绝不可信,因为用户可以在这些字符串中插入代码,而这些代码可能会被接收服务器意外执行。由于原始的反序列化数据有时也可以被访问和利用,因此它也必须被归入不可信类别。

例如,如果一个论坛应用程序使用 PHP 对象序列化来保存包含用户身份和角色的 Cookie,那么它就可能被篡改。恶意用户可能会将自己的“用户”角色更改为“管理员”。或者,他们可以利用数据字符串提供的入口注入代码,这些代码在服务器处理“可信”数据时可能会被误读并执行。

为什么不安全的反序列化很危险?

诚然,此类攻击需要黑客具备一定的技术能力,有时还需要通过反复试验来了解服务器会接受哪些来自篡改后的反序列化数据的代码或漏洞利用。尽管如此,这仍是一个被广泛利用的漏洞,因为它为有能力的黑客提供了巨大的潜在破坏力。

根据反序列化数据的用途,可以实施多种攻击,包括我们在之前博客中介绍过的许多攻击。不安全的反序列化可能成为远程代码注入、跨站脚本攻击、拒绝服务攻击、访问控制劫持以及 SQL 和 XML 注入攻击的入口。它本质上打开了一个攻击点,将所有反序列化数据声明为可信,从而让攻击者有机可乘。

消除不安全的反序列化

组织防止不安全反序列化最安全的做法是限制应用程序接收反序列化数据。但这可能并不现实或不可行,不过不用担心,还有其他技术可以用来防御此类攻击。

如果可能,可以将数据清理为数值等格式。这可能无法完全阻止漏洞利用,但可以防止代码注入的发生。更好的做法是要求对反序列化数据进行某种形式的完整性检查,例如数字签名,以确保数据字符串未被篡改。此外,所有反序列化过程都应被隔离,并在低权限环境中运行。

在实施这些保护措施后,请务必记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果用户在日志中触发了多次反序列化错误,这很可能表明他们是恶意内部人员,或者其凭据已被窃取。您甚至可以考虑对频繁触发反序列化错误的用户采取自动锁定等措施。

无论您使用哪种工具来对抗不安全的反序列化,请记住,其核心在于这些数据可能已被用户触碰或篡改。永远不要信任它。

关于使用已知漏洞组件的更多信息

如需深入了解,您可以查看 OWASP 关于不安全反序列化的说明。您还可以通过 Secure Code Warrior 平台的免费展示来测试您新掌握的防御知识,该平台致力于将网络安全团队培养成顶尖的网络战士。若想了解更多关于攻克此漏洞及其他各类威胁的信息,请访问 Secure Code Warrior 博客。

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。