はじめに
xz-utilsのバックドアは、2024年3月に発見されたセキュリティ脆弱性であり、liblzmaライブラリに悪意のあるコードが仕込まれていました。このバックドアは、SSHデーモンのパフォーマンスに重大な影響を与えることが報告されています。本記事では、xz-utilsバックドアの影響を検証するための実験環境の構築方法と実験手順を、初心者にも分かりやすく解説します。
実験の目的
本実験の目的は、以下の2点です。
- バックドアを含むliblzmaライブラリを使用した場合のSSHデーモンのパフォーマンスを測定する。
- 正規のliblzmaライブラリを使用した場合のSSHデーモンのパフォーマンスと比較する。
これにより、xz-utilsバックドアがシステムに及ぼす影響を実証的に示すことができます。
実験環境
実験環境は、以下の要件を満たす必要があります。
- OS: Windows
- Docker: インストール済み
-
ディレクトリ構成:
C:\Prj\xz-utils-backdoor-experiment ├─ detect.sh ├─ docker-compose.yml ├─ Dockerfile ├─ README.md
各ファイルの役割は、以下の通りです。
detect.sh
: liblzmaライブラリがバックドアに感染しているかを検出するスクリプトdocker-compose.yml
: Kali LinuxコンテナをDocker Composeで構築するための設定ファイルDockerfile
: Kali Linuxイメージをベースに実験環境を構築するためのDockerfileREADME.md
: 実験の概要、環境、手順、結果、考察、および結論を説明したドキュメント
実験環境のセットアップ
実験環境のセットアップは、以下の手順で行います。
- リポジトリをクローンまたはダウンロードします。
- コマンドプロンプトまたはPowerShellを開き、リポジトリのディレクトリに移動します。
-
以下のコマンドを実行して、Dockerイメージをビルドします。
docker-compose build
これで、実験環境の準備が完了しました。
実験手順
実験手順は、以下の通りです。
Dockerコンテナの起動とSSHデーモンの起動
-
以下のコマンドを実行して、Dockerコンテナを起動し、コンテナ内でSSHデーモンを起動します。
docker-compose up -d docker-compose exec kali /bin/bash /usr/sbin/sshd
現在のliblzmaライブラリの検査
-
detect.sh
スクリプトを実行し、現在のliblzmaライブラリがバックドアに感染しているかを確認します。./detect.sh
実行結果:
probably not vulnerable
この結果は、現在のliblzmaライブラリがバックドアに感染していないことを示しています。
バックドアを含むliblzmaライブラリのインストール
-
バックドアを含むliblzmaライブラリをダウンロードし、インストールします。
wget https://snapshot.debian.org/archive/debian/20240328T025657Z/pool/main/x/xz-utils/liblzma5_5.6.1-1_amd64.deb apt-get install --allow-downgrades --yes ./liblzma5_5.6.1-1_amd64.deb
このコマンドは、バックドアを含むliblzmaライブラリをダウンロードし、現在のバージョンをダウングレードしてインストールします。
-
SSHデーモンを再起動し、
detect.sh
スクリプトを再度実行して、バックドアの存在を確認します。ps -aux | grep sshd kill
/usr/sbin/sshd ./detect.sh 実行結果:
probably vulnerable
この結果は、現在のliblzmaライブラリがバックドアに感染していることを示しています。
バックドアを含むliblzmaライブラリでのSSHログインテスト
-
存在しないユーザーに対してSSHログインを試行し、処理時間を計測します。
time ssh nonexistant@localhost
実行結果:
The authenticity of host 'localhost (127.0.0.1)' can't be established. ED25519 key fingerprint is SHA256:f8+JlnuHFQM5FkZemF4Vo+kVdqHEK+vHjNb4AiKh+dk. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'localhost' (ED25519) to the list of known hosts. nonexistant@localhost: Permission denied (publickey). real 0m2.382s user 0m0.110s sys 0m0.020s
この結果は、バックドアを含むliblzmaライブラリを使用した場合、存在しないユーザーに対するSSHログインの試行に約2.382秒かかることを示しています。
正規のliblzmaライブラリのインストールとSSHログインテスト
-
正規のliblzmaライブラリをインストールし、SSHデーモンを再起動します。
sudo apt update && sudo apt install --yes liblzma5 ps -aux | grep sshd kill
/usr/sbin/sshd このコマンドは、正規のliblzmaライブラリをインストールし、SSHデーモンを再起動します。
-
再度、存在しないユーザーに対してSSHログインを試行し、処理時間を計測します。
time ssh nonexistant@localhost
実行結果:
nonexistant@localhost: Permission denied (publickey). real 0m0.139s user 0m0.096s sys 0m0.011s
この結果は、正規のliblzmaライブラリを使用した場合、存在しないユーザーに対するSSHログインの試行がわずか0.139秒で完了することを示しています。
実験結果と考察
実験結果から、以下のことが分かります。
-
バックドアが含まれているliblzmaライブラリを使用した場合、存在しないユーザーに対するSSHログインの試行に約2.382秒かかりました。これは、バックドアによって追加された悪意のあるコードが実行されたためと考えられます。
-
正規のliblzmaライブラリをインストールした後に同様のSSHログインを試行したところ、わずか0.139秒で完了しました。これは、バックドアが除去され、SSHデーモンが正常に動作していることを示しています。
-
バックドアの有無によるSSHログイン時間の顕著な差は、バックドアがシステムのパフォーマンスに悪影響を与えていることを示唆しています。
結論
本実験の結果から、以下の結論が導き出されます。
-
xz-utilsのバックドアは、SSHデーモンのパフォーマンスに重大な影響を与えます。感染したシステムでは、SSHログインの処理時間が大幅に増加します。
-
バックドアを含むliblzmaライブラリを正規のバージョンに置き換えることで、SSHデーモンのパフォーマンスが回復し、システムが正常に動作するようになります。
-
このような実験は、バックドアの影響を実証的に示し、感染したソフトウェアを特定して対処する重要性を浮き彫りにしています。
-
セキュリティ研究者にとって、このようなバックドアの詳細な分析と検証は、悪意のあるコードの動作を理解し、効果的な防御策を開発するために重要な情報を提供します。
本実験は、xz-utilsバックドアの影響を実証的に示しましたが、より確実な結論を導き出すためには、追加の実験と分析が必要となる場合があります。
各ファイルの解説
detect.sh
#! /bin/bash
set -eu
path="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')"
if [ "$path" == "" ]
then
echo probably not vulnerable
exit
fi
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410
then
echo probably vulnerable
else
echo probably not vulnerable
fi
このスクリプトは、現在のシステムにインストールされているliblzmaライブラリがバックドアに感染しているかどうかを検出します。具体的には、SSHデーモンがリンクしているliblzmaライブラリのパスを取得し、そのバイナリデータを16進数ダンプして、特定のバイト列が存在するかを確認します。バックドアが存在する場合は「probably vulnerable」、存在しない場合は「probably not vulnerable」と出力します。
docker-compose.yml
version: '3'
services:
kali:
build: .
tty: true
volumes:
- ./detect.sh:/detect.sh
privileged: true
このファイルは、Docker Composeを使用してKali Linuxコンテナを構築するための設定を記述しています。build
セクションでDockerfileの場所を指定し、volumes
セクションでdetect.sh
スクリプトをコンテナ内にマウントしています。privileged
オプションをtrue
に設定することで、コンテナに特権を付与しています。
Dockerfile
FROM kalilinux/kali-rolling
RUN apt-get update && apt-get install -y openssh-server
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
RUN echo 'root:toor' | chpasswd
RUN service ssh start
RUN apt-get install -y wget
RUN apt-get install -y bsdmainutils
COPY detect.sh /detect.sh
RUN chmod +x /detect.sh
# CMD ["/usr/sbin/sshd", "-D"]
リポジトリ
参考サイト
免責事項
本記事は、教育および研究目的で提供されています。実験で使用されるバックドアを含むソフトウェアは、悪意のある目的で使用してはいけません。実験の実行は、自己責任で行ってください。
以上が、xz-utilsバックドアの影響検証実験ガイドです。この記事では、READMEを参考にしつつ、初心者にも分かりやすい章立てと補足説明を加えました。実験環境のセットアップから実験手順、結果の解釈までを丁寧に解説することで、xz-utilsバックドアの影響を理解し、検証実験を行う際の手引きとなることを目指しました。
コメント