어읽로꾸거
[CVE-2024-3094] XZ 백도어 이슈 동작 정리 (SSH) 본문
오픈소스 압축 유틸리티 xz의 보안 이슈(백도어)로 인하여 이번달 초에 이슈가 된 적이 있었다.
이 보안 이슈는 기존의 의도되지 않은 오픈소스의 보안 이슈와 달리 악의적으로 계획된 보안 이슈 라는 점에서 차이점이 있다.
(악의적 어태커가 xz 프로젝트에 22년부터 지속적으로 커밋을 하며 오픈소스에 기여하는 척을 하며 관리자에게 신뢰를 얻고, 결국 오픈 소스 관리 권한을 얻어 24년 2월 백도어가 담긴 tarball 를 release 함, 그리고 3월 29일에 MS 개발자에 의해 발견 됨. 백도어는 소스코드에 포함되어 있던게 아닌, 테스트 파일에 포함되어 있었고, 빌드 과정에서 해당 백도어를 포함하여 빌드하도록 빌드 설정 파일을 넣음)
이 글에선 해당 XZ가 어떤 식으로 백도어가 동작하는 지에 대한 방법 위주로 설명함.
우선, MS의 개발자 Andres Freund는
1. 상당한 양의 CPU 점유로 인해 SSH 로그인이 실패하는 점
2. SSH 로그인 시도시 500ms 정도 증가한 점
을 발견, 원인을 파악하는 중에 이 백도어를 발견했다고 함.
XZ의 백도어와 SSH는 무슨 관계가 있었을까?
악성 바이너리는 설치 과정에서, 오염된 liblzma_la-crc64-fast.o 를 /libs 폴더에 저장한다. (liblzma 는 데이터 압축 및 해제를 하는 라이브러리로, LZMA 알고리즘을 통해서 데이터를 압축 해제함)
업스트림 SSH의 경우, liblzma에 대한 직접적인 의존성은 없으나, 다운스트림 SSH 에서 liblzma에 대한 의존성이 존재함. 이 라이브러리에서, 백도어로 동작하는 경우는 sshd 함수에서 호출할 때 만 동작하도록 구현되었음
오염된 liblzma 라이브러리는, RSA_public_decrypt 함수를 후킹하여, sshd에 수신되는 서명을 중간에서 확인함. 이때, 검증하는 RSA 서명이 공격자의 서명일 경우, system에서 실행되도록 하고, 그게 아닌 경우엔 정상적인 과정을 거치도록 함
결론
1. 오염된 XZ는 liblzma 라이브러리를 생성함
2. ssh는 오염된 liblzma 라이브러리를 이용하여 RSA decrypt 시 이용함
3. 오염된 liblzma의 RSA decrypt로직은 ssh로 오는 페이로드를 확인하여, 공격자가 서명한 페이로드인 경우(= 공격자의 명령) 명령을 실행하도록 동작함
'정리' 카테고리의 다른 글
[Python] PIP 모든 모듈 삭제 (0) | 2023.12.11 |
---|---|
[네트워크 프로그래밍] 3. Stream - BufferedStream, DataStream, CharacterStream (0) | 2022.09.28 |
[컴퓨터회로] 2. 불 대수 (0) | 2022.09.14 |
[CSS] z-index 가 작동하지 않을 때 (0) | 2022.09.13 |
[네트워크 프로그래밍] 2. Stream - InputStream (0) | 2022.09.13 |