2P by GN⁺ | ★ favorite | 댓글 1개
  • Under New Management는 설치된 브라우저 확장 프로그램의 개발자 정보가 Chrome Web Store 또는 Firefox Addons에서 바뀌었는지 주기적으로 확인하는 확장 프로그램임
  • 개발자 정보가 달라지면 확장 프로그램 아이콘에 빨간 배지를 표시해 사용자가 소유권 변경을 알 수 있게 함
  • 필요성은 확장 개발자가 인수 제안을 자주 받고, 인수자가 기존 사용자를 악용하려는 경우가 거의 대부분이라는 문제에서 출발함
  • 사용자는 설치된 확장 프로그램의 소유권이 바뀌었고 손상됐을 가능성이 있다는 사실을 모를 수 있어, 이 도구가 판단할 기회를 제공함
  • 브라우저가 확장 마켓플레이스 도메인 수정에 제한을 두기 때문에 개발자 정보 확인은 ExBoost API 서버에 위임됨

확장 프로그램 소유권 변경 감지

  • Under New Management는 설치된 확장 프로그램의 개발자 정보가 Chrome Web Store 또는 Firefox Addons 스토어에서 변경됐는지 간헐적으로 확인함
  • 변경 사항이 있으면 확장 프로그램 아이콘에 빨간 배지가 표시되어 사용자가 소유권 변경을 인지할 수 있음
  • 목적은 사용자가 자신이 쓰는 소프트웨어에 대해 정보에 기반한 판단을 할 기회를 주는 것임

왜 필요한가

  • 확장 프로그램 개발자는 자신의 확장을 사겠다는 제안을 계속 받음
  • README는 거의 모든 경우 구매자가 기존 사용자를 속이려는 목적을 가진다고 밝힘
  • 사용자는 설치된 확장 프로그램의 소유권이 바뀌었고, 현재는 손상됐을 가능성이 있다는 사실을 알지 못할 수 있음

설치 방법

소스에서 빌드

  • Under New Management는 Plasmo를 사용함
  • pnpm install: 의존성 설치
  • pnpm dev: 로컬 실행
  • pnpm build --zip: 릴리스 빌드
  • pnpm build --target=firefox-mv3: Firefox용 빌드

외부 서버가 필요한 이유

  • 브라우저는 확장 마켓플레이스 도메인을 수정하는 데 특별한 규칙을 둠
  • 예를 들어 chromewebstore.google.com에 대해 declarative_net_request 규칙을 설정할 수 없음
  • 그래서 개발자 정보 확인 작업은 ExBoost API 서버에 위임됨

댓글과 토론

