보안업계가 본 쿠팡 해킹 시나리오 “서명키를 만능키로 만든 허술한 구조”

쿠팡의 3370만명 개인정보 유출 사고의 원인을 두고 보안업계에서는 “단순히 인증에 필요한 서명키 탈취만으로는 대규모 정보 유출이 성립하기 어렵다”는 분석과 함께, “핵심은 키가 아니라, 키를 만능키로 만든 쿠팡의 허술한 보안 시스템이었다”는 해석에 무게가 실리고 있다.

이번 사태에서 지금까지 드러난 단서를 조합해보면 ▲퇴직자 접근권한 관리 부재 ▲예측 가능한 사용자 번호(PK) 구조 ▲내부용 애플리케이션 프로그래밍 인터페이스(API) 운영 방식 ▲임계치가 있는 탐지 체계까지 여러 요인 동시에 원인이 된 것으로 보인다.

보안 전문가들은 이러한 정황을 바탕으로 이번 사고를 “열쇠가 문제가 아니라, 그 열쇠가 너무 많은 문을 열게 만들어놓은 구조의 문제”로 보고 있다.

사고의 첫 단서, 퇴직자 손에 남은 ‘서명키’

사고의 첫 단서는 퇴직자의 손에 인증토큰 서명키가 남아 있었다는 점이다. 서명키는 토큰을 만들어내는 ‘원본 도장’으로 외부로 유출되는 순간, 공격자는 정상 사용자처럼 보이는 토큰을 계속 찍어낼 수 있다.

이 토큰은 쿠팡 서버에 “나는 인증된 사용자야”라고 증명하는 일종의 신분증으로, 서버는 이 토큰이 서명만 맞으면 누가 들고 있든 정상 요청으로 받아들인다. 결국 공격자는 자신의 계정이 아니라 임의의 사용자로 로그인한 것처럼 시스템에 접근할 수 있는 상태가 된다.

브랫 매티스 쿠팡 최고정보보호책임자(CISO)는 국회 현안질의에서 “인증토큰 서명키는 보통 2년 정도의 주기로 유지되며, 퇴직 전에 탈취됐을 가능성이 크다”고 설명한 바 있다.

한 보안업체 관계자는 “기술적 구조만 놓고 보면, 해당 서명키에 접근할 수 있는 일부 관리 권한 보유자가 존재한다면 그 권한을 이용해 토큰을 자체적으로 생성하는 것이 가능하다”며 “대형 플랫폼 서비스에서 액세스 토큰 발급은 일반적으로 사용자가 아이디와 비밀번호로 로그인하면, 일정 시간 동안 시스템에 접근할 수 있도록 인증 서버가 토큰을 생성하는 방식으로 이루어진다. 이때 액세스 토큰을 서명하는 ‘서명키’는 인증 서버 내부에 존재하며, 서버만이 토큰을 발행할 수 있도록 엄격하게 보호되는 구조가 보편적”이라고 설명했다.

하지만 보안업계에서는 이 설명만으로 대규모 유출을 해명할 수 없다고 본다. 정상적인 인증 시스템에서는 서명키가 모든 사용자 토큰을 만들어내는 ‘원본 도장’ 역할을 하더라도, 각 토큰은 발급된 사용자 본인의 정보에만 접근하도록 제한돼야 한다.

즉, 한 계정의 토큰이 다른 계정의 정보에 접근하지 못하도록 권한을 나누는 장치(권한 분리)가 반드시 존재해야 한다.

쉽게 비유하면 이렇다. 서명키가 ‘도장’이라면, 토큰은 그 도장이 찍힌 신분증에 가깝다. 그리고 신분증을 들고 있다고 해서 모든 문이 열리는 것이 아니라, “이 신분증은 본인의 문까지만 열 수 있다”는 제한이 별도로 걸려 있어야 한다.

정상적인 시스템은 ▲도장의 역할을 하는 서명키 ▲토큰(도장이 찍힌 신분증) ▲신분증으로 열 수 있는 문을 제한하는 권한 검증 로직이라는 세 단계를 통해 보안을 유지한다.

