싸늘하다. XZ에 백도어가 날아와 꽃힌다

peterTheAnteater·2024년 9월 14일
5

테쓸신잡

목록 보기
3/5

하지만 걱정하지 마라. 손은 눈보다 빠르니까.

동작 그만. 백도어냐?

이번 이야기는 불과 7개월전에 일어난 XZ Utils 백도어 사건입니다. 이 사건은 자원봉사자들로 이루어진 오픈소스 프로젝트들이 어떻게 전세계에서 사용하는 OS들에 영향을 가하고 문제를 일으킬수 있는지 보여준 사건입니다.

XZ Utils가 뭐임?

XZ Utils는 유닉스 기반 OS들과 DOS 기반 OS (버젼 5.0.0 이후)들에서 사용되는 (맥, 리눅스, 윈도우, 등등..사실상 모든 OS) 파일 압축 및 해제 툴입니다.

보통 lzma로 끝나는 파일이나 xz로 끝나는 파일들을 해제 하는데 lzma는 레거시 에서 사용되는 파일 형식이고 요즘은 xz로 압축을 하고 해제를 합니다.

실생활에서는 많이 보이지 않지만 시스템 내부에서는 사용이 많이 됩니다.

보이는것이 다 가 아닙니다

사건 전말

XZ Utils는 많은 다른 오픈 소스 소프트웨어와 같이 개발자들의 자원봉사로 유지되는 소프트웨어였습니다.


Jia Tan Github 로고

그 중 Jia Tan이라는 개발자가 사건이 터지기 전 2년전부터 버그 해결 및 개선안들을 레포지토리에 커밋하기 시작합니다.

노예 환영

다른 오프소스 컨트리뷰터 처럼 정상적인 코드들과 개선안들을 제시하며 2년동안 프로젝트 주인들에게서 믿음을 쌓게 됩니다.

처음에는 커밋을 할수있는 권환을 받고

그 이후에는 패키지 출시 권환도 받게 됩니다.

그후 2023년 말에 Jia Tan이라는 개발자의 수정안이 담긴 패키지 v5.6.0 출시가 되죠.

문제의 시발점

사건 시작

2024년 3월 마이크로소프트 소속 겸 PostgreSQL 개발자인 Andres Freund라는 개발자가 이상한점을 발견합니다.

평소와 같이 루틴 퍼포먼스 테스트를 돌리는중 평소보다 높은 CPU사용율을, 특히 sshd (ssh daemon)에서 사용율이 높아진거를 확인합니다.

Sshd는 외부에서나 내부에서 ssh접속을 시도할때 사용되는 데몬으로 아주 중요한 데몬입니다. (저희가 port 22번으로 인스턴스 접속을 할때 돌아가는 데몬입니다)

이점이 이상한다고 생각한 Freund씨는 이 부분을 더 파고 들어봅니다.

그리고 나온 결론은 sshd를 사용하는 백도어가 최근에 출시된 리눅스 버젼에 포함이 되어있다는 점이었고 그 부분을 Linux Distro 벤더들한테 알립니다.

평생 mysql 대신 postgresql 쓰겠습니다

사건 내용 - 백도어

그리고 많은 연구와 확인을 통해 새로운 XZ Utils에 백도어가 심어져있는걸 Freund씨는 확인을 합니다.

이 백도어는 아주 치밀하게 계획되고 추가가 되어있었습니다.

  1. 원래 퍼블릭 레포지토리에는 백도어 코드가 포함이 안되어있었고 Tarball Release (배포 압축 패키지)에만 포함이 되어있었습니다.
  2. 여러 커밋들로 나눠서 백도어를 조금씩 조금씩 추가했습니다.
  3. 수많은 단계로 나눠져 있어서 그냥 보는거로는 알아내는게 불가능했습니다.

백도어는 아래와 같이 되어있었습니다.

  1. build-to-host.m4라는 실행 파일이 라이브러리가 빌드될때 실행이 됩니다.
  2. 위 파일이 실행을 하면 bad-3-corrupt_lzma2.xz라는 테스트 파일을 bash 실행 파일로 디코딩 됩니다.
  3. 그리고 위 실행파일은 또 good-large_compressed.lzma라는 테스트 파일을 디코딩하고 그 디코딩된 파일은 bash 실행 파일 임으로 또 실행이 됩니다.
  4. 그리고 그 실행 파일은 liblzma_la-crc64-fast.o라는 오브텍트 파일을 liblzma 라이브러리 (xz utils에 포함된 라이브러리)를 컴파일 할때 복사해서 넣습니다.
  5. 그 이후 liblzma라는 라이브러리가 실행이 되는순간 아래와 같이 백도어가 가동이 됩니다. 더 자세한 내용은 여기에서 보시면 됩니다.

