首页 > 其他分享 >Web网络安全-----Log4j高危漏洞原理及修复_log4j漏洞是什么

Web网络安全-----Log4j高危漏洞原理及修复_log4j漏洞是什么

时间:2024-06-03 16:28:16浏览次数:23  
标签:Web 修复 漏洞 log4j jndi JNDI 日志 Log4j

系列文章目录

文章目录
  • 系列文章目录
  • 什么是Log4j?
  • 一、Log4j漏洞
  • 二、漏洞产生原因
    • 1.什么是Lookups机制
    • 2.怎么利用JNDI进行注入
      • JNDI简介
      • LADP
      • RMI
  • 三、Log4j漏洞修复
  • 总结

什么是Log4j?

Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。


一、Log4j漏洞

在这里插入图片描述

2021年12月8号爆出的log4j2的远程代码执行漏洞【cve-2021-44228】被称作“史诗级核弹漏洞”,其具有以下特点:

触发方式远程
用户认证不需要用户认证
配置方式默认
影响版本Apache Log4j 2.0-alpha1 到 2.14.1(包括这些版本) Apache Log4j 1.2.19 到 1.2.20(包括这些版本)
利用难度极低,无需授权即可远程代码执行
威胁等级严重,能造成RCE

(该漏洞的范围可能会随着时间的推移而有所变化)
在了解了Log4j的基本特点后,就知道最高级的漏洞,往往采取最朴素的“烹饪方式”,简单、危害大、利于操作。

二、漏洞产生原因

在Log4j2中提供了Lookups机制,Lookups提供了一种在Log4j配置文件任意位置添加值的方法;而Lookups机制中,存在JNDI,在Log4j日志输出时,未对字符合法性进行严格的限制,造成JNDI协议加载的远程恶意脚本被执行,从而造成RCE。
在这里插入图片描述

下面将详细介绍什么是Lookups和JNDI

1.什么是Lookups机制

“ Lookups provide a way to add values to the Log4j configuration at arbitrary places. They are a particular type of Plugin that implements the StrLookup interface. ”
以上內容复制于log4j2的官方文档lookup - Office Site。其清晰地说明了lookups的主要功能就是提供另外一种方式以添加某些特殊的值到日志中,以最大化松散耦合地提供可配置属性供使用者以约定的格式进行调用。(lookups是实现StrLookup接口的特定类型的插件)lookups给开发者提供了更加方便的后端开发过程中的调试效率

lookups可以通过 {$xx} 的方式来执行一些命令和操作,log4j支持在日志中使用该表达式执行命令。下面是log4j使用lookup的简单示例,可以打印系统os信息。

public void test() {
        log.info("{$java:os}");
} 

这样就能理解,为什么常见的Log4j漏洞的playload是以下格式的:

${jndi:ldap}
${jndi:ldaps}
${jndi:rmi}
${jndi:iiop}
${jndi:iiopname}
${jndi:corbaname}
${jndi:dns}
${jndi:nis}

观察上面的palyload就能发现,每个playload里面都有jndi,下面将介绍JNDI的作用

2.怎么利用JNDI进行注入

JNDI简介

JNDI(Java Naming and Directory Interface–Java)命名和目录接口 是Java中为命名和目录服务提供接口的API,通过名字可知道,JNDI主要由两部分组成:Naming(命名)和Directory(目录),其中Naming是指将对象通过唯一标识符绑定到一个上下文Context,同时可通过唯一标识符查找获得对象,而Directory主要指将某一对象的属性绑定到Directory的上下文DirContext中,同时可通过名字获取对象的属性同时操作属性。
在这里插入图片描述JNDI主要由JNDI API和JNDI SPI两部分组成,Java应用程序通过JNDI API访问目录服务,而JNDI API会调用Naming Manager实例化JNDI SPI,然后通过JNDI SPI去操作命名或目录服务其如LDAP, DNS,RMI等,JNDI内部已实现了对LDAP,DNS, RMI等目录服务器的操作API。

通过上面可以知道,JNDI可以实现对LADP、RMI等服务的操作,所以攻击者只需要构建一个LADP或RMI远程服务即可,让远程服务器返回恶意class

LADP

什么是LDAP(Lightweight Directory Access Protocol):顾名思义,一个轻量级的目录访问协议,用来访问目录服务(Directory Service)。
那么LDAP协议作为一个访问协议,它在技术架构的表现上是一个CS架构模式:以IDaaS为例,IDaaS产品要解决的三个问题,都是会作为LDAP Client去访问LDAP Server(这里LDAP Server和Directory Service等同了),来实现功能
在这里插入图片描述

RMI

RMI(即Remote Method Invocation)是Java平台一个分布式应用程序的应用编程接口(API),它是Java Remote Method Protocol(JRMP)的实现,这个协议代表了Java语言特有的远程过程调用(RPC)系统。

RMI允许一个对象通过一个网络在另外一个虚拟机上被调用,这些对象称之为远程对象
在这里插入图片描述
在了解了上面这些东西后,画了一个图帮助理解
攻击者定义一个接口,在接口中定义数据库操作等。
攻击者携带lookup支持表达式进行请求服务器。
服务器通过log4j打印出请求信息。
log4j打印完成后会执行JNDI操作。
这样就解释了漏洞的产生,极其高危!

在这里插入图片描述

三、Log4j漏洞修复

1.升级到受影响版本的修复版:
(1)对于Apache Log4j 2.x 用户,建议升级到2.17.0版本以上。这些版本修复了漏洞,并包含其他安全增强措施。
(2)对于Apache Log4j 1.x 用户,目前官方并未针对1.x版本提供官方修复版。建议升级到Log4j 2.x版本,或者考虑使用其他日志记录库。

