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이 있음. 이들은 소프트웨어 의존성에 대한 보안 취약점을 식별하는 데 도움을 줌.
- 이 기술을 도입할 때는 소프트웨어 공급망의 모든 단계에서 보안을 강화해야 함. 이를 통해 득은 시스템의 안전성을 높이는 것이고, 실은 공격자가 이러한 방법을 사용할 경우 탐지가 어려울 수 있다는 점임.
- 이 사건은 오픈소스 커뮤니티의 강점이자 약점을 모두 드러냄. 커뮤니티 기반의 검토와 기여는 프로젝트의 성장과 보안에 중요하지만, 동시에 악의적인 기여자에 의한 위험도 존재함.