什么是序列化?
序列化(Serialization)将对象的状态信息状花为可以存储或传输的形式的过程。
在序列化期间,对象将其状态写入到临时或者持久存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化:将数据结构或者对象转换成二进制串的过程;反序列化:将在序列化过程中所生产的二进制串转换成数据结构或者对象的过程。
反序列化漏洞原理
反序列化漏洞的本质就是反序列化机制打破了数据和对象的边界,导致攻击者注入的恶意序列化数据在反序列化过程中被还原成对象,控制了对象就可能在目标系统上执行攻击代码。
java序列化常见应用于RMI、JMX、JMS等技术中。
案例分析
案例一:Apache ActiveMQ 5.12.0 远程代码执行漏洞(JMS)
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序未能限制可在代理中序列化的类。
远程攻击者可借助特制的序列化的Java Message Service(JMS) ObjectMessage对象利用该漏洞执行任意代码。
案例二:JBoss 反序列化漏洞(JMX)
漏洞防御