LinkedIn이 브라우저 확장 프로그램을 스캔 중
(404privacy.com)- LinkedIn은 Chrome에서
chrome-extension://URL 요청을 보내 특정 확장 프로그램 설치 여부를 확인하며, 설치되지 않은 항목은 개발자 도구 콘솔에 요청 실패 오류로 남음 - browsergate.eu 기록과 GitHub 추적 저장소에 따르면 스캔은 최소 2017년부터 이어졌고, 대상 목록은 38개에서 2026년 4월 기준 6,278개로 늘어남
- LinkedIn은 이미 사용자의 이름·고용주·직책·경력·위치를 보유하므로, 확장 프로그램 스캔은 익명 기기 지문이 아니라 검증된 직업적 신원에 소프트웨어 목록을 덧붙이는 방식이 됨
- 스캔은 LinkedIn의 APFC 기기 지문 채취 시스템 일부이며, canvas fingerprint, WebGL, 오디오 동작, 폰트, 화면 정보, 기기 메모리, WebRTC 로컬 IP 등 48개 브라우저·기기 특성과 함께 프로필을 구성함
- 탐지 결과는
AedEvent와SpectroscopyEvent로 패키징돼 RSA 공개키로 암호화된 뒤 LinkedIn의li/track엔드포인트로 전송되며, browsergate.eu는 이 방식이 EU Digital Markets Act 위반에 해당한다고 보고 형사 수사가 열렸다고 밝힘
개인 식별 프로필에 붙는 소프트웨어 목록
- 일반적인 지문 채취는 익명 방문자의 브라우저를 쿠키 없이 다시 인식하기 위한 방식으로 다뤄짐
- 이 경우 프로필은 기기 수준에서 식별될 수 있지만 반드시 개인 신원과 연결되지는 않음
- LinkedIn은 익명 방문자가 아니라 사용자의 이름, 고용주, 직책, 경력, 급여 범위, 전문 네트워크, 위치를 이미 보유함
- LinkedIn의 확장 프로그램 스캔은 알 수 없는 방문자의 기기 프로필을 만드는 것이 아니라, 이미 검증된 직업적 신원에 상세한 소프트웨어 목록을 덧붙이는 방식이 됨
- LinkedIn의 스캔 목록에는 수백 개의 구직 관련 확장 프로그램이 포함되어 있어, 사용자가 고용주에게 알리기 전에 조용히 구직 중인지 파악할 수 있음
- 정치 콘텐츠, 종교적 실천, 장애 보조, 신경다양성과 관련된 확장 프로그램도 목록에 포함되어 있어 브라우저 소프트웨어가 개인 생활을 추론하는 근거가 될 수 있음
- LinkedIn은 사용자의 직장을 알고 있기 때문에, 한 직원의 스캔 결과는 개인뿐 아니라 그 조직의 내부 도구, 보안 제품, 경쟁사 구독, 업무 흐름을 파악하는 데 기여할 수 있음
- LinkedIn의 privacy policy에는 확장 프로그램 스캔이 공개되어 있지 않으며, 사용자는 동의를 요청받거나 고지받지 않음
LinkedIn을 넘어서는 문제
-
단속과 선례
- LinkedIn은 확장 프로그램 목록을 사용해 특정 확장 프로그램을 설치한 사용자에 대해 추론하고 단속 조치를 취함
- browsergate에 따르면 Milinda Lakkam은 선서하에 “LinkedIn took action against users who had specific extensions installed.”라고 확인함
- 사용자는 자신의 소프트웨어가 목록화되고 있다는 사실, 그 목록이 자신에게 불리하게 쓰인다는 사실, 그리고 LinkedIn 개인정보 처리방침에 나타나지 않는다는 사실을 알 방법이 없음
-
지문 채취 생태계
- 브라우저 지문 채취는 보통 한 사이트가 신호를 수집해 프로필을 만들고 세션 간 사용자를 인식하는 문제로 다뤄짐
- LinkedIn의 확장 프로그램 스캔은 검증된 신원에 연결된 상세 소프트웨어 목록을 생성하며, 그 프로필은 LinkedIn 내부에 머물 필요가 없음
- LinkedIn이 제3자 행동 데이터셋을 구매하고 그 안에 사용자의 지문이 있으면, LinkedIn은 이를 이미 보유한 사용자 정보에 덧붙일 수 있음
- LinkedIn 외부의 탐색 행동, 구매 이력, 위치 패턴, 관심사가 LinkedIn 계정과 연결된 프로필 일부가 될 수 있음
- 반대로 LinkedIn은 모든 페이지 방문에서 로드되는 Google의 reCAPTCHA enterprise를 포함해 제3자 스크립트를 통합하며, 플랫폼 사이로 데이터가 흐름
- LinkedIn이 검증된 신원과 연결한 지문은 linkedin.com 밖의 광고·추적 시스템에도 영향을 줄 수 있음
- LinkedIn에 한 번 로그인하면 그 방문에서 만들어진 지문이 웹 전반에서 따라다닐 수 있음
-
실제 위협이 되는 사용자군
- 기자, 변호사, 연구자, 인권 조사관에게 LinkedIn 프로필은 온라인에서 가장 상세한 검증 신원 문서 중 하나가 될 수 있음
- LinkedIn 프로필은 실명으로 전문 목적을 위해 의도적으로 구축된 정보임
- 확장 프로그램 스캔은 그 프로필에 개인정보 보호 도구, 보안 확장, 조사 도구, 생산성 앱 설치 기록을 사용자의 인지 없이 연결함
- LinkedIn과 Chrome을 사용하면 이 수집이 현재 발생하고 있음
APFC와 고급 JavaScript 지문 채취
- 확장 프로그램 스캔은 단독 기능이 아니라 LinkedIn이 내부적으로 APFC라고 부르는 더 넓은 기기 지문 채취 시스템의 일부임
- APFC는 Anti-fraud Platform Features Collection의 약자이며, 내부적으로 DNA, Device Network Analysis라고도 불림
- LinkedIn은 이런 추적 방식에 대해 확장 프로그램 스캔보다 더 공개적인 편이지만, 이 방식들은 상용 웹사이트에 흔히 포함됨
- 이 시스템은 방문마다 48개의 브라우저·기기 특성을 수집함
- 수집 항목에는 canvas fingerprint, WebGL 렌더러와 파라미터, 오디오 처리 동작, 설치된 폰트, 화면 해상도, 픽셀 비율, 하드웨어 동시성, 기기 메모리, 배터리 수준, WebRTC를 통한 로컬 IP 주소, 시간대, 언어 등이 포함됨
- 확장 프로그램 스캔은 더 큰 프로필을 구성하는 입력 중 하나임
기술적으로 일어나는 일
- LinkedIn의 코드는 Chrome에 설치된 특정 파일을 찾기 위해
chrome-extension://URL로fetch()요청을 보냄 - 확장 프로그램이 설치되어 있지 않으면 Chrome이 요청을 차단하고 실패를 로그에 남김
- 확장 프로그램이 설치되어 있으면 요청은 조용히 성공하고 LinkedIn은 이를 기록함
- 확인된 환경에서 스캔은 약 15분 동안 실행됐고, 6,000개가 넘는 확장 프로그램을 검색함
- 사용자는 Chrome에서 LinkedIn을 열고 개발자 도구의 콘솔 탭을 보면 이를 직접 확인할 수 있음
- 콘솔의 빨간 오류는 각각 사용자의 지문 일부에 해당함
코드 구조와 탐지 방식
- LinkedIn은 모든 Chrome 방문자의 브라우저에서 JavaScript 코드를 실행하며, 확장 프로그램 스캔을 담당하는 시스템은 그 안에 있음
- 해당 파일은 약 1.6MB 크기의 축소되고 일부 난독화된 JavaScript 파일임
- 일반적인 축소는 성능을 위해 코드를 압축하는 작업이지만, 난독화는 코드를 읽고 이해하기 어렵게 만드는 별도 단계임
- LinkedIn은 확장 프로그램 스캔 시스템이 들어 있는 정확한 모듈을 난독화하고, 수천 줄짜리 JavaScript 파일 안에 묻어둠
- 파일 안에는 브라우저 확장 프로그램 ID의 하드코딩 배열이 있음
- 2026년 2월 기준 이 배열에는 6,278개 항목이 들어 있었음
- 각 항목은 Chrome Web Store 확장 프로그램 ID와 그 확장 패키지 내부의 특정 파일 경로라는 두 필드를 가짐
- 파일 경로는 우연한 값이 아니라, Chrome 확장 프로그램이
web_accessible_resources필드를 통해 내부 파일을 웹페이지에 노출할 수 있기 때문에 필요함 - 확장 프로그램이 설치되어 있고 특정 파일을 접근 가능하게 선언했다면
chrome-extension://{id}/{file}로 보내는fetch()요청이 성공함 - 설치되어 있지 않으면 Chrome이 요청을 차단함
- LinkedIn은 목록의 6,278개 확장 프로그램 각각에 대해 특정 접근 가능 파일을 식별하고 직접 탐지함
- 목록은 계속 유지·확장되고 있으며, Chrome Web Store 확장 패키지를 크롤링하고 각 매니페스트에서 웹 접근 가능 리소스를 파싱해 탐지 대상을 추가하는 도구가 있었던 것으로 보임
두 가지 스캔 모드와 Spectroscopy
- 확장 프로그램 스캔은 두 가지 모드로 동작함
- 첫 번째 모드는
Promise.allSettled()를 사용해 모든 요청을 동시에 보내며, 전체 확장 프로그램을 병렬로 탐지함 - 두 번째 모드는 각 요청 사이에 설정 가능한 지연을 두고 순차적으로 요청을 보내 네트워크 활동을 시간에 걸쳐 분산시키며, 모니터링 도구에서 덜 눈에 띄게 만듦
- LinkedIn은 내부 기능 플래그를 사용해 두 모드 사이를 전환할 수 있음
- 스캔은
requestIdleCallback으로 지연될 수도 있으며, 브라우저가 유휴 상태일 때 실행되어 사용자가 성능 영향을 보지 못하게 함 - Spectroscopy라는 두 번째 탐지 시스템은 확장 프로그램 목록과 독립적으로 동작함
- Spectroscopy는 전체 DOM 트리를 훑으며 모든 텍스트 노드와 요소 속성에서
chrome-extension://URL 참조를 검사함 - 이 방식은 LinkedIn의 하드코딩 목록에 없더라도 페이지를 수정하는 확장 프로그램을 잡아낼 수 있음
- 두 시스템을 합치면 설치된 확장 프로그램과 실제로 페이지와 상호작용하는 확장 프로그램을 함께 포괄함
텔레메트리 전송
- 두 탐지 시스템은 같은 텔레메트리 파이프라인으로 결과를 보냄
- 탐지된 확장 프로그램 ID는
AedEvent와SpectroscopyEvent객체로 패키징됨 - 이 객체들은 RSA 공개키로 암호화되어 LinkedIn의
li/track엔드포인트로 전송됨 - 암호화된 지문은 이후 세션 중 발생하는 모든 API 요청의 HTTP 헤더에 삽입됨
- LinkedIn은 방문 기간 동안 사용자가 취하는 모든 행동과 함께 이 값을 받음
법적 맥락
- browsergate.eu는 관련 법적 논리를 상세히 정리함
- 2024년 Microsoft는 EU Digital Markets Act에 따라 게이트키퍼로 지정됐고, LinkedIn은 규제 대상 제품 중 하나임
- DMA는 게이트키퍼가 제3자 도구의 사용자 데이터 접근을 허용하도록 요구하고, 해당 도구 사용자에 대한 조치를 금지함
- browsergate.eu는 LinkedIn이 제3자 도구 사용자를 체계적으로 단속하고 이를 식별하기 위해 은밀한 확장 프로그램 스캔을 사용한 점이 해당 규정 위반에 해당한다고 봄
- 이 주장이 법적으로 받아들여질지는 법적 판단의 문제임
- Bavarian Central Cybercrime Prosecution Office in Bamberg의 Cybercrime Unit은 형사 수사가 열렸다고 확인함
- 이 기관은 관할권을 넘나드는 중대 사이버 범죄 사건을 다룸
- browsergate.eu는 형사 수사를 확인하고 사건 번호를 제공했으며, 전체 법원 문서를 공개 준비 중이라고 밝힘
Hacker News 의견들
-
“형사 수사가 시작됐다는 건 의문의 여지가 없다.” 좋다. 이런 회사들은 돌팔매를 맞아도 싸고, 그보다 더한 것도 감수해야 함
- 정말 필요한 건 이 일이 애초에 누구 아이디어였는지 밝혀내는 것임
웹사이트를 평균 이하로 망치지 않겠다는 팀이라면, 알려진 서비스 악화 주도자들 명단으로 지원자를 걸러낼 수 있어야 함
이미 싹을 자르기엔 늦었을 수 있지만, 이런 개인들이 계속 아무 제약 없이 활동하고 더 커지도록 둘 이유는 없음
- 정말 필요한 건 이 일이 애초에 누구 아이디어였는지 밝혀내는 것임
-
“그다음 mastodon에서 browsergate 얘기가 터진 걸 보고 ‘설마’ 했는데, 실제로 소송이 준비 중이었다.” - un-nf
Farrell v LinkedIn Corporation 4:26-cv-02953-KAW (N.D. Cal. Apr. 6, 2026)
https://ia601503.us.archive.org/33/items/gov.uscourts.cand.4... -
왜 내 Chrome이 내가 설치한 확장 프로그램 목록을 아무 웹사이트에 알려주는 거지?
- 정확히는 그대로 알려주는 건 아님. 확장 프로그램의 ID와 그 확장 안에 존재한다고 알려진 파일 목록을 만들고, 사이트가 각 쌍을 순회하면서 그 파일을 불러오려 시도함
오류가 나지 않으면 해당 확장 프로그램이 설치됐다는 걸 알 수 있음. 영리하고 손이 많이 가는 방식이지만, 이런 일을 막으려는 보안 장치를 우회함
이걸 쓰는 이유는 약관을 우회하는 알려진 스크래퍼 확장 프로그램 사용자를 차단하기 위해서라고 읽었지만, 완전히 납득되진 않음 - 원문에서 관련된 부분은 이거임:
“Chrome 확장 프로그램은 manifest.json의 web_accessible_resources 필드를 통해 내부 파일을 웹페이지에 노출할 수 있다. 확장 프로그램이 설치되어 있고 리소스를 노출했다면 chrome-extension://{id}/{file}로 fetch() 요청이 성공한다. 설치되어 있지 않으면 Chrome이 요청을 막고 promise가 reject된다.
LinkedIn은 목록의 모든 확장 프로그램을 이런 방식으로 테스트한다.” - 웹브라우저가 수십 년 동안 저질러 온 끔찍한 보안 실수들에 대해서도 같은 질문을 할 수 있음
- 그 정보가 웹사이트에 제공되는 건가? 특정 확장 프로그램이 설치됐을 때만 나타나는 동작을 이용해 스스로 감지하는 식의 새로운 해킹을 하는 줄 알았음
하지만 6,300개 확장 프로그램에 대해 그렇게 하려면 일이 너무 많음. 혹시 이걸 서비스로 제공하는 곳이 있나? - Brave는 이걸 명시적으로 차단함
- 정확히는 그대로 알려주는 건 아님. 확장 프로그램의 ID와 그 확장 안에 존재한다고 알려진 파일 목록을 만들고, 사이트가 각 쌍을 순회하면서 그 파일을 불러오려 시도함
-
친구들, 직장에서 이런 걸 구현하라는 요청을 받으면 무엇을 택할 건가: 반대하고 버티다가 직장을 잃을 것인가, 아니면 따르고 직장을 지킬 것인가
실무자로서 텔레메트리와 감시의 경계는 어디에 그어야 하나?- LinkedIn, Meta, 또는 사우디나 이스라엘 자금을 받는 곳에서는 일하지 않는 쪽을 택함. 일자리 찾기는 조금 더 어려워지지만, 밤에 더 편히 잠
- 세 번째 선택지도 있음. 하겠다고 해놓고 일부러 못 하거나, 끝없이 질질 끄는 것임. 의도적으로 일을 망쳤다는 걸 증명하기는 어려움
다만 그런 게임을 하고 있다면, 새 직장을 찾을 때일 수도 있음 ;) - 익명으로 세상에 무슨 일이 벌어질지 알리는 것도 선택지라고 봄. 그러면 직장은 유지하면서도 사람들이 최소한 알게 됨
단, 그 사실을 아는 사람이 세 명쯤뿐이라면 바로 누군지 들킬 수 있음 - 나도 같은 생각을 함. 쉽게 다른 직장을 찾기 어렵고, 의료보험이나 금전적 이유로 그 일이 필요한 사람들이 만든 걸지도 모름. 월급으로 간신히 버티는 상황일 수도 있고
비슷한 처지의 관리자들이 지시하고, 그 위 관리자는 매출 증가만 보고 방법은 신경 쓰지 않는 구조일 수도 있음. 그래도 어딘가에서는 “우리가 지금 뭘 하고 있는 거지?”라고 말하는 사람이 있어야 할 것 같은데, 이상함
질문에 답하자면 물론 반대할 것임. 지금은 심각한 대가 없이 그런 선택을 할 수 있을 만큼 운이 좋은 상태임. 그런데 누가 HN에 나와서 “네, 전 도덕심이 없습니다!”라고 말하겠나? 버너 계정이라도 실제인지 알 수 없을 텐데 - 솔직히 나라면 구현할 것 같음. 모든 웹사이트에 설치된 확장 프로그램을 알려주는 건 Chrome 책임임. 어쨌든 사용자에게 피해가 가는 것도 아니고
-
원문에서 내가 찾은 가장 관련 있는 부분은 이거임:
“Chrome 확장 프로그램은 manifest.json의 web_accessible_resources 필드를 통해 내부 파일을 웹페이지에 노출할 수 있다. 확장 프로그램이 설치되어 있고 리소스를 노출했다면 chrome-extension://{id}/{file}로 fetch() 요청이 성공한다. 설치되어 있지 않으면 Chrome이 요청을 막고 promise가 reject된다.
LinkedIn은 목록의 모든 확장 프로그램을 이런 방식으로 테스트한다.”- 그렇다면 이런 질의에 무작위로 예/아니오를 반환하는 식으로 가짜 설치된 확장 프로그램을 만들 수 있나? LinkedIn이나 다른 지문 추적 사이트들이 어떤 파일을 테스트하는지는 꽤 명확하고, 원글 작성자가 말하듯 관찰할 수 있음
같은 파일들을 테스트하는 다른 사이트가 어디인지 보는 것도 흥미로울 텐데, 이미 누가 살펴봤나? - 사이트에서 온 코드가, 확장 프로그램에서 온 코드도 아닌데, 거기에 접근할 수 있게 두면 안 될 것 같음
- 그렇다면 이런 질의에 무작위로 예/아니오를 반환하는 식으로 가짜 설치된 확장 프로그램을 만들 수 있나? LinkedIn이나 다른 지문 추적 사이트들이 어떤 파일을 테스트하는지는 꽤 명확하고, 원글 작성자가 말하듯 관찰할 수 있음
-
이건 기기 지문 추적에서 꽤 표준적인 관행임. LinkedIn은 아마 스크래핑 등으로부터 플랫폼을 보호하려고 이걸 쓰는 것 같고, 확장 프로그램 목록은 사용자를 식별하고 지문의 유용한 구성 요소가 될 만큼 충분한 엔트로피를 가짐
- 스크래핑을 돕는 확장 프로그램을 한 번에 만들어 쓰는 건 이미 꽤 쉽고, LinkedIn이 막을 수 있는 게 별로 없음
사람들이 며칠 만에 로컬 Chrome 확장 프로그램을 만들고 설치한 뒤, AI가 개발자 도구에 주입돼 거의 아무 웹사이트나 스크랩하게 만드는 걸 봤음. 그것도 몇 달 전 일임
이제 그런 걸 쉽게 방어할 방법은 없다고 봄. 이런 방어적 프로그래밍 조치가 쓸모없어지는 건 시간문제임
- 스크래핑을 돕는 확장 프로그램을 한 번에 만들어 쓰는 건 이미 꽤 쉽고, LinkedIn이 막을 수 있는 게 별로 없음
-
이거 환각인가? 이 인용문을 다른 곳에서는 찾을 수 없음
“browsergate에 따르면 Milinda Lakkam은 선서하에 ‘LinkedIn은 특정 확장 프로그램을 설치한 사용자에게 조치를 취했다’고 확인했다.”- 어느 정도는 맞지만, 실제 인용문은 아님. 이 링크보다 더 거슬러 올라가 보진 않았음:
https://browsergate.eu/the-evidence-pack/
LinkedIn 시스템은 “[XXXXXX]가 설치된 LinkedIn 사용자에게 조치를 취했을 수 있다.”
수정: 좋네! 들여쓰기된 텍스트가 이제 모바일 브라우저에서도 줄바꿈되는 걸 방금 봄. 적어도 ffm에서는 그렇다. 언제 고쳐진 건지 궁금함
- 어느 정도는 맞지만, 실제 인용문은 아님. 이 링크보다 더 거슬러 올라가 보진 않았음:
-
공정하게 말하면, LinkedIn의 개인정보 처리방침에는 이 정보를 수집한다고 명시돼 있음. https://www.linkedin.com/legal/privacy-policy?ref=cms.hondas... 참고
“1.5 기기와 위치
귀하가 당사 서비스를 방문하거나 떠날 때(일부 플러그인 및 타 사이트의 당사 쿠키 또는 유사 기술 포함), 당사는 귀하가 온 사이트와 이동한 사이트의 URL 및 방문 시간을 받습니다. 또한 귀하의 네트워크와 기기 정보(예: IP 주소, 프록시 서버, 운영체제, 웹브라우저와 추가 기능, 기기 식별자와 기능, 쿠키 ID 및/또는 ISP, 또는 이동통신사)를 받습니다. 모바일 기기에서 당사 서비스를 사용하는 경우, 휴대전화 설정에 따라 해당 기기는 위치 데이터를 당사에 보냅니다. GPS 또는 기타 도구로 정확한 위치를 식별하기 전에 옵트인을 요청합니다.”
여기서 관련 있는 부분은 “일부 플러그인 포함”임 -
LinkedIn 계정을 삭제했고, 이제 삶이 더 나아짐
- 현재 직장이 있는 사람이라서 할 수 있는 큰소리임. LinkedIn 계정 없이 구직하는 건 그렇게 간단하지 않음