XZ Utils

XZ Utils（以前のLZMA Utils）はフリーなコマンドライン可逆圧縮ソフトウェアのセットであり、LZMAとxzを含んでいる。Unix系オペレーティングシステムおよび、バージョン5.0以降はWindowsにも対応している。 xzはgzipとbzip2のような代替ソフトウェアよりもより高い圧縮率になる。 伸長速度はbzip2より速いが、gzipよりも遅い。圧縮はgzipよりもだいぶ遅くなることがあり、高圧縮ではbzip2よりも遅い。圧縮されたファイルが頻繁に使われるときに最も有用となる。 XZ Utilsは大まかに2つの構成要素からなる。 xz。コマンドラインの圧縮・伸長ソフトウェア（gzipに類似している） liblzma。zlibに似たAPIを持つライブラリ 様々なコマンドラインのショートカットがある。例えばlzma（xz --format=lzma）、unxz（xz --decompress。gunzipに類似している）、そしてxzcat（unxz --stdout。zcatに類似している）。 XZ Utilsはxzとlzmaファイル形式の両方を圧縮・伸長できるが、LZMA形式は今やレガシーであるため、 XZ Utilsはxz形式をデフォルトとして圧縮する。 2024年3月29日、本ソフトウェアのバージョン5.6.0と5.6.1に、悪意を持って仕掛けられたバックドアが発見された。下記#サプライチェーン攻撃参照。 ファイル形式の性質と同じようにソフトウェアの振る舞いもまた、Unix圧縮ツールのgzipとbzip2に似た動作になるように設計されている。これはIgor PavlovのLZMA-SDKのUnix移植版から構成されており、Unix環境とその通常の構造と振る舞いに対してシームレスに組み込むためになじむようにされている。 xzは2014年のバージョン5.2.0以降、マルチスレッド圧縮をサポートしている（-Tフラグ）。2019年時点ではスレッド化された伸長はまだ実装されていない。ファイルがスレッドに対して与えられた設定よりも十分に大きくはないか、あるいは使用しているスレッドがメモリ使用制限を超過しているならば、定義されているよりも少ないスレッド数になることがありうる。 ちょうど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ディストリビューションをメンテナンスしていた小さなグループだった。 xzとliblzmaのすべてのソースコードはパブリックドメインでリリースされている。XZ Utilsソースコード配布物は、付加的に、複数のGPLバージョンの対象となる、いくつかのオプションスクリプトとサンプルプログラムを含んでいる。 特に、配布されているXZ Utilsソフトウェアが含んでいるGPLスクリプトとソースコードの一覧は以下のとおりである。 一般的なlibc関数であるgetopt（英語版）のオプション実装（GNU GPL v2とGNU LGPL v2.1） pthreadを検出するm4スクリプト（GNU GPL v3） いくつかの必須でないラッパースクリプト（xzgrepなど）（GNU GPL v2） そしてサンプルプログラムscanlzma。これはビルドシステムに統合されていない。 結果としてxzとliblzmaのバイナリはパブリックドメインだが、例外的にオプションのLGPL getopt（英語版）実装は統合されていない。 バイナリはFreeBSD、Linuxシステム、Microsoft Windows、そしてFreeDOSで利用できる。Fedora、Slackware、Ubuntu、そしてDebianを含む多くのLinuxディストリビューションがソフトウェアパッケージの圧縮にxzを使用している。Arch Linuxは以前はパッケージの圧縮にxzを使用していたが、2019年12月27日以降は、パッケージはZstandardで圧縮されている。GNUのFTPアーカイブもまたxzを使用している。 2024年3月29日、liblzmaのコードにバックドアが仕掛けられている可能性があることがOpenwall（英語版）のセキュリティメーリングリストにて報告された。報告者であるAndres Freundは、sshdのCPU使用率が異常であることに気が付き、その原因を突き止めるべく調査を開始したところ、liblzmaにテスト用として追加されたtarballがバックドアのセットアップに使用されていることを突き止めた。この問題はレッドハットによってCVE識別番号 CVE-2024-3094として登録された。問題のコードは、2024年2月24日頃に挿入された。 本脆弱性により、一部の環境において悪意のある者がsshdの認証を突破し遠隔でシステムにアクセスできるようになる可能性がある。この悪意のあるコードはバージョン5.6.0と5.6.1に含まれていることが知られている。 このバックドアの影響を受けるLinuxディストリビューションにはDebian unstable、Arch Linux、Fedora Rawhide、Kali Linux、openSUSE Tumbleweedが含まれている。Red Hat Enterprise Linux、SUSE Linux Enterprise、Amazon Linuxはこのバックドアの影響を受けないことが確認されている。またArch Linuxでは、バックドアに必要なOpenSSHがlibsystemdをロードするためのパッチを採用していないため本脆弱性の影響を受けないとされるが、速やかなアップデートの実施を呼びかけている。 FreeBSDは、この攻撃がLinuxを対象としていること、及び現在サポートされているすべてのリリースが本脆弱性を含むバージョンより以前のものを採用していることから、本脆弱性の影響を受けないとしている。 その後の調査で、攻撃者は約3年をかけてプロジェクト内での重要な立場を手に入れていたことが判明した。元アメリカ国家安全保障局のハッカーであるDave Aitelは、この攻撃パターンはロシア対外情報庁のハッカーとみられているAPT29（英語版）によるものと非常によく似ていると主張した。 ポータル FLOSS ^ 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." ^ Henry-Stocker, Sandra (2017年12月12日). “How to squeeze the most out of Linux file compression” (英語). Network World. 2020年2月9日閲覧。 ^ “Gzip vs Bzip2 vs XZ Performance Comparison” (英語). RootUsers (2015年9月16日). 2020年2月9日閲覧。 ^ LZMA Utils, https://tukaani.org/lzma/ 2011年1月25日閲覧。  ^ a b Freund, Andres (2024年3月29日). “backdoor in upstream xz/liblzma leading to ssh server compromise”. oss-security mailing list. 2024年3月30日閲覧。 ^ https://git.tukaani.org/?p=xz.git;a=blob;f=NEWS;hb=HEAD ^ a b c https://man.cx/xz ^ “In what cases is the output of a GPL program covered by the GPL too?”. GNU.org. 21 August 2019閲覧。 ^ Pierre Schmitz (2010年3月23日). “News: Switching to xz compression for new packages”. 2020年2月29日閲覧。 ^ “Arch Linux - News: Now using Zstandard instead of xz for package compression”. www.archlinux.org. 2020年1月7日閲覧。 ^ “A backdoor in xz”. lwn.net. 2024年3月30日閲覧。 ^ “NVD - CVE-2024-3094”. nvd.nist.gov. 2024年3月30日閲覧。 ^ “XZ Utilsに悪意のあるコードが挿入された問題（CVE-2024-3094）について”. JPCERT/CC. 2024年9月18日閲覧。 ^ “Urgent security alert for Fedora 41 and Rawhide users” (英語). www.redhat.com. 2024年3月29日閲覧。 ^ a b “XZ Utilsに悪意のあるコードが挿入された問題（CVE-2024-3094）について”. JPCERT/CC (2024年4月1日). 2024年4月14日閲覧。 ^ “CVE-2024-3094”. security-tracker.debian.org. 2024年3月30日閲覧。 ^ “Arch Linux - News: The xz package has been backdoored”. archlinux.org. 2024年3月30日閲覧。 ^ “Urgent security alert for Fedora 41 and Fedora Rawhide users” (英語). www.redhat.com. 2024年3月30日閲覧。 ^ “All about the xz-utils backdoor | Kali Linux Blog” (English). Kali Linux (2024年3月29日). 2024年3月30日閲覧。 ^ a b “openSUSE addresses supply chain attack against xz compression library” (英語). openSUSE News (2024年3月29日). 2024年3月30日閲覧。 ^ “cve-details”. access.redhat.com. 2024年3月30日閲覧。 ^ “CVE-2024-3094” (英語). Amazon Web Services, Inc.. 2024年3月30日閲覧。 ^ “Arch Linux - News: The xz package has been backdoored”. archlinux.org. 2024年3月30日閲覧。 ^ “Disclosed backdoor in xz releases - FreeBSD not affected”. 2024年3月30日閲覧。 ^ “What we know about the xz Utils backdoor that almost infected the world” (英語). Ars Technica (1 April 2024). 1 April 2024時点のオリジナルよりアーカイブ。1 April 2024閲覧。 ^ Greenberg, Andy. “The Mystery of 'Jia Tan,' the XZ Backdoor Mastermind”. Wired. オリジナルの3 April 2024時点におけるアーカイブ。. https://web.archive.org/web/20240403141041/https://www.wired.com/story/jia-tan-xz-backdoor/ 3 April 2024閲覧。.  公式ウェブサイト SourceForge project page