去年我们遇到了所谓的 java对象反序列化漏洞(它看起来不是java的问题),它反序列化了一个可能导致远程执行代码的对象(RCE) )或拒绝服务(DoS)攻击。
请参阅https://dzone.com/articles/java-serialization-vulnerability-threatens-million了解详情。
基本上,如果代码无法验证传入的对象,那么它就容易受到攻击。
这种攻击的影响相当高,如 What is the security impact of deserializing untrusted data in Java?
首先,攻击者使用来自 Apache Commons Collections 的 InvokerTransformer 中的类作为构建攻击链的方法。
解决方案1:黑名单不接受用于构建小工具链的类。
但是,这还不够,因为攻击链可以通过许多其他方式构建。参阅,
https://github.com/frohoff/ysoserial/tree/master/src/main/java/ysoserial/payloads
解决方案2:白名单通过使用" SecureObjectStream"覆盖ObjectStream,验证应用程序实际需要的类。
同样,这并没有完全否定攻击。有一个使用jre7u21的RCE和使用HashSets的拒绝服务攻击。
解决方案3:关闭反序列化最好的。
在不能忽略反序列化的情况下,有没有更好的方法来验证和阻止坏数据,除了黑色和&白名单?