Oracle Log4j 漏洞修复及 AHF 的简单使用

作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle Log4j 漏洞修复及 AHF 的简单使用 ,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

Log4j 简介  

Apache Log4j 是一款开源的 Java 日志框架,被广泛地应用在中间件、开发框架与 Web 应用中,用来记录日志信息。
漏洞描述:
1. CVE-2021-44228,Apache Log4j 远程代码执行漏洞:
2.0-beta9 <= Apache Log4j 2.x < 2.15.0,该漏洞利用难度低,严重 程度高,影响面非常大。
2. CVE-2021-45046,Apache Log4j 拒绝服务与远程代码执行漏洞:2.0-beta9 <= Apache Log4j 2.x < 2.15.0。
3. CVE-2021-4104,ApacheLog4j 1.2 JMSAppender 远程代码执行漏洞:Apache Log4j = 1.2。
4. CVE-2021-45105,Apache Log4j2 拒绝服务漏洞:2.0-beta9 <= Apache Log4j <= 2.16.0。
5. CVE-2021-44832,JDBCAppender 代码执行漏洞:2.0-beta7 <= Apache Log4j <= 2.17.0(注:只有 log4j-core jar 文件受此漏洞影响)。

受影响版本  

2.0 <= Apache Log4j 2.x <= 2.17.0。
不受影响版本
Apache Log4j 2.17.1 及以上版本(支持 Java 8 及以上)
Apache Log4j 2.12.4(支持 Java 7)
Apache Log4j 2.3.2(支持 Java 6)

排查方法  

检查是否使用 log4j,find / -name log4j*.jar
(1)、检查部署包、部署环境中是否存在 log4j-core-2.x.jar 包,查看版本
META-INF/MANIFEST.MF 文件下的 Implementation-Version 属性值。
(2)、对于第三方包,Java JAR 解压后是否存在 org/apache/logging/log4j 相关路径结构,判断是否使用了存在漏洞的组件,若使用了,则极可能存在该漏洞。
(3)、针对源码工程,查看依赖,查看是否存在 org.apache.logging.log4j 的 log4j-core。
(4)、开源漏扫部署包。

修复建议  

1) 安全版本
JDK8 及以上环境:升级到高阶版本:
目前官方发布的 Apache log4j 2.17.1 及以上版本已修复上述漏洞。

https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.17.1


JDK7 环境:升级至 Apache Log4j 2.12.4
JDK6 环境:升级至 Apache Log4j 2.3.2


         

         

2) 缓释措施
针对最严重的 CVE-2021-44228 漏洞,
在无法升级情况下,采用缓解措施:
(1)添加 jvm 启动参数 -Dlog4j2.formatMsgNoLookups=true
(2)在应用程序的 classpath 下添加 log4j2.component.properties 配置文件,文件内容:log4j2.formatMsgNoLookups=True
(3)移除 log4j-core 包中 JndiLookup 类文件,并重启服务,具体命令:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class


接下来我们看数据库中 log4j 漏洞都存在那些地方,我们 find 查找一下。

        












[root@test19crac1 ~]# find /u01 -name log4j*.jar/u01/app/19c/grid/suptools/tfa/release/tfa_home/jlib/log4j-api-2.9.1.jar/u01/app/19c/grid/suptools/tfa/release/tfa_home/jlib/log4j-core-2.9.1.jar/u01/app/19c/grid/tfa/test19crac1/tfa_home/jlib/log4j-api-2.9.1.jar/u01/app/19c/grid/tfa/test19crac1/tfa_home/jlib/log4j-core-2.9.1.jar/u01/app/oracle/product/19c/db_1/suptools/tfa/release/tfa_home/jlib/log4j-api-2.9.1.jar/u01/app/oracle/product/19c/db_1/suptools/tfa/release/tfa_home/jlib/log4j-core-2.9.1.jar/u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-jcl-2.11.0.jar/u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-slf4j-impl-2.11.0.jar/u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-api-2.11.0.jar/u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-core-2.11.0.jar

         

如下所示,数据库没有打任何补丁,DB 版本为 19.3,而 log4j 版本有两个,一个为 TFA 所用的 2.9.1 版本,另一个为数据库实例目录下 2.11.0 的版本。









[oracle@test19crac2 ~]$ $ORACLE_HOME/OPatch/opatch versionOPatch Version: 12.2.0.1.17          OPatch succeeded.[oracle@test19crac2 ~]$ $ORACLE_HOME/OPatch/opatch lspatches29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)29517242;Database Release Update : 19.3.0.0.190416 (29517242)          OPatch succeeded.

         

