Bash 단계의 난독화 설명
- xz/liblzma에 백도어가 발견되었음. OpenSSH 서버에 영향을 미침.
- 백도어가 포함된 이진 파일보다 초기 bash 부분과 사용된 간단하지만 영리한 난독화 방법에 주목.
- 이 글은 bash 단계가 어떻게 난독화되고 추출되는지에 대한 설명.
시작하기 전에
- xz/liblzma의 두 버전(5.6.0과 5.6.1)이 영향을 받음. 미세한 차이가 있음.
- bash 부분은 세 단계(혹은 네 단계?)로 나뉘며, 각 단계를 Stage 0부터 Stage 2로 명명.
- "Stage 3"에 대해서도 언급할 예정이지만, 아직 완전히 구현되지 않았을 수 있음.
- 난독화/암호화된 단계와 이후의 이진 백도어는 두 테스트 파일에 숨겨져 있음.
Stage 0
- m4/build-to-host.m4 파일에서 시작. 이 코드는 빌드 과정 중 어딘가에서 실행되어 Stage 1 스크립트를 추출.
- 테스트 파일에서 바이트를 읽어 표준 출력으로 전달하고,
tr
명령어를 사용하여 문자를 다른 문자로 매핑.
Stage 1
- "####Hello####"로 시작하는 bash 파일. Linux에서만 실행되도록 함.
-
eval
을 사용하여 config.status에서 srcdir을 추출하고, 특정 바이트를 건너뛰고 출력하는 복잡한 head
명령어 체인을 포함.
-
tr
명령어를 사용하여 단순 치환 암호를 적용하고, xz
명령어로 압축 해제 후 실행.
Stage 2
- Stage 2는 실제 컴파일 과정을 수정하는 bash 스크립트.
- "확장/패치" 시스템이 있는 것처럼 보이며, 테스트 파일을 계속 수정하지 않고도 새로운 스크립트를 실행할 수 있도록 함.
-
.o
파일을 추출하여 컴파일/링킹 과정에 통합하는 코드가 포함됨.
요약
- 이 과정은 매우 숨겨져 있고, 표준 명령줄 도구만을 사용하여 복잡하게 구성됨.
- 3단계 실행과 "확장" 시스템을 통해 미래에 대비하고, 이진 테스트 파일을 다시 변경할 필요가 없도록 설계됨.
- 이러한 공격이 우연히 발견되었다는 사실은 보안 커뮤니티에 많은 의문을 남김.
GN⁺의 의견
- 이 기사는 소프트웨어 보안과 공급망 공격에 대한 중요성을 강조함. 소프트웨어 빌드 과정에서 발생할 수 있는 취약점을 인식하고, 코드 검토와 보안 감사의 중요성을 상기시킴.
- 난독화 기술과 멀티 스테이지 공격 방법은 공격자가 얼마나 정교하게 시스템을 침투할 수 있는지 보여줌. 이러한 기술은 보안 전문가들에게도 교육적 가치가 있음.
- 비슷한 기능을 제공하는 다른 보안 도구나 프로젝트로는 OWASP의 Dependency-Check나 Sonatype의 Nexus Platform이 있음. 이들은 소프트웨어 의존성에 대한 보안 취약점을 식별하는 데 도움을 줌.
- 이 기술을 도입할 때는 소프트웨어 공급망의 모든 단계에서 보안을 강화해야 함. 이를 통해 득은 시스템의 안전성을 높이는 것이고, 실은 공격자가 이러한 방법을 사용할 경우 탐지가 어려울 수 있다는 점임.
- 이 사건은 오픈소스 커뮤니티의 강점이자 약점을 모두 드러냄. 커뮤니티 기반의 검토와 기여는 프로젝트의 성장과 보안에 중요하지만, 동시에 악의적인 기여자에 의한 위험도 존재함.