- 여러 플랫폼의 연령 인증 절차를 자동으로 성인으로 통과시키는 스크립트가 공개됨
-
Discord 콘솔에 코드를 붙여넣어 실행하면, 자동으로 /age-verification/verify API 요청을 보내고 인증 완료 페이지로 이동함
-
Twitch, Kick, Snapchat 등 다른 플랫폼에서도 QR 코드 URL을 입력해 동일한 방식으로 인증 가능
- 이 도구는 k-id 시스템의 얼굴 데이터 처리 구조를 악용해, 실제 얼굴 없이도 합법적인 메타데이터를 생성함
-
AES-GCM 암호화와 예측 데이터 구조를 복제해 검증 절차를 통과시키는 방식으로, 글로벌 연령 인증 확대에 맞춰 제작됨
Discord에서의 인증 절차
- Discord 웹앱의 개발자 콘솔(F12) 에 특정 스크립트를 붙여넣어 실행하는 방식
- 스크립트는 Discord의 webpack 모듈 캐시를 추출하고, 내부 API 클라이언트를 찾아 /age-verification/verify 엔드포인트에 요청을 보냄
- 요청 결과로 받은 verification_webview_url을 age-verifier.kibty.town으로 리디렉션함
- 사용자는 캡차를 해결한 뒤 페이지가 “success”를 표시할 때까지 대기하면 인증 완료
- 이 과정을 통해 Discord 계정이 성인 인증된 상태로 표시됨
다른 플랫폼(Twitch, Kick, Snapchat 등) 인증 방식
- 각 플랫폼의 연령 인증 페이지에서 ‘selfie’ 옵션을 선택하고, 표시된 QR 코드의 URL을 복사
- 해당 URL을 age-verifier.kibty.town의 입력창에 붙여넣고 ‘verify’ 버튼을 클릭
- 이후 자동으로 인증 절차가 진행되어 성공 메시지가 표시됨
작동 원리
- Discord가 사용하는 k-id 연령 인증 시스템은 얼굴 영상을 서버로 전송하지 않고, 얼굴 관련 메타데이터와 프로세스 세부 정보만 전송함
- 이 구조 덕분에 합법적으로 보이는 메타데이터를 조작해 전송하면 실제 얼굴 없이도 인증 통과 가능
- 과거 amplitudes의 k-id verifier가 공개된 이후, 파트너사 faceassure가 검증을 강화했으나 이번 도구는 새로운 방식으로 이를 우회함
기술적 세부 단계
-
1단계: 암호화 파라미터 복제
- 합법적 요청과 비교했을 때 누락된 encrypted_payload, auth_tag, timestamp, iv를 확인
- AES-GCM 암호화로, 키는 nonce + timestamp + transaction_id를 HKDF(SHA-256) 로 파생해 생성
- 동일한 구조를 재현해 누락된 파라미터를 생성함
-
2단계: 예측 데이터 조작
- 암호화를 완벽히 복제해도 실패하자, 검증이 ‘prediction arrays’(outputs, primaryOutputs, raws)에 의존함을 확인
-
raws 데이터를 기반으로 z-score를 이용해 이상치를 제거하며 outputs와 primaryOutputs를 생성
- 추가로 다음 조건들이 검증됨
-
xScaledShiftAmt, yScaledShiftAmt 값은 두 가지 중 하나만 가능
- 미디어 이름(카메라)이 실제 장치 목록과 일치해야 함
- 상태 완료 시간이 타임라인과 일치해야 함
- 이러한 과정을 모두 구현한 오픈소스 코드가 공개되어 있으며, 누구나 확인 가능
공개 및 제작 배경
- 제작자는 xyzeva와 Dziurwa, 이전 관련 작업을 한 amplitudes에게 감사 인사를 표함
- Discord가 글로벌 연령 인증을 3월에 전면 시행할 예정이어서, 이에 맞춰 새로운 검증 우회 방법을 탐구했다고 설명됨