萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Bash Shellshock 破殼漏洞 (CVE-2014-6271/7169) 檢測與修復完整指南

2014 年 9 月揭露的 Shellshock (CVE-2014-6271, CVE-2014-7169) 是 Bash 歷史最嚴重漏洞,影響版本 1.14 至 4.3。攻擊者透過惡意構造的環境變數函數定義,在 Bash 啟動時執行任意代碼。本文提供標準檢測命令、各發行版修復指令、驗證方法與緩解策略。

漏洞原理速覽

Bash 允許在環境變數中定義函數:


env x='() { :;}; echo vulnerable' bash -c "echo test"
  • () { :;}:合法函數定義 (空函數)
  • ; echo vulnerable:函數定義後的額外命令
  • 漏洞:Bash 解析函數定義後,**繼續執行後續命令**
  • 攻擊向量:CGI 腳本、SSH ForceCommand、DHCP 客戶端、Git 伺服器等透過環境變數傳遞用戶輸入

標準檢測命令

主要漏洞 (CVE-2014-6271)


env x='() { :;}; echo VULNERABLE' bash -c "echo test"
# 易受攻擊輸出:
VULNERABLE
test

# 已修補輸出:
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for 'x'
test

後續漏洞 (CVE-2014-7169)


env X='() { (a)=>\' bash -c "echo date"; cat echo
# 易受攻擊:執行 date 命令並建立 echo 檔案
# 已修補:報錯不執行

其他變體檢測


# CVE-2014-7186 (紅帽發現)
bash -c 'true <

各發行版修復指令

發行版修復命令驗證套件版本
Debian / Ubuntu / Mintapt update && apt install --only-upgrade bashdpkg -l bash | grep ^ii
RHEL / CentOS / Fedora / Rocky / Almayum update bash / dnf update bashrpm -q bash
openSUSEzypper update bashrpm -q bash
Arch / Manjaropacman -Syu bashpacman -Q bash
Alpineapk upgrade bashapk info bash
Gentooemerge --ask --verbose sys-apps/bashequery l bash

修復前後驗證對比

Debian 修補前檢測

圖 1:Debian 修補前檢測顯示 VULNERABLE

CentOS 修補前檢測

圖 2:CentOS 修補前檢測顯示 VULNERABLE

Debian 修補後驗證

圖 3:Debian 修補後不再輸出 VULNERABLE

CentOS 修補後驗證

圖 4:CentOS 修補後不再輸出 VULNERABLE

緊急緩解策略 (無法立即更新時)

1. 更換預設 Shell


# 安裝替代 shell
apt install dash zsh fish  # 或對應套件管理器

# 修改關鍵服務 Shebang
# #!/bin/bash  →  #!/bin/dash  (dash 不受影響)
# 或系統層面 (謹慎)
# dpkg-reconfigure dash  # Debian/Ubuntu 設定 /bin/sh 指向 dash

2. 限制 Bash 使用場景

  • 停用不必要的 CGI 腳本
  • SSH ForceCommand 改用內建命令或編譯二進制
  • Web 伺服器 mod_cgi 避免傳遞用戶輸入至環境變數

3. WAF/IDS 規則攔截


# ModSecurity 規則範例
SecRule REQUEST_HEADERS|REQUEST_BODY|ARGS_NAMES|ARGS_VALUES \
  "()\s*{" "id:1000001,phase:2,block,msg:'Shellshock Attack Attempt'"

4. 編譯安裝修補版本 (源碼級)


wget https://ftp.gnu.org/gnu/bash/bash-5.2.tar.gz
tar xzf bash-5.2.tar.gz
cd bash-5.2
./configure --prefix=/usr --bindir=/bin --without-bash-malloc
make -j$(nproc)
make install
# 需極度謹慎,可能破壞系統相容性

自動化掃描與合規檢查


#!/bin/bash
# shellshock_scan.sh - 掃描主機 Bash 版本與漏洞狀態

check_host() {
    local host=$1
    ssh "$host" '
        bash_version=$(bash --version | head -1)
        vuln1=$(env x="() { :;}; echo VULN" bash -c "echo test" 2>/dev/null | grep -c VULN)
        vuln2=$(env X="() { (a)=>\'" bash -c "echo date" 2>/dev/null | grep -c date)
        echo "$(hostname)|$bash_version|CVE-2014-6271:$vuln1|CVE-2014-7169:$vuln2"
    '
}

# 批量掃描
for host in server{1..50}; do
    check_host "$host" &
done
wait

長期防護建議

  1. 自動化修補:配置 unattended-upgrades (Debian/Ubuntu) 或 dnf-automatic (RHEL/Fedora) 確保安全更新及時應用
  2. 最小化 Bash 暴露:腳本用 #!/bin/sh (指向 dash)、避免 CGI 使用 Bash
  3. 容器化隔離:舊版應用容器化運行,宿主機保持最新
  4. 供應鏈安全:基礎鏡像定期重建、掃描 CVE
  5. 事件響應預案:包含 Bash 版本檢查、環境變數審計、異常進程監控

歷史影響回顧

  • 影響範圍:全球超過 70% Linux/Unix 伺服器、嵌入式設備、Mac OS X、路由器、IoT 設備
  • 著名攻擊:Mayhem 殭屍網絡、CloudFlare 記錄的大規模掃描、雅虎伺服器被入侵
  • CVSS 10.0 (滿分):遠程執行、無需認證、低複雜度、廣泛影響

小結

Shellshock 是「環境變數傳遞代碼」這一設計缺陷的極端體現。核心防禦只有一條:**立即更新 Bash 至修補版本**。輔以最小化暴露面、WAF 規則、自動化合規掃描。十年過去,仍有舊系統在運行易受攻擊的 Bash,**定期掃描、持續修補**是唯一正解。

copyright © 萬盛學電腦網 all rights reserved