파이어폭스 확장 16개가 지갑 복구 문구 노렸다…마켓서 삭제돼도 이미 입력했다면 소용없다

Google 검색에서
선호 출처로 추가

선호 출처로 추가하면 Google 주요 뉴스에 위키트리 기사가 더 자주 표시됩니다.

Rabby·OKX 지갑 사칭 Firefox 확장 16개, 복구 문구와 개인 키 탈취 시도
Mozilla는 삭제했지만 이미 입력한 사용자는 새 지갑으로 자산을 옮겨야 한다

노트북 옆 암호화폐 동전과 지갑을 향해 다가가는 곤충 형상 — 내용 이해를 돕는 AI 이미지
노트북 옆 암호화폐 동전과 지갑을 향해 다가가는 곤충 형상 — 내용 이해를 돕는 AI 이미지

파이어폭스(Firefox) 확장 프로그램 16개가 암호화폐 지갑 Rabby Wallet과 OKX Wallet을 사칭해 복구 문구(시드 문구)와 개인 키를 가로채려 한 사실이 드러났다. 보안 기업 Socket은 10월 7일(현지시각) 분석 보고서를 내고 이 확장들을 공개했다. Mozilla는 10월 5일까지 해당 확장을 모두 마켓에서 내렸다.

문제는 삭제가 끝이 아니라는 점이다. 이미 설치해 진짜 복구 문구나 개인 키를 입력한 사용자에게는 마켓 삭제가 아무런 보호 효과를 내지 못한다. 보고서는 이 경우 지갑이 털렸다고 가정하고 자산을 옮기라고 권고한다.

지갑 화면을 통째로 베낀 16개 확장

Socket 연구원 조지프 에드워즈(Joseph Edwards)는 분석에서 이 확장들이 “지갑 포털, 데스크톱 유틸리티, 브라우저 도구로 위장하지만” 코드는 지갑 가져오기 과정에서 복구 문구와 개인 키를 가로채 공격자가 통제하는 클라우드플레어 워커스(Cloudflare Workers)로 보내려 한다고 설명했다. 16개 가운데 4개는 Rabby Wallet의 복제본이고 나머지 12개는 OKX Wallet을 노린 복제본이다. 확장 이름은 view-focus-bright, quick-track-nest처럼 평범한 도구를 연상시키는 형태가 많다.

Rabby 복제본은 단순한 피싱 페이지가 아니다. 4개 모두 파일이 1,114개씩 들어 있고 지갑 가져오기 화면과 계정 관리 코드, 거래 화면까지 갖춘 사실상 완성된 지갑 앱이었다. 공격자가 실제 지갑 기능 위에 탈취 기능을 얹은 구조여서 독립된 피싱 양식보다 눈에 덜 띈다.

위장도 꼼꼼했다. 공식 Rabby 링크와 DeBank 서비스 설정이 그대로 남아 있었다. 다만 브랜드 표기는 일관되지 않았다. 환영 화면에는 Rabby Wallet이 그대로 나오고 다른 화면에는 ‘Raabby WaIIet’이라는 철자가 틀린 이름이 쓰였다. 정상 Rabby의 크롬 확장 사용자는 약 90만 명, OKX는 100만 명이 넘는다고 사이버인사이더(CyberInsider)는 전했다.

OKX 계열 12개는 ‘Portal WALLET’이라는 일반적인 포털 이름 아래 OKX풍 화면을 내세웠다. 공식 OKX 도움말과 약관 페이지 링크도 연결해 두었다.

노트북 화면의 확장 프로그램 창을 확인하며 키보드를 조작하는 모습 — AI로 생성한 자료 이미지
노트북 화면의 확장 프로그램 창을 확인하며 키보드를 조작하는 모습 — AI로 생성한 자료 이미지

복구 문구는 어떻게 빠져나갔나

Rabby 복제본의 핵심은 background.js에 주입된 도우미 함수다. 이 함수는 12단어 또는 24단어 복구 문구와 64자리 16진수 개인 키를 받아낸다. 공격자는 개인 키 가져오기와 니모닉(복구 문구) 기반 키링 생성 같은 작업 직후에 이 호출을 끼워 넣었다. 지갑이 처리하는 비밀 값을 그대로 복사하면서 정상 기능은 계속 돌아가게 한 것이다. 프런트엔드 가져오기 경로의 비밀 값은 별도 파일의 후크가 수집했다.

탈취한 값은 HTTPS GET 요청의 URL 매개변수에 실려 나갔다. 요청에는 원문 비밀 값, 공통 캠페인 표식 ‘EQOx7EIPZSNi’, 프런트엔드·백그라운드 수집을 구분하는 동작 값이 담겼다. 첫 요청이 실패하면 다른 방식의 요청으로 다시 시도한다. Socket은 비밀 값을 URL에 넣으면 요청 주소를 기록하는 시스템에도 노출될 수 있다고 지적했다.

