1차 공개일 · 8월 18일1차 강의가 모두 공개됩니다
TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 22 READS

퀘이크 셰어웨어 CD의 복사 방지, 39일 만에 뚫린 이유

1990년대 중반 PC 사용자에게 CD-ROM 드라이브는 값비싼 인텔 펜티엄 다음가는 로망이었다. 640MiB라는 용량은 당시 하드디스크의 세 배에 달했고, 이 넉넉한 공간 덕분에 640x480 256색 사진, VOC 사운드트랙, 그리고 Video For Windows 기반의 몇 초짜리 저해상도 영상까지 담을 수 있었다. 문제는 게임 개발자 입장에서 이 용량이 너무 컸다는 점이다. 만들 수 있는 에셋의 양이 CD 용량을 따라가지 못했다. 그래서 7th Guest, Wing Commander III, Phantasmagoria 같은 일부 타이틀은 남는 공간을 풀모션 비디오나 고품질 음악으로 채웠다. id 소프트웨어는 조금 다른 답을 내놓았다.

남는 용량을 판매 채널로 바꾸다

1996년 6월, 3년의 개발 끝에 id 소프트웨어는 퀘이크(Quake)를 완성했다. 이전작과 마찬가지로 셰어웨어 버전과 정식 버전을 함께 내놓을 계획이었는데, 셰어웨어가 차지하는 용량은 고작 22MiB에 불과했다. 남는 공간을 어떻게 쓸까 고민하던 이들은 id의 전체 게임 카탈로그를 암호화해 같은 CD에 담기로 했다. 사용자가 매장에서 CD를 산 뒤 전화 한 통과 신용카드만으로 원하는 게임을 즉시 잠금 해제하게 만든다는 발상이었다. 유통 중간 단계를 없애고 구매 즉시 게임을 손에 넣게 하는 셈이다.

이 CD는 1996년 7월 3일 발표되고 8월 30일 출시됐다. 사용자는 CompUSA나 Computer City 같은 매장에서 9.95달러에 CD를 구입할 수 있었다. 패키징 품질도 셰어웨어치고는 꽤 좋았고, 전면에는 정식판 잠금 해제를 위해 1-800-ID-GAMES로 전화하라는 안내 스티커가 붙어 있었다. 흥미롭게도 이 전화번호는 지금도 살아 있지만, CompUSA가 2007~2008년 사이 폐업하면서 잠금 해제 센터 대신 노년층 대상 상품을 파는 자동 응답만 흘러나온다.

겉보기엔 견고했던 챌린지-응답 방식

잠금 해제 과정은 당시 기준으로 제법 정교해 보였다. 사용자가 프로그램을 실행하면 GUI가 CODE NUMBER, 즉 일종의 챌린지(challenge)를 생성했다. 이 번호를 전화로 상담원에게 불러주고 요금을 지불하면 UNLOCK CODE NUMBER, 즉 시리얼(serial)을 받는 구조였다. 유선 전화라는 원시적인 통신 수단에서 발생할 수 있는 오류를 줄이기 위해 두 번호 모두 체크섬을 포함했다. 재사용 공격을 막으려고 챌린지는 실행할 때마다 바뀌었고 GUI가 켜져 있는 동안에도 5분마다 회전했다. 챌린지에 무작위성이 들어가 있어 한 번 받은 시리얼을 다시 쓸 수는 없었다. 화면에는 잠금 해제 후 백업을 권하는 안내와 함께 "너무 인색한 자들"을 겨냥한 id 특유의 도발적 문구까지 들어가 있었다.

기술적 토대는 TestDrive Corp가 제공했다. 이들의 암호화 도구는 실행 파일을 이른바 '변성(denature)' 처리했다. 원본 EXE의 앞 32KiB를 커스텀 헤더로 교체하고 파일을 .MJ3로 이름을 바꾼 뒤, 원래 헤더는 .ST3로 암호화하고 시드(seed)를 발급했다. 변성된 파일을 그냥 실행하면 "This application has been disabled"라는 메시지가 떴다. CD 안에는 게임마다 MJ3 파일이 하나씩 있었고 ST3 파일들은 PAGEMKR 아카이브 안에 모여 있었다. MJ3를 다시 정상 EXE로 되돌리는 데 필요한 모든 요소가 갖춰져 있었고, 오직 시리얼에서 파생되는 비밀 시드만 빠져 있었다. 서술만 놓고 보면 결함이 없어 보인다.

시리얼에는 비밀이 없었다

그런데 CD가 매장에 깔린 지 단 39일 만인 1996년 10월 8일, 해커 그룹 GNOMON이 QCRACK.EXE를 공개했다. 이 도구는 챌린지만 넣으면 유효한 시리얼을 자동으로 만들어냈다. GNOMON이 알아낸 사실은 단순하면서도 치명적이었다. 전화로 받는 시리얼에는 아무런 비밀도 담겨 있지 않았다. 그저 결제가 이뤄졌다는 증명일 뿐이었다. CD에 함께 실린 잠금 해제 프로그램 FLOW.EXE 자체가 챌린지로부터 시리얼을 생성할 수 있었고, 하는 일이라고는 자기가 만든 시리얼과 사용자가 입력한 시리얼이 일치하는지 확인하는 것뿐이었다. 서버가 쥐고 있어야 할 비밀이 실은 클라이언트 안에 그대로 들어 있었던 것이다. 보호 전체가 '난독화에 의존한 보안(security by obscurity)'에 기대고 있었다. 참고로 상담 시 함께 불러주던 SOURCE CODE(예: 22-CUSA는 CompUSA, 12-BSTBY는 Best Buy)는 잠금 해제 코드 생성에 아무 역할도 하지 않았고, 유통사가 거래 수수료를 청구하기 위한 식별자였을 가능성이 크다.

실무자 관점에서 이 사례가 주는 교훈은 20년이 지난 지금도 유효하다. 검증 로직과 비밀을 클라이언트에 함께 배포하면, 프로토콜이 아무리 챌린지-응답처럼 그럴듯해 보여도 결국 로컬에서 정답을 재현할 수 있다는 사실이다. 재사용 방지를 위한 무작위 챌린지, 체크섬, 5분 회전 같은 장치는 겉보기 방어력을 높이지만 신뢰의 뿌리가 클라이언트 안에 있으면 무의미하다. 실제 안전성은 시리얼 생성 로직이 서버에만 존재하고 클라이언트는 그 결과를 검증만 할 수 있을 때 확보된다. 이 CD의 챌린지에서 시리얼로 이어지는 파이프라인은 상당히 복잡했지만 2016년 rmolina에 의해 완전히 역공학됐다.

결국 이 방식은 기술의 한계라기보다 일정의 한계였다. 자료를 파고들수록 담당자가 결과물을 다듬을 시간이 부족했다는 정황이 드러난다는 것이 원저자의 관찰이다. 남는 CD 용량을 판매 채널로 활용하겠다는 발상 자체는 시대를 앞선 것이었지만, 그 발상을 뒷받침해야 할 보안 설계는 39일을 버티지 못했다. 좋은 아이디어와 견고한 구현은 별개이며, 특히 배포된 소프트웨어 안에서 무엇을 비밀로 지킬 수 있는가에 대한 냉정한 판단이 그 사이를 가른다는 점을 이 오래된 CD 한 장이 새삼 일깨운다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://fabiensanglard.net/quake_shareware_cd/index.html
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...