2.阻止使用JNDI来加载远程资源:
如果您无法立即升级到修复版本,可以通过在Log4j配置中禁用使用JNDI来加载远程资源来减少风险。可以通过在log4j2.xml文件中将JndiLookup类从配置中移除或设置为安全的FallbackJndiLookup或DummyLookup来实现。

3.启用安全策略:
为了进一步减少潜在的风险,应该考虑启用安全策略来限制代码执行。可以通过在log4j2.xml文件中添加安全策略配置来实现。

4.清除受影响系统的缓存:
Log4j有一个缓存机制,可以存储已解析的XML配置。为了确保新的配置生效,您可能需要清除缓存。可以通过清除 Log4j 的上下文选择器缓存来实现。

除了以上方法外,了解并关注官方发布的漏洞修复和更新是非常重要的,因为该漏洞的细节和修复程度可能会发生变化。推荐遵循安全最佳实践,并随时关注官方漏洞通告和安全更新。

总结

Log4j漏洞能造成RCE等危害,所谓是为所欲为,虽然现在大部分系统早已经安装补丁进行修复升级,但仍有部分老系统未进行修复,这是在安全测试中我们不可忽视的一个重大漏洞,任然需要对Log4j版本等进行排查修复。

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击领取】网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

!(/i/ll/?i=8de5365b55fd4a929e0cef43c14ce512.png)
在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

标签:Web,修复,漏洞,log4j,jndi,JNDI,日志,Log4j
From: https://blog.csdn.net/weixin_42340783/article/details/139417153

相关文章

  • log4net 在webapi中的简单使用
    1.安装两个nuget包:  2.创建log4net.config配置文件,并选中log4net文件点击鼠标右键选择属性将"复制到输出目录"改为"始终复制"<?xmlversion="1.0"encoding="utf-8"?><log4net><!--Definesomeoutputappenders--><appendername......
  • WebGPU学习(11)--- 独立于 Canvas 绘制
    更多精彩内容尽在数字孪生平台,关注公众号:sky的数孪技术,技术交流、源码下载请添加VX:digital_twin123只想创建图像数据而不使用Canvas当使用WebGL时,我们始终必须从Canvas获取WebGL渲染上下文,因为渲染上下文与绘图目标紧密相关。但是WebGPU不一定需要Canvas来......
  • CRLF注入 URL重定向 WEB拒绝服务
    CRLF注入URL重定向WEB拒绝服务1.1CRLF我们先了解一下什么是CRFL注入CRLF注入(CRLFInjection)是一种网络安全漏洞,攻击者通过在输入中插入回车(CarriageReturn,CR)和换行(LineFeed,LF)字符,从而操控服务器或客户端的行为,通常用于执行跨站脚本(XSS)、HTTP响应拆分攻击(HTTPResponse......
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用后端框架
    1.项目介绍该项目是基于.net8开发的Asp.NetCoreWebApi后端服务,集成了Efcore,Autofac,Jwt,AutoMapper,Serilog,Quartz,MiniExcel等组件。该框架简单易上手,没有额外的学习成本;该项目采用了多层结构设计,有利于解耦,包含公共层,领域层,协约层,应用层,ORM层,Api层; #2.项目......
  • webpack的安装和使用
    Webpack简介Webpack是基于模块化的打包(构建)工具,它把一切视为模块;它通过一个开发时态的入口模块为起点,分析出所有的依赖关系,然后经过一系列过程(压缩,合并),最终生成运行时态的文件。webpack的特点:为前端工程化而生:webpack致力于解决前端工程化,特别是浏览器端工程化中遇到的问题,让......
  • Winform中,如何使用ChromiumWebBrowser预览网络pdf文件
    一、开发环境vs2022.net8windows10系统二、准备创建Winform项目(名称随意)通过引入依赖包:CefSharp.WinForms.NETCore三、使用1、安装好依赖包后,会自动在工具箱中显示该控件:ChromiumWebBrowser,直接拖到窗体中2、加载urlpdf文件链接很简单,就一行代码chromiumWeb......
  • Webpack的plugin
    pluginloader的功能定位是转换代码,而一些其他的操作难以使用loader完成,比如:当webpack生成文件时,顺便多生成一个说明描述文件当webpack编译启动时,控制台输出一句话表示webpack启动了当xxxx时,xxxx这种类似的功能需要把功能嵌入到webpack的编译流程中,而这种事情的实现是依托于......
  • 各位用到git的,请注意CVE-2024-32002安全漏洞
    解释几个缩写名词CVE:CVE是CommonVulnerabilitiesandExposures的缩写,指的是通用漏洞与暴露(CommonVulnerabilitiesandExposures),它是一个用于标识和跟踪计算机系统中的安全漏洞的标准化命名方案,每个CVE条目都包含一个唯一标识符(CVEID),以及漏洞的描述、评分、影响......
  • webapi 配置接口注释显示
    1.再Program.cs文件中添加builder.Services.AddSwaggerGen(options=>{//读取根据api生成的控制器xml文件varfile=Path.Combine(AppContext.BaseDirectory,"WebApplication1.Webapi.xml");//显示控制器层注释options.IncludeXmlComments(file,true)......
  • 基于WebSocket的modbus通信(三)- websocket和串口
    WebSocket传递ModbusTCP数据包错误纠正上一篇还有个错误,就是客户端写数据时服务端不需要响应,但我的服务端响应了的。我选择改客户端,把写数据时接收到的响应丢弃。PrintBytes(ADUMessage.Serialze(request),"请求");if(Client!=null){awaitClient.Client.SendAsyn......