首页 » SEO优化 » phplog4j技巧_全网连夜修复的Log4j马脚若何做到一行代码都不改

phplog4j技巧_全网连夜修复的Log4j马脚若何做到一行代码都不改

访客 2024-11-10 0

扫一扫用手机浏览

文章目录 [+]

Apache Log4j2 远程代码实行漏洞的问题最近闹得沸沸扬扬的,很多人都被大半夜叫起来紧急修复这跟问题。

有很多人在微信上问我:这种漏洞还能怎么修?下次有问题还要再升级版本吗?有没有啥一劳永逸的办法?就没啥办法避免吗?

phplog4j技巧_全网连夜修复的Log4j马脚若何做到一行代码都不改

实在,是有的。
有一种技能,可以针对这类漏洞做定向拦截。
可以让开发者不用急急忙忙修这个漏洞,乃至你如果完备不想修都可以。

phplog4j技巧_全网连夜修复的Log4j马脚若何做到一行代码都不改
(图片来自网络侵删)

这便是RASP技能。

实在这个技能已经出身良久了,在安全圈也运用很广泛。
运用范围也很广泛了。

RASP

RASP 是 Runtime Application Self-Protection 的缩写,这是一种运用安全保护技能。
他的事理是将保护程序注入到运用程序中,与运用程序融为一体,能够起到实时监测、阻断攻击的浸染,使程序自身拥有自保护的能力。

听起来是不是很高大上?

实在,RASP便是拦截从运用程序到系统的所有调用,确保它们是安全的,并直接在运用程序内验证数据要求。
Web和非Web运用程序都可以通过RASP进行保护。
该技能不会影响运用程序的设计,由于RASP的检测和保护功能是在运用程序运行的系统上运行的。

RASP 技能非常是和对付0Day 漏洞的防护,如反序列化漏洞、JNDI 注入漏洞、表达式注入漏洞、SQL 诸如漏洞、远程代码实行漏洞等。

WAF 和 RASP

在安全防护上,很多人都知道WAF(Web Application Firewall),俗称防火墙,那么,和防火墙比较,RASP 技能实在有着很多的优点。

传统的 WAF 紧张通过剖析流量中的特色过滤攻击要求,并拦截携带有攻击特色的要求。
但是由于 WAF 只能基于流量规则进行防御,无法根据运用高下文进行检测,以是存在误报率高、随意马虎绕过等问题。

但是,RASP 则不同,他就像疫苗会注入到人体一样,RASP 是运行在运用之中的,与运用融为一体,可以获取到运用运行时的高下文,根据要求高下文进行拦截可以对攻击进行精准的识别和拦截。

防火墙就像为簇拥在大人物周围的保镖,大人物去哪里都带着保镖,看起来防御力爆棚,但是大人物本人肌肉不发达也没有武功,一旦保镖被打破或者保镖被调虎离山,那么这个大人物就没有任何保护了,就非常危险了。
而RASP 则是让没有武功的人在很短的韶光并且付出的代价不高的情形下拥有很高的自我保护能力。

RASP 具有以下优点:

1.误报率低。
2.可以防护0Day级别的漏洞攻击。

同时也并不是完备没有缺点,紧张的问题便是可能带来一定的性能损耗。
还有便是开拓难度比较高,须要对 JVM 字节码、ASM 工具、漏洞触发事理以及各种Java 运用容器都有所理解。

RASP技能目前已经非常成熟,在PHP、Java、.NET等多种措辞中都有实现方案。

实现事理

不同于基于流量特色的检测,RASP 紧张关注运用自身的行为,而非流量本身。

当 RASP 创造一个运用,做了它不应该做的事情时,大概率意味着当前运用已经被攻击者利用漏洞攻陷并做了一些高危操作。

以这次 Log4j的漏洞来看,RASP 并不关注要求中的流量是否包含了恶意的 payload,而是去关注 Log4j2 究竟利用 JNDI 功能去做了什么。
如果进行正常的 JNDI 查询,就没有问题;但如果企图利用 JNDI 功能进行命令实行,便是一个显而易见的危险行为。

