CVE-2024-3094 漏洞自动化检测与修复工具

5 阅读3分钟

CVE-2024-3094 漏洞自动化检测与修复工具

本项目针对近期曝光的 CVE-2024-3094 漏洞(xz-utils 恶意代码后门),提供了完整的自动化检测与修复方案。包含适用于单机快速响应的 Shell 脚本,以及面向大规模服务器集群的 Ansible Playbook 自动化方案,帮助系统管理员高效、可靠地完成漏洞排查与修复工作。

功能特性

  • 自动检测操作系统与包管理器:支持 Debian/Ubuntu/Kali、RHEL/CentOS/Fedora/Rocky、openSUSE 等主流 Linux 发行版
  • 精准版本识别:自动获取已安装的 xz-utils 版本,与已知漏洞版本(5.6.0、5.6.1)进行比对
  • 智能升级修复:优先使用系统包管理器升级到最新安全版本,升级失败时自动从源码编译安装稳定版本(5.4.6)
  • Ansible 规模化部署:提供完整的 Ansible Playbook,支持跨数百台服务器的批量检测与修复
  • 交互式配置向导:Shell 脚本提供友好的命令行交互界面,支持自定义路径与执行选项
  • 修复报告生成:自动生成详细的主机修复状态报告,便于审计与追踪

安装指南

单机 Shell 脚本

  1. 下载脚本

    wget https://raw.githubusercontent.com/your-repo/ubuntu_security_hardening.sh
    chmod +x ubuntu_security_hardening.sh
    
  2. 执行脚本

    sudo ./ubuntu_security_hardening.sh
    

Ansible 批量部署

  1. 安装 Ansible(控制节点)

    # Ubuntu/Debian
    sudo apt-get update && sudo apt-get install -y ansible
    
    # RHEL/CentOS
    sudo yum install -y ansible
    
  2. 克隆项目

    git clone https://github.com/your-repo/CVE-2024-3094-mitigation
    cd CVE-2024-3094-mitigation
    chmod +x setup_and_run_ansible_cve_fix.sh
    
  3. 配置主机清单
    编辑 hosts.ini 文件,添加需要检测的目标主机:

    [servers]
    192.168.1.10 ansible_user=root
    192.168.1.11 ansible_user=root
    
  4. 运行自动化脚本

    ./setup_and_run_ansible_cve_fix.sh
    

使用说明

Shell 脚本单机使用

脚本会自动检测当前系统的 xz-utils 版本,如果发现漏洞版本(5.6.0 或 5.6.1),将执行以下流程:

  1. 尝试通过系统包管理器升级到最新版本
  2. 如果升级失败,自动下载 xz-5.4.6 稳定版源码并编译安装
  3. 提示用户是否重启系统以应用更改
# 执行检测与修复
sudo ./ubuntu_security_hardening.sh

# 输出示例
Detected vulnerable xz version: 5.6.0. Attempting to upgrade...
Attempting to upgrade xz to the latest version using apt-get...
xz has been successfully upgraded to the latest version.
It is recommended to reboot your system to apply changes. Would you like to reboot now? (yes/no)

Ansible Playbook 批量使用

方式一:自动交互式执行

运行 setup_and_run_ansible_cve_fix.sh 后,根据提示配置:

  • 初始 Ansible 主机清单文件路径
  • 受影响主机列表保存路径
  • 是否自动执行修复 Playbook
  • 最终报告保存路径
方式二:手动执行 Playbook

检测漏洞主机:

ansible-playbook -i path/to/hosts.ini check_vulnerability.yml

修复受影响主机:

ansible-playbook -i path/to/impacted_hosts.ini fix_vulnerable_hosts.yml

生成修复报告: 修复完成后,报告将保存到指定路径(默认为 ./remediation_report.txt),包含每台主机的修复状态与建议操作。

核心代码

Shell 脚本核心逻辑 - 版本检测与升级

# 检测操作系统并确定包管理器
detect_os_and_package_manager() {
    if [[ -f /etc/debian_version ]] || grep -qi ubuntu /etc/os-release; then
        PACKAGE_MANAGER="apt-get"
        VERSION_COMMAND="apt-cache policy xz-utils | grep 'Installed:' | awk '{print \$2}'"
    elif [[ -f /etc/redhat-release ]] || grep -qi centos /etc/os-release; then
        if command -v dnf >/dev/null 2>&1; then
            PACKAGE_MANAGER="dnf"
        else
            PACKAGE_MANAGER="yum"
        fi
        VERSION_COMMAND="$PACKAGE_MANAGER list installed xz | grep xz | awk '{print \$2}' | cut -d ':' -f 2"
    fi
}

# 升级 xz-utils 到最新版本
upgrade_xz() {
    echo "Attempting to upgrade xz to the latest version using $PACKAGE_MANAGER..."
    case $PACKAGE_MANAGER in
        apt-get|apt)
            sudo $PACKAGE_MANAGER update && sudo $PACKAGE_MANAGER install -y xz-utils
            ;;
        dnf|yum)
            sudo $PACKAGE_MANAGER update -y xz
            ;;
    esac
    if [ $? -eq 0 ]; then
        echo "xz has been successfully upgraded to the latest version."
        return 0
    else
        echo "Failed to upgrade xz to the latest version."
        return 1
    fi
}

# 从源码编译安装稳定版本
install_stable_xz() {
    echo "Downloading and installing the stable xz version from $STABLE_VERSION_URL..."
    wget $STABLE_VERSION_URL -O "xz-$STABLE_VERSION.tar.bz2" && \
    tar -xjf "xz-$STABLE_VERSION.tar.bz2" && \
    cd "xz-$STABLE_VERSION" && \
    ./configure && make && sudo make install
}

# 主逻辑:检测漏洞版本并执行修复
CURRENT_VERSION=$(get_xz_version)
if [[ " ${VULNERABLE_VERSIONS[*]} " =~ " ${CURRENT_VERSION} " ]]; then
    echo "Detected vulnerable xz version: $CURRENT_VERSION. Attempting to upgrade..."
    if ! upgrade_xz; then
        echo "Upgrade unsuccessful. Attempting to install a non-vulnerable version..."
        install_stable_xz
    fi
fi

Ansible Playbook 核心逻辑 - 批量检测


- name: Identify Vulnerable Hosts for CVE-2024-3094
  hosts: all
  become: yes
  tasks:
    - name: Gather package facts from all hosts
      ansible.builtin.package_facts:
        manager: auto
EOF

重要提醒

在生产环境部署前,请务必:

  • 在测试环境中充分验证脚本或 Playbook 的行为
  • 了解升级或降级 xz-utils 对系统上其他应用程序可能产生的影响
  • 确保有完整的数据备份和回滚方案
  • 仔细审查将要执行的变更,避免意外的业务中断 6HFtX5dABrKlqXeO5PUv/5Dq7l7h/nmTs89oAbrRTEdTobwJ8N381ruyQ41S2asr3EbOhAWrFvCmddhUpKhjGA==