2025년 12월 25일, Trust Wallet의 Chrome 확장 프로그램(v2.68)이 심각한 보안 침해를 당해 약 850만 달러 상당의 사용자 자산이 탈취되었습니다.
근본 원인은 확장 프로그램에 삽입된 악성 백도어로, 프로젝트의 표준 배포 프로세스를 침해한 공급망 공격에서 비롯되었습니다. 삽입된 백도어 메서드는 사용자의 시드 구문을 공격자가 제어하는 서버에 업로드하여, 해당 특정 버전의 확장 프로그램을 통해 생성되거나 가져온 모든 지갑을 위험에 노출시켰습니다. 공격자는 이후 여러 체인에서 사용자 자산을 탈취하고 이를 비KYC 거래소로 이동시켰습니다.
배경
Trust Wallet의 Chrome 확장 프로그램은 일반적인 자기 수탁(self-custody) 지갑으로 설계되어, 사용자가 새 지갑을 생성하거나 기존 지갑을 가져올 수 있습니다. 모든 암호화폐 지갑의 핵심에는 니모닉이라고도 불리는 시드 구문이 있습니다. 시드 구문은 지갑 개인 키를 사람이 읽을 수 있는 형태로 표현한 것입니다. 이 시드 구문은 지갑과 연결된 모든 개인 키를 결정론적으로 도출할 수 있어, 사용자가 보유한 가장 중요한 비밀 정보입니다. 시드 구문에 접근할 수 있는 누구든 모든 지갑 자산에 대한 완전한 통제권을 갖게 됩니다.
시드 구문이 안전하게 자기 수탁될 수 있도록, Trust Wallet의 확장 프로그램은 암호화 알고리즘을 사용하여 시드 구문을 암호화된 형태로 로컬에 저장합니다. 시드 구문은 적절한 인증을 통한 정당한 사용자 요청이 있을 때만 복호화될 수 있습니다. 이 과정에서 사용자는 설정한 방식에 따라 생체 인증 또는 비밀번호로 인증해야 합니다. 정상적으로 작동하는 자기 수탁 지갑에서 복호화된 시드 구문은 로컬 확장 프로그램 환경 내에서만 사용되며, 외부 서버로 전송되지 않습니다.
취약점 분석
취약점은 생체 인증 및 비밀번호 방식 모두를 통한 지갑 잠금 해제 흐름에서 비롯됩니다. 잠금 해제 작업 시, 시드 구문이 분석 데이터로 수집되어 합법적인 엔드포인트로 위장한 공격자 제어 도메인으로 전송됩니다. 두 방식의 악용 메커니즘이 동일하므로, 취약점을 설명하기 위해 생체 인증 경로를 예시로 살펴보겠습니다.
다음 분석 및 스크린샷은 역난독화된 소스 코드를 기반으로 합니다.
복호화된 시드 구문 획득
악성 코드는 사용자 인증 이후 지갑 잠금 해제 및 시드 구문 복호화를 처리하는 파일 8423.js의 잠금 해제 함수에 삽입되었습니다. 잠금 해제 로직에서 공격자는 겉으로는 무해해 보이는 분석 데이터 수집 메커니즘을 삽입했습니다. 다음 코드 스니펫에서 강조된 것처럼, 시드 구문 획득은 정상 인증 흐름 직후에 배치되었습니다. 이 코드는 모든 지갑을 순회하며 복호화된 시드 구문을 추출하고, 이를 errorMessage라는 기만적인 이름의 변수에 저장합니다. 이 데이터는 분석 이벤트 객체의 error 속성에 포함됩니다.
동일한 악성 패턴이 비밀번호 잠금 해제 흐름(485-527번 줄)에도 나타나며, 생체 인증을 비밀번호 기반 복호화로 대체합니다.
민감한 데이터 전송
시드 구문이 수집되어 분석 데이터로 패키징되면, PostHog 분석 인프라를 통해 전송됩니다. 이 인프라는 공격자가 데이터 전송을 위해 v2.68에서 의도적으로 도입한 것입니다. 이 경로를 통해 시드 구문이 포함된 분석 데이터는 분석 서비스 래퍼로 전송되고, 이 래퍼는 PostHog의 capture() 메서드를 호출하여 이벤트 객체를 생성합니다. 이벤트들은 큐에 쌓이고 일괄 처리된 후 JSON 형식으로 직렬화됩니다. JSON 페이로드는 압축되어 공격자의 서버로 HTTP POST 요청을 통해 전송됩니다.
4482.js 파일에는 분석 데이터를 api.metrics-trustwallet.com으로 라우팅하는 PostHog 구성이 드러납니다. 이 도메인은 공격자가 합법적인 Trust Wallet 분석 엔드포인트로 위장하기 위해 특별히 등록한 것입니다.
확장 프로그램 v2.68로 테스트한 결과, 지갑 잠금 해제 작업 중에 발생한 의심스러운 요청을 포착하여 분석했습니다. 해당 요청은 GZIP으로 압축된 데이터를 공격자가 제어하는 엔드포인트로 전송하며, 이를 압축 해제하면 평문 시드 구문을 추출할 수 있습니다.
공격 분석
공격 과정은 초기 준비부터 최종 악용까지 약 한 달에 걸쳐 세 단계로 진행되었습니다:
-
Chrome 웹 스토어(CWS) API 키 탈취
-
악성 코드가 포함된 확장 프로그램 배포
-
침해된 사용자 지갑에서 자산 탈취
1단계: CWS API 키 탈취
이 사건은 11월에 발생한 "Shai-Hulud 2.0" [2]이라는 광범위한 공급망 공격에서 시작되었습니다. 이 캠페인은 NPM(Node Package Manager)을 통해 개발자 환경을 표적으로 삼아 수많은 합법적인 NPM 패키지에 백도어를 삽입했습니다. 개발자들이 이 침해된 패키지를 설치하면, 악성 코드가 시스템에서 실행되어 민감한 자격 증명과 인증 토큰을 탈취했습니다.
이 공급망 공격을 통해 공격자는 Trust Wallet의 Chrome 웹 스토어(CWS) API 키를 획득했습니다. 이 키는 표준 배포 프로세스 하에서 Trust Wallet의 내부 승인 및 검토를 완전히 우회하여 Chrome 웹 스토어에 확장 프로그램 빌드를 직접 업로드할 수 있게 해주므로 특히 중요합니다.
2단계: 악성 코드가 포함된 확장 프로그램 배포
2025년 12월, 탈취한 CWS API 키를 손에 쥔 공격자는 공격 인프라를 구축했습니다:
-
데이터 수집 엔드포인트를 호스팅하기 위해 악성 도메인
metrics-trustwallet.com(및 서브도메인api.metrics-trustwallet.com)을 등록했습니다. -
지갑 잠금 해제 흐름에 백도어 코드를 삽입하고, 데이터를 자신의 서버로 전송하도록 PostHog 분석 구성을 수정했습니다.
-
탈취한 API 키를 사용하여 표준 배포 프로세스를 우회하고 악성 확장 프로그램을 Chrome 웹 스토어에 직접 업로드했습니다.
악성 버전 2.68은 Chrome의 자동 검토를 성공적으로 통과하여 공식 개발자 계정의 정당한 업데이트처럼 스토어에 게시되었습니다.
3단계: 침해된 사용자 지갑에서 자산 탈취
사용자들이 이 취약한 확장 프로그램으로 지갑을 잠금 해제하면, 시드 구문이 공격자 제어 서버인 api.metrics-trustwallet.com으로 자동으로 전송되었습니다. 이 시드 구문에 대한 완전한 접근 권한을 확보한 공격자는 피해자 지갑에 대한 완전한 통제권을 갖게 되었습니다.
즉각적인 자산 탈취—이는 빠른 탐지를 유발했을 것입니다—대신, 공격자는 은밀함을 유지하면서 피해자 풀이 확대될 때까지 인내심 있게 기다렸습니다.
12월 25일을 시작으로, 공격자는 침해된 지갑에서 체계적인 자산 추출을 시작했습니다. 이 작전은 10개의 서로 다른 블록체인에 걸쳐 약 2,520개의 고유 지갑 주소에 영향을 미쳤습니다.
요약
이번 침해 사건은 보안이 개발 및 배포를 포함한 전체 프로토콜 생명 주기를 아울러야 한다는 것을 냉엄하게 상기시켜 줍니다. 2025년에는 공급망 공격이 암호화폐 인프라에 가장 파괴적인 위협으로 부상했으며, 단 두 건의 사고(2월의 15억 달러 규모 Bybit 해킹 포함)만으로도 막대한 손실을 야기했습니다. 스마트 컨트랙트 감사를 넘어, 프로토콜은 빌드 파이프라인을 보호하고, 개발자 자격 증명을 지키며, 사용자 자산을 보호하기 위한 지속적인 모니터링을 유지해야 합니다.
참고 자료
BlockSec 소개
BlockSec은 풀스택 블록체인 보안 및 암호화폐 컴플라이언스 제공업체입니다. 저희는 고객이 코드 감사(스마트 컨트랙트, 블록체인 및 지갑 포함), 실시간 공격 차단, 사고 분석, 불법 자금 추적, 그리고 프로토콜 및 플랫폼의 전체 생명 주기에 걸친 AML/CFT 의무 준수를 수행할 수 있도록 돕는 제품과 서비스를 구축합니다.
BlockSec은 저명한 학술 컨퍼런스에 다수의 블록체인 보안 논문을 발표했으며, DeFi 애플리케이션의 여러 제로데이 공격을 보고하고, 다수의 해킹을 차단하여 2,000만 달러 이상을 구제했으며, 수십억 달러 상당의 암호화폐를 보호했습니다.
-
공식 웹사이트: https://blocksec.com/
-
공식 트위터 계정: https://twitter.com/BlockSecTeam



