ChatGPT가 광고 수집기를 통해 사용자의 외부 웹사이트 활동을 파악하는 방법
요약
본 기사는 OpenAI가 'ad collector'라는 메커니즘을 통해 사용자의 외부 웹사이트 활동 데이터를 수집하는 방법을 상세히 분석합니다. ChatGPT 접속 시 생성된 고유 식별자(`__obi` 쿠키)가 광고주 사이트에 설치된 작은 코드를 거쳐, 사용자가 방문한 검색 및 구매 행동 데이터와 연결되어 OpenAI로 전송됨을 밝힙니다.
핵심 포인트
- OpenAI는 `__obi`라는 쿠키를 생성하여 사용자 식별자를 확보합니다.
- 이 식별자는 광고주 사이트의 스크립트를 통해 외부 웹사이트 활동과 연동됩니다.
- 사용자의 검색, 구매 행동 등 민감한 데이터가 OpenAI로 전송될 수 있습니다.
- OpenAI Ads Manager에서 638개의 신용/대출 관련 픽셀이 활성화되어 있음을 확인했습니다.
OpenAI의 ad collector는 bzr.openai.com에서 작동하며, .openai.com 범위로 설정된 __obi라는 쿠키를 생성합니다. 이 값은 사용자가 ChatGPT에 접속해 있는 동안 유효하며 사용자의 ChatGPT 계정에 연결됩니다. 이후 이 __obi는 사용자가 방문하는 일반 웹사이트들로부터 OpenAI로 전송됩니다.
ChatGPT에서 광고를 구매하는 모든 회사는 소매업체들이 이미 Meta와 Google의 추적 코드를 설치하듯이, 자체 사이트에 작은 OpenAI 코드를 설치합니다. 이 코드가 로드되면, 사용자가 탐색 중인 페이지에 대한 데이터와 함께 __obi가 OpenAI로 전송됩니다. 여기에는 검색하는 제품, 읽는 기사, 구매 행동 등이 포함됩니다.
결론적으로 OpenAI는 사용자가 해당 사이트에서 하는 활동을 ChatGPT 계정과 연결할 수 있습니다.
저는 이 전체 메커니즘을 제 휴대폰으로 재현했으며, 두 개의 독립적인 캡처 방법을 통해 검증했고, 1,029개의 호스트 이름에 걸쳐 936개의 고유 광고주 픽셀을 포괄하는 몇 달간 관찰된 트래픽과 교차 확인했습니다.

