编码员征服安全。分享与学习系列 - 不安全的反序列化

2019年9月20日发布
作者:Jaap Karan Singh
案例研究

编码员征服安全。分享与学习系列 - 不安全的反序列化

2019年9月20日发布
作者:Jaap Karan Singh
查看资源
查看资源

根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。

只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。

在这一集里,我们将学习。

  • 攻击者如何利用不安全的反序列化技术
  • 为什么不安全的反序列化是危险的
  • 可以修复这个漏洞的技术。

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

这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"

用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。

例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。

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

诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。

根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。

消除不安全的反序列化

企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。

如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。

一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。

无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。

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

要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

查看资源
查看资源

作者

Jaap Karan Singh

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

编码员征服安全。分享与学习系列 - 不安全的反序列化

2019年9月20日发布
作者:Jaap Karan Singh

根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。

只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。

在这一集里,我们将学习。

  • 攻击者如何利用不安全的反序列化技术
  • 为什么不安全的反序列化是危险的
  • 可以修复这个漏洞的技术。

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

这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"

用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。

例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。

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

诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。

根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。

消除不安全的反序列化

企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。

如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。

一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。

无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。

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

要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。