압축 파일 하나가 4단계를 거쳐 백도어가 되기까지 — WinRAR 악성코드 리버스엔지니어링 사례
압축 파일 하나가 4단계를 거쳐 백도어가 되기까지 — WinRAR 악성코드 리버스엔지니어링 사례
분류: Security · 바이너리·리버싱 · 악성코드 분석 [정보성]
덱. 한 보안 분석가가 트레이딩 커뮤니티에 올라온 “비트코인 전략 파일”을 열었다가 4단계로 이어지는 악성코드 유포 사슬을 발견했습니다. 시작점은 WinRAR의 파일 경로 처리 결함(CVE-2023-38831)을 악용한 조작된 압축 파일이었고, 끝은 감염 PC의 정보를 훔쳐가는 원격 제어 채널이었습니다. 이 글은 그 분석 과정을 통해 “왜 파일 포맷 파서의 사소한 판단 오류가 치명적인 침해로 이어지는가”를 짚습니다.
리드
압축 유틸리티나 문서 뷰어처럼 사용자가 별생각 없이 여는 프로그램은, 파일 안의 이름·경로·구조를 해석하는 파서(parser)를 반드시 갖고 있습니다. 이 파서가 “같은 이름의 폴더와 파일이 동시에 있으면 어느 쪽을 열 것인가” 같은 애매한 상황을 사람이 기대하는 것과 다르게 처리하면, 공격자는 그 틈을 이용해 사용자가 클릭한 파일이 아닌 다른 파일을 실행시킬 수 있습니다. 이번 사례는 그 틈이 실제 유포 캠페인에서 어떻게 다단계 감염 사슬로 확장되는지를 보여주는 교과서적인 예입니다.
핵심 사실 요약
- 1단계 — 이름이 같은 폴더의 함정. 분석 대상 압축 파일은 CVE-2023-38831로 알려진 WinRAR의 경로 처리 결함을 이용했습니다. 이 결함은 파일명 끝에 공백을 붙이고, 그 공백 포함 이름과 똑같은 이름의 폴더를 압축 파일 안에 함께 넣어두면, 사용자가 무해해 보이는 파일(이 사례에서는 스크린샷을 가장한
.jpg)을 열었을 때 WinRAR가 실제로는 같은 이름의 폴더 안에 있는 다른 파일(명령 스크립트)을 찾아 실행하게 되는 구조입니다. 이 결함 자체는 이미 공개적으로 분석되어 패치와 개념증명(PoC)이 존재하는 사안이었고, 이번 사례는 그 알려진 기법이 실제 유포에 재사용된 경우였습니다. - 2단계 — 위장된 추출 프로그램. 실행된 스크립트는 겉보기엔 아이콘 파일(
.ico)이지만 실제로는 윈도우 실행파일(PE)이었고, 내부에 마이크로소프트 캐비닛 압축 포맷(MSCF)으로 다음 단계 파일들을 품고 있었습니다. 이 파일의 메타데이터는 자신을 Dropbox 프로그램인 것처럼 위장하고 있었고, 실행 시 파일 압축 해제 애니메이션을 보여줘 “정상적으로 압축이 풀리는 중”이라는 착각을 유도했습니다. 분석가는 정적 분석 도구(파일 구조·리소스를 살펴보는 도구)와 디스어셈블러(기계어를 사람이 읽을 수 있는 형태로 바꿔주는 도구)를 병행해, 실제로는 은닉된 실행파일을 임시 폴더에 풀어놓는 동작이라는 걸 확인했습니다. - 3단계 — 문자열을 흩어 숨기기. 다음 단계 실행파일들은 문자열(경로, 명령어 등)을 16진수로 인코딩해 코드 안에 흩어 놓고, 실행 시점에만 복호화해 사용했습니다. 분석가는 디버거(프로그램을 한 단계씩 멈춰가며 관찰하는 도구)로 실행 흐름을 따라가며 이 문자열들이 조립되는 과정을 관찰했고, 최종적으로 레지스트리(윈도우 설정 저장소)에 악성 COM 객체를 등록하고 그 객체를 통해 다음 단계 파일을 로드하는 절차라는 걸 확인했습니다.
- 4단계 — 안티 분석 기법이 걸린 최종 페이로드. 마지막 단계 파일은 정크 코드·안티 디버깅 트릭 등으로 정적 분석을 극도로 방해하도록 만들어져 있었습니다. 분석가는 코드를 직접 뜯어보는 대신 동작을 모니터링하는 도구(프로세스가 어떤 파일·레지스트리·네트워크에 접근하는지 기록하는 도구)로 전환해, 자동 실행 등록(재부팅 후에도 살아남는 지속성 확보)과 함께 특정 IP·포트로의 TCP 연결이 발생한다는 걸 관찰했습니다.
- 정보 탈취 채널의 정체. 패킷을 들여다본 결과, 감염된 PC는 키보드 배열·사용자 이름·설치된 백신·현재 활성 창 제목 등 시스템 정보를 원격 서버로 전송하고, 이후 주기적으로 “지금 어떤 창이 열려 있는지”를 보고하는 구조였습니다. 분석가는 이 통신 규약을 관찰해 재현했지만, 원격 명령 실행(리버스 셸 등)에 해당하는 기능은 확인하지 못했다고 밝혔습니다 — 다시 말해 이 샘플의 확인된 범위 내 목적은 정찰·정보 수집에 가까웠습니다. ⚠️미확인 — 더 넓은 기능(파일 유출, 추가 페이로드 다운로드 등)이 있었는지는 원문 분석 범위 밖이라 이 초안에서 단정하지 않습니다.
짧은 논평
이 사례에서 눈여겨볼 지점은 “이미 알려진 취약점”이라는 사실 자체입니다. CVE-2023-38831은 발견 당시 이미 공개 분석과 패치, 개념증명 코드까지 나와 있었습니다. 그런데도 이 결함을 이용한 파일이 몇 달 뒤 트레이딩 커뮤니티에서 실제로 유포되고 있었다는 건, 패치가 존재한다는 것과 그 패치가 실제로 적용됐다는 것 사이에는 간극이 있다는 걸 보여줍니다. 저희가 다른 글에서 다루는 “패치 완전성” 논의와 같은 축입니다 — 취약점이 알려지고 고쳐진 뒤에도, 오래된 버전의 소프트웨어가 남아 있는 한 그 결함은 계속 무기가 됩니다. 또 하나는 단계별 위장 전략입니다. 각 단계가 서로 독립적인 파일 형식(아이콘, 캐비닛 아카이브, OCX)을 가장하며 최종 목적을 잘게 쪼개놓은 구조는, 정적 시그니처 하나로는 탐지하기 어렵게 설계돼 있습니다. 방어자 입장에서 이런 다단계 드로퍼(dropper, 후속 악성코드를 내려받아 실행하는 초기 단계 실행파일)를 잡으려면 파일 하나의 정적 특징이 아니라 “압축 유틸리티가 왜 임시 폴더에 새 실행파일을 쓰고 레지스트리 자동실행을 등록하는가” 같은 행위 기반 관찰이 결정적입니다.
References / 참고자료
- Josh Terrill, hacked.codes, “Reverse Engineering & Analyzing WinRAR Zero-Day Malware” — 이 글이 재구성한 원 분석. 4단계 악성코드 사슬의 리버스엔지니어링 절차를 다룸. https://hacked.codes/2024/reverse-engineering-analyzing-winrar-zero-day-malware/
- Google Project Zero, “0day in the wild: CVE-2023-38831” — 원문이 인용한 WinRAR 경로 처리 결함의 1차 분석. https://googleprojectzero.github.io/0days-in-the-wild//0day-RCAs/2023/CVE-2023-38831.html
이 글은 위 원 분석을 우리 관점에서 다시 쓰고 짧은 논평을 더한 정보성 초안입니다. 특정 문장·스크립트·디코딩 코드를 그대로 옮기지 않았으며, 작동하는 재현 절차는 싣지 않았습니다. ⚠️미확인 표시 항목은 발행 전 독립 팩트체크에서 확증·정정되어야 합니다.