这篇文章我周一发过,可是由于一些"人在江湖、身不由已"的缘故,全文删除了,可是很多人找我聊或是想看看內容,所以我改了一点内容,再次发一下:
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,那麼可以挑选完成下边的方式:
在premain函数中,我们可以对字节码进⾏实际操作,织⼊Rasp的安全性探头。
依靠ClassFileTransformer插口,完成对字节码的改动,界定一个类,完成ClassFileTransformer插口,并重新写过transform方式,在这个方法中,根据 ASM 技术性改动字节码。
简易的原理就这样的,由于篇数优先选择就没有这儿进行太多了,大伙儿假如有兴趣得话,可以看一下 (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
以上,大家给大伙儿讲解了 RASP 技术性,及其他的简易原理,并给各位带来了一个简便的 Demo 运用,可以便捷大伙儿认真贯彻,假如需要应用一些开原商品得话,也给大伙儿介绍了好多个,可以可选择性的了解一下。
可是,话又说回家,安全性防御沒有肯定,这一行业始终是网络攻击和防御者相互之间的决策全过程。沒有肯定的安全性,全部安全性方式仅仅让进攻的费用更高一些罢了。
因此,RASP 技术性也并并不是完全100%的可以保证万无一失,可是,从当前业界的许多运用看来,这一技术性现阶段也是非常完善的,针对一些普遍系统漏洞的防止或是切实可行的。
参考文献:
https://segmentfault.com/a/1190000041132495
https://www.freebuf.com/articles/web/197823.html
https://github.com/xbeark/javaopenrasp