그러나 이번 사건에서는 서명키를 이용해 정상처럼 보이는 토큰을 만들어냈을 때, 이 토큰이 발급된 사용자 외 다른 계정에도 접근할 수 있었던 것으로 보이는 구조적 정황이 확인됐다.

전문가들이 “도장 자체의 문제가 아니라, 그 도장이 어디까지 사용할 수 있게 설계돼 있었는지, 그게 어떻게 가능했는지가 더 큰 문제”라고 지적하는 이유다.

이메일도 모르는데 어떻게 모든 계정에 접근했나

국회 현안 질의에 참석한 김승주 고려대학교 정보보호대학원 교수는 쿠팡 측의 답변을 들은 직후 사고에 대한 핵심적인 의문을 제기했다.

그는 “위조된 토큰을 만들었다 해도, 공격자가 수천만 명의 이메일을 모르면 계정 대입 자체가 불가능할 텐데, 어떻게 모든 계정에 접근할 수 있었느냐”고 반문했다.

이 질문은 해킹 시나리오의 초점을 ‘서명키 유출’에서 ‘계정 구조’로 이동시키는 결정적 단서가 된다. 정상 토큰을 만들었다고 해도 ‘누구의 문’을 열지 알아야 침입이 가능하다. 결국 ‘누구인지’를 알아내는 과정이 쿠팡 시스템상에서 지나치게 단순화돼 있었을 것이라는 분석이 나온다.

참고로 쿠팡 시스템에서 계정은 사용자가 로그인할 때 입력하는 이메일과는 다르다. 이메일은 사용자가 인식하는 ID일 뿐, 실제 서버가 사용자를 식별할 때는 내부 데이터베이스(DB)의 ‘사용자 번호(PK)’를 기준으로 처리한다.

이준석 의원이 짚은 구조적 단서, 사용자 번호가 ‘1, 2, 3’로 단순화

국회 질의를 통해 드러난 또 하나의 기술적 실마리는 바로 이 ‘사용자 번호(PK)’ 구조다. 쿠팡의 내부 사용자 번호가 보안성이 높은 난수나 ‘범용 고유 식별자(UUID)’ 방식이 아닌 1, 2, 3처럼 순서대로 증가하는 정수였다는 정황이 파악된 것이다.

보안업계에서 권장하는 UUID는 네트워크상에서 중복되지 않는 복잡한 난수 ID를 생성하는 표준 규약이다. 마치 사람마다 예측 불가능한 주민등록번호를 부여하듯, 데이터에도 무작위 식별자를 붙여 공격자가 다음 번호를 추측하지 못하게 만드는 핵심 방어 수단이다.

이준석 의원이 2일 열린 쿠팡 해킹 사태 관련 국회 현안질의에서 쿠팡 측에 질문하고 있다. (사진=국회방송)

이준석 의원은 “쿠팡은 예측 불가능한 난수나 UUID 방식 대신 순차적으로 증가하는 단순 정수값을 PK로 사용해왔다”며 “이 때문에 공격자는 이메일을 몰라도 번호만 하나씩 바꿔 입력하며 모든 계정에 접근할 수 있는 환경이 만들어졌다”고 분석했다.

이 구조에서는 공격자가 사용자의 이메일을 알 필요가 없다. 사용자 번호(PK)가 일종의 은행 대기 번호표처럼 1번부터 3300만 번까지 차례대로 붙어 있었기에, 번호만 바꿔가며 API 요청을 보내면 모든 계정에 접근할 수 있게 된다. 이는 마치 학교 사물함 비밀번호가 ‘0001, 0002, 0003…’ 순으로 설정돼 있어, 도둑이 고민 없이 옆 칸을 차례로 열어보는 것과 같다.

내부 API, 외부에 노출됐나

이런 구조만 보면 사용자 번호(PK)가 단순했다는 사실만으로 계정이 곧바로 열리는 것처럼 보일 수 있다. 그러나 실제로는 사용자 번호(PK)가 단순하다는 조건만으로는 정보가 반환되지 않는다.

DB 정보에 접근하려면 공격자는 ‘사용자 번호(PK)를 쉽게 추측할 수 있다’는 조건과 ‘그 번호를 입력할 수 있는 문인 API가 인터넷만 있으면 누구나 접속할 수 있게 외부에 열려 있었다’는 조건이 동시에 성립돼야 한다. 만약 그랬다면, 공격자는 전체 계정을 순차적으로 훑어 정보를 탈취할 수 있게 된다.