OKX 계열은 수법이 조금 달랐다. 가져오기 양식이 정확히 12단어 또는 24단어인지 확인한 뒤 입력값을 백그라운드 핸들러에 넘긴다. 핸들러는 앞뒤 공백을 지우고 빈 입력을 거르며 실행 중 이미 본 문구는 다시 보내지 않았다. 대부분은 JSON 데이터를 담은 HTTPS POST 요청으로 암호화되지 않은 문구를 전송했다.

한 패키지는 브라우저 비콘, POST 요청, 이미지 요청 기반 GET 대체 경로 등 전송 방법을 세 가지 갖췄다. 코드 주석에는 해시와 단어 수만 기기 밖으로 나간다고 적혀 있었다. Socket이 확인한 결과 실제 전송 내용에는 복구 문구 전체가 들어 있었고 해시는 중복 전송을 막는 용도에 불과했다.

이름만 바꿔 돌아온 8월 캠페인

Socket은 활동을 8월에 조사한 암호화폐 탈취 캠페인의 연장으로 높은 확신도로 평가했다. 근거는 공유된 코드와 인프라, 패키지 전반에 박힌 공통 식별자다. 8월 조사에서는 관련 확장 77개를 추적했고 이 중 40개가 악성으로 확인됐으며 37개는 스포츠 점수 앱으로 위장한 껍데기였다. 다만 Socket은 특정 운영 주체를 지목하지는 않았다.

연구진은 공격자가 패키지 이름, 버전, 확장 ID, 설명, 화면 표현 계층을 계속 바꾸면서도 같은 지갑 화면과 자격 증명 처리 로직, 네트워크 인프라는 재사용한다고 분석했다. 식별된 확장 중 하나를 제외하면 모두 icy-star-f45c 계열 클라우드플레어 워커스 주소와 통신했다. 모니터링 측면에서는 이름이 바뀌어도 공유 해시와 캠페인 표식을 추적하면 같은 계열을 찾아낼 수 있다는 뜻이다.

16개 가운데 15개는 실제로 작동하는 수집 핸들러를 갖고 있었다. 나머지 sipoo-grozza@browserweb.com 2.1 버전은 백그라운드 스크립트를 불러오는 매니페스트 항목이 없었고, 프런트엔드가 보내는 메시지 유형도 핸들러가 받지 않는 형태였다. Socket은 이를 패키징 결함으로 보고 악의적 의도와 실제 작동 능력을 구분했다. 이 확장에도 명시적인 자격 증명 수집·전송 코드는 남아 있었다.

16개 매니페스트는 모두 데이터를 수집하지 않는다고 선언했다. 지갑 비밀을 다루는 코드와 정면으로 모순된다. Rabby 복제본은 광범위한 브라우저 접근 권한도 요청했지만 Socket의 정적 분석은 별도의 양식 가로채기 기능을 입증하지 못했다. 확인된 것은 지갑 비밀 탈취까지이고 더 넓은 브라우징 데이터 수집은 확인되지 않았다. 보고서에는 피해자 수나 실제 암호화폐 손실액도 담기지 않았다.

이미 입력했다면 해야 할 일

Socket의 권고는 분명하다. 확장을 삭제하고 깨끗한 기기에서 새 지갑을 만든 뒤 자산을 옮기고 관련 토큰 승인을 취소해야 한다. 확장 프로그램 비밀번호를 바꾸는 것으로는 유출된 복구 문구나 개인 키를 무효화할 수 없다. 노출된 복구 문구에서 파생된 모든 계정도 탈취된 것으로 봐야 한다. 다른 Firefox 기기와 동기화된 프로필도 확인 대상이다.

기업 보안팀에는 확장 목록, 브라우저 프로필, 동기화된 애드온과 네트워크 기록을 공개된 침해 지표와 대조하라는 권고가 나왔다. 탐지 규칙은 목적지 호스트와 요청 패턴, 해시, 캠페인 표식을 기준으로 삼는다. 경보나 사건 기록에 탈취된 문구가 복사되지 않도록 비밀 값이 담긴 필드는 가려야 한다. 의심 패키지는 분석용으로 보존하되 분석가의 일반 업무 PC에서는 실행하지 말라는 당부도 있다.

최근 몇 달간 Firefox·구글 크롬·마이크로소프트 엣지에서 악성 또는 의심스러운 확장이 잇따라 발견됐다. 한 보도에 따르면 PDF 열람 전 신원 확인 도구로 위장해 구글 계정 세션 쿠키를 노린 Firefox 확장 ‘ID-Pay’, 생산성 도구로 위장한 32개 확장 묶음, 금융권 유명 인사 이름을 도용해 지갑 피싱 페이지로 유도한 약 30개 확장 묶음이 포함된다. 조직에는 설치된 확장을 점검해 불필요한 것을 지우고 관리 환경에서 확장을 감사하며 실행 중 동작을 감시하라는 권고가 나왔다.