**XZ Utils** (이전 **LZMA Utils** )는 lzma 및 xz 프로그램을 포함해 유닉스 계열 운영 체제 및 마이크로소프트 윈도우 버전 5.0 이상에서 실행할 수 있는 자유 소프트웨어 명령줄 비손실 압축 소프트웨어 모음이다. 압축/압축 풀기에는 Lempel–Ziv–Markov 체인 알고리즘 (LZMA)이 사용된다. XZ Utils는 Igor Pavlov 의 LZMA- SDK를 유닉스 환경에 문제없이 실행되도록 이식한 버전으로 시작되었다

2024년 3월 29일, XZ Utils의 5.6.0 및 5.6.1 배포판에서 백도어가 발견되었다.

특징
--

대부분의 경우 xz는 gzip 및 bzip2 와 같은 기능을 가진 다른 소프트웨어보다 더 높은 압축률을 달성한다. 압축 해제 속도는 bzip2보다 높지만 gzip보다 느리다. 압축은 gzip보다 훨씬 느릴 수 있고 높은 압축 수준의 경우 bzip2보다 느릴 수 있으며 압축 파일을 여러 번 사용할 때 가장 유용하다.  

XZ Utils는 두 가지 주요 구성 요소로 구성되어있다.

* 명령줄 압축 및 압축 해제 소프트웨어 xz
* Zlib와 유사한 API를 가진 소프트웨어 라이브러리 **liblzma**

`lzma` ( `xz --format=lzma` 의 경우), `unxz` ( `xz --decompress` 의 경우 `gunzip` 과 유사) 및 `xzcat` ( `unxz --stdout` 의 경우 `zcat` 과 유사)와 같은 다양한 명령 단축키가 존재한다.

XZ Utils는 *xz* 및 *lzma* 파일 형식을 모두 압축하고 압축을 풀 수 있지만 LZMA 형식은 이제 레거시이므로 XZ Utils는 기본적으로 xz로 압축하도록 설정되어있다.

xz 형식
-----

xz 형식은 필터 전처리를 허용하여 lzma를 개선한 압축 파일 형식으로, 7z 필터는 LZMA SDK를 통해 퍼블릭 도메인으로 공개되어 있는 7z 필터와 유사하다.

개발
--

XZ Utils의 개발은 마이크 케즈너가 이끄는 한때 슬랙웨어 기반 리눅스 배포판을 관리했던 소규모 개발자 그룹인 Tukaani 프로젝트 내에서 이루어졌다.

**xz** 및 **liblzma**의 모든 소스 코드는 퍼블릭 도메인 으로 공개되어있으나, 몇몇 스크립트에는 GNU 일반 공중 사용 허가서 또는 GNU 약소 일반 공중 사용 허가서가 적용되어있다.

XZ Utils 소프트웨어와 함께 배포되는 GNU 일반 공중 사용 허가서가 적용된 스크립트 및 소스의 전체 목록은 다음과 같다:

* libc 함수인 getopt ( GNU LGPL v2.1 )의 선택적 구현
* pthread 감지를 위한 m4 스크립트( GNU GPL v3 )
* 일부 중요하지 않은 래퍼 스크립트(xzgrep 등)( GNU GPL v2 )
* 그리고 빌드 시스템과 통합되지 않은 예제 프로그램 scanlzma

LGPL getopt 구현이 통합한 것을 사용하지 않는 한 xz 및 liblzma 바이너리는 퍼블릭 도메인으로 사용할 수 있다

바이너리는 FreeBSD, NetBSD, 리눅스 시스템, 마이크로소프트 윈도우 및 프리도스에서 사용할 수 있다. 페도라, 슬랙웨어, 우분투 및 데비안을 포함한 다수의 리눅스 배포판에서는 소프트웨어 패키지를 압축하기 위해 xz를 사용하고 있다. 아치 리눅스는 이전에 xz를 사용하여 패키지를 압축했지만  2019년 12월 27일 현재 패키지는 Zstandard를 사용해 압축하고 있다.  페도라 리눅스 또한 페도라 리눅스 31 버전부터 RPM 패키지를 Zstandard로 압축하는 방식으로 전환했다  GNU FTP 아카이브도 xz를 사용하고 있다.

