꿈을꾸는 파랑새

오늘은 최근 알리익스프레스(AliExpress) 에서 문제가 된 겨진 WebAudio 핑거프린팅 fireyejs.js 의 핑거 프린터에 대해 fireyejs.js 간단 분석을 하는 시간을 가져 보겠습니다.
파일명:fireyejs.js
사이즈:1 MB
MD5:969780e3a834113b9c3bbc9fdd42794e
SHA-1:8d3764b74630b9c45b44a19f6a9d0d5943cffc5e
SHA-256:f86050b7d92e68c58e6c4fad72b18159b1c817b50050bf8b8e0553fde8db2163
일단 해당 부분은 악성코드는 아니고 핑거프린터 이기 때문에 해당 보안 제품으로는 탐지가 안 되면 기본적으로 자바스크립트로 난독화 되어져 있는 것이 특징입니다.
제작 목적: 주 브라우저, 장치 fingerprint+사용자 행동 분석+Bot,Automation 탐지
사용자 마우스, 터치 추적: 있음
Alibaba AWSC 계열 코드 노골적으로 AWSCInner 이 존재
외부에 노출하는 것으로 보이는 API 확인

fireyejs 파일 내부 모습
fireyejs 파일 내부 모습

getFYToken
getUBHeader
getUidToken
getVersion
resetSA

코드 안에는 Alibaba 인프라와 직접 연결되는 호스트 존재
코드 내 정적 분석을 회피하기 위한 다중 난독화 기법이 적용되어 있음
주요 데이터는 문자열을 거꾸로 저장하고 문자 코드에 XOR 연산을 수행한 상태로 존재하게 하면 복호화 루틴 내에서 문자 코드에 특정 상수를 차감하는 보정 연산을 거쳐 원본을 복원하게 코드로 구성돼 있음

난독화 해제
낙독화 해제


이렇게 복원된 조각들은 런타임 문자열 조합을 통해 동적으로 완성되고 구문 중간마다 결과에 영향을 주지 않는 의미 없는 산술식을 삽입해 연산 흐름을 방해하는 역할

Alibaba 인프라와 직접 연결되는 호스트
Alibaba 인프라와 직접 연결되는 호스트

즉 특정 상태 번호를 이용한 불투명 조건문을 배치하여 무의미한 분기 코드를 다수 생성해서 주요 로직 탐지를 방지하기 위해 배열 인덱스를 통한 API 명 간접 참조 방식으로 동적 호출을 수행하도록 구성된 것이 특징

2. 사용자 행동 수집

mousemove
movementX
touches
changedTouches
clientX
clientY
pageY
timeStamp
getBoundingClientRect

마우스 움직임 관련 코드
마우스 움직임 관련 코드

기본적으로 마우스가 움직임 여부가 아니고 좌표 변화량과 이벤트 간 타이밍을 압축하여 행동 특성으로 변환하는 구조가 존재
초반의 o(), c(), m() 같은 함수는 좌표
상태 값의 처분을 계산하고 variable-length integer 형태로 직렬 화
대역폭 최적화 (Network Overhead Reduction)마우스 이동(mousemove) 및 터치 이벤트는 초당 수십~수백 번 지속적으로 발생
이를 키-값 형태의 JSON 문자열(예: {"x": 1050, "y": 400, "time": 1700000000})로 전송하면 오버헤드가 심해짐
절대 좌표 대신 차분($\Delta X, \Delta Y, \Delta T$)만 계산하여 Varint,ZigZag 알고리즘으로 패킹하면 패킷 크기를 바이트 단위까지 줄일 수 있게 됨
마우스 궤적의 미세한 흔들림, 반응 시간 간격
클라이언트 SDK 단계에서 이미 차분값을 직렬 화한다는 것은 서버의 탐지 엔진이 패킷을 수신하는 즉시 손쉽게 물리적 이동 법칙(사람의 손가락 움직임 특성)과 배합해 봇 여부를 판별하도록 설계
네트워크 패킷 분석 방어 (Anti-Analysis)Network 탭에 노출되는 Payload가 사람이 읽을 수 있는 JSON 형태가 아닌 난독화된 바이트 배열로 인코딩으로 처리해버림

가상 머신(VM) 및 변환 로직(o, c, N, T 등)을 완벽히 리버스 엔지니어링 하지 않고서는 봇 개발자가 유효한 마우스 이동 이벤트를 위조(Spoofing)하기 어렵게 만드는 역할을 수행

3.Audio fingerprinting

