콘텐츠로 이동

악성 브라우저 확장 공급망 침해

악성 브라우저 확장 공급망 침해 thumbnail
Chrome과 Edge 확장 19개에서 암호화폐 지갑 정보를 훔치거나 자산 탈취를 시도하는 코드가 발견됐다. 정상 확장처럼 배포된 뒤 업데이트를 통해 악성 기능을 추가하는 방식은 기존 설치 기반과 이미 승인된 브라우저 권한을 공격 경로로 바꾼다.

요약

Chrome과 Edge 확장 19개에서 암호화폐 지갑 정보를 훔치거나 자산 탈취를 시도하는 코드가 발견됐다. 정상 확장처럼 배포된 뒤 업데이트를 통해 악성 기능을 추가하는 방식은 기존 설치 기반과 이미 승인된 브라우저 권한을 공격 경로로 바꾼다.

조사 범위에는 확장 설치 여부뿐 아니라 확장 ID, 버전, 게시자, 업데이트 시각, 권한 변화와 외부 통신 기록이 포함돼야 한다. 같은 이름의 확장이라도 Chrome Web Store와 Microsoft Edge Add-ons에서는 별도 항목으로 식별한다.

구분 확인 내용 조사 기준
영향 대상 Chrome 및 Edge 확장 19개 브라우저별 확장 ID와 버전 확인
주요 기능 지갑 정보 탈취 및 crypto draining 지갑 연결·서명 요청과 거래 기록 조사
전달 경로 브라우저 확장 배포 및 업데이트 채널 설치 출처와 업데이트 시각 보존
신뢰 악용 기존 사용자와 승인된 권한을 악성 코드가 재사용 최초 승인 이후의 코드·권한 변화 비교

공개 경과

  • 2026-08-28: Socket이 Edge 확장 생태계의 보안 문제와 관련 사례를 공개했다.

공개 분석 당시 Chrome과 Edge에서 연관 확장이 확인됐다. 저장소에서 확장이 제거됐더라도 이미 배포된 버전의 실행 여부와 노출된 자격 증명은 별도로 조사해야 한다.

공격 메커니즘

브라우저 확장은 업데이트 과정에서 기존 확장 ID와 이미 부여된 권한을 유지할 수 있다. 공격자가 확장 게시 권한을 확보하거나 자신이 운영하던 정상 확장에 악성 코드를 추가하면, 사용자의 명시적인 재설치 없이 기존 배포 채널을 이용할 수 있다.

### 정상 확장 설치

    -> 사용자와 브라우저 권한 확보
    -> 동일한 확장 ID로 악성 업데이트 배포
    -> 웹페이지 및 브라우저 데이터 접근
    -> 지갑 정보 또는 인증 데이터 수집
    -> 외부 인프라 전송
    -> 자산 탈취 시도

공개 자료에서 지갑 탈취와 crypto draining 기능은 확인되지만, 제공된 자료에는 확장 패키지 원본, 취약 함수, 구체적인 endpoint, 요청 parameter 또는 서버 측 프로토콜이 포함되지 않았다. 따라서 특정 WebSocket 주소, CSP 제거 코드, 16개 모듈 구성과 개별 데이터 수집 기능은 확정된 기술 사실로 다루지 않는다.

영향 판단

확장이 설치된 사실만으로 실제 탈취를 확정할 수 없다. 설치 버전이 악성 코드가 포함된 버전과 일치하는지, 해당 버전이 실행됐는지, 사용자가 지갑을 연결하거나 복구 문구를 입력했는지 확인해야 한다.

다음 자료를 시간순으로 결합한다.

  • 브라우저별 확장 ID와 버전
  • 확장 디렉터리의 생성·변경 시각
  • 확장 설치 출처와 게시자
  • 자동 업데이트 기록
  • 확장에 부여된 host permission
  • 지갑 연결 및 서명 요청 기록
  • 확장 프로세스에서 발생한 DNS·HTTP·WebSocket 통신
  • 암호화폐 계정의 로그인, 세션 및 출금 기록