공급망 공격
------

2024년 3월 29일, Openwall의 oss-security 메일링 리스트에 liblzma 코드에 취약점이 삽입되었다는 것을 알리는 스레드가 게시되었다.  스레드 작성자인 Andres Freund는 `sshd`가 많은 양의 CPU를 사용하고 있다는 것을 알고 원인을 찾던 중 tar 파일의 구성 스크립트 추가를 통해 백도어 설정 코드 삽입하는 압축 테스트 파일을 찾아냈다. 이 취약점의 CVE ID는 레드햇이 발행한 CVE-2024-3094이며, 취약점 위험 지수는 10점 만점에 10점이다.

해당 악성코드가 포함된 버전은 5.6.0, 5.6.1인 것으로 알려져 있다. SSH 서버의 특정 서드 파티 패치를 사용하지 않는 한 취약점은 작동되지 않지만, 아닐 경우 잠재적으로 악의적인 행위자가 sshd 인증을 깨고 원격으로 전체 시스템에 대한 무단 액세스 권한을 얻을 수 있다.  침투 메커니즘은 악성 바이너리 코드가 포함된 두 개의 압축 테스트 파일로 구성되어 있으며, 파일들은 git 저장소에 공개되어 있지만 프로그램에 삽입하지 않는 한 휴면 상태로 유지된다.  이 코드는 glibc `IFUNC` 기능을 사용하여 `RSA_public_decrypt` 라는 OpenSSH의 기존 함수를 악성코드 버전으로 대체한다. OpenSSH는 일반적으로 liblzma를 로드하지 않지만, 여러 리눅스 배포판에서 사용하는 일반적인 서드 파티 패치로 인해 libsystemd가 로드되고, 이를 통해 lzma가 로드된다. 깃허브에 업로드된 릴리스 버전 소스코드 tar에는 `liblzma`에 백도어 삽입을 수행하는 스크립트인 `build-to-host.m4` 의 수정된 버전이 포함되었다. 이 수정된 m4 파일은 git 저장소에 없었지만, git과 별도로 관리자가 릴리스한 tar 파일에만 존재했다.  스크립트는 시스템이 glibc 및 GCC를 사용하고 dpkg 또는 rpm을 통해 구축되는 x86-64 리눅스 시스템에만 취약점을 삽입하는 것으로 나타났다.  깃허브는 공급망 공격으로 인해 XZ 저장소를 서비스 약관 위반을 이유로 코드를 사이트에서 내렸다.  백도어는 xz 프로젝트의 관리자인 "JiaT75"에 의해 추가되었지만 이 백도어가 관리자가 의도적으로 삽입한 것인지, 아니면 관리자 계정이 해킹 된 것인지는 현재 확실하지 않다. 

영향을 받는 리눅스 배포판 목록에는 데비안 불안정 및 테스트 버전,  Fedora Rawhide,  칼리 리눅스,  및 오픈수세 텀블위드  및 Zorin OS 등이 있다. [  ] 안정적인 릴리스 업데이트 모델을 따르는 대부분의 리눅스 배포판은 이전 버전의 xz를 탑재하고 있었기 때문에 영향을 받지 않았다.  Arch 리눅스는 사용자에게 즉시 업데이트하라는 권고를 발표했지만 Arch의 OpenSSH 패키지에는 백도어에 실행되는 데 필요한 서드파티 패치가 포함되어 있지 않다는 점도 언급했다.  현재 지원되는 모든 FreeBSD 릴리스에는 영향을 받는 릴리스보다 이전 버전의 xz가 포함되어 있었으며, 공격은 리눅스의 glibc를 대상으로 하기 때문에 FreeBSD는 이 공격의 영향을 받지 않는다.