Hacker News 의견들
  • 확장 프로그램 ID는 개발자가 앱 스토어에 처음 올릴 때 함께 업로드한 개인 키에서 파생되며, 이후 업로드 ZIP에 다른 key.pem이 들어 있으면 ID가 바뀜
    다만 key.pem이 없으면 확장 프로그램 ID는 그대로 유지됨. 그래서 ID가 바뀌면 소유자가 바뀌었을 가능성이 있지만, 원래 소유자가 개인 키를 새 소유자에게 넘겼을 수도 있음. Google은 매 업로드마다 개인 키를 요구하지 않으므로 새 소유자는 그 키 없이도 변경 사항을 배포할 수 있음
    확장 프로그램 생태계가 흥미로워 이 분야 도구도 만들고 있음. 특정 확장 프로그램을 대상으로 GitHub 저장소를 만들고, 업데이트마다 저장소 변경으로 기록한 뒤 정적 분석기와 eval이나 postMessage 같은 위험한 싱크로 사용자 입력이 흘러가는지 추적하는 런타임 오염 분석을 돌려보고 싶음: https://github.com/milesrichardson/crxmon

    • 예전에 Opera용 확장 프로그램 하나가 첫 페이지에 올라가 인기를 얻었고, 누군가 꽤 큰 금액에 사겠다고 했음
      협상 중에 확장 프로그램은 내리고 소스 코드를 모두 넘겨 직접 배포하게 하겠다고 했더니, 상대는 Opera 확장 계정 자격 증명까지 넘기길 기대했음. 결국 거래를 접었고, 이런 도구도 어느 정도 유용하지만 확장 프로그램용 악성코드 스캐너가 더 낫다는 데 동의함
    • 이건 공개 키 기반 구조(PKI)가 동작하는 방식과 다름. Chrome 확장 프로그램에서 정말 개인 키를 PEM 파일로 업로드하게 되어 있는지 의문임
      개발자는 개인 키로 확장 프로그램이나 매니페스트에 서명하고, 공개 키를 공유하거나 업로드에 포함해야 함. 업데이트도 계속 같은 개인 키로 서명해야 하며, 키가 바뀌지 않는 한 최초 업로드의 공개 키로 같은 개인 키가 쓰였는지 검증할 수 있음. 이후 업로드에 공개 키가 포함되는지는 본질적이지 않음. 개인 키를 팔거나 공유하면 다른 사람이 정당하게 서명된 업데이트를 만들 수 있지만, 이는 서명자가 개인 키를 비밀로 지키지 않는 데서 오는 위험임. Google이든 누구든 개인 키를 공유하면 확장 프로그램의 출처 보증이 무너짐
    • 확장 프로그램 ID가 바뀌면 새 버전을 명시적으로 설치해야 하고, 자동 업데이트되지는 않을 것임
      그런데 Google이 개인 키 없이도 새 소유자가 변경 사항을 배포하게 허용한다는 게 정말 가능한지 의문임. Chrome Web Store는 사소한 일에도 매우 까다로운데 그런 부분은 신경 쓰지 않는다는 게 이상함
      테스터용으로만 공개한 확장 프로그램 3개를 쓰고 있고, 여러 머신에 쉽게 설치하려고 개발자 모드나 rsync/robocopy 없이 쓰는 중임. 그런데 이번 주말 Chrome이 한 머신에서만 “Chrome Web Store에 등록되지 않았고 사용자가 모르게 추가됐을 수 있다”는 이유로 전부 비활성화했음. 강제로 켤 수도 없고, 스토어에서는 “비활성”이라며 “지금 활성화”를 보여주지만 배너만 사라졌다가 새로고침하면 다시 나타남. 해당 Chrome 프로필은 허용 목록 계정으로 로그인되어 있음
      Chrome Web Store 페이지 배지는 개발자인 내 계정에 제재가 없고 상태가 양호하다고 표시함. 허용 목록 이메일로 로그인하지 않았다면 그 페이지도 못 봤을 것임. 이렇게 “신경을 많이 쓰면서” 정작 키 없는 업데이트는 허용한다는 게 납득되지 않음
    • 설명한 방식은 가능하긴 하지만, 확장 프로그램 ID가 생성되는 필수 방식이거나 일반적인 방식은 아님. 보통 개발자는 첫 제출 때 ZIP 파일만 올리고, Chrome Web Store가 공개 배포용 서명에 쓸 개인 키를 생성해 저장함
      CWS는 기존 확장 프로그램의 ID를 절대 바꾸면 안 됨. ID가 확장 프로그램을 고유하게 식별하기 때문임. ID가 바뀌면 Chrome 클라이언트가 해당 확장 프로그램의 업데이트를 요청할 수 없고, CWS와 Chrome은 사용자를 한 확장 프로그램에서 다른 확장 프로그램으로 이전하는 기능을 지원하지 않음
      내가 알기로 CWS는 최초 제출 이후 ZIP에 key.pem이 들어 있으면 거부할 것임. 확장 프로그램 ID가 바뀌었다면 그건 같은 확장 프로그램이 아님. 새 소유자가 PEM 없이도 변경 사항을 배포할 수 있다는 건 대체로 맞지만, 개발자가 CWS에 제출한 확장 프로그램을 직접 서명한 경우에는 PEM 없이는 업데이트할 수 없음. 솔직히 지금도 가능한 기능인지는 모르겠고, 예전에는 개발자가 자기 업로드에 쓴 개인 키를 잃어 설치 기반을 날리는 거대한 함정이었음
    • 누군가 사악한 의도로 확장 프로그램을 산다면 개인 키도 원할 것임
      거의 모두가 가격만 맞으면 결국 동의할 것이고, 개인차는 얼마를 받아야 하느냐뿐임
  • 몇 달 전 YouTube 광고를 빠르게 넘기는 무료 오픈소스 확장 프로그램을 만들어 여기 공유했고 첫 페이지에 올랐음
    일주일 안에 내 Show HN 글에 댓글을 달았던 사람이 그걸 복사해 Reddit에서 자기 버전을 홍보했고, 바이럴이 되어 사용자 30만 명을 넘겼음: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
    왜 무료 오픈소스 확장 프로그램에 PR을 보내지 않고 복사했을까 싶었는데, 몇 주 뒤 여러 사이트에서 5자리 금액에 팔려고 하고 있었음. 아직 소유하고 있을 수도 있지만, Chrome Store에 등록된 개발자도 최초 공개 때와 달라진 게 눈에 띄었음

    • 다른 쪽 이야기도 보면 맥락이 조금 달라짐: https://news.ycombinator.com/item?id=38463233
      배경을 전부 이해하진 못했지만, 해당 확장 프로그램은 사실상 50줄짜리 사소한 JavaScript임. 누가 훔쳤다고 말하기엔 꽤 과감함. 아이디어 자체는 가치가 없고, 이 아이디어가 아주 새롭다고 주장하기도 어렵다. 상대가 영감을 받았다고 가정해도 누가 먼저 무엇을 했는지의 시간순서가 아주 명확하지는 않음
    • “다음에는 홍보를 더 공격적으로 하겠다”고 했는데, 이번에도 할 수 있지 않나 싶음. 확장 프로그램은 아직 존재하니까 지금도 홍보 가능함
      다만 YouTube와 Chrome이 얼마나 오래 작동하게 놔둘지는 또 다른 문제이고, 그들도 달가워하지 않을 수 있음
    • 결과가 좋게 끝나길 바라지만, 아니면 Jeff Tweedy의 태도가 도움이 될 수 있음
      “…온 세상이 네 노래를 부르고 / 네 그림이 모두 걸렸다면 / 네 것이던 것은 이제 모두의 것이라는 걸 기억해 / 그게 옳거나 그른 건 아니지만 / 얼마든지 거기에 매달릴 수는 있어 / 다만 너만 초조해질 뿐…” — Wilco의 “What Light”
    • HN 사용자의 핸들을 텍스트로는 절대 쓰지 않고 이미지에만 넣는 이유가 궁금함. 이 댓글이나 블로그 글에서 복사한 사용자의 이름을 명확히 말했을 때 어떤 위협 모델을 상정하는지 모르겠음
    • 그건 “zuckered”당했다고 부르는 일 같음
  • 정말 유용하지만, 다른 사람이 말했듯이 이건 브라우저 내장 기능이어야 함
    아직 소스 코드를 깊게 보진 않았는데, 소유권 변경이 있으면 자동으로 알려주는지 궁금함. 실시간일 필요는 없지만 시작 시점에는 알려주는지, 아니면 수동으로 확인 명령을 실행해야 하는지 궁금함
    몇 달 전에도 이 주제가 화제가 됐음: https://news.ycombinator.com/item?id=36233068
    당시 상단 댓글처럼, Firefox와 Chrome은 이런 상황에서 자동 확장 프로그램 업그레이드 정책을 바꾸는 편이 좋음. 확장 프로그램이 소유권 변경을 공개하면 업그레이드에 사용자 승인을 요구하고, 공개하지 않으면 사용자가 악성으로 신고할 수 있어야 함. 덧붙여 제목에는 아마 “Show HN”이 붙어야 할 것 같음

    • 만든 사람임. 확인은 매시간 자동 실행되고, 변경 사항이 감지되면 확장 프로그램 아이콘 위에 배지가 표시됨
      그보다 더 강한 알림은 너무 침습적이라고 판단했음
    • 회사 소유권 변경 때문에 사용자가 업그레이드를 명시적으로 승인해야 하는 속도 방지턱을 넣으면 상당한 비율의 사용자가 빠져나갈 것임
      이는 매각 시 제품이나 회사의 가치를 낮춤. 사용자 친화적이지만, 청구서를 내야 하는 제작자에게는 불친화적임
  • 이건 농담거리가 아님
    꽤 인기 있는 오픈소스 Chrome 확장 프로그램을 몇 년간 소유했는데, 전체 기부금은 한 달 커피값도 안 됐음
    그런데 명백히 악의적인 목적, 심지어 노골적으로 그렇게 말하는 경우까지 포함해 확장 프로그램을 팔라는 제안은 횟수도 많고 금액도 미쳤었음. 모두 거절했지만, 이런 상황에서 원 개발자의 도덕성만이 유일한 보안·프라이버시 체계가 되길 기대하는 건 제정신인 판단이 아님

    • 정말 악의적인 쪽은 글의 도구로 탐지되지 않을 것임. 그들은 확장 프로그램 소유권과 코드만이 아니라 개발자 계정 이전까지 요구하기 때문임
  • 목표에는 꽤 공감하고 기술적 한계도 이해하지만, 사용자의 모든 확장 프로그램 목록을 확장 프로그램 중심 광고 네트워크로 보낸다는 점은 좀 수상함
    외부 서버가 필요한 이유로 브라우저가 chromewebstore.google.com 같은 확장 프로그램 마켓 도메인 수정에 특수 규칙을 두기 때문에, 개발자 정보 확인을 ExBoost API 서버에 위임한다고 되어 있음
    https://www.extensionboost.com/
    ExBoost는 더 많은 사용자와 리뷰를 원하는 브라우저 확장 프로그램들의 협업 네트워크라고 설명함. 확장 프로그램 UI 안에 ExBoost 슬롯을 넣고, 유사 확장 프로그램 홍보나 리뷰 요청을 표시하는 방식임

    • 잘 찾았음. 조금 파보니 현재로서는 브라우저와 연결된 메타데이터는 보내지 않고, 쉼표로 구분된 확장 프로그램 ID 목록만 보냄. 물론 IP는 쉽게 사용될 수 있음
      설치해 둔 한 확장 프로그램의 API 결과를 보면 개발자 관련 메타데이터가 나옴. chrome.management.get(id) Chrome API를 써 봤지만 이 정보는 반환하지 않았고, manifest.json 내용을 프로그래밍 방식으로 가져올 방법도 없어 보임. 따라서 현재 확장 프로그램이 하려는 일을 하려면 외부 소스가 필요하긴 함
      https://github.com/classvsoftware/under-new-management/blob/...
      https://api.extensionboost.com/v1/developer?extension_ids=gh...
    • ExBoost도 원글 작성자의 프로젝트로 보임. 선의로 해석하면, 확장 프로그램 ID를 주면 소유자 같은 메타데이터를 긁어오는 데 필요한 데이터가 이미 있어서 그 API 서버를 쓴 듯함
    • 재미로 작은 확장 프로그램 몇 개를 만든 적이 있는데, 몇 주 전 ExBoost에서 “Collaboration To Grow Our Extensions”라는 제목의 이메일을 받았음
      자기 코드를 내 확장 프로그램에 넣어 달라는 내용이었고, “네가 내 걸 보여주면 나도 네 걸 보여준다. 비용 0, 모두 이득”이라고 했음. 수상해 보여서 스팸 처리했고, 사기꾼들에게 받던 다른 스팸 메일과 다르게 보이지 않았음
    • 이런 종류의 프로젝트에서 예상하지 못한 연결고리임. 놀랍다
    • 왜 외부 서비스에 접속해야 하는지 모르겠음. 소유자가 바뀌면 확장 프로그램 ID가 바뀌는 줄 알았으니, 로컬에서 ID를 추적하다 새 ID가 나타나면 표시하면 되는 것 아닌가 싶음. 뭔가 잘못 이해한 걸 수도 있음
  • Firefox 확장 프로그램에는 Mozilla의 추천 확장 프로그램 프로그램이 있고, 포함되기 전에 직원 보안 전문가의 엄격한 기술 검토를 거친다고 되어 있음: https://support.mozilla.org/en-US/kb/recommended-extensions-...
    다만 지원 문서만 봐서는 모든 업데이트가 게시 전에 검토되는지는 명확하지 않음. 매번 검토한다면 인기 확장 프로그램에 대해서는 이 문제를 어느 정도 해결하겠지만, 긴급 보안 업데이트가 필요할 때 지연이 얼마나 생길지도 궁금함

    • 모든 업데이트를 검토함. uBlock Origin처럼 아주 인기 있는 확장 프로그램도 가끔 막혀 있음
      현재 개인 정책으로는 그런 큐레이션된 확장 프로그램만 모든 사이트와 탭에서 실행하도록 허용함
    • 규칙이 있고 집행도 이루어지는 다소 번거로운 “마켓플레이스”가 있으면 좋겠다는 이야기처럼 들림
      아무리 인기 있거나 잘 알려진 조직이라도 규칙을 반복적으로 어기거나 마켓플레이스 기능을 우회하려 한다면 금지될 수 있는 구조 말임
  • 정말 악의적인 경우에는 확장 프로그램이 넘어갈 때 Google 개발자 계정의 자격 증명 자체를 파는 일이 많아서, 이런 경우는 탐지하지 못함

    • 개발자 계정 전체를 파는 게 애초에 허용되긴 하나?
  • 오래전에 adblock을 설치했고 아주 좋아했음
    새 머신을 사서 다시 설치해야 했고, 그때 처음으로 권한을 봤는데 정신 나갈 정도였음. 광고를 막으려면 내가 보는 것을 볼 수 있어야 한다는 건 논리적으로 맞지만, 그걸 진지하게 생각해 본 적은 없었음
    지금은 Pi-hole을 쓰고 확장 프로그램은 하나도 안 씀

    • Pi-hole은 uBlock Origin만큼 광고와 추적기를 효과적으로 막지는 못함
      그래도 원하는 사람에게 선택지가 있다는 건 좋고, 사람마다 위험 프로필과 우려가 다름
    • Manifest V3에서 들어오는 권한 변경의 이유 중 하나가 애초에 확장 프로그램이 접근할 수 있는 범위를 줄이는 것임
      어떤 확장 프로그램은 오픈소스이고 신뢰할 만하지만, 그렇지 않은 것도 많고 사람들은 검증에 어려움을 겪는 듯함
    • Safari에는 콘텐츠 차단기가 아무 권한 없이 동작할 수 있는 특수 인터페이스가 있음
      차단 목록을 제공하면 브라우저가 직접 차단함. Firefox에서도 가능한지는 모르겠음: https://developer.apple.com/documentation/safariservices/cre...
    • 여기서 말하는 adblock 확장 프로그램이 어느 것인지 궁금함. 예를 들어 uBlock은 로컬 차단 목록을 사용함
    • 모바일에서는 어떻게 하나?
  • 악성 확장 프로그램 구매자라면 이를 피하려고 개발자 이름을 그대로 유지하면 되지 않나 싶음. 아니면 Chrome Extension Store가 개발자 이름을 엄격히 관리하나?

    • 부정직한 확장 프로그램 제작자가 비공식적으로 비밀번호를 넘기고 “앗, 해킹당했네요” 식으로 수상한 구매자에게 빠져나가는 걸 실질적으로 막기는 어려움
      예컨대 악의적인 국가 행위자가 uBlock 작성자에게 수천만 달러를 제시해 많은 브라우저 접근권을 얻으려 할 수 있음. 경제성이 어떤지는 모르겠지만, 더 틈새적인 확장 프로그램은 훨씬 싸게 노릴 수 있을 것임
    • 아마 Chrome Web Store 서비스 약관 위반일 가능성이 큼
  • 이 문제가 다른 브라우저보다 Chrome에서 더 심한지 궁금함
    내가 쓰는 유일한 브라우저 확장 프로그램은 시험 감독 소프트웨어인 HonorLock이고, 의무적으로 써야 함. 확장 프로그램이 Chrome 전용이라 HonorLock 때문에 가끔 Chrome을 사용함. Safari에서 설치 링크를 열면 Chrome을 설치하라고 나옴: https://app.honorlock.com/install/extension
    Chrome 확장 프로그램에만 HonorLock의 사용 사례를 가능하게 하면서도, 이 글의 도구를 더 유용하게 만드는 특성이 있는지 궁금함

    • Chrome이 가장 인기 있는 브라우저라서 선택된 확장 프로그램 공격 벡터일 뿐임
    • HonorLock만 쓴다니, AdBlock 없이 어떻게 사는지 모르겠음