XZ Utils

出典: フリー百科事典『ウィキペディア(Wikipedia)』
XZ Utils
作者 Lasse Collin
開発元 The Tukaani Project
最新版
5.4.6[1] ウィキデータを編集 / 26 1月 2024
リポジトリ ウィキデータを編集
プログラミング
言語
C言語
対応OS クロスプラットフォーム
種別 データ圧縮
ライセンス パブリックドメインソフトウェア.[2] (詳細は#開発と採用を参照)
公式サイト アーカイブ 2024年3月25日 - ウェイバックマシン
テンプレートを表示

XZ Utils(以前のLZMA Utils)はフリーコマンドライン可逆圧縮ソフトウェアのセットであり、LZMAxzを含んでいる。Unix系オペレーティングシステムおよび、バージョン5.0以降のMicrosoft Windowsに対応している。

xzはgzipbzip2のような代替ソフトウェアよりもより高い圧縮率になる。 伸長速度はbzip2より速いが、gzipよりも遅い。圧縮はgzipよりもだいぶ遅くなることがあり、高圧縮ではbzip2よりも遅い。圧縮されたファイルが多くの回数使われるときに最も有用となる。[3][4]

XZ Utilsは大まかに2つの構成要素からなる。

  • xz。コマンドラインの圧縮・伸長ソフトウェア(gzipに類似している)
  • liblzmazlibに似たAPIを持つライブラリ

様々なコマンドラインのショートカットがある。例えばlzmaxz --format=lzma)、unxzxz --decompressgunzipに類似している)、そしてxzcatunxz --stdoutzcatに類似している)。

XZ Utilsはxzlzmaファイル形式の両方を圧縮・伸長できるが、LZMA形式は今やレガシー[5]であるため、 XZ Utilsはxz形式をデフォルトとして圧縮する。

2024年3月、XZ Utilsのバージョン5.6の配布物でバックドアが発見された[6]。下記#サプライチェーン攻撃参照。

実装[編集]

ファイル形式の性質と同じようにソフトウェアの振る舞いもまた、Unix圧縮ツールのgzipbzip2に似た動作になるように設計されている。これはIgor PavlovのLZMA-SDKのUnix移植版から構成されており、Unix環境とその通常の構造と振る舞いに対してシームレスに組み込むためになじむようにされている。

xzは2014年のバージョン5.2.0以降、[7]マルチスレッド圧縮をサポートしている(-Tフラグ)。[8]2019年時点ではスレッド化された伸長はまだ実装されていない。[8]ファイルがスレッドに対して与えられた設定よりも十分に大きくはないか、あるいは使用しているスレッドがメモリ使用制限を超過しているならば、定義されているよりも少ないスレッド数になることがありうる。[8]

ちょうどgzipとbzipのように、xzとlzmaは入力として単一のファイル(またはデータストリーム)を圧縮することしかできない。複数のファイルを単一のアーカイブへ束ねることはできない。それをするためには、最初にtarのようなアーカイブするプログラムを使用する。

アーカイブを圧縮する:

xz   my_archive.tar    # 結果はmy_archive.tar.xzへ
lzma my_archive.tar    # 結果はmy_archive.tar.lzmaへ

アーカイブを伸長する:

unxz    my_archive.tar.xz      # 結果はmy_archive.tarへ
unlzma  my_archive.tar.lzma    # 結果はmy_archive.tarへ

tarのGNU実装のバージョン1.22以降ではtarballのlzmaやxzへの透過的な圧縮をサポートしており、xz圧縮については--xzまたは-J、LZMA圧縮では--lzmaスイッチが使用できる。

アーカイブを作成して圧縮する:

tar -c --xz   -f my_archive.tar.xz   /some_directory    # 結果はmy_archive.tar.xzへ
tar -c --lzma -f my_archive.tar.lzma /some_directory    # 結果はmy_archive.tar.lzmaへ

アーカイブを伸長してその内容を展開する:

tar -x --xz   -f my_archive.tar.xz      # 結果は/some_directoryへ
tar -x --lzma -f my_archive.tar.lzma    # 結果は/some_directoryへ

開発と採用[編集]