然后可以发现,在 grid 的家目录下 suptools 目录中同时存在 orachk、oratop、tfa 三种监控检查工具。



[root@test19crac1 suptools]# cd /u01/app/19c/grid/suptools[root@test19crac1 suptools]# lsorachk  oratop  tfa

         

         

如果我们的数据库打了补丁,这里以 19c RAC 为例,11g 环境请自行测试。如果补丁版本过低,那么 GI 目录下的 log4j 已经不存在了,但是 AHF 框架下还存在 2.13.3 版本的受影响的 AHF,那么这种情况下可以采取继续更新高版本的 19c RU15-RU20 均可,也可以单独升级 AHF,后文有讲到如何升级。

         

         

那么,单机文件系统的Oracle 19c 呢(19.3 未打补丁的情况),在 tfa_home 目录下同样存在log4j-core-2.9.1.jar 受影响的版本,生产环境建议打补丁,补丁升级到 RU19.12 或 RU19.15 以上版本,单机环境补丁更新停机时间也就三十多分钟的样子,具体补丁升级方法可参考我以前写的文章:《RU15补丁更新》。当然你也可以尝试下载高版本的 log4j 文件通过软链接的形式来替换,下文中同样有讲到,你可以在测试环境中自行测试。

/u01/app/oracle/product/19.0.0/dbhome_1/suptools/tfa/release/tfa_home/jlib

 

下面我们来插播一下 TFA 的简单使用情况。

TFA 使用简介  

查看 TFA:Trace File Analyzer 状态和版本。

         

         

TFA 更多帮助命令












[grid@test19crac2 ~]$ tfactl --helpWARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.Unknown option: -help          Usage : /u01/app/19c/grid/bin/tfactl[options]    commands:diagcollect|collection|analyze|ips|run|start|stop|print|directory|toolstatus|setupmos|upload|events|search|changesFor detailed help on each command use:  /u01/app/19c/grid/bin/tfactl           -help          tfactl>


         

由此可以发现 tfactl 命令可以 |start|stop|print |toolstatus 等操作。

           

         

删除 180 天以前的自动诊断存储库日志和跟踪文件,参数 dryrun 先预估要删除的文件和释放的空间,然后去掉参数 dryrun 在执行删除。

/u01/app/19c/grid/bin/tfactl managelogs -purge -older 180d -dryrun


         

当然也可以按照 gi 和 database 分别删除





$ tfactl managelogs -purge -older 30d$ tfactl managelogs -purge -older 30d –gi$ tfactl managelogs -purge -older 30d -database


查看目录使用情况





$ tfactl managelogs -show usage$ tfactl managelogs -show usage –gi$ tfactl managelogs -show usage -database





/u01/app/19c/grid/bin/tfactl managelogs -purge -older 30d -gi/u01/app/19c/grid/bin/tfactl managelogs -show usage -gi


         

TFA 的更多实用操作请查看官方文档,这里不在演示了。

         

         

参考文档:https://docs.oracle.com/en/engineered-systems/health-diagnostics/autonomous-health-framework/ahfug/managing-and-configuring-tfa.html#GUID-CBF85753-9DCC-48BC-AA83-5CA2982ED0EB

TFA 升级  

下载最新的 AHF (Autonomous Health Framework) Oracle自治运行状况框架,在 19c 后来的版本中,官方建议使用 AHF 来代替TFA 框架,所以这里我们直接下载最新的 AHF,MOS 文档Doc ID:1513912.1 可以下载,也可本公众号后台回复【AHF】获取此软件包。

 

1)上传此软件包到服务器 RAC1并解压

unzip AHF-LINUX_v23.6.0.zip -d AHF_23.6




2)安装AHF

官方文档附录中给出了安装命令,我们可以参考,指定相关参数运行,也可以直接运行ahf_setup 命令(升级同样也是运行此命令),仅在节点1运行即可,安装或升级过程中需要输入节点 2 root 密码。












./ahf_setup[-ahf_loc AHF Location][-data_dir AHF Repository][-nodes node1,node2][-extract[orachk|exachk|-notfasetup]][-force][-local][-silent][-tmp_loc directory][-debug [-level 1-6]]






























































