한 보안 전문업체 관계자는 “서명키 유출만으로 데이터베이스(DB) 전체에 접근은 성립될 수 없다”며 이번 사태의 핵심을 API 구조에서도 볼 필요가 있다고 설명했다.

원래 사용자 정보를 불러오는 API는 내부의 마이크로서비스끼리만 통신하는 구조여야 한다. 그러나 지금까지 나온 정황들을 보면 ▲해당 API가 외부에서도 호출 가능했고 ▲이 API가 사용자 번호(PK)만 넣으면 계정 정보를 알려주며 ▲토큰 검증 이후 계정별 접근 권한이 다시 분리되지 않았을 것이라는 분석이 제기된다.

쉽게 말해, 직원들이 쓰는 ‘내부 전용 문’이 건물 밖 도로 쪽으로 열려 있었고, 그 문을 열기 위한 사용자번호(PK)도 너무 단순했으며, 도장(서명키)만 있으면 누구든 보안 게이트를 통과할 수 있는 구조가 되어 있었던 셈이다.

박대준 쿠팡 대표가 2일 열린 쿠팡 해킹 사태 관련 국회 과방위 현안질의에서 의원들의 질문에 답변하고 있다. (사진=국회방송)

왜 5달 동안 탐지 못했나?

브랫 매티스 CISO는 현안 질의에서 “공격자가 서로 다른 IP에서 소규모 접근을 반복해 보안 관제 시스템의 임계치 아래에서 움직였을 가능성이 있다”고 설명했다.

이는 역설적으로 쿠팡의 탐지 체계가 ▲접속 위치 기반 분석 ▲휴면·탈퇴 계정 조회 감시 ▲행위 기반 탐지 등 체계를 갖추지 않았다는 뜻이기도 하다. 위조된 토큰은 쿠팡 입장에서 정상으로 보였기 때문에, 탐지 시스템은 그 요청을 ‘정상 사용자 요청’으로 기록했을 가능성이 높다.

지금까지 나온 기술적 단서들을 조합하면 다음과 같은 사고의 시나리오가 구성된다.

▲퇴직자의 손에 남아 있던 서명키로 정상처럼 보이는 인증토큰이 계속 만들어질 수 있었다.
▲쿠팡 내부 사용자 번호(PK)가 1, 2, 3처럼 예측 가능한 증수 방식이었다.
▲원래 내부 시스템끼리만 사용해야 하는 정보 조회용 API가 외부에서도 호출이 가능했다. (인터넷을 통해 누구나 접근 가능했다)
▲토큰이 정상적으로 서명돼 있는 한 서버가 이를 ‘정상 사용자 요청’으로 판단해 탐지하지 못했다.
▲탐지 체계가 단순 횟수 기반 임계치 방식에 머물러, 공격자가 여러 IP로 소규모 접속을 반복하는 방식을 사용하면 5개월 동안 이상 징후를 잡아낼 수 없었다.

다만, 쿠팡의 사용자 번호(PK)가 단순 증가 정수였는지 여부나, 탐지 체계가 임계치 기반 방식이었는지 등 구체적 원인은 아직 공개된 사실만으로 단정하기 어려운 상황이다.

곽진 아주대학교 사이버보안학과 교수는 “서명키가 어떤 경위로 탈취됐는지는 여전히 의문”이라며 “위조된 토큰이 장기간 사용됐는데도 탐지가 어려웠다는 점은 내부 통제 시스템이 실효적으로 작동하지 않았다는 의미”라고 지적했다.

이어 “IP를 바꿔가며 소규모로 접근하는 방식은 기본적인 행위 기반 탐지가 없었다면, 장기간 은폐되기 쉽고, 결국 문제는 개별 취약점이 아니라 회사의 전반적인 내부 보안 체계가 제대로 운영됐느냐에 대한 질문으로 계속 이어질 수밖에 없다”고 강조했다.

글. 바이라인네트워크
<곽중희 기자> god8889@byline.network

일간 바이라인 구독하기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


The reCAPTCHA verification period has expired. Please reload the page.