注:仅供交流学习使用,请勿用于非法用途
一、测试条件
1. 安装和配置wazuh
1.1安装wazuh:按照官方文档指导在你的系统上安装wazuh。它是一个功能强大且高度灵活的开源安全平台,旨在为企业和组织提供全面的威胁预防和检测能力。
1.2安装Wazuh代理:在需要监控的设备上安装Wazuh代理。这些设备可以包括但不限于服务器、工作站和其他重要资产。
2. 安装和部署suricata和java
2.1配置相关环境:在渗透虚机上部署suricata,java等相关环境。
2.2定义安全策略:利用Wazuh和suricata的规则库来进行定义合适的安全策略,以检测可能存在的Log4j漏洞。
3. 测试环境
Log4j供应链攻击方案和计划虽然是一个可控范围的攻击,但建议还是尽可能在本地断网测试。
-
二、测试信息
攻击机 |
192.168.31.29 |
利用相关shell |
Wazuh |
192.168.31.218 |
配置安全策略 |
Ubuntu |
192.168.31.9 |
配置相关环境 |
-
三、部署wazuh服务器
略
-
四、Ubuntu上部署安装suricata
略
-
五、Ubuntu中suricata项目联动wazuh服务器
1、在suricata部署wazuh
在wazuh服务器的wazuh网站上点击这里
点击deploy生成
填写相关数据,分组我默认defalut
2、切换到ubuntu主机编辑文档使得suricata数据能够正确传输给wazuh
打开/var/ossec/etc/ossec.conf文件并加入以下内容:
3、重启wazuh.agent服务即可
-
六、Ubuntu部署相关环境
1、部署java环境
Ubuntu部署安装java环境,后续复现需要java环境,我这里部署的是java8版本
安装完后通过java -version来查看是否成功安装java
2、部署maven
通过apt部署安装maven
安装部署成功后通过mvn -v来查看是否成功安装
3、通过Maven来部署log4项目
用相关指令生成一个your-app-name的java项目在当前目录下
切换到项目中修改pom.xml来修改依赖项目,我设置的是log4j2.14.1版本
然后通过maven来安装相关log4j环境依赖
4、部署apache2
安装部署apache2来实现一个web项目
安装部署后游览器访问http://localhost如下
后续通过java来部署项目上线web即可
-
七、Wazuh联动suricata监测log4j测试
1、更新suricata的规则库
更新默认规则库
下载相关的et规则库后解压到/etc/suricata/ruls中,并设置权限
修改/etc/suricata/suricata.yaml下rule-files使其适配所有我们刚下载解压的et规则库
2、简单测试是否已经成功匹配新的规则库并联动wazuh
我这边利用主机进行不间断连ping,能在wazuh获取到了来自suricata提示的告警
3、测试log4j攻击
Log4j低版本漏洞原理:
因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。
-
1、攻击者向存在风险的接口发送恶意payload:${jndi:ldap://localhost:9999/Test}被攻击服务器接收到该内容后,通过Logj42工具将其解析。
-
2、此时Log4j2会解析${},读取出其中的内容。判断其为Ldap实现的JNDI。于是调用Java底层的Lookup方法,尝试完成Ldap的Lookup操作,请求Ldap服务器,获取到Ldap协议数据。
-
3、Ldap会返回一个Codebase告诉客户端,需要从该Codebase去获取其需要的Class数据。请求Ldap中返回的Codebase路径,去Codebase下载对应的Class文件,并通过类加载器将其加载为Class类。
-
4、若在Codebase中下载的Class文件为恶意文件,就将会在本地加载和实例化使用这个恶意文件,从而造成严重危害
先简单通过构造包含已知 Log4Shell 模式的网络请求来测试
能看到wazuh服务器上传来的关于suricata对于log4j的恶意网络请求
具体相关信息,目前实测利用suricata和wazuh检测log4j rec攻击成功
使用JNDI注入攻击进行渗透测试,代码用法
Java -jar JNDI-Injetction-Exploit-1.0-SNAPSHOT-all.jar -C ”想要执行的命令” “攻击者ip”
将反弹shell进行编码后获得
然后对代码替换成payload,填上相关信息,利用JNDI工具把反弹shell部署在LADP服务器上
开启nc监听对应端口
利用构造的payload进行反弹shell发现链接成功
-
八、Wazuh监测log4j版本以及独立监测log4j攻击
1、wazuh服务器中编写SCA策略文件来达到检测log4j版本效果
在/var/ossec/etc/shared/default/log4j_check.yml 创建一个新的策略文件
检测规则代码如下
然后修改一下权限,不推荐默认777,实际实操上按具体来
在 /var/ossec/etc/shared/default/agent.conf 中添加了 SCA 模块,以在属于 default 组的 Wazuh 代理上启用新策略
为了使新设置生效,我们重启了 Wazuh 代理。
现在可以在SCA下发现系统拥有低于2.16版本的log4j
具体相关信息
2、wazuh服务器中编写规则到达到检测log4j版本效果
在 Wazuh 服务器的 /var/ossec/etc/rules/local_rules.xml 文件中添加了以下规则
为了启用web日志数据收集,修改/var/ossec/etc/shared/default/agent.conf内容参数如下
最后重新启动一下管理器来应用这个规则
通过构造包含已知 Log4Shell 模式的网络请求来测试
在wazuh服务器网站上能观察到事件
相关详细信息
-
九、利用suricata来进行防御log4j攻击
输入suricata --build-info来确认suricata是否安装成功并支持NFQueue板块
切换到我们下载的规则中查看/etc/suricata/rules中对其中的ET-huting.rule规则进行分析,分析中可看到在这规则是tcp通过特征匹配jndi来产生一份alert的警告
将规则中所有的关于log4j相关的规则提取复制出来,粘贴到剪切板中并修改相关内容,将alert警告规则修改为drop,在msg中修改相关信息方便看出区别,sid值进行修改,使sid为独立,注sid的最大值4294967295
在/etc/suricata/rules新建一个rules文件,并将上述规则粘贴入内然后保存即可。
Iptables是linux内核集成的ip信息包过滤功能,在这里我们设置iptables流量传输。
这几条策略的意思:
1:开放一条22端口的入口流量不经过suricata
2-3:将80端口的进口流量和出口流量交给suricata的模块NFAQUEUE处理
4-5:将3306端口的进口流量和出口流量交给suricata的模块NFAQUEUE处理
最后再将设置的iptables展示,展示效果如图
开启启动suricata
然后开启log4j攻击,能发现开启了规则后即可阻拦匹配规则库中的攻击
监听中也并没有收到回响