Someone on Torrent Sites Kept Fucking with My Sonarr
토렌트에 올라온 가짜 South Park 파일을 분석해 보니 정보 탈취 악성코드였습니다
Sonarr가 공개 토렌트에서 South Park 에피소드 이름을 붙인 실행 파일을 잡아들인 뒤, 작성자가 파일을 역공학해 정보 탈취 악성코드임을 확인합니다. 브라우저 비밀번호와 쿠키, 암호화폐 지갑, 개발자 자격 증명 등을 훔치는 방식과 qBittorrent, Sonarr, Radarr에서 실행 파일을 차단하는 방법을 설명합니다.
- 주제
에디터 노트
악성코드의 표적과 실행 방식은 구체적으로 제시됐고, 601개 문자열을 복호화한 절차도 재현 가능한 분석 흐름으로 설명합니다. 다만 글에 적힌 분석만으로 실제 감염 피해나 유포 주체까지 확인된 것은 아닙니다. 차단 방법은 한 가지로 정리되지 않습니다. qBittorrent에서 실행 파일 자체를 거르는 방식은 다운로드를 막고, Sonarr의 인덱서별 Executables 설정은 실패 처리와 재검색을 맡깁니다. 댓글에서도 Sonarr가 파일을 검사하도록 하자는 의견과 다운로드 단계에서 막자는 의견이 갈립니다. 공개 트래커 외에 Usenet에서도 비슷한 사례를 봤다는 댓글이 있어, 트래커를 바꾸는 것만으로 해결된다고 보기는 어렵습니다.
AI 요약
Sonarr가 공개 트래커에서 South Park 에피소드로 표시된 실행 파일을 가져왔습니다. 파일에는 실제 영상이 없었고, qBittorrent는 다운로드한 데이터가 0바이트인데도 작업을 완료로 표시했습니다. 글쓴이는 Sonarr에서 해당 토렌트를 차단한 뒤 파일을 다시 받아 분석했습니다.
실행 파일과 페이로드 분석
파일 앞부분은 118KB짜리 x64 PE 실행 파일이며, 뒤에 붙은 886MB는 무작위 데이터입니다. 글쓴이는 파일 크기를 키워 일부 검사기가 분석을 포기하게 하려는 목적이라고 설명합니다. 실행 파일은 파일 끝의 64바이트에서 키와 ChaCha20 nonce, 페이로드 크기와 플래그를 읽습니다. 이어 파일에 숨긴 페이로드를 복호화하고, 메모리에 직접 PE를 매핑한 뒤 PEB의 ImageBaseAddress를 바꾸고 실행합니다. 실행 파일은 페이로드를 디스크에 쓰지 않습니다.
첫 실행 파일에는 XOR 연산을 반복해 디컴파일을 어렵게 만드는 코드가 들어 있습니다. 그러나 키가 파일 안에 있어 Python으로 페이로드를 추출할 수 있었습니다. 두 번째 PE는 문자열을 암호화하고 임포트를 런타임에 해석합니다. 글쓴이는 IDA에서 672개 문자열 호출 지점을 모은 뒤 Unicorn으로 호출 직전 명령을 에뮬레이션해 레지스터의 키와 IV, 암호문을 추출했습니다. 그 결과 601개 문자열을 복호화했습니다. 문자열별 암호화에는 AES-128-CTR을 사용했고, AES S-box는 RC4로 숨겼습니다.
훔치는 정보와 통신 주소
복호화된 문자열에는 Chrome, Edge, Firefox 등 브라우저의 비밀번호와 쿠키, 자동 완성 데이터가 포함됩니다. Chrome의 App-Bound Encryption을 다루는 코드도 발견했습니다. Exodus, Electrum, Ledger Live 같은 암호화폐 지갑과 KeePass, Bitwarden 등 비밀번호 관리자도 표적입니다. Telegram과 Discord 토큰, Steam과 Roblox 계정 정보, SSH 키, AWS와 Azure 자격 증명, Kubernetes와 Docker 설정, 원격 접속 도구 정보도 수집 대상입니다. Outlook과 Thunderbird 데이터, VPN 설정, OBS 설정, Sticky Notes와 바탕 화면 문서도 포함됩니다. 수집한 정보는 내장된 zlib로 압축해 외부로 보냅니다.
통신 서버 주소는 YouTube 채널과 GitHub Gist에서 가져옵니다. 글쓴이는 채널 이름이 bubblegym이며 2026년 9월 14일에 만들어졌다고 적었습니다. 문자열을 Base64로 디코딩하고 키보드 자판을 두드려 만든 문자열과 XOR하면 주소가 나옵니다. 같은 주소가 실행 파일에도 기본값으로 들어 있어, 글쓴이는 원격 주소를 바꾸려는 장치와 바이너리에 주소를 넣은 방식이 서로 맞지 않는다고 지적합니다.
제시한 차단 방법
글쓴이는 qBittorrent의 제외 파일 이름에 *.exe, *.scr, *.lnk, *.bat, *.cmd를 추가하라고 권합니다. Sonarr와 Radarr에서는 실행 파일이 보이면 토렌트를 차단하고 다운로드 클라이언트에서도 제거하도록 설정합니다. 특정 트래커가 이런 파일을 반복해서 제공하면 Prowlarr에서 해당 트래커의 우선순위를 낮추거나 제외하라고 덧붙입니다.
Hacker News 반응
- @bhaney — Sonarr의 Settings > Indexers > 해당 인덱서 > Fail Downloads에서 Executables를 추가하면 이런 다운로드를 실패 처리하고 차단 목록에 넣은 뒤 새 검색과 다운로드를 시도합니다.
- @c-hendricks — 실행 파일 이름을 거르는 기능은 Sonarr와 Radarr가 오래전에 구현했어야 합니다. 인덱서 설정에서 처리하면 Prowlarr 사용자에게 불편하고, 릴리스 점수를 낮추는 우회책은 제목에서 .exe만 지우는 식으로 피해 갈 수 있습니다.
- @Dylan16807 — 해당 설정은 파일 이름을 검사하며 토렌트 제목을 검사하지 않습니다.
- @comrade1234 — qBittorrent에서 .exe와 .scr, .zip 등을 다운로드하지 않게 설정할 수 있습니다. 며칠마다 qBittorrent 작업을 정리해야 Sonarr가 다시 검색하는 불편은 있습니다.
- @MisterMunchkin — qBittorrent에서 막는 대신 다운로드는 허용하고 Sonarr가 실행 파일을 감지해 토렌트를 차단하도록 해야 합니다.
- @ball_of_lint — 악성 파일을 다운로드하게 두는 전략은 좋지 않아 보입니다.
- @joloooo — Usenet에서는 이런 일을 보지 못했습니다. 토렌트에서 더 흔한지 궁금합니다.
- @redrove — 자신도 sabnzbd에서 같은 일을 겪어 실행 파일 규칙을 추가했습니다. Linux 컨테이너에서 실행 파일을 받는 상황이라 황당했다고 합니다.
- @bhaney — 공개 토렌트에서 훨씬 흔하지만 Usenet에서도 가끔 본다고 합니다.
- @LoganDark — Gist와 YouTube를 이용하는 이유는 서버가 차단될 때 주소를 바꿀 수 있기 때문입니다. 바이너리에 넣은 주소는 대체 주소나 단속 대응 시간을 확보하는 용도일 수 있다고 설명합니다.
- @rbran — ITorrent라는 토렌트 사이트가 침해된 사건과 관련됐을 가능성을 제기합니다. 그 사이트에서는 800MB의 패딩을 붙이고 폴더 아이콘으로 위장한 실행 파일 토렌트가 유포됐다고 합니다.
- @trog — Windows Defender가 이런 정보 탈취 행위를 탐지해야 하지 않느냐고 묻습니다.
- @queenkjuul — 자신의 Windows Defender는 토렌트 클라이언트에서 디스크로 파일이 들어오자 악성코드로 판정해 삭제했다고 합니다.
- @bstsb — 글에서 흥미로운 점은 토렌트에 악성코드가 올라왔다는 사실보다 작성자가 실행 파일을 역공학해 작동 방식을 확인한 부분이라고 봅니다.
- @internet2000 — Sonarr 설정 문제라며 제대로 설정하라고 지적합니다.
- @SCНiM — 반복되는 XOR 연산은 샌드박스가 분석을 끝내지 못하도록 시간을 소모시키는 목적일 수 있다고 반박합니다.
원문: thereallo.dev / 번역·요약: Trawling