일단 문제의 Audio fingerprinting(오디오 핑거프린팅)부분 입니다.
AudioContext
createOscillator
createAnalyser
createScriptProcessor
gain
sawtooth
onaudioprocess
oscillator->analyser->ScriptProcessor 형태의 그래프를 구성
실제 음악 재생용이라기보다 Audio fingerprint 생성
브라우저,OS,오디오 스택에 따라 floating-point 처리 결과가 미세하게 달라지기 때문에 fingerprint 신호로 사용

톱니파 파형 생성 createOscillator() 부분
톱니파 파형 생성 createOscillator() 부분

핵심은 AudioContext를 만들고 나서 일정한 파형을 생성하고 브라우저가 그 신호를 처리하는 방식과 오디오 컨텍스트의 상태를 하나의 환경 특징값으로 사용하는 구조
도청이 아닌 오디오 스택 핑거프린팅
getUserMedia()(마이크 권한)가 없으므로 사용자 음성 녹음과 상관없음
내부 가상을 가공하여 기기, OS, 브라우저의 오디오 엔진 연산 특성을 측정하는 정적 핑거프린팅 기법
무음(Muted) 처리:오디오 파이프라인
구조 톱니파 생성 (sawtooth)
고조파(Harmonics)가 풍부한 신호를 생성하여 CPU 및 DSP 부동소수점 연산 오차를 극대화
데이터 추출 (AnalyserNode, ScriptProcessor): Gain 노드 전 단계에서 신호를 수집하므로 분석기에는 정상 데이터가 들어오게 되며
음소거 처리 (Gain = 0 $\rightarrow$ destination):출력을 0으로 만들어 사용자에게는 소리가 들리지 않지만 브라우저가 오디오 파이프라인을 구동하여 일회성 onaudioprocess 콜백을 정상 실행하게 함
안티봇 탐지 지표 활용환경 식별:API 메서드 존재 여부,baseLatency(지연 시간),state(AudioContext 상태) 등을 결합 해서 OS, 오디오 드라이버, 브라우저 엔진 조합을 식별
AcTimeOut 타임아웃 감지:API 구현체만 흉내 내고 실시간 렌더링 콜백을 처리하지 못하는 가상화,자동화 브라우저(Headless Chrome 등)를 걸러내며
교차 검증 (Risk Scoring):오디오 핑거프린트 단독 판단이 아닌 WebGL, 마우스 궤적, Webdriver 여부 등과 종합 평가하여 종합 위험 점수를 산출
Web Audio의 주파수인 440 Hz가 사용
440 Hz =1×440
880 Hz =2×440
1320 Hz =3×440
1760 Hz=4×440
2200 Hz =5×440
´µ°±에서 각 문자 코드에 -65를 적용하면 멈춘 상태가 됩니다.

ingerprinting anti-bot 로직을 자동 분석하기 어렵게 만드는 코드
ingerprinting anti-bot 로직을 자동 분석하기 어렵게 만드는 코드

4. 블루투스 관련 부분

navigator.mediaDevices.enumerateDevices()
를 사용
API가 반환하는 장치에는 환경과 권한 상태에 따라 포함되는 코드
audioinput
audiooutput
videoinput
따라서 Bluetooth 헤드셋이 OS에서 오디오 장치로 등록되어 있으면
AirPods Microphone
AirPods Output
Bluetooth Headset
같은 장치가 브라우저의 미디어 장치 목록에 반영될 가능성이 있으며 해당 코드는 Bluetooth라는 무선 기술 자체를 찾는다기보다 Bluetooth 장치를  오디오 장치로 간접적으로 나마 관찰할 수 있습니다. 
AudioContext 쪽도 간접적인 영향을 줄 수가 있습니다.
이때 시스템 기본 출력 장치가 Bluetooth 이어폰이면 브라우저의 오디오 backend가 Bluetooth 오디오 경로를 사용할 수 있으며
그래서 baseLatency,sample-rate,오디오 처리 상태 같은 값이 유선,내장 스피커와 Bluetooth 출력에서 달라질 가능성은 있음
해당 자바스크립트는 440,880 Hz 같은 신호를 만들어서 Bluetooth 무선 주파수 자체에 영향을 주는 것은 아니며
440 Hz는 오디오 신호의 주파수 이고 Bluetooth 무선은 2.4 GHz 대역을 사용하므로 완전히 다른 부분

OfflineAudioContext 생성 코드
OfflineAudioContext 생성 코드

핵심 동작

