XZ Utils — Вікіпедія

XZ Utils
Тип архіватор[d]
public-domain softwared
command-line toold і стиснення даних
Операційна система кросплатформова програма
Мова програмування C[1]
Ліцензія LGPLv2.1+d
Репозиторій github.com/tukaani-project/xz
Вебсайт tukaani.org/xz/

XZ Utils (раніше LZMA Utils ) — це набір програм для стиснення даних без втрат, що працюють з командного рядка. До нього входять програми lzma та xz для Unix-подібних операційних систем, а також починаючи з версії 5.0, для Microsoft Windows. Для стиснення/декомпресії використовується LZMA2.

XZ Utils починався як Unix-порт LZMA SDK розробленого Ігорем Павловим[en] для 7zip. Портування мало на меті адаптувати lzma2 до інтеграції з Unix-подібними програмами та середовищем.

У березні 2024 року в дистрибутиві 5.6 XZ Utils було виявлено бекдор (детальніше далі).[2]

Особливості[ред. | ред. код]

У більшості випадків xz досягає вищого ступеню стиснення, ніж такі альтернативи, як gzip і bzip2. Швидкість декомпресії вища ніж bzip2, але нижча, ніж gzip. Стиснення може бути значно повільнішим, ніж gzip та bzip2, особливо для високих рівнів стиснення. XZ найкраще використовувати, коли швидкість стиснення не така важлива як менший розмір архіву. [3][4]

XZ Utils складається з двох основних компонентів:

  • xz, утиліта для командного рядка, для стиснення та декомпресії (аналог gzip)
  • liblzma, бібліотека з API схожа на zlib

Існують різні комбінації команд, наприклад:

  • lzma (для xz --format=lzma )
  • unxz (для xz --decompress ; аналог gunzip )
  • xzcat (для unxz --stdout ; аналог zcat )


Починаючи з версії 5.2.0 (2014 рік) xz підтримує багатопотокове стиснення (опція -T )[5][6]. Починаючи з версії 5.4.0 реалізована багатопотокова декомпресія.[5]

xz може стискати та розпаковувати як формати файлів .xz, так і .lzma, але оскільки формат .lzma вже застарілий, xz за замовчуванням стискає в .xz.

Критика[ред. | ред. код]

Розробник lzip розкритикував формат xz як вибір для довготривалого зберігання архівних даних, тому що формат дуже вразливий до таких помилок як пошкодження пам'яті, помилки при читанні, або перегортання бітів.[7]

Приклади використання[ред. | ред. код]

Задля сумісності з популярними інструментами стиснення UNIX gzip та bzip2, утілити з XZ utils були перероблені так, щоб їх поведінка і властивості формату файлу були схожими.

Подібно до gzip і bzip, xz і lzma можуть стискати лише окремі файли (або потоки даних) як вхідні дані. Вони не можуть об’єднати кілька файлів в один архів – для цього спочатку використовується програма архівування без стиснення, наприклад tar, cpio.

Стиснення архіву:

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  

GNU-версія tar починаючи з версії 1.22 має прозору підтримку архівів, стиснутих за допомогою lzma та xz. З'являються опціїї --xz або -J для стиснення xz та --lzma для стиснення LZMA.

Створення архіву та його стиснення:

tar -c --xz -f мій_архів.tar.xz /деякий_каталог      # створює мій_архів.tar.xz tar -c --lzma -f мій_архів.tar.lzma /деякий_каталог  # створює мій_архів.tar.lzma 
tar -x --xz -f мій_архів.tar.xz      # розпаковує /деякий_каталог  tar -x --lzma -f мій_архів.tar.lzma  # розпаковує /деякий_каталог  
tar cJf keep.txz keep  # архівує, а потім стискає каталог. /keep/ у файл ./keep.txz tar xJf keep.txz       # розпаковує та витягає файл ./keep.txz створює каталог ./keep/ 

Інцидент з бекдором в березні 2024 року[ред. | ред. код]

29 березня 2024 року в списку розсилки Openwall було опубліковано тему[8], в який автор дослідив що код liblzma потенційно скомпрометований супроводжувачем. Інциденту було привласнено ідентифікатор CVE-2024-3094 в базі загальних вразливостей і вразливостей

Відомо, що шкідливий код міститься у версіях 5.6.0 і 5.6.1.