[root@test19crac1 AHF_23.6]# ./ahf_setup        AHF Installer for Platform Linux Architecture x86_64          AHF Installation Log : /tmp/ahf_install_236000_26649_2023_07_31-10_51_26.log         Starting Autonomous Health Framework (AHF) Installation       AHF Version: 23.6.0 Build Date: 202306301433        TFA is already installed at : /u01/app/19c/grid/tfa/test19crac1/tfa_home        Installed TFA Version : 183300 Build ID : 20190315044534         Default AHF Location : /opt/oracle.ahf         Do you want to install AHF at [/opt/oracle.ahf] ? [Y]|N : YAHF Location : /opt/oracle.ahf       AHF Data Directory stores diagnostic collections and metadata.AHF Data Directory requires at least 5GB (Recommended 10GB) of free space.         Choose Data Directory from below options :      1. /u01/app/grid [Free Space : 5701 MB]2. Enter a different Location      Choose Option [1 - 2] : 1       AHF Data Directory : /u01/app/grid/oracle.ahf/data        Shutting down TFA : /u01/app/19c/grid/tfa/test19crac1/tfa_home       
Copying TFA Data Files from /u01/app/19c/grid/tfa/test19crac1/tfa_home          Uninstalling TFA : /u01/app/19c/grid/tfa/test19crac1/tfa_home          Do you want to add AHF Notification Email IDs ? [Y]|N : N          AHF will also be installed/upgraded on these Cluster Nodes :        
1. test19crac2          The AHF Location and AHF Data Directory must exist on the above nodesAHF Location : /opt/oracle.ahfAHF Data Directory : /u01/app/grid/oracle.ahf/data          Do you want to install/upgrade AHF on Cluster Nodes ? [Y]|N : Y          Extracting AHF to /opt/oracle.ahf          Configuring TFA Services       
Copying TFA Data Files to AHF          Discovering Nodes and Oracle Resources          Starting TFA ServicesCreated symlink from /etc/systemd/system/multi-user.target.wants/oracle-tfa.service to /etc/systemd/system/oracle-tfa.service.Created symlink from /etc/systemd/system/graphical.target.wants/oracle-tfa.service to /etc/systemd/system/oracle-tfa.service.          .--------------------------------------------------------------------------------.| Host        | Status of TFA | PID   | Port | Version    | Build ID             |+-------------+---------------+-------+------+------------+----------------------+| test19crac1 | RUNNING       | 34212 | 5000 | 23.6.0.0.0 | 23600020230630143300 || test19crac2 | RUNNING       | 10468 | 5000 | 18.3.3.0.0 | 18330020190315044534 |'-------------+---------------+-------+------+------------+----------------------'        
Running TFA Inventory...       Adding default users to TFA Access list...       .------------------------------------------------------------------.|                   Summary of AHF Configuration                   |+-----------------+------------------------------------------------+| Parameter       | Value                                          |+-----------------+------------------------------------------------+| AHF Location    | /opt/oracle.ahf                                || TFA Location    | /opt/oracle.ahf/tfa                            || Orachk Location | /opt/oracle.ahf/orachk                         || Data Directory  | /u01/app/grid/oracle.ahf/data                  || Repository      | /u01/app/grid/oracle.ahf/data/repository       || Diag Directory  | /u01/app/grid/oracle.ahf/data/test19crac1/diag |'-----------------+------------------------------------------------'          Starting Orachk Scheduler from AHF          Setting up AHF CLI and SDK          AHF install completed on test19crac1          Installing AHF on Remote Nodes :         AHF will be installed on test19crac2, Please wait.          AHF will prompt twice to install/upgrade per Remote Node. So total 2 prompts          Do you want to continue Y|[N] : Y          AHF will continue with Installing on remote nodes          Installing AHF on test19crac2 :          [test19crac2] Copying AHF Installerroot@test19crac2's password:         [test19crac2] Running AHF Installerroot@test19crac2's password:         AHF binaries are available in /opt/oracle.ahf/bin         AHF is successfully installed          Do you want AHF to store your My Oracle Support Credentials for Automatic Upload ? Y|[N] : N       Moving /tmp/ahf_install_236000_26649_2023_07_31-10_51_26.log to /u01/app/grid/oracle.ahf/data/test19crac1/diag/ahf/          [root@test19crac1 AHF_23.6]#     


3)检查版本





[root@test19crac1 AHF_23.6]# ahfctl version[root@test19crac1 AHF_23.6]# tfactl version[root@test19crac1 AHF_23.6]# tfactl status


         