RASP 要将自己注入到被保护的运用中,基本思路类似于 Java 中的 AOP 技能,将 RASP 的Hook代码注入到须要进行检测的地方,根据高下文和关键函数的参数等信息判断要求是否为恶意要求,并终止或连续实行。

想要实现RASP,在 Java中逃不开 Agent 技能,Agent是一个运行在目标JVM的特定程序,它的职责是卖力从目标JVM中获取数据,然后将数据通报给外部进程。

在Java SE 5之前,要实现一个Agent只能通过编写Native代码来实现。
从Java SE 5开始,可以利用Java的Instrumentation接口(java.lang.instrument)来编写Agent。

使⽤ Instrumentation,开拓者可以构建⼀个独⽴于应⽤程序的代理程序(Agent),用来监测和帮忙运行在 JVM 上的程序,乃至能够更换和修正某些类的定义。

Java Agent支持目标JVM启动时加载,也支持在目标JVM运行时加载,这两种不同的加载模式会利用不同的入口函数,如果须要在目标JVM启动的同时加载Agent,那么可以选择实现下面的方法:

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;}

大略的事理便是这样的,由于篇幅优先就不在这里展开太多了,大家如果感兴趣的话,可以看一下 (https://github.com/xbeark/javaopenrasp )这个开源项目,这是我的一个阿里同事搞的一个大略的 RASP Demo,里面包含了一些REC、SQL 注入等的防护:

利用 Java实现的,代码不多,很随意马虎理解。

开源工具

RASP作为一个相对成熟的技能,现在已经有很多开源的产品了,国内外都有很多。
如国外的Micro Focus、Prevoty、OWASP AppSensor、Shadowd等等。

海内也有很多厂商也有类似的工具。
如:

安百科技——灵蜥http://www.anbai.com/lxPlatform/百度——OpenRasphttps://rasp.baidu.com/椒图科技——云锁https://www.yunsuo.com.cn

以上,我们给大家先容了 RASP 技能,以及他的大略事理,并给大家供应了一个大略的 Demo 运用,可以方便大家深入学习,如果想要利用一些开原产品的话,也给大家推举了几个,可以选择性的理解一下。

但是,话又说回来,安全攻防没有绝对,这个领域永久都是攻击者和防守者之间的博弈过程。
没有绝对的安全,所有安全手段只是让攻击的本钱更高而已。

以是,RASP 技能也并不是完完备全100%的可以做到万无一失,但是,从目前业内的很多运用来看,这个技能目前还是比较成熟的,对付一些常见漏洞的预防还是行之有效的。

参考资料:

https://segmentfault.com/a/1190000041132495

https://www.freebuf.com/articles/web/197823.html

https://github.com/xbeark/javaopenrasp

关于作者:Hollis(ID:hollischuang),一个对Coding有着独特追求的人,现任阿里巴巴技能专家,个人技能博主,技能文章全网阅读量数千万,《程序员的三门课》联合作者。

标签:

相关文章

我国土地利用分类代码的构建与应用

土地利用分类代码是我国土地管理的重要组成部分,是土地资源调查、规划、利用和保护的依据。土地利用分类代码的构建与应用显得尤为重要。本...

SEO优化 2025-02-18 阅读0 评论0

微信跳转微信支付便捷支付体验的秘密武器

移动支付已成为人们日常生活中不可或缺的一部分。作为我国领先的社交平台,微信支付凭借其便捷、安全的支付方式,深受广大用户的喜爱。而微...

SEO优化 2025-02-18 阅读0 评论0

探寻会计科目代码背后的奥秘分类与

会计科目代码是会计信息系统中不可或缺的组成部分,它将企业的经济活动进行分类和归纳,为会计核算、财务分析和决策提供重要依据。本文将从...

SEO优化 2025-02-18 阅读1 评论0