작동 방식
1단계. ChatGPT가 식별자를 생성하고 서명합니다.
chatgpt.com에서 클라이언트는 16개의 무작위 바이트를 생성하고 POST /backend-api/bazaar/obi/sync-token (로그아웃 상태일 때는 /backend-anon/)을 호출합니다. 백엔드는 RS256 JWT를 반환합니다:
{
"iss": "chatgpt-wadi",
"aud": "bzr.openai.com",
...
}
sub는 계정이며, obi가 식별자입니다. 이 토큰은 둘을 결합하고 수집기 범위로 설정되며 60초 후에 만료됩니다. bzr은 OpenAI의 광고 플랫폼 내부 이름인 bazaar를 나타내고, wadi는 발급 서비스입니다.
2단계. 식별자가 OpenAI 도메인의 쿠키가 됩니다.
클라이언트는 교차 사이트(cross-site)로 `{
3단계. 광고주 사이트가 이를 전송합니다.
광고주의 페이지에서 OpenAI의 호스트로 세 가지 요청 유형이 전송됩니다. __obi를 포함한 경우, 휴대폰에서는 이 세 가지 모두에 담겨 전송되었습니다:
| 요청 | __obi 포함 여부 |
|---|---|
GET bzrcdn.openai.com/sdk/oaiq.min.js | 예 |
POST bzr.openai.com/v1/sdk/events with obref | 예 |
POST bzr.openai.com/v1/sdk/events, bare body | 예 |
URL은 전송되기 전에 origin과 path로 축소되며, 관찰된 23,929개의 URL 중 어느 것도 query string을 포함하지 않았습니다. Path는 유지되었으며, 수집기에는 의료 상태, 부채 해결 퍼널(debt-solutions funnel), 소송 접수 양식 등이 포함된 경로가 도달했습니다.
자동 매칭은 알려진 설정을 가진 881개의 픽셀 중 638개에서 활성화되었으며, 여기에는 관찰된 모든 신용 및 대출 광고주가 포함됩니다. 이는 OpenAI의 Ads Manager에서 제어됩니다. 블랙리스트(denylist)는 비밀번호, 일회용 코드, 카드 번호, SSN, 생년월일, 의료 기록, 진단 및 법원 필드를 제외합니다.
쿠키는 사이트를 넘나들도록 설계되었다
동일한 광고주 페이지 요청에서 다른 모든 OpenAI 쿠키는 브라우저에 의해 차단되었습니다:
| Cookie | 결과 |
|---|---|
oai-did, oaicom-stable-id | 차단됨, SameSite=Lax |
oai-client-auth-info, 세션 쿠키 | 차단됨, 도메인 불일치 |
__obi | 전송됨 |
__obi는 SameSite=None으로 설정된 유일한 OpenAI 식별자입니다.
관찰된 도달 범위
제 장치에서 Chewy, Wayfair, ThriftBooks, Eventbrite, HelloFresh, Coursera, SeatGeek 등 13개의 고유한 픽셀 ID 하에 12개 상업 웹사이트로부터 하나의 __obi 값이 OpenAI로 전송되었습니다. 모든 요청은 202로 수락되었습니다.
더 넓은 트래픽에서는 30개의 고유한 __obi 값 중 12개가 하나 이상의 광고주 하에 나타났으며, 그중 하나는 10개 이상에서 나타났습니다.
로그아웃 상태에서도 작동한다
932개의 디코딩된 동기화 토큰(sync tokens) 전반에 걸쳐 736개가 subject_type: account_user를, 196개가 anonymous를 포함했습니다. 익명 주체는 계정 주체만큼 안정적이며, 장치당 하나씩 존재하며 최소 27일 동안 지속됩니다.
OpenAI의 쿠키 정책이 말하는 것
OpenAI의 쿠키 정책은 __obi를 분석(Analytics) 쿠키로 나열하고 있으며, 유효 기간은 1년이고 chatgpt.com과 openai.com에서 사용된다고 명시합니다. 이는 해당 섹션의 유일한 항목입니다. 이 정책은 분석 쿠키가 OpenAI가 서비스가 어떻게 수행되고 사용되는지 이해하는 데 도움을 준다고 설명합니다.
OpenAI는 두 개의 별도 동의 선택지인 oai_consent_analytics와 oai_consent_marketing로 분석 및 마케팅 기능을 운영합니다.
, 그리고 제가 디코딩한 모든 sync 토큰은 consent_decision: analytics_allowed를 가지고 있었습니다.
분석에는 동의하고 마케팅에는 거부하는 사람이 이 값을 받습니다.
OpenAI의 답변
저는 9월 14일에 [email protected]과 [email protected]에 __obi가 왜 분석 쿠키로 분류되는지, 그리고 분석 동의를 부여하고 마케팅 동의는 거부하는 사용자가 여전히 이 값을 받는지 두 가지 질문을 보냈습니다. 답변은 OpenAI Support에서 왔습니다. 그들은 문의 내용을 인정하며 관찰된 사항들을 내부 검토를 위해 공유하겠다고 말했을 뿐, 어느 질문에도 답하지 않았습니다. 위에 제시된 스크립트 로드 관찰은 문의가 전송된 후에 이루어졌습니다. OpenAI가 응답하면 이 게시물을 업데이트하겠습니다.
한계점
브라우저. Android용 Chrome에서 관찰되었습니다. Safari의 Intelligent Tracking Prevention(지능형 추적 방지)는 모든 타사 쿠키를 차단하며, iOS용 Chrome은 WebKit을 기반으로 작동하므로 이 메커니즘은 어떤 iOS 브라우저에서도 작동하지 않습니다. 데스크톱 Chrome은 테스트되지 않았습니다.
게이팅(Gating). 약 5개의 ChatGPT 세션 중 1개에서 sync 토큰이 생성되었습니다. ChatGPT의 모바일 웹 클라이언트는 동기화 없이 광고를 표시합니다. 아래 단계를 따르는 사람들은 쿠키가 첨부되지 않은 상태로 픽셀이 발사되는 것을 볼 수 있습니다.
조인은 관찰되지 않았습니다. 202는 컬렉터가 쿠키와 함께 이벤트를 수락했음을 의미합니다. OpenAI가 이를 계정 서버 측에서 해결하는 것은 설계상 당연한 것이므로, 저는 그것이 발생하는 것을 지켜보지 않았습니다.
Meta는 구조적 동등물을 이미 몇 년 전에 만들었습니다. 로그인된 계정, 픽셀 발사 시 타사 쿠키, 오프사이트 전환을 프로필에 연결합니다. 이 메커니즘은 표준 광고 기술(adtech)입니다. 선례가 없는 것은 이를 AI 채팅 제품에 적용한다는 것입니다. 사람들은 이러한 제품들에게 소셜 네트워크에는 올리지 않을 만한 것들을 말하고, 이러한 제품들은 점차 그들의 이름으로 행동하게 됩니다.
픽셀의 다른 쿠키는 그렇지 않습니다. __obref는 광고주 자신의 도메인에 설정됩니다. 각 사이트는 서로 다른 값을 가지며 어떤 사이트도 다른 사이트를 볼 수 없습니다. 관찰된 2,860개의 값 중 2,828개는 정확히 하나의 광고주 아래에서 나타났습니다.
광고주들은 이것을 볼 수 없습니다. __obi
은 스크립트가 읽을 수 없는 도메인에 속합니다. 그들은 전환 픽셀(conversion pixel)을 설치했지만, 방문자들이 ChatGPT의 신원으로 해결되고 있다는 것을 알 방법이 없습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Lobste.rs AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기