클라우드 컴퓨팅이 필요하신가요? 지금 시작해보세요

XZ Utils Backdoor - 알아야 할 모든 것과 대응 방법

Akamai Wave Blue

에 의해 작성

Akamai Security Intelligence Group

April 01, 2024

CVE-2024-3094는 오픈 소스 라이브러리 XZ Utils에서 발견된 취약점으로, 해당 라이브러리의 관리자가 라이브러리에 푸시한 악성 코드에서 비롯됩니다.
CVE-2024-3094는 오픈 소스 라이브러리 XZ Utils에서 발견된 취약점으로, 해당 라이브러리의 관리자가 라이브러리에 푸시한 악성 코드에서 비롯됩니다.

Executive Summary

  • CVE-2024-3094 는 오픈 소스 라이브러리 XZ Utils에서 발견된 취약점으로, 해당 라이브러리의 관리자가 라이브러리에 푸시한 악성 코드에서 비롯됩니다.

  • 이 취약점은 원래 SSH 인증 우회 백도어로 보고되었지만, 추가 분석 결과 실제로는 RCE(Remote Code Execution)을 가능하게 하는 것으로 나타났습니다.

  • 공격자는 약 2년 전부터 XZ 프로젝트에 참여하기 시작했으며, 관리자의 책임이 주어질 때까지 천천히 신뢰를 쌓았습니다. 이러한 장기적인 운영은 일반적으로 국가가 후원하는 공격자들과 비슷하지만, 현재 구체적인 배후는 밝혀지지 않았습니다.

  • 이 백도어는 최신 XZ Utils 릴리스에 영향을 미치므로 손상되지 않은 릴리스로 다운그레이드하는 것이 좋습니다. 이 블로그 게시물에서는 공격의 폭발 반경을 제한할 수 있는 기타 방어 방법을 제안합니다.

백스토리

XZ Utils와 그 기본 라이브러리인 liblzma는 lzma 압축 및 압축 해제를 구축하는 오픈 소스 프로젝트입니다. 많은 Linux 배포판에 기본으로 포함되어 있고, 개발자들에게 매우 인기 있으며 Linux 생태계 전반에서 광범위하게 사용되고 있습니다.

약 2년 전, Jia Tan이라는 이름의 개발자는 해당 프로젝트에 참여해 다양한 버그 수정이나 개선에 대한 풀 리퀘스트를 열기 시작했습니다. 이때까지는 특이 사항이 없었습니다. 오픈소스 세계에서는 보통 이런 식으로 일이 진행되니까요. 이렇게 신뢰와 믿음을 쌓은 Jia Tan은 리포지토리에 대한 권한을 받기 시작해 처음에는 커밋 권한, 나중에는 릴리스 관리자 권한까지 얻게 되었습니다.

권한을 얻기 위한 노력의 일환으로 Jia Tan은 흥미로운 형태의 소셜 엔지니어링을 이용한 것으로 보입니다. 가짜 계정을 사용해 수많은 기능 요청과 버그에 대한 불만을 보내 원래 관리자를 압박했고, 결국 리포지토리에 다른 관리자를 추가해야 하는 상황이 발생했습니다.

Jia Tan은 약 2년간 코드에 기여한 후 2023년 릴리스 5.6.0에 포함된 몇 가지 변경 사항을 XZ에 도입했습니다. 그러한 변경 사항 중에는 정교한 백도어도 포함되어 있었습니다.

백도어

백도어는 상당히 복잡합니다. 우선, xz GitHub 리포지토리에서는 찾을 수 없습니다(현재 비활성화되어 있지만 중요한 것은 아닙니다). 악성 관리자는 탐지를 피하기 위해 백도어의 일부를 공개 Git 리포지토리에 푸시하는 대신, 소스 코드 타르볼 릴리스에만 포함시켰습니다. 이로 인해 종속 프로젝트의 빌드 프로세스 도중 백도어의 일부가 상대적으로 숨겨진 채 사용되었습니다.

백도어는 여러 요소로 구성되어 수차례에 걸쳐 도입되었습니다.

실행 체인도 여러 단계로 구성되어 있습니다.

  • 라이브러리의 빌드 프로세스 중에 악성 스크립트 build-to-host.m4 가 실행되어 ‘테스트’ 파일 bad-3-corrupt_lzma2.xz 를 bash 스크립트로 디코딩

  • 이후 bash 스크립트는 또 다른 ‘테스트’ 파일인 good-large_compressed.lzma에 더 복잡한 디코딩 프로세스를 실행해 다른 스크립트로 디코딩

  • 그런 다음 이 스크립트는 공유 오브젝트 liblzma_la-crc64-fast.o를 추출하고, 이 오브젝트는 liblzma의 컴파일 프로세스에 추가됨

이 과정은 분명 따라하기 어렵습니다. 시각적인 참조와 심층적인 분석을 위해 토마스 로치아(Thomas Roccia)인포그래픽 을 참조하시기 바랍니다.

공유 오브젝트 자체는 liblzma로 컴파일되며, 일반적인 함수 이름 확인 프로세스를 대체합니다. 함수 이름은 (모든) 프로세스 로딩 중에 프로세스 메모리의 바이너리 코드를 가리키는 실제 포인터로 확인됩니다. 악성 라이브러리는 함수 확인 프로세스를 방해해 OpenSSH 함수 RSA_public_decrypt 의 함수 포인터를 대체할 수 있습니다(그림 1).