4)删除 grid 用户下家目录 suptools 下所有的 log4j*.jar(如果存在)




我这里 grid 下的 log4j 已经被自动删除了,如果还存在,可以手动删除。/opt 显示的 log4j-core.jar 已经是符合要求的版本了,至于 db目录 property_graph 下的这个需要打补丁,然后会自动删除这个文件。这里我做一个大胆的尝试,直接删除这个文件然后重启主机,看看数据库能不能正常启动(PS:生产环境不建议这么玩,推荐 RU 补丁更新),当然也可以删除这两个文件后使用高版本的 log4j-core 对其做一个软链接指向低版本的 log4j。  












#cp /u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j* /home/oracle#rm -rf /u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-api-2.11.0.jar#rm -rf /u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-core-2.11.0.jar#cp /opt/oracle.ahf/common/jlib/log4j-api-2.17.1.jar /u01/app/oracle/product/19c/db_1/md/property_graph/lib/#cp /opt/oracle.ahf/common/jlib/log4j-core-2.17.1.jar /u01/app/oracle/product/19c/db_1/md/property_graph/lib/#chown oracle:oinstall /u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j*#su - oracle$ ln -s /u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-core-2.17.1.jar log4j-core-2.11.0.jar$ ln -s /u01/app/oracle/product/19c/db_1/md/property_graph/lib/log4j-api-2.17.1.jar log4j-api-2.11.0.jar

#reboot


         

重启后检查数据库状态,这里数据库一切正常。



AHF 卸载 

使用 root 用户或者安装者用户执行 tfactl 或 ahfctl uninstall命令卸载,首先要停止 ORAchk,然后停止 TFA,最后删除 AHF 安装目录 /opt/oracle.ahf
Running the command:
         
Stops Oracle ORAchk
Stops Oracle Trace File Analyzer
Deletes the Oracle Autonomous Health Framework installation directory

         


ahfctl uninstall -deleterepo -silent


AHF 常用命令  




ahfctl statusahf -allahfctl showrepo -all


         

获取 CPU 内存资源限制
ahfctl getresourcelimit
限制 CPU 核数为 2
ahfctl setresourcelimit -value 2
限制内存使用 500M
ahfctl setresourcelimit -resource kmem -value 500
限制内存和 SWAP内存总和为 1024M
ahfctl setresourcelimit -resource swmem -value 1024
分析所有错误信息(包括数据库 ORA错误和 GI错误)
tfactl analyze -type error
同样,也可以使用 tfactl 来清理诊断日志
tfactl purge -older 30d

更多使用命令请查看官方文档,这里不在演示。

OGG log4j 漏洞 

最后,花一点儿时间来简单说一下 OGG log4j 漏洞,正常 ogg19c 以上版本中是不存在此漏洞的,但我这里还有Oracle GoldenGate for Big Data Version 12.3.2.1.1 的版本,此版本同样使用了 log4j-core-2.9.1.jar 的包。同样解决此漏洞可以打补丁,也可以升级 OGG 更可以使用高版本的OGG,只不过这三种办法均不常用,一般也很少有人使用,我这里大胆一些,在测试环境中我直接删除了 log4j-core-2.9.1.jar 这个包,服务均可正常使用,安全稳定运行一年多时间,生产环境中我使用高版本软链接的方式替换这个包,也已经安全稳定运行一周了。如下是操作过程:

























