확장 삭제 후에도 노출은 지속될 수 있다

확장 삭제는 이미 유출된 복구 문구, 세션, 비밀번호 또는 API 키를 무효화하지 않는다. 악성 버전 실행이나 지갑 정보 입력이 확인되면 관련 세션과 자격 증명을 폐기하고, 새 복구 문구로 생성한 지갑으로 자산을 이전한다.

탐지 포인트

네트워크

확장 설치 또는 업데이트 직후 처음 관측된 외부 목적지를 찾는다. 브라우저를 종료할 때까지 유지되는 WebSocket 연결, 일정 간격으로 반복되는 beacon, 여러 브라우저 프로필에서 공통으로 관측되는 목적지를 우선 확인한다.

프록시와 DNS 로그에서는 브라우저 프로세스의 일반 웹 요청과 확장 프로세스에서 발생한 통신을 구분한다. 동일한 확장 ID를 설치한 여러 단말이 같은 신규 도메인에 연결하면 확장 패키지와 통신 시점을 함께 보존한다.

엔드포인트

Chrome과 Edge의 사용자 프로필에서 확장 디렉터리를 수집한다.

$extensionRoots = @(
    "$env:LOCALAPPDATA\Google\Chrome\User Data",
    "$env:LOCALAPPDATA\Microsoft\Edge\User Data"
)

Get-ChildItem -Path $extensionRoots -Directory -Recurse -ErrorAction SilentlyContinue |
    Where-Object {
        $_.FullName -match '\\Extensions\\[^\\]+\\[^\\]+$'
    } |
    Select-Object FullName, LastWriteTime

출력 경로에서 확장 ID와 버전을 추출한 뒤 승인 목록 및 알려진 정상 버전과 비교한다. 이 명령의 결과만으로 악성 여부를 판정하지 않는다.

버전 간 패키지를 비교할 때는 다음 변경을 확인한다.

  • manifest.json의 host permission 확대
  • 지갑 또는 거래소 사이트를 대상으로 하는 content script 추가
  • cookies, history, clipboardRead, webRequest 관련 권한 추가
  • 외부 서버 주소와 WebSocket 생성 코드 추가
  • 원격 script 또는 동적 코드 로딩 추가
  • 입력 폼, 복구 문구 또는 지갑 서명 요청을 가로채는 코드 추가
  • 난독화된 bundle과 실행 시점에 복호화되는 문자열 추가

서버

관리형 브라우저 정책에서 Chrome과 Edge의 확장 설치 상태를 따로 수집한다. 표시 이름 대신 확장 ID, 브라우저 종류, 버전, 설치 정책과 게시자를 자산 키로 사용한다.

승인된 확장의 새 버전이 배포되면 이전 패키지와 다음 항목을 비교한다.

  • manifest.json 권한
  • content script 적용 대상
  • 외부 통신 목적지
  • background 또는 service worker 코드
  • 지갑·거래소 도메인 처리 로직
  • 패키지 서명과 게시자 변경

대응

  • 확인된 확장 ID와 연관 버전을 Chrome 및 Edge 정책에서 차단한다.
  • 확장 패키지, manifest.json, 업데이트 시각과 브라우저 로그를 보존한다.
  • 악성 버전 실행 기간에 사용된 거래소·이메일·업무 계정 세션을 폐기한다.
  • 브라우저에 저장된 비밀번호와 거래소 API 키를 교체한다.
  • 복구 문구 입력 정황이 있으면 기존 지갑을 폐기하고 새 지갑으로 자산을 이전한다.
  • 지갑의 승인 내역과 비정상 서명·출금 기록을 확인한다.
  • Chrome과 Edge의 동명 확장을 별도 ID와 별도 배포 이력으로 관리한다.
  • 승인된 확장도 게시자, 권한, 코드 또는 통신 목적지가 변경되면 다시 검토한다.

참고 자료