全网连夜修复的Log4j漏洞,如何做到一行代码都不改?( 二 )


public static void premain(String agentArgs, Instrumentation inst);public static void premain(String agentArgs);复制代码在premain函数中,我们可以对字节码进?操作,织?Rasp的安全探针 。
public static void premain(String agentArgs, Instrumentation inst)throws ClassNotFoundException, UnmodifiableClassException {inst.addTransformer(new ClassTransformer());}复制代码借助ClassFileTransformer接口,实现对字节码的修改,定义一个类,实现ClassFileTransformer接口,并重写transform方法,在这个方法中,通过 ASM 技术修改字节码 。
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {byte[] transformeredByteCode = classfileBuffer;if (Config.moudleMap.containsKey(className)) {try {ClassReader reader = new ClassReader(classfileBuffer);ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);ClassVisitor visitor = Reflections.createVisitorIns((String) Config.moudleMap.get(className).get("loadClass"), writer, className);reader.accept(visitor, ClassReader.EXPAND_FRAMES);transformeredByteCode = writer.toByteArray();} catch (Exception e) {e.printStackTrace();}}return transformeredByteCode;}复制代码简单的原理就是这样的,因为篇幅优先就不在这里展开太多了,大家如果感兴趣的话,可以看一下 (github.com/xbeark/java… )这个开源项目,这是我的一个阿里同事搞的一个简单的 RASP Demo,里面包含了一些REC、SQL 注入等的防护:

全网连夜修复的Log4j漏洞,如何做到一行代码都不改?

文章插图
 
?
使用 Java实现的,代码不多,很容易理解 。
开源工具RASP作为一个相对成熟的技术,现在已经有很多开源的产品了,国内外都有很多 。如国外的Micro Focus、Prevoty、OWASP AppSensor、Shadowd等等 。
国内也有很多厂商也有类似的工具 。如:
  • 安百科技——灵蜥
    • www.anbai.com/lxPlatform/
  • 百度——OpenRasp
    • rasp.baidu.com/
  • 椒图科技——云锁
    • www.yunsuo.com.cn
  • 阿里云——ARMS
    • help.aliyun.com/document_de…
以上,我们给大家介绍了 RASP 技术,以及他的简单原理,并给大家提供了一个简单的 Demo 应用,可以方便大家深入学习,如果想要使用一些开原产品的话,也给大家推荐了几个,可以选择性的了解一下 。
参考资料:
segmentfault.com/a/119000004…
www.freebuf.com/articles/we…
github.com/xbeark/java…
原文作者:HollisChuang
原文链接:
https://juejin.cn/post/7046937908644675597
如果你觉的本文对你有帮助,麻烦点赞关注支持一下

【全网连夜修复的Log4j漏洞,如何做到一行代码都不改?】


推荐阅读