[root@cs-ogg lib]# cd /goldengate/ggjava/resources/lib/optional[root@cs-ogg optional]# ll log*-rwxr-xr-x 1 oracle oracle  239856 5月   1 2018 log4j-api-2.9.1.jar-rwxr-xr-x 1 oracle oracle 1549865 5月   1 2018 log4j-core-2.9.1.jar-rwxr-xr-x 1 oracle oracle   23153 5月   1 2018 log4j-slf4j-impl-2.9.1.jar[root@cs-ogg lib]# su - oracle[oracle@cs-ogg optional]$ cd /goldengate/ggjava/resources/lib/optional/[oracle@cs-ogg optional]$ mv log4j-core-2.9.1.jar log4j-core-2.9.1.jar_bak20230728[oracle@cs-ogg optional]$ ln -s /goldengate/ggjava/resources/lib/optional/log4j-core-2.17.1.jar log4j-core-2.9.1.jar[oracle@cs-ogg optional]$ ll总用量 3560-rwxr-xr-x 1 oracle oracle  239856 5月   1 2018 log4j-api-2.9.1.jar-rw-r--r-- 1 oracle oracle 1770490 3月   9 2022 log4j-core-2.17.1.jarlrwxrwxrwx 1 oracle oracle      63 7月  28 16:00 log4j-core-2.9.1.jar -> /goldengate/ggjava/resources/lib/optional/log4j-core-2.17.1.jar-rwxr-xr-x 1 oracle oracle 1549865 5月   1 2018 log4j-core-2.9.1.jar_bak20230728-rwxr-xr-x 1 oracle oracle   23153 5月   1 2018 log4j-slf4j-impl-2.9.1.jardrwxr-xr-x 2 oracle oracle      32 7月  14 2018 logback-rwxr-xr-x 1 oracle oracle    6983 5月   1 2018 slf4j-jcl-1.7.25.jar-rwxr-xr-x 1 oracle oracle    8460 5月   1 2018 slf4j-jdk14-1.7.25.jar-rwxr-xr-x 1 oracle oracle   12244 5月   1 2018 slf4j-log4j12-1.7.25.jar-rwxr-xr-x 1 oracle oracle    4007 5月   1 2018 slf4j-nop-1.7.25.jar-rwxr-xr-x 1 oracle oracle   15257 5月   1 2018 slf4j-simple-1.7.25.jar[oracle@cs-ogg optional]$ chmod a+x log4j-core-2.17.1.jar[oracle@cs-ogg optional]$ ll总用量 3560-rwxr-xr-x 1 oracle oracle  239856 5月   1 2018 log4j-api-2.9.1.jar-rwxr-xr-x 1 oracle oracle 1770490 3月   9 2022 log4j-core-2.17.1.jarlrwxrwxrwx 1 oracle oracle      63 7月  28 16:00 log4j-core-2.9.1.jar -> /goldengate/ggjava/resources/lib/optional/log4j-core-2.17.1.jar-rwxr-xr-x 1 oracle oracle 1549865 5月   1 2018 log4j-core-2.9.1.jar_bak20230728-rwxr-xr-x 1 oracle oracle   23153 5月   1 2018 log4j-slf4j-impl-2.9.1.jardrwxr-xr-x 2 oracle oracle      32 7月  14 2018 logback-rwxr-xr-x 1 oracle oracle    6983 5月   1 2018 slf4j-jcl-1.7.25.jar-rwxr-xr-x 1 oracle oracle    8460 5月   1 2018 slf4j-jdk14-1.7.25.jar-rwxr-xr-x 1 oracle oracle   12244 5月   1 2018 slf4j-log4j12-1.7.25.jar-rwxr-xr-x 1 oracle oracle    4007 5月   1 2018 slf4j-nop-1.7.25.jar-rwxr-xr-x 1 oracle oracle   15257 5月   1 2018 slf4j-simple-1.7.25.jar[oracle@cs-ogg goldengate]$ ./ggsci          Oracle GoldenGate for Big DataVersion 12.3.2.1.1 (Build 005)          Oracle GoldenGate Command InterpreterVersion 12.3.0.1.2 OGGCORE_OGGADP.12.3.0.1.2_PLATFORMS_180712.2305Linux, x64, 64bit (optimized), Generic on Jul 13 2018 00:46:09Operating system character set identified as UTF-8.        
Copyright (C) 1995, 2018, Oracle and/or its affiliates. All rights reserved.          GGSCI (cs-ogg) 1> stop *GGSCI (cs-ogg) 2> sart *GGSCI (cs-ogg) 3> info all          Program     Status      Group       Lag at Chkpt  Time Since Chkpt        
MANAGER     RUNNING                                          REPLICAT    RUNNING     REP01       00:00:13      00:00:01      REPLICAT    RUNNING     REP02       00:00:00      00:00:09

全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!以下三个地址可以找到我,其他地址都属于盗版侵权爬取我的文章,而且代码格式、图片等均有错乱,不方便阅读,欢迎来我公众号或者墨天轮地址关注我,第一时间收获最新消息。

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!

————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
————————————————————————————



分享几个数据库备份脚本

Oracle 表碎片检查及整理方案

OGG|Oracle GoldenGate 基础2022 年公众号历史文章合集整理

Oracle 19c RAC 遇到的几个问题

OGG|Oracle 数据迁移后比对一致性

OGG|Oracle GoldenGate 微服务架构

Oracle 查询表空间使用率超慢问题一则

Oracle 11g升级到19c需要关注的几个问题

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

请使用浏览器的分享功能分享到微信等