编码员征服安全。分享与学习系列 - 不安全的反序列化
根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。
Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。
预定一个演示Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。


根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。
根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。
资源
安全技能基准测试:简化企业安全设计
寻找有关 "按设计确保安全 "计划成功与否的有意义的数据是众所周知的难题。首席信息安全官(CISO)在试图证明投资回报率(ROI)和安全计划活动在人员和公司层面上的商业价值时,往往会面临挑战。更不用说,企业要深入了解自己的组织是如何以当前的行业标准为基准的,更是难上加难。美国总统的《国家网络安全战略》向利益相关者提出了 "通过设计实现安全和弹性 "的挑战。让 "按设计保证安全 "计划发挥作用的关键不仅在于为开发人员提供确保代码安全的技能,还在于向监管机构保证这些技能已经到位。在本演讲中,我们将分享大量定性和定量数据,这些数据来自多个主要来源,包括从超过 25 万名开发人员那里收集的内部数据点、数据驱动的客户洞察力以及公共研究。利用这些数据点的汇总,我们旨在传达一个跨多个垂直领域的 "按设计保证安全 "计划的现状。报告详细阐述了这一领域目前未得到充分利用的原因、成功的技能提升计划对降低网络安全风险的重大影响,以及消除代码库中各类漏洞的潜力。