log4j2漏洞_log4j2漏洞分析
2025-01-13 10:11 - 立有生活网
log4j2 配置简要分析
log4j2支持很多的序列化格式,如:普通模式字符串,JSON字符串,yaml字符串,XML格式字符串,HTML字符串等等.对于做后端的同学来说,log是分析bug、查找问题不可或缺的工具,好的日志配置将使我们的开发工作如虎添翼。 把视线聚焦到ja,常用的日志工具有log4j,log4j2以及logback等,其中log4j2功能较为强大,运行效率也较高,我们就来用一个例子看一看log4j2的配置思路,下面就是这个配置文件:
log4j2漏洞_log4j2漏洞分析
log4j2漏洞_log4j2漏洞分析
3.3.Logger继承机制
我们看到,Configuration有2个属性status和monitorInterval,它们分别是log4j2自身组件的日志级别以及重新刷新配置文件的时间,通过配置status可以看到log4j2相关的日志,配置monitorInterval可以通过修改配置文件来改变日志配置。
从上面的log4j2.xml配置文件中,我们可以看到log4j2的配置文件中主要分为2块,一块为appender,描述了如何记录日志,另外一部分是log config,记录了哪种日志对应哪种级别。 而不同的LogConfig之间其实是有继承关系的,子LogConfig会继承parent的属性,而所有LogConfig都继承自Root LogConfig。所以即使只配置了root logger,你一样可以在任何地方通过LoggerFactory.getLogger获取一个logger对象,记录日志。
那么日志之间的继承关系是由什么决定的呢?看看上面的配置文件中root以外的2个logConfig,只有3个配置:日志级别,name以及appender,从直觉上看应当是name最可能决定了LogConfig的继承关系,其实也正是如此:com.foo是com.foo.Bar的父级;ja是ja.util的父级,是ja.util.vector的祖先(注意name区分大小写)。
appender是LogConfig的重要组成部分,一个LogConfig可以使用多个appender,一个appender也可以被多个LogConfig使用,appender多种多样,不同的appender也有不同的属性和配置,难以一一阐述,需要使用时可以直接查看文档来进行个性化配置。不过就filters可以单独拿出来讨论一下。filter有两个重要属性 onMatch 和 onMiatch 。可以有DENY、ACCEPT或NEUTRAL配置,DENY说明不由当前appender处理,ACCEPT说明由当前filter处理,而NEUTRAL说明如果按顺序还有其他filter则由其他filter处理,如果当前filter已经是一个filter,则由当前appender处理。
log4j2的文档建议记录程序行为日志异步日志,效率更高。因为异步日志使用的是无锁技术,所以需要引入 Disruptor 。然后可以通过配置异步的appender或Logger来实现异步日志:
或动态修改日志级别是一个很实用的功能,关于如果动态修改日志级别,请参考美团的一篇文章: 日志级别动态调整——小工具解决大问题
以上就是对log4j2的配置的一些总结,更多信息请关注文档。
ja的log4j2输出Exception e信息为什么不会换行?
log4j2会通过 PluginMar 收集所有类别为Converter的插件,同时分析插件类上的 @ConverterKeys 注解,获取转换器名称,并建立名称到插件实例的映射关系.try {
String myaddress = InetAddress.getLocalH发现如果项目中只有这两个jar,是显示不正常的,需要加上log4j2的实现ost().getHostAddress().toString();
log.debug("myaddress:rn"+myaddress);
} catch (UnknownHostException ex) {
log.debug("message:",ex);
ex.printStackTrace();
}实际测试,是会换行的
~~~~~
工信部暂停阿里云信息共享平台合作,这是为什么?
此处3、打包到项目中的三方引用包是class而不是jar包。我们已Logback为例,如下:因为阿里云公司目前的一些系统出现了问题,正在进行改善,而且工信部觉得阿里云的服务不是特别好,所以目前才会暂停合作。
12月22日,有媒体称,作为工信部网络安全威胁信息共享平台合作单位,阿里云公司由于发现阿帕奇Log4j2组件安全漏洞隐患后,未及时向电信主管部门报告,未有效支撑工信部开展网络安全威胁和漏洞管理,被工信部暂停作为合作单位6个月。暂停期满后,工信部将根据阿里云公司整改情况,研究恢复其上述合作单位。
因为阿里云信息共享平台出现了漏洞,损害了消费者的权益,所以工信部暂时停止了他们的服务。
公司发现了组件的漏洞,没有及时向电信部门报告,产生了的后果,而且也影响了网络的安全。
与log4j2多正则表达式替换问题,怎么解决
常用的触发策略包含两种:log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
模式字符串由3部分组成,格式为:%(格式信息)(转换器名称){选项1}{选项2}...log4j2源码分析
格式信息中所有属性都是可选的,不配置,则使用默认值1.概述
1.1.组件概览
1.2.1.插件发现机制
1.2.2.插件装配机制
1.2.3.配置文件基本元素与对象的映射关系
2.属性占位符
2.1.概述
2.2.Interpolator插值器
2.3.默认属性配置
3.Logger
3.1.配置示例
3.2.配置详解
4.Appender
4.1.概述
4.2.框架支持的Appender实现
4.3.常用Appender详解
4.3.1.ConsoleAppender
4.3.2.RollingFileAppender
5.Layout
5.1.概述
5.2.PatternLayout
5.2.1.模式字符串
6.Mar
7.Filter
在log4j2中,LogMar就是日志的门面,相当于slf4j-api中的LoggerFactory.
ContextSelector则负责管理类加载器到对应的LoggerContext实例之间的映射关系.
组件架构如下:
在log4j2中,一切皆插件,框架通过 PluginRegistry 扫描并发现插件配置.
PluginRegistry 支持两种扫描方式
插件配置以 PluginType 的形式保存在插件注册表中, PluginType 的作用类似于spring中 BeanDefinition ,定义了如何创建插件实例.
插件类通过 @PluginFactory 注解或者 @PluginBuilderFactory 注解配置插件实例的实例化和属性注入方式.
log4j2知道如何实例化插件后,我们就可以通过编写配置文件(如:log4j2.xml),进行插件的实例化和属性注入了.
Configuration 全局配置对象负责保存所有解析到的配置.
通过 ConfigurationFactory.getConfiguration() 可以使用不同的工厂生产不同的配置对象,不同的 Configuration 实现可以解析不同格式的配置,如:xml,yaml,json等.
因此,xml中dom树的元素嵌套关系,也就是log4j组件实例的引用嵌套关系.
xml,yaml,json格式文件都可以描述这种嵌套关系,因此log4j2中定义了与文件格式无关的数据结构,Node来抽象配置.
AbstractConfiguration.setup() 负责提取配置,形成Node树.
AbstractConfiguration.doConfigure() 负责根据Node树,进行插件实例化和属性注入.
在log4j2中,环境变量信息(键值对)被封装为StrLookup对象,该对象作用类似于spring框架中的PropertySource.
在配置文件中,基本上所有的值的配置都可以通过参数占位符引用环境变量信息,格式为:${prefix:key}.
同时,Interpolator内部还保存着一个没有prefix的StrLookup实例,被称作默认查找器,它的键值对数据来自于log4j2.xml配置文件中的
当参数占位符${prefix:key}带有prefix前缀时,Interpolator会从指定prefix对应的StrLookup实例中进行key查询,
当参数占位符${key}没有prefix时,Interpolator则会从默认查找器中进行查询.
Interpolator中默认支持的StrLookup查找方式如下(StrLookup查找器实现类均在org.apache.logging.log4j.core.lookup包下):
注意:Properties元素一定要配置在最前面,否则不生效.
log4j2框架会根据LoggerConfig的name建立对象之间的继承关系.这种继承机制与ja的package很像,name以点进行名称空间分割,子名称空间继承父名称空间.
名称空间可以是全限定类名,也可以是报名.整个配置树的根就是RootLogger.
举例:如我们的配置的Logger如下:
当通过LogMar.getLogger(name)获取Logger实例时,会根据name逐级递归直到找到匹配的LoggerConfig,或者递归到Root根为止.
追加器,负责控制Layout进行LogEvent的序列化,以及控制Mar对序列化后的字节序列进行输出.
在log4j2.xml配置文件中,配置方式如下:
控制台追加器,用于把日志输出到控制台,一般本地调试时使用.
配置示例如下:
文件滚动追加器,用于向本地磁盘文件中追加日志,同时可以通过触发策略(TriggeringPolicy)和滚动策略(RolloverStrategy)控制日志文件的分片,避免日志文件过大.
线上环境常用.
滚动策略的被工信部处罚,以老美优先的阿里云,真的错了实现包含两种:
配置示例如下:
布局对象,职责是把指定的LogEvent转换成可序列化对象(如:String),或者直接序列化成字节数组.
类体系如下:
模式布局是我们最常使用的,它通过PatternProcessor模式解析器,对模式字符串进行解析,得到一个List
在PatternLayout序列化时,会遍历每个PatternConverter,从LogEvent中取不同的值进行序列化输出.
模式字符串的格式为:
%-(minLength).-(maxLength)(转换器名称){选项字符串}
minLength代表字段的最小长度限制,当字段内容长度小于最小限制时,会进行空格填充.
minLength前面的-负责控制对齐方式,默认为右对齐(左边空格填充),如果加上-,则会切换为左对齐方式(右边空格填充)
maxLength代表字段的长度限制,当字段内容长度大于限制时,会进行内容阶段
maxLength前面的-负责控制阶段方向,默认为左侧阶段,如果加上-,则会切换为右侧阶段
minLength和maxLength之间用点分隔.
PatternParser识别到转换器名称的时候,会查找映射.
框架支持的所有转换器如下:
有时我们需要对特定的转换器进行特殊的配置,如:给DatePatternConverter配置时间格式,这个时候需要通过选项字符串配置.
PatternParser会提取模式字符串中的所有选项,保存在一个List
,以一个实际的例子解释配置:
日志会输出时间,类名,方法名,消息以及一个换行符.
同时,我们给DatePatternConverter指定了了时间格式,并且限制全限定类名最小长度为5,右截断,为10,左对齐.
管理器的职责主要是控制目标输出流,以及把保存在ByteBuffer字节缓冲区中的日志序列化结果,输出到目标流中.
如:RollingFileMar需要在每次追加日志之前,进行滚动检查,如果触发滚动还会创建新的文件输出流.
mar继承体系如下:
过滤器的核心职责就是对 LogEvent 日志进行匹配,匹配结果分为匹配和不匹配,结果值有3种:接受,拒绝,中立.可由用户自定义匹配和不匹配的行为结果.
所有实现了 Filterable 接口的组件都可以引用一个过滤器进行过滤,包含 LoggerConfig 和 AppenderControl 等.
框架实现的过滤器如下:
websphere是否存在log4j漏洞
以下案例我们以logback-spring.xml为例,如下:websphere存在log4j漏洞,
框架为每个类加载分配了一个单独的LoggerContext,用于管理所有创建出来的Logger实例.解决办法是:
1、将common-logging.jar包和Log4J.jar包放入WAS的公用lib下面,即如此目录下,IBMWebSphereApplib
2、在项目中增加commons-logging.properties文件,并且与log4j文件同级,都放在SRC下面
commons-logging.properties文件中的内容是:
priority=1
org.apachemons.logging.LogFactory=org.apachemons.logging.impl.LogFactoryImpl
org.apachemons.logging.Log=org.apachemons.logging.impl.Log4JLogger
3、将commons-logging.properties和log4j.properties文件拷入WAS的概要文件的properties目录下,如:IBMWebSphereAppprofilesAppSrv01properties
记一次项目上线后Log4j2不输出日志的坑
另外一个比较重要的地方就是,有些日志无法使用log4j2完全接管整个系统的日志,可能是由于其他的依赖包依赖带着log4j的包,导致会出现下面的现象:(1)出现了SL4J的信息,都是提示包冲突
(2)但是仔细观察发现了加载这两个冲突的jar包的顺序不同,具体见下图:
SLF4J:Class path contains mutiple SLF4J bindings
SLF4J:Found binding in[jar:file:/WEB-INF/lib/log4j-slf4j-impl-2.6.6.jar!/org/slf4j/impl/StaticLoggerBider.class]
SLF4J:log4j2中,有5个关键概念:Found binding in[jar:file:/WEB-INF/lib/slf4j-log4j12-1.7.22.jar!/org/slf4j/impl/StaticLoggerBider.class]
排除完jar包后,本地进行打包。打包完成后,必须要检查一遍,看一下生成的打包文件的lib文件夹下是否还存在slf4j-log4j12.jar。如果有,应该是jar包没排除干净。可以通过men命令查看依赖树,看看是那个依赖把这个jar给传递进来的。命令为:dependency:tree
“一切以外国优先”?阿里云,该醒悟了
理解了这一点,我们就能理清log4j2配置的思路:先配置一个root,让所有需要使用日志的logger继承,然后对有特别需要的logger进行特殊的配置,比如我们希望 org.springframework 包只记录error以及warn级别的log,再比如,我们希望能显示mybatis执行的sql的日志,都可以进行个性化的配置。阿里再次出现用户信息问题,而这一次受害者竟然是工信部 ,这件事可能会导致阿里受到工信部严厉的,这究竟是怎么回事呢?
1、使用pom分析插件,如IDEA上的Dependency Analyzer,打开pom文件后,切换到Dependency Analyzer标签,查看log4j-core的版本号;前段时间 阿里云发现了代号为Log4j2的高危漏洞 ,通过CVSS评分,阿里发现这个 漏洞危险系数高达10分 ,这可以说是阿里云有史以来评分的高危漏洞。一旦这个漏洞被黑客所利用不仅 会给阿里造成难以弥补的损失 ,同时也 会 给和 造成难以估量的伤害 。
然而这并不会使阿里遭受到太大的舆论压力, 真正让网友们难以接受的是阿里的后续对待这件事的处理方式。阿里在发现这个高危漏洞之后的反应并不是通知工信部 ,相反阿里选择了对工信部进行隐瞒, 而是时间通知了自己在老美的客户Apache 。
这一举动让国内网友炸了锅, 很多人认为阿里的这一做法是吃里扒外 ,毕竟作为一家企业在发现危机时,时间想到的应该是如何保障国内用户的信息安全,而 阿里却是置国内用户信息安全于不顾,率先通知了老美客户,这任谁也没有办法接受。
当工信部知道这件事的时候,已经是15天以后了。
工信部在得知这件事之后,时间对阿里进行了问责,并且终止了与阿里的相关合作,并对阿里展开了调查。 要知道阿里云作为国内的云服务企业,在国内占据了将近40%的市场,不仅国内的各大企业开始与阿里展开了密切的合作,就连 很多的组织机构都采用了阿里云来储存和处理数据 ,其中就包括工信部。
过去的许多年, 阿里一直是工信部指定的云服务合作企业,一旦阿里云出现问题,很有可能直接各个相关部门造成损失 , 许多机密信息很可能会因此受到损失 ,这是难以承受的。原本 阿里与工信部签订了契约 ,一旦 发现高危漏洞 ,阿里必须 时间通知工信部,并且时间想办法补救 ,而阿里如今却违背契约精神做出这样的举动,这实在是让人难以接受。
阿里的这一行为不仅让工信部对其大失所望,同时也让用户觉得恐慌。要知道 阿里云手中掌握的信息量是十分庞大的,不仅国内数以亿计的用户信息 ,同时还有国内各大企业开始的核心机密,甚至还有相关部门的机密信息,这些信息一旦泄露,后果是不堪设想的。
如今阿里处理事情的态度让很多人不敢再相信阿里云 ,这很有可能对阿里云造成灭顶之灾,未来可能会有大批用户选择投奔其他企业的云服务,比如华为云和腾讯云。目前工信部已经对阿里云展开了调查, 后续阿里云很难逃脱来自相关部门的惩罚 ,毕竟想要规范这一行业就必须从龙头企业开始开刀, 只有整治好阿里云,整个行业才能够逐渐走向规范。
进入大数据时代以后 ,由于信息量的不断暴增, 云服务是很多个人与组织都会选择的一种服务 ,毫无疑问他给我们的工作和生活带来了便利,但是随着时间的不断流逝,我们也发现了云服务的弊端。 云服务真的像想象中那么安全吗? 我们真的能够放心地将我们的信息交给第三方机构来保存或者处理吗?
就目前看来, 数据的泄露是云服务很容易出现的问题 ,享受便利的同时,我们不免为自己的信息安全提心吊胆,如何保障用户的信息安全成了云服务企业急需要解决的问题。然而 想要提高安全性远远不是企业一方能够解决的问题,这需要多方的努力才能够解决 。
首先, 必须对云服务进行合理的规范和 ,只有让这个行业往正确的道路上发展,我们才能够放心的是有这项技术;其次, 用户应该提高信息保护意识 ,任何外界的保护都是建立在用户具备自我保护意识的基础上,否则保护工作是难以展开的。
阿里的这一举动已经让国内用户和产生了失望, 未来如果阿里不积极进行整改,那么最终阿里云将会慢慢被市场所抛弃 ,毕竟 只有得到了和用户的认可企业才能够发展下去,否则再强大的技术也只是徒劳,希望阿里能早日明白这个道理。
“一切以外国优先”?阿里云,该醒悟了
log4j 漏洞 怎么查
以xml文件为例,文件中每个元素都会最终对应一个插件实例,元素名称实际就是PluginType中的name,实例的属性可以从子元素对应的实例获取,也可以从自身元素的属性配置获取.最直观方式
2、查看lib下jar包的版本
以上方法需要每个项目都打开去验证,虽然直观,但是麻烦;于是想到用以下方法,先去上排查,然后再根据结果,打开需要的项目进行修选项列表的识别由不同的转换器各自定义.复。
上排查
1、直接查看jar包或war包内的第三方库。
2、解压后的war项目目录或者lib单独打包放在项目外边的。
Spring框架曝安全漏洞,你如何评价这个漏洞?
Interpolator内部以Map这个漏洞也是比较大的,说明这样的一个漏洞也需要管理,需要查处的。
1.2.灵活的配置我觉得这个漏洞需要尽快修复,因为它不着致命的弱点,而且一旦被攻击能够完全控制整个Web应用,同时会运行攻击者自己的代码,所以不能掉以轻心。
我觉得这个漏洞挺危险的,如果一旦被攻击者利用,攻击者便能够完全控制整个Web应用并且能够运行自己的代码,所以希望赶紧解决。
房屋装修风格的种类 房屋装修风格的种类和特
关于房屋装修风格的种类,房屋装修风格的种类和特点这个很多人还不知道,今天小爱来为大家解答以上的问题,现在让我们一起来看看吧! 房屋装修风格的种类 房屋装修风格的种类和特点 房屋···
埃克塞特大学排名_埃克塞特大学排名qs
英国大学排名前十名 关于英国大学排名前十名分享如下: 埃克塞特大学排名_埃克塞特大学排名qs 埃克塞特大学排名_埃克塞特大学排名qs 2023TIMES英国大学排名前5位大学与2022年一致,只是牛津大学···
不幸诗家幸说的是哪个诗人家国
不幸诗家幸说的是哪个诗人 家国不幸诗家幸说的是诗人:元好问。 不幸诗家幸说的是哪个诗人家国 不幸诗家幸说的是哪个诗人家国 公元五世纪魏孝文帝进行过一次改革,改拓跋氏为元氏。元好问···