브라우저, 장치 지문 수집: 화면 크기, devicePixelRatio,WebGL/GPU 기능,AudioContext,미디어 장치,플러그인,메모리 정보 등을 확인
자동화 탐지:navigator.webdriver,Selenium,ChromeDriver 흔적,isTrusted 같은 이벤트 속성을 검사
행동 분석: 마우스 이동, 터치 좌표, 이벤트 타임스탬프 등을 수집하고 차분값 형태로 압축해 처리
WebRTC 네트워크 탐색:RTCPeerConnection,STUN을 사용하고 stun(.)qq(.)com 및 127(.)0(.)0(.)1:20555/20556 같은 로컬 STUN probe도 수행
오디오 fingerprinting: AudioContext에서 기본 440 Hz의 sawtooth oscillator를 만들고 AnalyserNode, ScriptProcessor(4096,1,1),GainNode를 연결
출력 Gain은 0이라 사용자가 소리를 듣지는 않지만, 내부 오디오 처리는 실행
Bluetooth 관련:navigator.mediaDevices.enumerateDevices()와 AudioContext 때문에 Bluetooth 헤드셋이 OS 오디오 장치로 연결되면 장치 구성이나 latency 같은 값이 간접적으로 fingerprint에 영향을 줄 수 있음
암호화 직렬화:AES-CBC와 자체적인 바이너리 인코딩 압축 루틴이 존재
원격 통신:Alibaba 관련 서버 및 동적 dss(.)js 로딩 코드가 존재
2026.8.28 기준으로 현재 핑거프린터 오디오 부분 탐지 안 된 해당 핵심 파일인 fireyejs 부분 일부 코드 변경 확인

각 브라우저 별로 대응 방법

Firefox:향상된 추적 방지 엄격
about:config 에서 privacy.resistFingerprinting=true 필요 시,media.peerconnection.enabled=false,dom.webaudio.enabled=false 가장 강함,WebRTC,Audio,화면/시간대 fingerprint를 폭넓게 줄일 수 있음
Brave:Shields 강하게 Fingerprinting 차단 Aggressive,제3자 쿠키 차단 
Google Chrome:제3자 쿠키 차단, 카메라/마이크 거부, 사이트별 JS 차단 
중간,WebAudio/WebRTC 세부 제어 부분은 약함
Microsoft Edge:추적 방지 엄격,제3자 쿠키 차단,권한 차단  Chrome보다 약간 나음
Safari(사파리):교차 사이트 추적 방지,Fingerprinting Protection,카메라/마이크 거부
Apple 환경에서는 꽤 효과적
Samsung Internet:스마트 추적 방지,추적 방지 강화,쿠키 차단,사이트 권한 제한, 콘텐츠 차단 앱 사용
WebAudio/WebRTC 자체를 Firefox처럼 완전히 끄기는 어려움
Naver Whale:추적 방지/쿠키 차단,사이트 권한 제한,필요 시 확장 프로그램으로 도메인 차단,Chromium 계열이라 Chrome과 비슷한 한계가 있음
삼성 인터넷은 Chromium 기반이지만 기본 개인정보 보호 기능이 비교적 잘 갖춰져 있습니다. 우선 다음을 권장합니다.
스마트 추적 방지,추적 방지 기능을 가장 강한 수준으로 설정
드파티 쿠키 차단
사이트 권한에서 마이크/카메라 거부
삼성 인터넷이 지원하는 콘텐츠 차단 앱 을 사용해서 추적 도메인 차단
민감한 사이트에서는 JavaScript 자체를 사이트별로 차단하는 것도 효과적
다음 호스트를 차단하는 방식이 효과적
ph5(.)ynuf(.)aliapp(.)org
.tdum(.)alibaba(.)com
입력 시 () 부분은 없애고 입력
인터넷에서는 Firefox처럼
media.peerconnection.enabled =false
dom.webaudio.enabled = false
대충 해당 자바스크립트 기준 브라우저별 방어력 순위
Firefox+resistFingerprinting->Brave->Safari->Samsung Internet->Edge->Whale->Chrome
이며 앞서 이야기한 것처럼 변경되었으니 해당 브라우저 부분도 순위도 변경될 수가 있음
Firefox:uBlock Origin+CanvasBlocker
Samsung Internet:AdGuard Content Blocker 계열
Whale/Chrome/Edge:uBlock Origin Lite 계열+사이트별 JavaScript 차단
그냥 해당 브라우저에서 CanvasBlocker 부가기능 설치할 수가 있으며 해당 CanvasBlocker 부가기능 설치를 하는 것이 제일 좋음
추적 방지를 가장 중요하게 생각한다면 Tor Browser도 좋은 선택
Tor 네트워크는 여러 릴레이를 거쳐 통신하기 때문에 일반 브라우저보다 IP 기반 추적과 브라우저 지문 추적에 강하며 다만 미국과 유럽의 수사기관 역시 Tor와 다크웹을 이용한 범죄를 지속적으로 수사하고 있기 때문에 Tor를 사용한다고 해서 완전한 익명성이 보장되는 것은 아닙니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band