---
title: "Firefox 확장 프로그램 8만 4천 개 전부 설치해봤더니"
published: 2026-04-10T21:56:33.000Z
canonical: https://jeff.news/article/1669
---
# Firefox 확장 프로그램 8만 4천 개 전부 설치해봤더니

Firefox 확장 프로그램 전체(약 8만 4천 개)를 AMO API로 스크래핑하고, 실제로 한 대의 컴퓨터에 전부 설치하는 과정을 기록한 글. 피싱 확장, PUA 제국, 바이브 코딩 슬롭 개발자 등 생태계의 민낯이 적나라하게 드러남.

- Firefox 확장 프로그램이 총 몇 개인지 아는 사람? **약 8만 4천 개**밖에 안 됨
  - "50GB도 안 되겠는데? 다 설치해보자!"라는 미친 발상에서 시작된 프로젝트

## 전체 확장 프로그램 스크래핑

- AMO(addons.mozilla.org)에 인증 불필요, 레이트 리밋도 없는 공개 API가 있음
  - 검색 API가 최대 600페이지(3만 개)만 반환해서 전체 수집이 바로 안 됨
  - `sort=created`, `sort=rating`, `sort=hotness` 등 정렬 조건을 바꿔가며 롱테일을 수집
  - `exclude_addons` 파라미터로 이미 본 확장을 제외하면서 페이지를 넘김 — URL 길이 제한 때문에 20페이지 추가가 한계
- 결국 카테고리 필터링을 병렬로 돌리니까 거의 전부 수집됨
  - 이전에 한 삽질이 전부 무의미해 보이는 순간ㅋㅋ
  - 데이터셋은 Hugging Face에 공개해둠 — 누구든 다시 할 필요 없게

## 확장 프로그램 분석 — 별의별 게 다 있음

- **가장 큰 확장**: dmitlichess (196.3MB) — 오디오 파일 2천 개 이상 포함
  - 2위 ReactBot Web (184.9MB)은 아예 Unity 앱을 통째로 넣어둠. "이 확장은 대부분의 확장보다 큽니다"가 역대급 언더스테이트먼트
  - Tesseract.js 임베딩한 OCR 확장이 두 개(각각 128.3MB), ONNX 런타임 내장 AI 모델 확장도 있음
- **가장 작은 확장**: theTabs-saver — 7,518바이트, 코드 없음
- **가장 많은 권한 요청**: FalscheLaden — 사용자 0명인데 **3,695개** 퍼미션 요청
- **가장 다작 개발자**: Dr. B — 84개 확장 전부 바이브 코딩(Grok 3 사용)
  - 확장마다 README.md에 리뷰 통과 과정이 적혀 있고, 아이콘이나 스크린샷은 하나도 없음

## 피싱과 악성 확장 실태

- 크립토 지갑 호모글리프 공격(동형 문자 위장) 확장들이 발견됨
  - 가짜 MetaMask 확장인데, 그냥 시드 구문 입력 폼 띄워서 서버로 전송하는 수준
  - "확장이잖아! coinbase.com 토큰을 훔치든, 클립보드 주소를 바꿔치기하든 할 수 있는데 왜 이렇게 허접하게 만들었냐"는 게 글쓴이 반응
- 가장 흥미로운 건 "Іron Wаllеt" — I, a, e가 키릴 문자
  - 설치 3초 후 NocoDB 스프레드시트에서 피싱 URL을 가져와서 오픈
  - "원격 코드 없음"이라고 적어놓은 게 유튜브에 "저작권 침해 의도 없음" 쓰는 것과 같은 느낌
  - API 키에 쓰기 권한이 있어서 글쓴이가 스프레드시트를 날려버림ㅋㅋ

> [!WARNING]
> 모질라에 신고하니 다음 날 전부 삭제됐는데, 신고 안 한 것들까지 사라짐. AMO 측에서 자체 탐지도 하고 있는 듯

## PUA(원치 않는 프로그램) 제국

- "○○ & Custom Web Search" 패턴의 확장이 **27개**, 총 사용자 **70만 명 이상**
  - 전부 각각 다른 계정에서 올라왔지만 동일 도메인 구조, 동일 약관(Innover Online Group Ltd)
  - "Custom Web Search"의 정체는 어필리에이트 코드가 붙은 Yahoo 검색
  - Chrome/Firefox 양쪽에 올라와 있는데, Yahoo 검색은 Firefox 버전에만 있음 — "Chrome 버전은 왜 만든 거지, NSA한테 팔려고?"
  - 모질라가 이 중 3개(사용자 11.5만)를 비활성화함
- 비슷한 회사 Atom Apps도 같은 수법으로 22만 일일 사용자 보유, 아직 건재

## 진짜로 8만 4천 개 설치하기

- 프로파일의 extensions 폴더에 `.xpi` 파일을 GUID 이름으로 다운로드, `addonStartup.json.lz4`와 `extensions.json` 삭제 후 재시작하는 방식
- **시행착오 과정이 처절함**:
  - 1차: tiny11 VM에서 enterprise policies로 시도 → 메모리 풀, 저장공간 풀, 프리징
  - 2차: 1,000개까지는 동작. 컨텍스트 메뉴가 화면을 꽉 채울 정도로 길어짐
  - 3차(Mac): 65,335개 설치, 다운로드에 6시간. 창은 뜨지만 응답 없음
  - 4~10차: 1,000개씩 추가하며 한계 테스트 → **3,000개**가 웹페이지 로딩 가능한 마지노선, 6,000개부터는 about:addons만 로딩됨

- **11차 시도(최종)**: 친구의 64GB RAM VM에서 도전
  - 다운로드 1시간 43분, extensions.json 재생성에 39분 (189MB짜리 JSON!)
  - extensions.json은 매 쓰기마다 전체를 직렬화해서 다시 쓰는 구조 — 15개면 괜찮지만 8만 4천 개는 아님
  - **결국 안정화에 성공** — 메모리 27~37GB 사이를 오가며 버팀

> [!IMPORTANT]
> about:addons 페이지가 완전히 로딩되는 데 **6시간** 소요. example.com은 24시간 열어둬도 로딩 안 됨. "이거 쓸 수 있냐고? 아니."

## 재미있는 숫자들

- 34.3%의 확장이 일일 사용자 0명
- 19%는 사용자·리뷰·스크린샷·다운로드·아이콘 전부 없음
- 76.7%가 오픈소스 라이선스 — 근데 유료 확장의 38.1%도 오픈소스라는 게 웃김
- 글쓴이가 글 쓰는 동안 전체의 23%가 새로 생김

## 핵심 포인트

- AMO 공개 API로 8만 4천 개 확장 전수 스크래핑 후 Hugging Face에 데이터셋 공개
- 키릴 문자 호모글리프 피싱 확장, 3695개 퍼미션 요청 확장 등 악성 사례 다수 발견
- Innover Online Group 등 PUA 기업이 70만+ 사용자를 Yahoo 어필리에이트로 유도
- 64GB RAM VM에서 전체 설치 성공 — about:addons 로딩에 6시간, 일반 웹페이지는 로딩 불가

## 인사이트

브라우저 확장 생태계의 보안 실태를 적나라하게 보여주는 글. 확장 스토어의 리뷰 체계가 대규모 PUA와 피싱을 막기엔 역부족이라는 점이 개발자로서 경각심을 갖게 함.
