GitHub 21.5k Star 的Java工程师成神之路,不来了解一下吗!

GitHub 21.5k Star 的Java工程师成神之路,真的不来了解一下吗!

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

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

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

这就是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/
  • 百度——OpenRasp
    • https://rasp.baidu.com/
  • 椒图科技——云锁
    • https://www.yunsuo.com.cn
  • 阿里云——ARMS
    • https://help.aliyun.com/document_detail/315530.html

以上,我们给大家介绍了 RASP 技术,以及他的简单原理,并给大家提供了一个简单的 Demo 应用,可以方便大家深入学习,如果想要使用一些开原产品的话,也给大家推荐了几个,可以选择性的了解一下。

参考资料:

https://segmentfault.com/a/1190000041132495

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

https://github.com/xbeark/javaopenrasp

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

  1. Log4j漏洞?一行代码都不改就能永久修复?

    △Hollis, 一个对Coding有着独特追求的人△ 作者 l Hollis 来源 l Hollis(ID:hollischuang) 这篇文章我周一发过,但是因为一些"人在江湖.身不由己 ...

  2. 微软修复打印机服务漏洞 所有支持Windows系统都受影响

    在本月的补丁星期二活动日中,在常规安全公告中涵盖一项Windows Print Spooler组件系统的漏洞,Windows Vista及更高版本都受影响可能会导致某些安全问题. 根据微软安全公告MS ...

  3. 一行代码引来的安全漏洞就让我们丢失了整个服务器的控制权

    之前在某厂的某次项目开发中,项目组同学设计和实现了一个"引以为傲",额,有点夸张,不过自认为还说得过去的 feature,结果临上线前被啪啪打脸,因为实现过程中因为一行代码(没有标 ...

  4. 一行代码引来的安全漏洞,就让我们丢失了整个服务器的控制权

    来源 | 程序员石头 责编| Carol 封图 | CSDN 付费下载自视觉中国 之前在某厂的某次项目开发中,项目组同学设计和实现了一个"引以为傲",额,有点夸张,不过自认为还说得 ...

  5. 啥前浪后浪的,一行代码下载B站等全网视频!

    前两天大家的朋友圈应该都被何冰老师<后浪>演讲视频刷屏了,小破站属实也是火了一把.里面也是出现了很多精彩让人产生共鸣的话,比如: "你们年轻人,拥有了我们梦寐以求的权利,你们生活 ...

  6. 刺激!一行代码就可下载b站等全网视频!

    点击上方蓝色小字,关注"涛哥聊Python" 重磅干货,第一时间送达 来源:数据管道 大家好 大家朋友圈应该都被何冰老师<后浪>演讲视频刷屏了,小破站属实也是火了一把. ...

  7. 开源神器:如何用一行代码快速下载 B 站等全网视频!

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家前两天朋友圈应该都被何冰老师<后浪>演讲视频刷屏了,小破站属 ...

  8. 冰河连夜复现了Log4j最新史诗级重大漏洞,含视频和完整案例代码,全网最全,赶快收藏吧

    大家好,我是冰河~~ 周末与一些小伙伴交流的过程当中,发现一些小伙伴公司的项目中使用的Log4j版本还是2.14.0,我一听就有点震惊了:你们还在使用Log4j的2.14.0版本,这个版本存在重大漏洞 ...

  9. 紧急:Spring框架被爆出存在0day级别远程命令执行漏洞。漏洞危害程度不亚于log4j漏洞根据目前掌握的信息,JDK版本在9及以上的Spring框架均受影响。该漏洞目前无官方修复补丁

    Spring框架被爆出存在0day级别远程命令执行漏洞.漏洞危害程度不亚于log4j漏洞根据目前掌握的信息,JDK版本在9及以上的Spring框架均受影响. 漏洞信息和漏洞影响排查方法如下: 漏洞名称 ...

最新文章

  1. 《windows核心编程》 17章 内存映射文件
  2. 小手拍拍机器人_幼儿园互动儿歌游戏,小朋友瞬间变听话!
  3. logging日志模块
  4. Java011-多线程
  5. mybatis ${}使用注意事项
  6. Play 2.0 用户指南 - 表单提交和验证 --针对Scala开发者
  7. 软件设计 基础篇(一) 开发文档
  8. Python POST 修改某计步APP的数据
  9. c# AD域 权限管理
  10. 码~ps基本概念知识
  11. 用文氏图解析条件概率与贝叶斯概率
  12. 如何恢复删除的微信聊天记录?(详细攻略)
  13. java教程——电商秒杀系统介绍
  14. WebRTC音频降噪使用
  15. 1:基本初等函数的性质
  16. 蓝牙AOA高精度定位基站原厂深圳核芯物联科技参加2021中国国际高新技术成果交易会诚邀生态合作伙伴莅临交流指导2021.12.27-29深圳宝安国际会展中心11号馆
  17. Baked Light Light Maps and Probes——srp中使用lightprobe和light probe proxy volume(简称LPPV)
  18. 【Qt】 Fractal Designer 4.6 - Help(中文版)
  19. php酷狗音乐json,酷狗音乐API接口
  20. LaTeX ASCE模板

热门文章

  1. HarmonyOS什么时候上微内核,华为鸿蒙OS什么时候发售 华为鸿蒙harmonyOS什么时候上市...
  2. Office 365 函数之Substitute函数
  3. String.replaceAll
  4. python计算化学键,Python语句print((16 14)/2)的输出结果是(? ?)。
  5. AI art 实验:同样的Prompt, DALLE2 跟 Disco Diffusion 的创作大比拼
  6. python笔记图片_【Python教程】雨痕 的《Python学习笔记》(附脑图)
  7. 第十三篇、基于Arduino uno,获取薄膜压力传感器的值——结果导向
  8. 基于小熊派的HarmonyOS鸿蒙开发教程——内核篇
  9. 马云给正在奋斗的人的精典语句
  10. mnist数据集在caffe(windows)上的训练与测试及对自己手写数字的分类