xz-utilsバックドアの影響検証実験ガイド

セキュリティ

はじめに

xz-utilsのバックドアは、2024年3月に発見されたセキュリティ脆弱性であり、liblzmaライブラリに悪意のあるコードが仕込まれていました。このバックドアは、SSHデーモンのパフォーマンスに重大な影響を与えることが報告されています。本記事では、xz-utilsバックドアの影響を検証するための実験環境の構築方法と実験手順を、初心者にも分かりやすく解説します。

実験の目的

本実験の目的は、以下の2点です。

  1. バックドアを含むliblzmaライブラリを使用した場合のSSHデーモンのパフォーマンスを測定する。
  2. 正規の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イメージをベースに実験環境を構築するためのDockerfile
  • README.md: 実験の概要、環境、手順、結果、考察、および結論を説明したドキュメント

実験環境のセットアップ

実験環境のセットアップは、以下の手順で行います。

  1. リポジトリをクローンまたはダウンロードします。
  2. コマンドプロンプトまたはPowerShellを開き、リポジトリのディレクトリに移動します。
  3. 以下のコマンドを実行して、Dockerイメージをビルドします。

    
    docker-compose build

これで、実験環境の準備が完了しました。

実験手順

実験手順は、以下の通りです。

Dockerコンテナの起動とSSHデーモンの起動

  1. 以下のコマンドを実行して、Dockerコンテナを起動し、コンテナ内でSSHデーモンを起動します。

    
    docker-compose up -d
    docker-compose exec kali /bin/bash
    /usr/sbin/sshd

現在のliblzmaライブラリの検査

  1. detect.shスクリプトを実行し、現在のliblzmaライブラリがバックドアに感染しているかを確認します。

    
    ./detect.sh

    実行結果:

    
    probably not vulnerable

    この結果は、現在のliblzmaライブラリがバックドアに感染していないことを示しています。

バックドアを含むliblzmaライブラリのインストール

  1. バックドアを含む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ライブラリをダウンロードし、現在のバージョンをダウングレードしてインストールします。

  2. SSHデーモンを再起動し、detect.shスクリプトを再度実行して、バックドアの存在を確認します。

    
    ps -aux | grep sshd
    kill 
    /usr/sbin/sshd
    ./detect.sh

    実行結果:

    
    probably vulnerable

    この結果は、現在のliblzmaライブラリがバックドアに感染していることを示しています。

バックドアを含むliblzmaライブラリでのSSHログインテスト

  1. 存在しないユーザーに対して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ログインテスト

  1. 正規のliblzmaライブラリをインストールし、SSHデーモンを再起動します。

    
    sudo apt update && sudo apt install --yes liblzma5
    ps -aux | grep sshd
    kill 
    /usr/sbin/sshd

    このコマンドは、正規のliblzmaライブラリをインストールし、SSHデーモンを再起動します。

  2. 再度、存在しないユーザーに対してSSHログインを試行し、処理時間を計測します。

    
    time ssh nonexistant@localhost

    実行結果:

    
    nonexistant@localhost: Permission denied (publickey).
    
    real    0m0.139s
    user    0m0.096s
    sys     0m0.011s

    この結果は、正規のliblzmaライブラリを使用した場合、存在しないユーザーに対するSSHログインの試行がわずか0.139秒で完了することを示しています。

実験結果と考察

実験結果から、以下のことが分かります。

  1. バックドアが含まれているliblzmaライブラリを使用した場合、存在しないユーザーに対するSSHログインの試行に約2.382秒かかりました。これは、バックドアによって追加された悪意のあるコードが実行されたためと考えられます。

  2. 正規のliblzmaライブラリをインストールした後に同様のSSHログインを試行したところ、わずか0.139秒で完了しました。これは、バックドアが除去され、SSHデーモンが正常に動作していることを示しています。

  3. バックドアの有無によるSSHログイン時間の顕著な差は、バックドアがシステムのパフォーマンスに悪影響を与えていることを示唆しています。

結論

本実験の結果から、以下の結論が導き出されます。

  1. xz-utilsのバックドアは、SSHデーモンのパフォーマンスに重大な影響を与えます。感染したシステムでは、SSHログインの処理時間が大幅に増加します。

  2. バックドアを含むliblzmaライブラリを正規のバージョンに置き換えることで、SSHデーモンのパフォーマンスが回復し、システムが正常に動作するようになります。

  3. このような実験は、バックドアの影響を実証的に示し、感染したソフトウェアを特定して対処する重要性を浮き彫りにしています。

  4. セキュリティ研究者にとって、このようなバックドアの詳細な分析と検証は、悪意のあるコードの動作を理解し、効果的な防御策を開発するために重要な情報を提供します。

本実験は、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"]

リポジトリ

GitHub - Sunwood-ai-labs/xz-utils-backdoor-experiment
Contribute to Sunwood-ai-labs/xz-utils-backdoor-experiment development by creating an account on GitHub.

参考サイト

xz-utils backdoor: how to get started | Kali Linux Blog
Following the recent disclosure of a backdoor in upstream xz/liblzma, we are writing this “get started” kind of blog post. We will explain how to setup an envir...

免責事項

本記事は、教育および研究目的で提供されています。実験で使用されるバックドアを含むソフトウェアは、悪意のある目的で使用してはいけません。実験の実行は、自己責任で行ってください。

以上が、xz-utilsバックドアの影響検証実験ガイドです。この記事では、READMEを参考にしつつ、初心者にも分かりやすい章立てと補足説明を加えました。実験環境のセットアップから実験手順、結果の解釈までを丁寧に解説することで、xz-utilsバックドアの影響を理解し、検証実験を行う際の手引きとなることを目指しました。

コメント

タイトルとURLをコピーしました