Як зазначила компанія Red Hat в повідомленні

Це втручання за відповідних обставин потенційно може дозволити зловмиснику зламати автентифікацію sshd і отримати неавторизований доступ до всієї системи віддалено.[9]

Шкідливий механізм складається з наступних кроків та компонентів:

  1. Репозиторій має два тестових файли, які містять обфускований шкідливий бінарний код. Але залишаються неактивними, до тих пір, поки їх не вставити в програму.[10] Код використовує механізм glibc IFUNC для заміни наявної функції в OpenSSH під назвою RSA_public_decrypt на її шкідливу версію. Зазвичай OpenSSH не завантажує liblzma, але у великій кількості дистрибутивів Linux OpenSSH побудований так, що змушує завантажувати libsystemd, який, у свою чергу завантажує lzma.[10]
  2. Під час збірки пакетів для операційних систем супроводжувачі операційних систем запускають сценарій build-to-host.m4. В репозиторії знаходиться нормальна версія такого сценарію, супроводжувач xz-utils сформував в файлі tar з модифікованою версією сценарію build-to-host.m4. Модифікована версія витягує з тестових файлів скрипт, який виконує фактичну ін'єкцію бінарного кода в функцію.[10]
  3. Сценарій, який витягує зловмисний код із файлів «тестових випадків» і вставляє їх у liblzma. Схоже, що файл виконує ін’єкцію лише тоді, коли система, на якій будується є системою x86-64 Linux та використовує glibc, а GCC збирається через dpkg або rpm.[10]

Поки що невідомо, чи цей бекдор був навмисно розміщений супроводжувачем, чи супроводжувач був скомпрометований.[11]

Список дистрибутивів Linux на яки це вплинуло це дистрибутиви які мають політику використання найновіших версій бібліотек, такі як Debian unstable [12], Arch Linux [13], Fedora Rawhide [14], Kali Linux [15]. Цей бекдор не був впроваджений в популярних серверних дистрибутивах як Red Hat Enterprise Linux [16], SUSE Linux Enterprise [17], Amazon Linux [18].

Примітки[ред. | ред. код]

  1. The xz-utils Open Source Project on Open Hub: Languages Page — 2006.
  2. Freund1, Andres (29 березня 2024). backdoor in upstream xz/liblzma leading to ssh server compromise. oss-security mailing list.
  3. Henry-Stocker, Sandra (12 грудня 2017). How to squeeze the most out of Linux file compression. Network World (англ.). Процитовано 9 лютого 2020.
  4. Gzip vs Bzip2 vs XZ Performance Comparison. RootUsers (амер.). 16 вересня 2015. Процитовано 9 лютого 2020.
  5. а б Linux Manpages Online - man.cx manual pages.
  6. XZ Utils Release Notes
  7. Xz format inadequate for long-term archiving. lzip.nongnu.org. Процитовано 1 квітня 2024.
  8. Freund2, Andres (29 березня 2024). backdoor in upstream xz/liblzma leading to ssh server compromise. oss-security mailing list.
  9. Urgent security alert for Fedora 41 and Rawhide users. www.redhat.com (англ.). Процитовано 29 березня 2024.
  10. а б в г James, Sam. xz-utils backdoor situation. Gist (англ.).
  11. Goodin, Dan (29 березня 2024). Backdoor found in widely used Linux utility breaks encrypted SSH connections. Ars Technica (en-us) . Процитовано 29 березня 2024.
  12. CVE-2024-3094. security-tracker.debian.org. Процитовано 30 березня 2024.
  13. Arch Linux - News: The xz package has been backdoored. archlinux.org. Процитовано 30 березня 2024.
  14. Urgent security alert for Fedora 41 and Fedora Rawhide users. www.redhat.com (англ.). Процитовано 30 березня 2024.
  15. All about the xz-utils backdoor | Kali Linux Blog. Kali Linux (English) . 29 березня 2024. Процитовано 30 березня 2024.
  16. cve-details. access.redhat.com. Процитовано 30 березня 2024.
  17. openSUSE addresses supply chain attack against xz compression library. openSUSE News (англ.). 29 березня 2024. Процитовано 30 березня 2024.
  18. CVE-2024-3094. Amazon Web Services, Inc. (амер.). Процитовано 30 березня 2024.