이 백도어는 결국 허가받지 않은 외부 유저가 내부로 들어와 컴퓨터를 조종할수 있도록 해주는 백도어였기 때문에 sshd (외부 접속) CPU사용량이 늘어났던겁니다.

이정도 백도어를 만들려면 얼마나 똑똑한거야

사건 내용 - 여파

다행이(?)도 이 패키지가 전세계에 많을 영향을 주지는 못했습니다.

그 이유는...

  1. 새로운 xz 패키지가 포함된 리눅스 버젼들은 아직 Distro Vendor들의 개발 버젼 (Development) 에 포함이 되어있던 상태였습니다.
  2. 백도어가 RPM이나 Debian쪽에서만 실행이 되도록 설정이 되어있었습니다.
  3. 생각보다 빨리 백도어를 찾았습니다

사실 2024년도 최악의 사이버 보안 사건이 될뻔 했지만 아직도 2024 부동의 1위 CrowdStrike.. 내 주식 ㅠ 빠른 대처 덕분에 큰 문제가 되지는 않았습니다.

(참고로 고점 매수자입니다)

하지만

리눅스 배포 벤더들은 개발하고 있던 테스트 버젼이나 개발 버젼들은 다 유기하고 새롭게 출시를 해야됐으며 XZ패키지를 포함한 수 많은 패키지들이 롤백이 되어야했습니다.

Canonical에서 관리하는 우분투같은 경우에는 출시일이 밀렸습니다.

당시 문제가 있던 패키지 버젼들은 v5.6.0과 v5.6.1이었음으로 그 둘을 포함한 패키지들은 다 한번씩 롤백이 됐다고 생각하시면 됩니다.

사건 분석

그래서 어떻게 이렇게 쉽게 전세계를 해킹할수 있는 백도어가 쉽게 모든 리눅스 버젼에 탑재가 될수 있었을까요?

Npm left-pad사건을 보시면 알수 있듯이 저희가 사용하는 소프트웨어들은 대부분 오픈소스 패키지들을 포함하고 있고 그 패키지들은 소수의 자원봉사자들이 운영을 합니다.

저희는 대부분 모르고 저희가 사용하고 있는 소프트웨어들은 대부분 그저 "빙산의 일각" 이죠.

이 사건이후로 오픈소스 개발 커뮤니티들에서는 오픈소스의 취약점의 대해서 많은 말이 나왔습니다.
물론 그 말은 log4j 취약점때도 말이 나왔습니다

그냥 죽여줘

결론

오픈소스 프로젝트들은 무료고 발전이 빠르다는 장점이 있지만 그만큼 보안 리스크가 있습니다. 아무리 관리를 잘 한다고 해도 결국 저희는 사람입니다.
돈 받고 파는 프로그램들도 전세계를 마비시키는 사건을 터트리는데

저런사건이 터진다고 해서 몇년 정도는 오픈소스 컨트리뷰션이 힘들어질수는 있어도 그 이후에는 또 아무일 없듯이 그 전 으로 돌아가지 않습니까?

그럼 이제 또 터지는겁니다.

그럼 이런사건이 끊이는걸 저희가 막을수는 없으니 개발자로서 뭘 해야될지 생각을 해보면.

  1. 필요한거는 무조건 갖다 쓰는게 아니라 만들어 쓸수 있으면 만들어서 사용한다
  2. 문제가 없는지 꼭 확인을 한다. gpt가 쓰라고 해서 설치하지 않는다
  3. 회사같은 경우: 내부 툴을 만들어서 사용한다

사실 많은 회사들은 오픈소스로 공개를 안하는 툴이나 프로젝트들이 많습니다.

사람이 관리를 하는거는 문제가 생길수밖에 없습니다. 사람은 누구나 실수를 할수있다고 하지 않습니까?

오픈소스가 꼭 문제만 있는거는 아닙니다.

모두가 관여를 할수있으니 그만큼 오류를 찾을수 있는 인원도 많다는 거죠? 진짜로 이 점 때문에 XZ Utils 백도어도 빨리 찾아서 해결하지 않았습니까? 집단지성은 위대합니다.

결국 저희가 조심을 하고 저런 문제점을 직접 찾아서 이름을 남겨보는거도 좋은거같습니다.

일부러 트롤을 하는 사람들도 있기에 더 조심을 해야합니다

긴 글 읽어주셔서 감사합니다!

profile
소프트웨어 개발과 밀당하는 개발자

0개의 댓글

관련 채용 정보