그런 다음 해당 함수로 자신의 악성 함수를 가리키는데, 필리포 발소르다(Filippo Valsorda)의 리서치에 따르면 이 함수는 (공격자 여부를 확인한 후) 인증 클라이언트의 인증서에서 명령을 추출하고 이것이 실행되도록 system() 함수에 전달해 인증 전에 RCE를 달성합니다.

악성 라이브러리는 함수 확인 프로세스를 방해해 OpenSSH 함수 RSA_public_decrypt의 함수 포인터를 대체할 수 있습니다(그림 1). 그림 1: 라이브러리 후킹 프로세스

발생 가능한 영향

현재 이 백도어는 취약한 머신의 SSH 데몬에 추가되어 원격 공격자가 임의의 코드를 실행할 수 있는 것처럼 보입니다. 즉, SSH를 인터넷에 노출하는 취약한 패키지가 있는 모든 머신이 취약해질 가능성이 있습니다.

이 백도어는 SolarWinds 백도어를 능가하는 가장 중요한 침입 수단 중 하나가 될 뻔했습니다. 공격자는 감염된 배포판을 실행하는 모든 Linux 머신에 즉시 접속할 수 있었고, 여기에는 Fedora, Ubuntu, Debian이 포함됩니다. 이 사태가

일어나지 않도록 막은 사람이 바로 안드레스 프룬트였습니다. 안드레스는 소프트웨어 업데이트 후 발생한 500ms 지연 문제를 조사한 후, 이 문제를 xz 패키지로 추적해 결국 백도어를 찾아내는 데 성공했습니다.

정말 많은 우려가 발생할 상황이었지만 운이 좋았습니다. 호기심 많은 엔지니어가 백도어를 발견하지 못했다면 얼마나 오랫동안 활성 상태로 남아 있었을까요?

이전에도 이런 일이 있었다면 어떻게 되었을지도 매우 우려스럽습니다.

탐지 및 방어

버전 관리

CISA(Cybersecurity and Infrastructure Security Agency) 에서 권장하는 조치는 5.4.6과 같이 손상되지 않은 버전으로 다운그레이드하는 것입니다.

현재 시스템에 설치되어 있는 XZ Utils 또는 liblzma의 버전을 확인하는 방법은 Akamai Guardicore Segmentation Insight에서 다음 쿼리를 실행해 로드된 liblzma 라이브러리 인스턴스를 찾는 것입니다(그림 2).

  SELECT DISTINCT path AS liblzma_path
  FROM process_memory_map
  WHERE LOWER(path) LIKE "%liblzma%"
Akamai Guardicore Segmentation Insight에서 다음 쿼리를 실행해 liblzma 라이브러리의 로드된 인스턴스를 검색하면 현재 시스템에 어떤 버전의 XZ Utils 또는 liblzma가 설치되어 있는지 확인할 수 있습니다(그림 2). 그림 2: 로드된 liblzma 인스턴스 쿼리하기

또는 다음 쿼리를 실행해 설치된 버전의 패키지 관리자를 찾을 수 있습니다.

  SELECT name AS vulnerable_item, 'DEB' AS type, version
  FROM deb_packages
  WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')

  UNION

  SELECT name AS vulnerable_item, 'RPM' AS type, version
  FROM rpm_packages
  WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')

물론 취약한 자산만 표시하도록 필터링할 수도 있습니다.

  SELECT path AS vulnerable_item, "Loaded Library" AS type, '5.6%' AS version
  FROM process_memory_map
  WHERE LOWER(path) LIKE "%liblzma%5.6%"
  SELECT name AS vulnerable_item, 'DEB' AS type, version
  FROM deb_packages
  WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')
  AND version LIKE '5.6.%'

  UNION

  SELECT name AS vulnerable_item, 'RPM' AS type, version
  FROM rpm_packages
  WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')
  AND version LIKE '5.6.%'

위협 탐색

백도어는 인증만 허용하는 것이 아니라 실제로 시스템 명령을 실행하기 때문에, 프로세스 추적을 통해 이 동작을 탐지할 수 있습니다.

일반적으로 로그온하는 동안 해당 사용자를 위해 새 셸이 생성되고 기본 셸 프로세스(예: bash)가 실행됩니다. 하지만 이 백도어를 사용하면 악성 명령이 실제로 SSH 데몬 프로세스인 sshd에 의해 실행되어 비정상을 유발할 수 있습니다.

Akamai의 위협 탐색 서비스인 Akamai Hunt는 프로세스 활동의 기준선과 하위 프로세스를 지속적으로 추적하는 등의 조치로 이러한 이상 징후를 탐지할 수 있습니다.

킬 스위치

백도어에 대한 일부 분석에 따르면, 이 백도어에는 환경 변수 킬 스위치가 있는 것으로 보입니다. 시스템의 환경 변수에 yolAbejyejuvnup=Evjtgvsh5okmkAvj 키를 추가하면 백도어를 비활성화할 수 있습니다.

참조



Akamai Wave Blue

에 의해 작성

Akamai Security Intelligence Group

April 01, 2024