作者 | Lasse Collin |
---|---|
開発元 | The Tukaani Project |
最新版 |
5.6.2
/ 2024年5月29日 |
リポジトリ | |
プログラミング 言語 | C言語 |
対応OS | クロスプラットフォーム |
種別 | データ圧縮 |
ライセンス | パブリックドメインソフトウェア.[1] (詳細は#開発と採用を参照) |
公式サイト | https://tukaani.org/xz |
XZ Utils(以前のLZMA Utils)はフリーなコマンドライン可逆圧縮ソフトウェアのセットであり、LZMAとxzを含んでいる。Unix系オペレーティングシステムおよび、バージョン5.0以降はWindowsにも対応している。
xzはgzipとbzip2のような代替ソフトウェアよりもより高い圧縮率になる。 伸長速度はbzip2より速いが、gzipよりも遅い。圧縮はgzipよりもだいぶ遅くなることがあり、高圧縮ではbzip2よりも遅い。圧縮されたファイルが頻繁に使われるときに最も有用となる。[2][3]
XZ Utilsは大まかに2つの構成要素からなる。
様々なコマンドラインのショートカットがある。例えばlzma(xz --format=lzma)、unxz(xz --decompress。gunzipに類似している)、そしてxzcat(unxz --stdout。zcatに類似している)。
XZ Utilsはxzとlzmaファイル形式の両方を圧縮・伸長できるが、LZMA形式は今やレガシー[4]であるため、 XZ Utilsはxz形式をデフォルトとして圧縮する。
2024年3月29日、本ソフトウェアのバージョン5.6.0と5.6.1に、悪意を持って仕掛けられたバックドアが発見された[5]。下記#サプライチェーン攻撃参照。
ファイル形式の性質と同じようにソフトウェアの振る舞いもまた、Unix圧縮ツールのgzipとbzip2に似た動作になるように設計されている。これはIgor PavlovのLZMA-SDKのUnix移植版から構成されており、Unix環境とその通常の構造と振る舞いに対してシームレスに組み込むためになじむようにされている。
xzは2014年のバージョン5.2.0以降、[6]マルチスレッド圧縮をサポートしている(-T
フラグ)。[7]2019年時点ではスレッド化された伸長はまだ実装されていない。[7]ファイルがスレッドに対して与えられた設定よりも十分に大きくはないか、あるいは使用しているスレッドがメモリ使用制限を超過しているならば、定義されているよりも少ないスレッド数になることがありうる。[7]
ちょうど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バージョンの対象となる、いくつかのオプションスクリプトとサンプルプログラムを含んでいる。[1]
特に、配布されているXZ Utilsソフトウェアが含んでいるGPLスクリプトとソースコードの一覧は以下のとおりである。
結果としてxzとliblzmaのバイナリはパブリックドメインだが、例外的にオプションのLGPL getopt実装は統合されていない。[8]
バイナリはFreeBSD、Linuxシステム、Microsoft Windows、そしてFreeDOSで利用できる。Fedora、Slackware、Ubuntu、そしてDebianを含む多くのLinuxディストリビューションがソフトウェアパッケージの圧縮にxzを使用している。Arch Linuxは以前はパッケージの圧縮にxzを使用していたが、[9]2019年12月27日以降は、パッケージはZstandardで圧縮されている[10]。GNUのFTPアーカイブもまたxzを使用している。
2024年3月29日、liblzmaのコードにバックドアが仕掛けられている可能性があることがOpenwallのセキュリティメーリングリストにて報告された[5]。報告者であるAndres Freundは、sshdのCPU使用率が異常であることに気が付き、その原因を突き止めるべく調査を開始したところ[11]、liblzmaにテスト用として追加されたtarballがバックドアのセットアップに使用されていることを突き止めた。この問題はレッドハットによってCVE識別番号 CVE-2024-3094として登録された[12]。問題のコードは、2024年2月24日頃に挿入された[13]。
本脆弱性により、一部の環境において悪意のある者がsshdの認証を突破し遠隔でシステムにアクセスできるようになる可能性がある[14][15]。この悪意のあるコードはバージョン5.6.0と5.6.1に含まれていることが知られている[15]。
このバックドアの影響を受けるLinuxディストリビューションにはDebian unstable[16]、Arch Linux[17]、Fedora Rawhide[18]、Kali Linux[19]、openSUSE Tumbleweed[20]が含まれている。Red Hat Enterprise Linux[21]、SUSE Linux Enterprise[20]、Amazon Linux[22]はこのバックドアの影響を受けないことが確認されている。またArch Linuxでは、バックドアに必要なOpenSSHがlibsystemdをロードするためのパッチを採用していないため本脆弱性の影響を受けないとされるが、速やかなアップデートの実施を呼びかけている[23]。
FreeBSDは、この攻撃がLinuxを対象としていること、及び現在サポートされているすべてのリリースが本脆弱性を含むバージョンより以前のものを採用していることから、本脆弱性の影響を受けないとしている[24]。
その後の調査で、攻撃者は約3年をかけてプロジェクト内での重要な立場を手に入れていたことが判明した[25]。元アメリカ国家安全保障局のハッカーであるDave Aitelは、この攻撃パターンはロシア対外情報庁のハッカーとみられているAPT29によるものと非常によく似ていると主張した[26]。