Cloudflare Turnstile, 지문 채취 가능한 WebGL 요구
(hacktivis.me)- Cloudflare Turnstile의 “Verify you're human” 기기 검증이 약 일주일 전부터 WebKitGTK 기반 브라우저에서 무한 반복됨
- 여러 웹사이트 접근이 막힌 직접 원인은 Cloudflare가 WebGL을 통해 기기 지문을 얻으려는 동작으로 보임
- Turnstile 안내는 브라우저 지문 채취를 사람 여부 확인에 쓰며, 차단·무작위화 도구가 봇처럼 보이게 만든다고 밝힘
- WebKit은 이런 기능을 수년 동안 차단해 왔고, 사용자가 쉽게 끌 수 있는 개인정보 보호 옵션으로 보이지 않음
- Safari에는 예외가 있는 것으로 추정되는 반면 WebKitGTK 브라우저 전체가 차단되고, Firefox 보호 설정 사용자도 영향받을 수 있음
WebKitGTK에서 반복되는 Turnstile 검증
- Cloudflare Turnstile의 “Verify you're human” 기기 검증이 약 일주일 전부터 WebKitGTK 기반 브라우저에서 무한 반복되며 여러 웹사이트 접근을 막고 있음
- 접근 차단의 원인은 Cloudflare가 WebGL을 통해 기기 지문을 얻으려는 동작으로 보임
- Turnstile 안내 문구는 브라우저 지문 채취를 사람 여부 확인에 사용한다고 밝힘
- 지문 채취를 차단하거나 무작위화하는 개인정보 보호 도구는 브라우저를 정체를 숨기려는 봇처럼 보이게 만들 수 있음
- WebKit은 이런 기능을 수년 동안 차단해 왔고, 쉽게 비활성화할 수 있는 개인정보 보호 기능으로 보이지 않음
- Cloudflare가 Safari에는 예외를 둔 것으로 추정되는 반면, WebKitGTK 브라우저 전체가 차단된 상태가 됨
Firefox의 관련 보호 동작
- Mozilla Firefox의 WebGL 지문 채취 보호에는 Bugzilla#1916271: Gecko reveals sanitized GPU Characteristics; webkit and blink return hardcoded strings for all users 문제가 있음
privacy.resistfingerprinting은 설정에서 “Strict” “Enhanced Privacy Protection”을 선택해도 활성화되지 않음privacy.resistfingerprinting을 직접 활성화한 개인정보 보호 지향 Firefox 사용자는 향후 Cloudflare의 기기 검증을 통과하지 못할 가능성이 있음
댓글과 토론
Lobste.rs 의견들
-
Firefox에 관한 여러 가지를 기사에서 뒤섞은 것 같음. 이 작업을 직접 한 팀에 있었던 입장에서 말하면, Firefox 지문 방어는 여러 방식으로 동작함
첫째, Firefox는 이른바 “unmasked” 문자열을 포함해 WebGL vendor/renderer 문자열의 정보를 제한함. 직접 확인할 수 있는 예제 코드는 Fatih가 comment 14에 올렸음. 뭔가를 망가뜨렸다는 주장은 완전히 틀렸음
둘째, Firefox는 canvas 출력도 무작위화함. 같은 canvas에서toDataURL()을 호출해 보면 세션마다 반환값이 미묘하게 달라짐. 예를 들어 사생활 보호 모드/일반 모드나 서로 다른 container tabs에서 테스트할 수 있음
셋째, 위 기능과 다른 최근 지문 방어 기능은 실증 분석을 바탕으로 웹을 망가뜨리지 않으면서 효과적으로 동작하도록 만들었음. 대부분은 기본으로 적용되며, 더 원하면 설정에서 “Enhanced Tracking Protection”을 strict로 바꾸면 됨
넷째,resistFingerprinting모드는 설정에 없고about:config로만 접근 가능한데, 웹을 망가뜨릴 수 있음이 알려져 있기 때문임. Firefox 포크인 Tor Browser를 위해 남겨두고 있지만, 개인적으로는 Enhanced Tracking Protection 쪽 보호가 훨씬 낫다고 봄 -
지문 추적을 옹호하는 건 아니고, 현재 업무 일부라 봇 차단 도구에 관심이 있음
Cloudflare가 Turnstile로 목표하는 것은 사람이 캡차를 풀 필요 없는 봇 방어 위젯을 만드는 것 같음. 아마 지문 추적을 통해 여러 사이트에서의 행동을 관찰하면서 대부분의 사용자를 통과시키는 방식일 텐데, 이 이해가 맞는지 궁금함
지문 추적 없이도 캡차 풀이가 필요 없는 위젯이 실현 가능한가? 애초에 가능한가? Turnstile 우회가 그렇게 어렵지 않다는 얘기도 들었음 :tm:. 모든 봇 차단 위젯은 결국 모호성에 의존한 보안일 수밖에 없는 건가?- 이 분야에서 일했지만 전 직장을 대표해서 말하는 건 아님. 지문 추적은 여러 IP에 걸친 동일 사이트 내 단일 행위자 트래픽을 연결하는 데 쓰임
여러 사이트를 돌아다니는지는 별로 중요하지 않고, 같은 사이트에 여러 번 접근하는지를 잡아내는 게 핵심임
지문 추적 없이 캡차 없는 위젯을 만들려면 하드웨어 증명도 동작하긴 함. 하지만 모두가 싫어함. Apple은 하드웨어 증명을 제공하고, Cloudflare가 Safari에서 이를 사용하기 때문에 Safari는 canvas 무작위화를 해도 통과할 수 있음. 이 블로그 글과 달리 Cloudflare가 Safari 예외를 둔 게 아님
작업 증명을 요구할 수도 있지만, 저가형 Android 폰만 가진 많은 웹 사용자를 배제해도 괜찮고, 개별 봇 행위의 가치가 낮아 봇 운영자가 작업 증명을 수행할 유인이 없어야 함. 이런 조건은 가끔 맞지만 쇼핑몰이나 은행 같은 곳에는 맞지 않음
그 외에는 좋은 해법이 없음. Turnstile은 잘 모르지만, 내가 있던 회사 제품은 대규모 우회가 확실히 어려웠음. 다만 대규모가 아닐 때는 일부러 어렵게 만들지 않았고, Cloudflare도 같은 선택을 했어도 놀랍지 않음
모든 봇 차단 위젯의 목적은 봇을 불가능하게 만드는 게 아니라, 웹사이트를 봇으로 공격하는 일을 경제적으로 불가능하게 만드는 것임. 그래서 다른 사이버 보안과는 게임이 다르고, 모호성은 꽤 잘 통함. 시간이 지나도 상대가 계속 추가 비용을 들이게 만드는 게 목적임 canvas/webgl지문 추적은 웹 스크래퍼에게는 사실상 해결된 문제임. 웹 스크래핑 관련 직무 면접 질문으로도 나옴
흔한 해법은 그리기 명령을 추출하는 것임. 명령을 덤프하는 수정 브라우저를 쓰거나, 스크립트를 난독화 해제해서 얻을 수 있음
그다음 추출한 canvas/webgl 스크립트를 자신이 가진 사이트에 올려, 방문자들로부터 봇에 재사용할 지문을 생성하면 됨
이 방식은 꽤 견고함. 이런 지문 추적 스크립트는 거의 바뀌지 않는데, 바꾸면 canvas → GPU/vendor/browser/OS 쌍 데이터베이스가 무효화되기 때문임
요약하면 일반 사용자만 더 불편하게 만들고, 진지한 웹 스크래퍼들은 이미 여러 우회 전략을 알고 있는 또 하나의 사례임
- 이 분야에서 일했지만 전 직장을 대표해서 말하는 건 아님. 지문 추적은 여러 IP에 걸친 동일 사이트 내 단일 행위자 트래픽을 연결하는 데 쓰임
Hacker News 의견들
-
Cloudflare는 스크래퍼 탐지에 브라우저 지문 채취를 쓰는 것으로 알려져 있음. 예를 들어 JA3 지문을 사용자 에이전트와 대조해 cURL 같은 것은 막고 OkHttp(Android 클라이언트)는 허용하지만, CycleTLS 같은 패키지로 쉽게 위장 가능함 [1]
“봇 보호”로 인터넷의 큰 부분을 가로막기 때문에 옹호하고 싶진 않지만, 작업 증명(PoW)을 쓰지 않는다면 지문 채취가 현실적인 방법일 수 있고, 그 결과 관련된 모두의 프라이버시가 완전히 망가짐
Android용 Chromium의 프라이버시 중시 포크인 Cromite는 Cloudflare Turnstile과 계속 문제가 있는데 [2], Cloudflare가 챌린지를 통과시키려고 여러 방식으로 지문을 채취하기 때문임
해결하려면 Cloudflare Browser Developer 프로그램에 들어가야 하는데 NDA 서명이 필요했고, 프로젝트 관리자가 거부한 것은 정당해 보임
Cloudflare가 브라우저 지문을 얼마나 깊게 캐는지 보려면 이슈 [2]에서 챌린지를 통과하려고 어떤 플래그들을 꺼야 하는지 보면 됨. 최소한 Cloudflare가 사람을 폼 제출이나 웹사이트 접근에서 그냥 막는 대신 작업 증명으로 대체할 만큼은 유연할 수 있다고 봄
[1]: https://github.com/Danny-Dasilva/CycleTLS
[2]: https://github.com/uazo/cromite/issues/2365- Cloudflare의 “봇 보호”는 인터넷의 큰 부분뿐 아니라 많은 사람들도 가로막음. 웹사이트 접근 권한 통제를 아무 고민 없이 한 회사에 외주화하는 흐름이 매우 걱정됨
- 지문 채취 기반 봇 보호는 환상에 가까움. 클라이언트 쪽 신호는 평균 이상만 되어도 위조할 수 있고, 지문 채취는 광고 사업을 위한 시장 집중 수단일 뿐임
가정용 IP와 상업용 대역에 평판을 부여하는 것도 원하는 결과를 얻는 다른 방식일 수 있음. 사업자들이 IP 오남용을 훨씬 조심하게 만들겠지만, 그렇게 되면 공격자와 방어자 양쪽의 DDoS 사업이 같이 무너질 수 있음
아이러니하게도 자기 봇을 만들면서 다른 회사 봇을 막는 방법에도 투자하는 회사들이 꽤 많음 - Cloudflare의 스크래핑 방지는 5달러짜리 자물쇠 정도라 전부 헛수고임. 심심한 10대는 막을 수 있어도 아마추어 도둑도 못 막는 수준이고, 누군가 공개 데이터를 긁고 싶다면 결국 긁어 감. 막을 방법은 없음
- “봇 보호”를 위한 지문 채취는 대규모 감시를 위한 지문 채취와 구분할 수 없음
- 작업 증명이 생태적으로 악몽이라는 부분을 더 설명해 줬으면 함. 대략 계산해 보면 큰 문제로 보이지 않음
5W 부하를 2초 주면 0.002Wh이고, 스마트폰도 통과해야 하니 수십 초짜리 작업 증명을 시킬 수는 없음. 하루 80억 번 검사를 1년 해도 8GWh임
-
privacy.resistfingerprinting이 “Strict” “Enhanced Privacy Protection”을 골라도 켜지지 않는 데는 이유가 있음. 오래 켜고 써 봤지만 웹사이트가 이상하게 깨져서 계속 꺼야 했고 우회도 추가해야 했음
일정 사이트의 시간대 처리가 꼬여 약속을 몇 번 놓칠 뻔했음. 사용자에게 Firefox가 망가진 게 아니라고 알리려면 “웹사이트가 깨지거나 이상한 글리치가 보이거나 컴퓨터 시간이 틀리거나 글꼴이 이상하거나 영상이 가끔 안 나오면 여기를 눌러 지문 보호를 끄세요” 같은 상시 배너가 필요할 정도임
흥미롭게도 Turnstile은resistfingerprinting에서는 깨지지만fingerprintingProtection에서는 동작함. 후자는 이런 쓰레기 같은 상황을 고려한 듯함- 기본값으로 켜지 않는 이유로는 괜찮을 수 있지만, Strict 설정에서도 켜지지 않는 이유로는 나쁨
Strict 설정에서는 사이트가 깨질 수 있다고 어느 정도 예상하지만, 추적 경로가 여전히 활짝 열려 있을 거라고는 기대하지 않음. 기만적으로 느껴짐
- 기본값으로 켜지 않는 이유로는 괜찮을 수 있지만, Strict 설정에서도 켜지지 않는 이유로는 나쁨
-
소수 브라우저를 유지보수 중인데[0], 몇 주 전부터 여러 사용자가 이 문제를 겪고 있음[1]. 지금은 브라우저 버그로 보진 않지만 물론 관련 버그가 있을 수도 있고, 더 많은 사람이 보면 좋으니 상황을 개선하거나 완화할 아이디어와 도움이 필요함
[0]: https://konform-browser.codeberg.page/
[1]: 대부분인지 전부인지는 모름. 원격 측정 없이 사용자 제보와 자체 테스트에 의존하는 중임 -
“위장한다는 걸 들켰다면 충분히 빡세게 위장하지 않은 것이다.”
이 멍청한 봇과의 전쟁은 인터넷의 몰락으로 이어지고, 결국 “승인된” 사용자 적대적 에이전트만 허용되는 또 다른 폐쇄 정원으로 만들 것임. “AI 스크래퍼” 운운하는 헛소리에 넘어가면 안 됨. 동의를 제조하기 위한 수단일 뿐임- 봇이 서버를 두들기면 속도 제한을 걸면 됨. 다른 사람이 접근하길 원하지 않는 콘텐츠라면 웹서버로 제공하지 않으면 됨
-
Google과 Cloudflare가 비 Chrome 브라우저를 쓰기 어렵게 만들기로 거래라도 한 건가? Chrome을 쓰라는 압박은 계속 커지고, Chrome에서 할 수 있는 광고 필터링은 계속 줄어들고 있음
- Chrome이 웹에서 가장 인기 있는 브라우저라 생기는 자연스러운 결과 중 하나일 가능성이 큼. 정상 트래픽 대부분이 Chrome에서 올 테니까
- 5년 전 Cloudflare를 떠날 때 내부 사용 승인 브라우저는 Chrome뿐이었음
- 거기서 끝나지 않음: https://blog.cloudflare.com/eliminating-captchas-on-iphones-...
-
뭔가를 숨기면 자동으로 “숨길 이유가 있는 에이전트” 쪽으로 분류됨
분명히 말하자면 그게 핵심 문제임. 인터넷의 그렇게 많은 부분이 Cloudflare를 거쳐 가는 만큼, 특정 신호 하나보다 더 강하게 악의적 행위자가 아님을 보여 줄 대체 신호가 충분히 있어야 함
다만 같은 설정을 쓰는 사용자가 기반 안에 거의 없어서 실제 해결책이 나오기까지 매우 오래 걸릴 수도 있음 -
“신원을 숨기려는 것 같습니다”라고 하지만, 애초에 그들이 그걸 요구할 권리는 없었음
- 같은 논리라면 웹사이트 콘텐츠를 볼 권리도 없는 셈임
-
privacy.resistfingerprinting을 몰랐는데, 앞으로는 모든 Cloudflare Turnstile을 실패하게 둘 생각임- 켜 둔 상태에서도 Turnstile은 잘 동작함
-
privacy.resistfingerprinting설정은 Tor Browser를 위한 것임- Tor Browser에서는 기본으로 켜져 있고, 끌 수 있는지도 확실하지 않음
Tor Browser의 프라이버시·보안 관련 패치를 많이 가져온 Konform Browser와 Mullvad Browser에서도 기본으로 켜져 있음
- Tor Browser에서는 기본으로 켜져 있고, 끌 수 있는지도 확실하지 않음
-
범죄 관련 격언 중 인구의 X%가 어떤 법을 어기고 있다면 그 법은 폐지하는 게 맞다는 말을 좋아함. 기호용 마약이 명백한 예임
무작위 canvas 처리가 봇 행위로 단속됐는데 이제 Firefox를 쓰는 모두가 하고 있다면, Cloudflare도 그냥 “합법화”해야 하는 것 아닐까 싶음