블루투스 멀티포인트 헤드폰 사용 중 AliExpress 홈페이지를 열면 PC 오디오 경로가 활성화되어 휴대폰 음악 재생이 중단되는 문제가 발생했다. 조사 결과, AliExpress는 콜리나.js와 파이어아이즈.js라는 난독화된 스크립트를 통해 두 개의 숨겨진 WebAudio 컨텍스트를 생성했다. 이들은 제로 게인 노드로 시스템 오디오에 연결되어 사용자에게 들리지 않는 오디오 핑거프린팅을 수행한다. 이는 캔버스, WebGL, 하드웨어, 타이밍 등 다양한 측정을 포함한 광범위한 브라우저 핑거프린트의 일부이며, 사기 탐지나 사용자 추적에 사용되는 것으로 보인다. uBlock Origin 필터로 이 두 스크립트를 차단하면 문제가 해결된다. 이 숨겨진 오디오 처리는 브라우저 음소거로 제어할 수 없으며 하드웨어 동작에 실제 영향을 미치므로 차단이 합리적이다.
최근에 블루투스 헤드폰에서 이상한 문제를 발견했습니다. 이 헤드폰은 멀티포인트 블루투스 오디오를 지원해서 PC와 휴대폰에 동시에 연결할 수 있습니다. 보통은 PC가 오디오 재생에서 우선순위를 가지며, PC에서 아무것도 재생 중이 아닐 때는 휴대폰이 오디오를 재생할 수 있습니다.
평소에는 휴대폰으로 음악을 듣지만 PC에서 알림이나 YouTube가 재생되는 상황에서는, Firefox나 Chrome에서 AliExpress 페이지를 열기 전까지는 이 기능이 안정적으로 작동했습니다(다른 브라우저는 테스트하지 않았습니다).
AliExpress 홈페이지를 불러온 직후에는 휴대폰의 오디오가 재생을 멈추었습니다. AliExpress 탭을 닫으면 즉시 해결됩니다. 탭/Firefox/Windows를 음소거해도 도움이 되지 않으며, 페이지에서 보이는 동영상, 음악 또는 다른 미디어가 재생되고 있지 않았습니다.
조사할 만큼 의심스러운 상황이었습니다.
숨은 미디어 찾기
가장 먼저 든 생각은 자동 재생되는 제품 동영상이나 광고였기 때문에, 흔한 용의자들을 확인해 봤습니다:
그 중 어떤 것에서도 유용한 단서를 찾지 못했습니다. 오디오나 비디오 요소도 없었고, 미디어 재생 호출도 없었으며, navigator.mediaSession.playbackState는 none으로 유지되었습니다.
한 가지 단서는 문제가 즉시 시작되지 않는다는 점이었습니다. 페이지가 몇 초 동안 유휴 상태로 있은 뒤에 문제가 나타났습니다. 그래서 페이지를 로드하기 전에 계측(instrument)을 해두고, 기존의 미디어 요소만 찾는 대신 Web Audio API를 관찰했습니다.
기본 아이디어는 AudioContext 생성자를 감싸서, 페이지가 오디오 처리 컨텍스트를 생성할 때마다 기록하는 것이었습니다:
또한 AudioNode.prototype.connect()도 감싸서 컨텍스트의 오디오 목적지에 무언가가 연결되는지 확인할 수 있게 했습니다.
드디어 찾았습니다. 숨겨진 오디오 컨텍스트 두 개였습니다!
AliExpress 홈페이지의 유휴 상태 캡처 동안 페이지는 두 개의 AudioContext 객체를 생성했습니다. 둘 다 running 상태에 들어갔고, 둘 다 AudioContext.destination에 노드를 연결했습니다.
동시에 여전히:
생성자 스택 추적은 두 개의 스크립트를 가리켰습니다:
첫 번째 컨텍스트는 collina.js가 생성했고, 두 번째는 fireyejs.js에서 나왔습니다. 둘 다 AWSC 디렉터리 아래에 있으며 알리바바의 브라우저 보안 및 남용 방지 도구의 일부로 보입니다.
스크립트는 극도로 난독화되어 있지만, AI가 오디오 코드가 무엇을 하는지 알아낼 수 있을 만큼의 이름과 연산은 남아 있습니다.
오디오 코드가 하는 일
두 스크립트 모두 다음과 같은 WebAudio 그래프를 구축합니다:
발진기(oscillator)가 알려진 파형을 생성합니다. 분석기(analyser)는 브라우저의 오디오 구현을 통과한 결과를 측정하고, 스크립트는 그로부터 주파수 데이터를 읽습니다.
게인(gain)은 0으로 설정되어 사용자는 아무것도 들을 수 없습니다. 그러나 그래프는 여전히 시스템 오디오 목적지에 연결되어 있습니다. 목적지에 연결하면 최종 볼륨이 0이더라도 브라우저가 그래프를 적극적으로 처리하게 됩니다.
이것은 자동 재생되는 동영상과는 매우 다릅니다. 브라우저의 일반적인 탭 음소거 제어가 중지시킬 미디어 요소가 없습니다. 페이지 입장에서는 실시간 오디오 처리를 수행하고 있는 것입니다.
제 경우에는 이것이 Firefox나 Windows가 블루투스 오디오 경로를 활성 상태로 유지하기에 충분했으며, 멀티포인트 헤드폰이 휴대폰으로 깔끔하게 다시 전환되는 것을 막았습니다.
이것은 핑거프린팅처럼 보입니다
WebAudio 테스트가 이 스크립트들의 유일한 측정은 아닙니다. 번들을 검사해 보니 다음을 쿼리하거나 측정하는 코드가 있었습니다:
또한 결과를 직렬화하고 암호화하는 코드, 알리바바 텔레메트리 서비스에 요청을 보내는 코드, fetch() 또는 sendBeacon()으로 데이터를 전송하는 코드도 있습니다.
이것은 상당히 포괄적인 브라우저 및 기기 핑거프린트입니다.
오디오 핑거프린팅이 작동하는 이유는 브라우저 버전, 운영 체제, 오디오 라이브러리 및 하드웨어의 작은 차이가 동일한 생성 신호에서 약간 다른 결과를 만들어낼 수 있기 때문입니다. 이는 단독으로는 기기를 고유하게 식별하기에 충분하지 않을 수 있지만, canvas, WebGL, 하드웨어, 타이밍 및 상호작용 데이터와 결합하면 훨씬 더 유용해집니다.
결과 데이터가 서버에 도달한 후 AliExpress가 무엇을 하는지는 알 수 없습니다. 지속적인 기기 식별자로 사용될 수도 있지만, 사기 또는 봇 탐지 점수의 입력 중 하나가 될 수도 있습니다.
AliExpress가 이것을 원하는 이유
AliExpress는 일반 쇼핑객과 자동화되거나 의심스러운 클라이언트를 구분하고 사용자의 검색 습관을 추적해야 할 이유가 많습니다. 사이트는 계정 탈취, 가짜 계정, 스크래핑, 자동 구매, 결제 사기, 리뷰 조작, 쿠폰 또는 신규 고객 프로모션 남용을 처리해야 합니다. 또한 대부분의 대기업처럼 제품과 서비스를 더 잘 마케팅하기 위해 방대한 사용자 행동 데이터 세트를 활용합니다.
쿠키는 지워지거나, 복사되거나, 교체될 수 있기 때문에 이 목적에 특히 신뢰할 수 없습니다. 여러 독립적인 브라우저 측정으로 만들어진 핑거프린트는 일관되게 조작하기가 더 어렵습니다.
상호작용 데이터는 브라우저가 사람에 의해 제어되는지 자동화에 의해 제어되는지 판단하는 데도 도움이 될 수 있습니다. AliExpress의 관점에서 이는 사기를 줄이고 몇 페이지마다 CAPTCHA를 보여주지 않고도 신뢰할 수 있는 고객을 통과시킬 수 있습니다. 물론 AliExpress가 AI 생성 CAPTCHA를 꺼리는 것은 아니지만요.
개인적으로 나는 쇼핑 홈페이지가 내 그래픽, 오디오, WebRTC, 하드웨어 및 모션 API 등을 조용히 사용하여 내 행동을 추적하는 것을 원하지 않습니다. 특히 음악을 차단하는 것처럼 성가신 영향을 준다면 더욱 그렇습니다. 아마 AliExpress가 음악을 차단하지 않았다면 사이트가 무엇을 하는지 조사하지 않았을 것입니다.
uBlock Origin으로 차단하기
식별된 두 스크립트 계열을 차단해 보았습니다. 두 요청 모두 차단된 상태에서 AliExpress 홈페이지는 계속 렌더링되었고, 대조 캡처 중에는 AudioContext 객체나 목적지 연결이 나타나지 않았습니다.
Firefox에서 저는 Raymond Hill의 공식 uBlock Origin 확장 프로그램을 사용합니다. 스크립트를 차단하려면 uBlock 대시보드를 열고 내 필터(My filters)를 선택한 다음 다음을 추가하세요:
변경 사항 적용(Apply changes)을 클릭하고, 열려 있는 AliExpress 탭을 모두 닫은 다음 사이트를 다시 여세요. 기존 탭은 닫아야 합니다. 왜냐하면 스크립트를 차단해도 이미 생성된 오디오 컨텍스트가 종료되지는 않기 때문입니다.
이 규칙은 의도적으로 좁게 설정되었습니다. 관찰된 두 스크립트 계열만, 그리고 AliExpress가 요청할 때만 차단합니다. 이것이 나중에 더 이상 작동하지 않게 되어도 놀라지 않겠습니다. 그때 가서 그때 처리하겠습니다.
이 스크립트들은 사기 방지 시스템과 연결된 것으로 보이기 때문에, 차단하면 추가 CAPTCHA가 나타나거나 로그인 또는 결제 중 문제가 발생할 수 있습니다. 지금까지 홈페이지와 일반적인 제품 검색은 정상 작동하지만, AliExpress가 정당한 로그인이나 결제를 거부하면 규칙을 일시적으로 비활성화할 것입니다.
내가 차단하는 이유
사기 방지 사용 사례는 이해할 수 있지만, 이 구현은 실제 세계에서 문제가 있습니다.
민감한 작업을 수행하기 전에 일반 쇼핑 홈페이지에서 실행됩니다. 광범위한 기기 및 행동 측정을 수집하고, 구현은 의도적으로 검사하기 어렵게 되어 있으며, 페이지가 실시간 오디오 처리 그래프를 시작했다는 시각적 표시가 없습니다.
또한 매우 실제적인 하드웨어 부작용을 만들었습니다. 조용한 핑거프린팅 테스트가 블루투스 멀티포인트 전환을 방해할 수 있었는데, 브라우저의 음소거 제어는 아무것도 하지 못했습니다!
숨겨진 분석 또는 보안 기능이 외부 하드웨어의 동작을 바꿀 정도로 오디오 경로를 장악할 수 있다면, 차단하는 것이 합리적인 절충안으로 보입니다.
또한 AliExpress가 핑거프린트를 얼마나 오래 저장하는지, 다른 알리바바 자회사에서 사용되는지 증명할 수 없습니다. 클라이언트 코드는 광범위한 핑거프린트류 측정이 수집되고 전송된다는 것을 증명하지만, 서버 측 보존 및 신원 연결은 브라우저에서 볼 수 없습니다. 인터넷에서 진심으로 당신의 이익을 생각해 주는 사람을 정말 믿을 수 있을까요?
요약
AliExpress 홈페이지는 심하게 난독화된 알리바바 보안 스크립트로 두 개의 실행 중인 WebAudio 그래프를 조용히 생성합니다. 이 그래프는 훨씬 더 큰 브라우저 핑거프린트의 일부로 파형을 생성하고 분석한 다음, 0 게인 노드를 통해 시스템 오디오 목적지에 연결하여 사용자가 아무것도 듣지 못하게 합니다.
제 환경에서는 이것이 PC의 블루투스 오디오 경로를 활성 상태로 유지하고 멀티포인트 헤드폰이 휴대폰으로 다시 전환되는 것을 막는 것처럼 보입니다. 탭을 음소거해도 해결되지 않는데, 음소거할 기존의 미디어 요소가 없기 때문입니다.
위의 두 uBlock Origin 규칙으로 collina.js와 fireyejs.js를 차단하면 숨겨진 오디오 컨텍스트가 생성되지 않으며, AliExpress를 탐색하는 동안 방해받지 않고 음악을 즐겨 들을 수 있습니다.
저작권
: WebAudio로 멀티포인트 Bluetooth 헤드폰을 활성 상태로 유지하는 AliExpress 웹페이지