- xz의 sshd 백도어는 처음 드러난
RSA_public_decrypt훅을 넘어, 접근하기 더 어려운 추가 코드 경로까지 일부 트리거됨 - 공격 흐름은 조작된 명령으로
mm_answer_keyallowed훅을 설치한 뒤, 여러 개의 가짜 ssh-rsa 공개키를 이용해 명령 버퍼를 조립하는 방식임 - 이 “magic buffer”에는 추가 백도어 명령과 ed448 서명 2개가 들어가며, 서명에는 호스트키 SHA256 다이제스트와 KEX의
session_id가 반영됨 - 현재 PoC는 크게 수정한 paramiko SSH 클라이언트 라이브러리를 사용하며, 명령
0x03은system()기반 RCE와 uid/gid 설정을 가능하게 함 - 인증 우회도 확인됐고,
mm_keyallowed_backdoor cmd 1로mm_answer_authpassword응답을 덮어쓰면 임의의 비밀번호로 로그인할 수 있음
더 깊게 연결된 백도어 경로
- xz sshd 백도어에는 처음 알려진 동작보다 더 깊은 기능이 포함돼 있으며, 일부는 직접 트리거된 상태임
- 핵심 진입점은
RSA_public_decrypt훅임- 올바르게 제작한 명령을 보내면
sshd의mm_answer_keyallowed함수에 또 다른 훅이 설치됨 - 이후 여러 개의 가짜
ssh-rsa공개키를 제공해 “magic buffer”를 조각내어 합침
- 올바르게 제작한 명령을 보내면
- “magic buffer”는 추가 백도어 명령을 담는 버퍼임
- 내부에는 ed448 서명 2개도 포함됨
- 이 서명들은
RSA_public_decrypt쪽 백도어 서명처럼 호스트키의 SHA256 다이제스트로 salt 처리됨 - 마지막 서명은 SSH 초기 키 교환(KEX)에서 파생된 0x20바이트
session_id도 반영함
PoC와 인증 우회
- 현재 PoC는 크게 수정한 paramiko SSH 클라이언트 라이브러리로 구현됨
- 현재 트리거된 명령은 이 코드 경로의
0x03임system()을 통한 기본 RCE를 다시 가능하게 함- uid/gid 설정도 지원함
- 아직 이해해야 할 코드가 더 남아 있으며,
mm_answer_keyallowed백도어 명령 중 하나가 결국mm_answer_keyverify도 훅하기 때문에 대화형 세션의 전체 인증 우회가 가능해 보임 - 이후 인증 우회가 확인됨
mm_keyallowed_backdoor cmd 1은mm_answer_authpassword의 응답을 사용자 지정 값으로 덮어쓸 수 있음- 응답을
{ u32(9), u8(13), u32(1), u32(0) }로 설정하면 어떤 비밀번호로도 로그인 가능함