라떼군 이야기


디스코드/트위치 연령 인증이 뚫렸다: K-ID 메타데이터 조작을 통한 우회 기법 분석

TL;DR Discord 등이 사용하는 K-ID 연령 인증 시스템이 프라이버시를 위해 실제 얼굴 사진 대신 ‘메타데이터’만 전송한다는 점을 악용한 우회 기법입니다. 공격자는 암호화된 페이로드와 생체 예측 데이터를 역공학하여, 실제 얼굴 없이도 성인 인증을 통과하는 스크립트를 공개했습니다.


최근 Discord와 Twitch 등 주요 플랫폼들이 전 세계적으로 연령 인증 의무화를 확대하고 있습니다. 이들 플랫폼은 사용자 프라이버시 보호를 위해 생체 정보 원본(얼굴 영상) 대신 메타데이터만 서버로 전송하는 K-ID 솔루션을 채택했는데요. 바로 이 ‘프라이버시 친화적’ 설계가 역설적으로 보안 허점이 되어, 간단한 스크립트만으로 인증을 우회할 수 있는 방법이 등장해 개발자 커뮤니티의 주목을 받고 있습니다.

핵심 내용

이 우회 기법의 핵심은 클라이언트가 서버로 실제 이미지가 아닌 ‘얼굴 특징 메타데이터’만 전송한다는 점을 공략한 것입니다. 공격자는 Discord 콘솔에서 Webpack 모듈을 훅(Hook)하여 내부 API 클라이언트를 확보한 뒤, 조작된 데이터를 전송합니다. K-ID 측은 보안을 위해 AES-GCM 암호화와 복잡한 생체 예측 데이터 검증(z-score 기반 이상치 제거, 입력 장치명 대조, 상태 타임라인 검사 등)을 도입했으나, 공격자들은 이 암호화 키 생성 방식(HKDF)과 데이터 검증 로직까지 모두 역공학하여 서버가 ‘정상적인 성인’으로 인식하는 가짜 페이로드를 생성하는 데 성공했습니다.

기술적 인사이트

소프트웨어 엔지니어 관점에서 이 사례는 ‘클라이언트 측에서 생성된 데이터는 절대 신뢰하지 말라’는 보안의 대원칙을 극명하게 보여줍니다. K-ID는 프라이버시(Zero-knowledge 지향)와 보안 사이에서 트레이드오프를 시도했지만, 원본 데이터에 대한 서버 측 검증(Ground Truth)이 부재한 구조는 취약할 수밖에 없습니다. 아무리 복잡한 암호화나 통계적 검증 로직을 추가하더라도, 해당 로직이 클라이언트(브라우저/앱) 내에 존재하는 한 역공학을 통해 모방 가능한 데이터셋을 만들어낼 수 있다는 것이 기술적 한계입니다.

시사점

이번 우회 기법의 공개는 생체 인증 및 연령 확인 솔루션 업계에 시사하는 바가 큽니다. 순수 소프트웨어 기반의 메타데이터 검증만으로는 지능적인 자동화 공격을 막기에 역부족임이 드러났기 때문입니다. 향후 실무에서는 Android의 Key Attestation이나 iOS의 App Attestation 같은 하드웨어 기반의 무결성 검증을 도입하거나, 프라이버시를 일부 희생하더라도 서버에서 원본을 최소한으로 검증하는 하이브리드 방식의 필요성이 대두될 것입니다.


보안과 프라이버시는 시소와 같아서 한쪽을 강화하면 다른 쪽이 취약해지기 쉽습니다. 과연 사용자의 민감한 생체 정보를 서버에 저장하지 않으면서도 신뢰할 수 있는 인증 시스템을 구축하는 것이 가능할까요? 이번 사태는 그 이상적인 목표를 달성하기 위해 우리가 해결해야 할 기술적 과제가 여전히 많음을 시사합니다.

원문 읽기

Collaboration & Support (협업 및 후원) Get in touch (연락하기) →