XZ Utilsの開発はTukaani Projectで行われている。Mike KeznerをリーダーとしてかつてSlackwareをベースとしたLinuxディストリビューションをメンテナンスしていた小さなグループだった。

xzliblzmaのすべてのソースコードパブリックドメインでリリースされている。XZ Utilsソースコード配布物は、付加的に、複数のGPLバージョンの対象となる、いくつかのオプションスクリプトとサンプルプログラムを含んでいる。[2]

特に、配布されているXZ Utilsソフトウェアが含んでいるGPLスクリプトとソースコードの一覧は以下のとおりである。

  • 一般的なlibc関数であるgetopt英語版のオプション実装(GNU GPL v2GNU LGPL v2.1
  • pthreadを検出するm4スクリプト(GNU GPL v3
  • いくつかの必須でないラッパースクリプト(xzgrepなど)(GNU GPL v2
  • そしてサンプルプログラムscanlzma。これはビルドシステムに統合されていない。

結果としてxzとliblzmaのバイナリはパブリックドメインだが、例外的にオプションのLGPL getopt英語版実装は統合されていない。[9]

バイナリはFreeBSDLinuxシステム、Microsoft Windows、そしてFreeDOSで利用できる。FedoraSlackwareUbuntu、そしてDebianを含む多くのLinuxディストリビューションがソフトウェアパッケージの圧縮にxzを使用している。Arch Linuxは以前はパッケージの圧縮にxzを使用していたが、[10]2019年12月27日以降は、パッケージはZstandardで圧縮されている[11]GNUのFTPアーカイブもまたxzを使用している。

サプライチェーン攻撃[編集]

2024年3月29日、liblzmaのコードにバックドアが仕掛けられている可能性があることがOpenwall英語版のセキュリティメーリングリストにて報告された[6]。報告者であるAndres Freundは、sshdのCPU使用率が異常であることに気が付きその原因を突き止めるべく調査を開始したところ[12]、liblzmaにテスト用として追加されたtarballがバックドアのセットアップに使用されていることを突き止めた。この問題はレッドハットによってCVE識別番号 CVE-2024-3094として登録された[13]

本脆弱性により、一部の環境において悪意のある者がsshdの認証を突破し遠隔でシステムにアクセスできるようになる可能性がある[14][15]。この悪意のあるコードはバージョン5.6.0と5.6.1に含まれていることが知られている[15]

このバックドアは以下により構成される。

  1. 悪意のあるバイナリコードを含む2つのテスト用ファイル。これらのファイルはgitリポジトリで利用できるが、展開してプログラムに挿入しない限りは利用されることがない[16]。このコードはglibcのIFUNCという仕組みを使用し、OpenSSHに存在するRSA_public_decryptと呼ばれる関数を悪意のあるバージョンに置き換える。OpenSSHは通常liblzmaをロードしないが、いくつかのLinuxディストリビューションではサードパーティ製の共通のパッチが当てられており、これによってlibsystemdが読み込まれ、更にそれがliblzmaをロードする[16]
  2. 悪意あるコードの挿入を行うスクリプトを展開するために改変されたbuild-to-host.m4。改変されたm4ファイルはgitリポジトリには存在せず、あるメンテナによって公開されたtarファイル内にのみ存在する[16]
  3. テスト用ファイルから悪意のあるコードを展開し、liblzmaに挿入するスクリプト。このファイルはビルドを実行しているシステムがx86-64のLinuxシステムであり、glibcとGCCを使用しており、かつdpkgまたはrpmを介してビルドを行っている場合にのみ悪意あるコードの挿入を実行するとされる[16]

このバックドアがメンテナによって意図的に仕込まれたものなのか、メンテナのシステムが不正アクセスされたことによるものなのかは不明である[17]

このバックドアの影響を受けるLinuxディストリビューションにはDebian unstable[18]Arch Linux[19]Fedora Rawhide[20]Kali Linux[21]openSUSE Tumbleweed[22]が含まれている。Red Hat Enterprise Linux[23]SUSE Linux Enterprise[22]Amazon Linux[24]はこのバックドアの影響を受けないことが確認されている。またArch Linuxでは、バックドアに必要なOpenSSHがlibsystemdをロードするためのパッチを採用していないため本脆弱性の影響を受けないとされるが、速やかなアップデートの実施を呼びかけている[25]

FreeBSDは、この攻撃がLinuxを対象としていること、及び現在サポートされているすべてのリリースが本脆弱性を含むバージョンより以前のものを採用していることから、本脆弱性の影響を受けないとしている[26]

関連項目[編集]

参考文献[編集]

  1. ^ [xz-devel XZ Utils 5.4.6, 5.5.1alpha, and website changes]” (26 1月 2024). 27 1月 2024閲覧。
  2. ^ a b Licensing on tukaani.org "The most interesting parts of XZ Utils (e.g. liblzma) are in the public domain. You can do whatever you want with the public domain parts. Some parts of XZ Utils (e.g. build system and some utilities) are under different free software licenses such as GNU LGPLv2.1, GNU GPLv2, or GNU GPLv3."
  3. ^ Henry-Stocker, Sandra (2017年12月12日). “How to squeeze the most out of Linux file compression” (英語). Network World. 2020年2月9日閲覧。
  4. ^ Gzip vs Bzip2 vs XZ Performance Comparison” (英語). RootUsers (2015年9月16日). 2020年2月9日閲覧。
  5. ^ LZMA Utils, https://tukaani.org/lzma/ 2011年1月25日閲覧。 
  6. ^ a b Freund, Andres (2024年3月29日). “backdoor in upstream xz/liblzma leading to ssh server compromise”. oss-security mailing list. 2024年3月30日閲覧。
  7. ^ https://git.tukaani.org/?p=xz.git;a=blob;f=NEWS;hb=HEAD
  8. ^ a b c https://man.cx/xz
  9. ^ In what cases is the output of a GPL program covered by the GPL too?”. GNU.org. 2019年8月21日閲覧。
  10. ^ Pierre Schmitz (2010年3月23日). “News: Switching to xz compression for new packages”. 2020年2月29日閲覧。
  11. ^ Arch Linux - News: Now using Zstandard instead of xz for package compression”. www.archlinux.org. 2020年1月7日閲覧。
  12. ^ A backdoor in xz”. lwn.net. 2024年3月30日閲覧。
  13. ^ NVD - CVE-2024-3094”. nvd.nist.gov. 2024年3月30日閲覧。
  14. ^ Urgent security alert for Fedora 41 and Rawhide users” (英語). www.redhat.com. 2024年3月29日閲覧。
  15. ^ a b XZ Utilsに悪意のあるコードが挿入された問題(CVE-2024-3094)について”. JPCERT/CC (2024年4月1日). 2024年4月14日閲覧。
  16. ^ a b c d xz-utils backdoor situation” (英語). Gist. 2024年3月30日閲覧。
  17. ^ Goodin, Dan (2024年3月29日). “Backdoor found in widely used Linux utility breaks encrypted SSH connections” (英語). Ars Technica. 2024年3月29日閲覧。
  18. ^ CVE-2024-3094”. security-tracker.debian.org. 2024年3月30日閲覧。
  19. ^ Arch Linux - News: The xz package has been backdoored”. archlinux.org. 2024年3月30日閲覧。
  20. ^ Urgent security alert for Fedora 41 and Fedora Rawhide users” (英語). www.redhat.com. 2024年3月30日閲覧。
  21. ^ All about the xz-utils backdoor | Kali Linux Blog” (English). Kali Linux (2024年3月29日). 2024年3月30日閲覧。
  22. ^ a b openSUSE addresses supply chain attack against xz compression library” (英語). openSUSE News (2024年3月29日). 2024年3月30日閲覧。
  23. ^ cve-details”. access.redhat.com. 2024年3月30日閲覧。
  24. ^ CVE-2024-3094” (英語). Amazon Web Services, Inc.. 2024年3月30日閲覧。
  25. ^ Arch Linux - News: The xz package has been backdoored”. archlinux.org. 2024年3月30日閲覧。
  26. ^ Disclosed backdoor in xz releases - FreeBSD not affected”. 2024年3月30日閲覧。

外部リンク[編集]