前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle Log4j 漏洞修复及 AHF 的简单使用

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

作者头像
JiekeXu之路
发布2023-09-06 09:48:17
4600
发布2023-09-06 09:48:17
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路

作者 | 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 及以上版本已修复上述漏洞。

代码语言:javascript
复制
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 类文件,并重启服务,具体命令:

代码语言:javascript
复制
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class 

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

代码语言:javascript
复制
[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 的版本。

代码语言:javascript
复制
[oracle@test19crac2 ~]$ $ORACLE_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.17
          
OPatch succeeded.
[oracle@test19crac2 ~]$ $ORACLE_HOME/OPatch/opatch lspatches
29585399;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 三种监控检查工具。

代码语言:javascript
复制
[root@test19crac1 suptools]# cd /u01/app/19c/grid/suptools
[root@test19crac1 suptools]# ls
orachk  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 文件通过软链接的形式来替换,下文中同样有讲到,你可以在测试环境中自行测试。

代码语言:javascript
复制
/u01/app/oracle/product/19.0.0/dbhome_1/suptools/tfa/release/tfa_home/jlib 

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

TFA 使用简介

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

TFA 更多帮助命令

代码语言:javascript
复制
[grid@test19crac2 ~]$ tfactl --help
WARNING - 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|changes
For detailed help on each command use:
  /u01/app/19c/grid/bin/tfactl           -help
          
tfactl>    

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

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

代码语言:javascript
复制
/u01/app/19c/grid/bin/tfactl managelogs -purge -older 180d -dryrun

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

代码语言:javascript
复制
$ tfactl managelogs -purge -older 30d
$ tfactl managelogs -purge -older 30d –gi
$ tfactl managelogs -purge -older 30d -database

查看目录使用情况

代码语言:javascript
复制
$ tfactl managelogs -show usage
$ tfactl managelogs -show usage –gi
$ tfactl managelogs -show usage -database
代码语言:javascript
复制
/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 密码。

代码语言:javascript
复制
./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]]
代码语言:javascript
复制
[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 : Y
AHF 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 nodes
AHF Location : /opt/oracle.ahf
AHF 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 Services
Created 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 Installer
root@test19crac2's password:         
[test19crac2] Running AHF Installer
root@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)检查版本

代码语言:javascript
复制
[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。

代码语言:javascript
复制
#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

代码语言:javascript
复制
ahfctl uninstall -deleterepo -silent
AHF 常用命令
代码语言:javascript
复制
ahfctl statusahf -all
ahfctl 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 这个包,服务均可正常使用,安全稳定运行一年多时间,生产环境中我使用高版本软链接的方式替换这个包,也已经安全稳定运行一周了。如下是操作过程:

代码语言:javascript
复制
[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.jar
lrwxrwxrwx 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.jar
drwxr-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.jar
lrwxrwxrwx 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.jar
drwxr-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 Data
Version 12.3.2.1.1 (Build 005)
          
Oracle GoldenGate Command Interpreter
Version 12.3.0.1.2 OGGCORE_OGGADP.12.3.0.1.2_PLATFORMS_180712.2305
Linux, x64, 64bit (optimized), Generic on Jul 13 2018 00:46:09
Operating 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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Log4j 简介
    • 受影响版本
      • 排查方法
        • 修复建议
        • TFA 使用简介
        • TFA 升级
          • AHF 卸载
            • AHF 常用命令
            • OGG log4j 漏洞
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档