GN⁺: 티켓마스터의 회전 바코드(SafeTix) 리버스 엔지니어링하기
(conduition.io)- 최근 티켓마스터에서 콘서트 티켓을 구매했음. 티켓마스터는 정상적인 인쇄 가능한 PDF 티켓 대신 모바일 입장(Mobile Entry), 즉 SafeTix라는 시스템을 통해 티켓을 발행함. 이는 티켓마스터의 웹앱이나 안드로이드/iOS 앱 내에서 회전하는 바코드 형태로 제공됨.
- 예전에는 온라인이나 오프라인에서 구입한 티켓을 인쇄할 수 있었음. PDF 티켓은 거의 모든 기기에서 볼 수 있고, 휴대폰이 인터넷에 연결되지 않아도 접근 가능하며, 휴대폰이 없어도 종이 티켓으로 사용할 수 있음. 공식 판매처에서 구매한 것이라면 진품이라는 것도 알 수 있음.
- 작년에 유사한 회전 QR 코드 티켓 시스템을 사용한 콘서트에 갔을 때 많은 사람들이 입장에 문제를 겪음. 주된 문제는 휴대폰에 인터넷 연결이 없어서 QR 코드가 로드되지 않는 것이었음. 현장 직원들도 도울 방법이 없었음.
마케팅
- 티켓마스터는 SafeTix 기술을 사기꾼과 암표상들에 대한 만병통치약으로 홍보함.
- 몇 초마다 자동으로 새로고침되는 고유한 바코드 덕분에 도난이나 복사가 불가능하며 암표 위험을 크게 줄이고 안전을 보장한다고 주장함.
- 바코드가 움직이는 것은 CSS 애니메이션일 뿐이고 스크린샷의 스캔을 막지 못함.
동기
- SafeTix는 티켓마스터의 폐쇄적이고 마진이 높은 암표 시장 외에서 티켓 재판매를 어렵게 만듦.
- 사용자들이 티켓마스터의 독점 앱을 설치하도록 강제함.
- 티켓마스터 외부로 티켓을 저장하고 전송하는 것이 불가능해서 친구의 연락처 정보를 티켓마스터에 넘겨야 함.
모순
- 티켓을 오프라인으로 저장할 수 있다면서 티켓마스터 외부로 전송할 수 없다는 것은 모순임.
- 데이터를 복사할 수 있다면 전송할 수 있고, 전송할 수 있다면 공유 및 판매가 가능함.
- 티켓에 강력한 DRM이 있다면서 오프라인으로 볼 수 있다는 것 자체가 모순임.
리버스 엔지니어링
- 바코드 자체를 검사한 결과, PDF417 바코드이며 UTF-8 텍스트를 인코딩하고 있음.
- 바코드는 15초마다 변경되며, Base64 데이터, 두 개의 6자리 숫자, Unix 타임스탬프로 구성됨.
- 두 개의 6자리 숫자는 Time-based One-Time Passwords(TOTP)처럼 동작함.
- Base64 데이터는 48바이트 길이의 랜덤한 데이터로 보이며, 티켓 소지자와 티켓을 식별하는 일종의 랜덤 베어러 토큰일 것으로 추측함.
비밀의 비밀
- TOTP를 생성하려면 공유 비밀 키(바이트 배열)와 동작하는 시계만 있으면 됨.
- 바코드에 TOTP가 두 개 있으므로 공유 비밀 키도 두 개일 것임. 베어러 토큰과 함께 있다면 원하는 만큼 유효한 바코드를 생성할 수 있음.
웹앱 디버깅
- 안드로이드 휴대폰의 크롬 브라우저를 데스크탑 컴퓨터의 크롬 개발자 도구에 연결해서 티켓마스터 API와 소스 코드를 살펴봄.
-
/api/render-ticket/secure-barcode
API 엔드포인트에서 관심있는 요청을 발견함. - 응답 데이터에는 Base64로 인코딩된
token
속성이 있었고, 디코딩해보니 JSON 객체였음. -
eventKey
(ek
)와customerKey
(ck
)가 TOTP 비밀 키일 것으로 추측됨. - 웹앱 소스 코드를 살펴보니
generateSignedToken
이라는 함수를 찾았고, 여기서 바코드 데이터를 생성하고 있었음. - 두 TOTP는 15초 시간 간격으로 생성되며, 그 외에는 일반적인 SHA-1 TOTP와 동일한 방식으로 구성됨.
티켓 해적질
- 이제 사용자 정의 앱에서 티켓마스터의 바코드를 복제하는 데 필요한 모든 것을 알게 됨.
- 공식 티켓마스터 앱과 구별할 수 없는 PDF417 바코드를 생성할 수 있음.
- 티켓마스터는 바코드 렌더러 컴포넌트가 웹 페이지에 마운트될 때
token
을 브라우저 콘솔에 자동으로 기록하므로 토큰 추출이 쉬움.
수명
-
rawToken
의 수명은 알 수 없음. 티켓마스터 계정당 하나의 토큰만 유효할 가능성이 있음. - 티켓마스터 개발자 API 문서에 따르면 이벤트 시작 20시간 전에 토큰을 새로고침해야 함.
- 오프라인으로 티켓을 저장하는 데에는 충분함. SafeTix 바코드를 렌더링하는 Expo 앱 TicketGimp을 만들었음.
결론
- 티켓마스터는 기술적 약자를 배제하고 있음.
- 이런 암흑 패턴을 안전 조치로 포장하고 있음.
- 잔인한 비즈니스 관행을 지원하는 회사임.
- 소프트웨어 개발자는 이런 힘을 올바르게 사용해야 함.
- 티켓마스터를 해체하자.
GN⁺의 의견
- 이 글은 티켓마스터의 SafeTix 기술을 리버스 엔지니어링한 과정을 잘 보여줌. 기술적으로 매우 흥미로운 내용임.
- 하지만 이런 행위가 합법적인지에 대해서는 의문이 듦. 티켓마스터의 시스템을 무단으로 해킹하고 악용하는 것은 불법일 가능성이 높음.
- 티켓마스터의 행태가 소비자에게 불리하다는 점은 동의하지만, 기술을 오용해 대항하는 것은 바람직하지 않음. 합법적인 방식으로 문제를 제기하고 해결책을 모색하는 것이 필요함.
- 기술이 발전하면서 이런 식의 DRM과 소비자 통제 시도는 더욱 늘어날 것임. 개인정보 보호와 소비자 권리를 지키기 위한 사회적 논의와 규제 개선이 중요해 보임.
- 개발자로서 우리는 기술의 힘을 이용해 사회에 긍정적인 변화를 가져올 책임이 있음. 단순히 기술을 구현하는 것을 넘어, 그 기술이 어떤 영향을 끼칠지 깊이 고민해야 함.
Hacker News 의견
-
TicketMaster와 AXS가 티켓 재판매 및 전달 플랫폼을 지원할 기회가 있었으나, 이를 선택하지 않음
- 티켓 QR 코드 암호화 문서화와 앱 및 API 노출을 통해 티켓 비밀을 검증 및 회전할 수 있었음
- 대신 법적 문제로 사기꾼들과 싸우는 것을 선택함
- 재판매 독점으로 더 많은 수익을 얻기 때문임
-
TicketMaster의 비즈니스 모델은 대중을 속이는 것에 기반함
- Taylor Swift는 팬들이 저렴한 가격에 티켓을 구매할 수 있기를 원함
- 그녀의 매니저는 최대한 많은 수익을 얻으려 함
- TicketMaster와 협력하여 일부 티켓을 저렴하게 판매한 후 나머지 티켓을 재판매 사이트에서 더 높은 가격에 판매함
-
소프트웨어 개발자는 현대의 마법사와 주술사와 같음
- 이러한 힘을 절제와 진실성으로 사용해야 함
- 탐욕과 착취에만 몰두하는 사람들로부터 사회의 통제권을 되찾기 위해 필요함
-
TicketMaster의 또 다른 나쁜 관행
- 티켓을 재판매할 때, 구매자가 구매한 후에도 판매자의 자금을 이벤트 종료 후 7-14 영업일 동안 보류함
- 티켓의 유효성을 확인하기 위해서라고 주장함
- 그러나 TicketMaster는 티켓을 소유하고 있으며, 유효성을 확인하는 논리는 복잡하지 않음
- 구매자와 판매자 모두의 자금을 보류하여 이중으로 수익을 얻음
-
TicketMaster와 관련된 기사는 과장된 표현이 많음
- 티켓 복제 방법을 설명하는 부분이 있음
- 이는 누구에게도 피해를 주지 않음
- 회전하는 바코드는 여전히 정적 바코드보다 안전함
-
티켓 문제는 간단히 해결 가능함
- 공항에서 매일 수백만 번 해결되는 문제임
- 티켓 구매 시 각 콘서트 참석자의 이름을 제공하고, 티켓과 신분증을 함께 제시하면 됨
-
나쁜 회사에서 일하면서 좋은 사람이 될 수 없음
-
TicketMaster의 실제 작동 방식에 대한 의문
- 다양한 이벤트에서 다른 방식으로 작동함
- TicketMaster는 단순한 서비스 제공자일 뿐일 수 있음
- 이벤트 주최자가 TicketMaster의 카탈로그에서 원하는 제품을 선택함
- "Evil as a Service"로 불릴 수 있음
- TicketMaster의 독점적 관행은 문제지만, 이벤트 주최자와 아티스트도 책임이 있음
-
모바일 폰을 사용해야만 쇼에 입장할 수 있는 것은 문제임
- 배터리가 다 떨어지거나 화면이 깨질 경우 문제가 발생함
- 기술이 발전할수록 더 나쁜 용도로 사용됨
- 독점을 깨기 위해 TicketMaster의 티켓 구매를 자제해야 함
-
이벤트에서 인터넷 연결이 필요한 것은 문제임
- 대규모 이벤트에서는 인터넷 연결이 어려움
- 앱은 오프라인에서도 작동해야 함
- TicketMaster는 이벤트 20시간 전에 티켓을 새로 고침하여 인터넷이 없을 경우를 대비함