
79.7%. 공격에 쓰인 계정 가운데 과거에 이미 유출된 적이 있던 계정의 비율입니다(맨디언트(Mandiant) 조사). 2024년 봄, 클라우드 데이터 웨어하우스 스노우플레이크(Snowflake)의 고객 계정이 차례로 털렸습니다. 약 165개 조직이 침해 가능성 통보를 받았고, AT&T 고객 약 1.1억 명의 통화·문자 기록도 이 경로로 빠져나갔습니다. 그런데 스노우플레이크 플랫폼에서는 취약점도, 설정 오류도, 내부 침해 증거도 나오지 않았습니다. 공격자는 고객 계정에 로그인했을 뿐입니다.
사고 원인: 교체하지 않은 비밀번호와 MFA 미적용. 정보탈취 악성코드로 새어 나간 비밀번호가 몇 년째 그대로였고, 그 비밀번호 하나로 열리는 계정에는 MFA도 접속 IP 제한도 없었습니다. 비밀번호·API 키처럼 코드와 로그 밖에 숨겨야 하는 값을 이 시리즈는 시크릿이라고 부릅니다.
| 항목 | 내용 |
|---|---|
| 기간 | 2024년 4월 전후 고객 계정 로그인 시작, 6월 10일 맨디언트 보고서 공개 |
| 규모 | 약 165개 조직에 침해 가능성 통보(맨디언트·스노우플레이크), 100개 이상 고객 테넌트 접근 확인 |
| 대표 피해 | AT&T 무선 고객 통화·문자 기록 약 1.1억 명(내용·이름 제외, 일부 기지국 ID 포함) |
| 원인 | MFA 없음, 2020년부터 유출된 계정정보 미교체, 네트워크 허용 목록 없음(맨디언트) |
| 비용 | AT&T 집단소송 합의 총 1.77억 달러 중 이 사건 몫 2,800만 달러 |
| 현재 상태 | 2026년 8~10월 스노우플레이크가 사람 사용자 MFA 의무화, 서비스 계정 비밀번호 로그인 차단 |
테넌트(tenant)는 클라우드 서비스 안에서 고객 회사 하나에 주어지는 독립된 공간입니다. 이 사건에서 공격자가 들어간 곳은 고객사별 테넌트였습니다.
8-K는 미국 상장사가 투자자에게 중요한 사건을 알리는 수시 공시 서류입니다. 티켓마스터 5.6억 명이라는 숫자는 해커 쪽 주장이라 확인되지 않았습니다 [추정].

흐름은 단순합니다. 고객사 직원의 PC가 인포스틸러(infostealer, 브라우저에 저장된 아이디·비밀번호를 몰래 빼 가는 정보탈취 악성코드)에 감염됩니다. 빠져나간 계정정보는 몇 년이 지나도 바뀌지 않았습니다. 공격자는 그 아이디와 비밀번호로 고객사의 스노우플레이크 계정에 로그인했고, 계정에 MFA가 없어 그대로 들어갔습니다. 접속할 수 있는 IP도 정해 두지 않았으니 공격자 서버에서도 로그인이 됐습니다. 그다음은 데이터 조회와 유출, 그리고 협박이었습니다.
맨디언트 보고서(2024-06-10)에 따르면, 피해 계정에는 세 가지 공통점이 있었습니다.
감염된 PC는 모두 고객사 쪽에 있었습니다. 일부는 개인용 PC를 업무에 함께 쓴 경우였습니다(맨디언트). 스노우플레이크는 플랫폼 취약점·설정 오류·내부 침해 증거가 없다는 입장을 유지하고 있습니다.
세 원인은 하나씩만 막혀 있어도 공격이 멈추는 구조였습니다. 비밀번호를 바꿨다면 유출 정보가 무효가 됐고, MFA가 있었다면 비밀번호만으로는 부족했으며, IP 허용 목록이 있었다면 공격자 서버에서는 로그인할 수 없었습니다. 피해 계정에는 세 겹이 모두 비어 있었습니다.
데이터 웨어하우스나 클라우드 DB에 접속하는 계정은 대개 두 종류입니다. 사람이 대시보드에 로그인하는 사람 계정, 그리고 배치 작업이나 ETL(데이터를 추출·변환해 옮기는 작업)이 쓰는 서비스 계정입니다. 사고 회사의 코드가 아니라 같은 실수를 보여 주는 일반 예시입니다. 값은 모두 가짜입니다.
# 위험한 모양 · 일반 예시
conn = warehouse.connect(
account="example-acct",
user="etl_service",
password=os.environ["WH_PASSWORD"],
)
# 몇 년째 같은 비밀번호
# 사람 계정도 비밀번호만으로 로그인, MFA 없음
# 어느 IP에서나 접속 가능
비밀번호를 환경 변수로 뺐으니 코드에는 시크릿이 없습니다. 그래도 문제는 그대로입니다. 비밀번호 하나만 알면 누구든, 어디서든 이 계정으로 접속할 수 있습니다. 사람 계정도 같은 방식이라면, 직원 PC 한 대가 감염되는 순간 그 직원이 볼 수 있는 데이터가 모두 공격자 손에 들어갑니다.
# 고친 모양 · 일반 예시
conn = warehouse.connect(
account="example-acct",
user="etl_service",
private_key=secrets.get("wh/etl/FAKE-key"),
)
# 계정 정책 · 일반 예시
users:
etl_service: # 서비스 계정
auth: key_pair # 비밀번호 로그인 끔
key_rotation_days: 90
allowed_ips: [192.0.2.10/32]
alice: # 사람 계정
auth: sso
mfa: required
alerts:
- new_client_or_ip
- result_rows_over: 1000000
고친 모양은 네 군데가 다릅니다.
같은 사건의 뒷이야기도 있습니다. 다음 편 Salesloft Drift(04편)에서는 고객사 지원 케이스에 평문으로 붙어 있던 Snowflake 토큰을 공격자가 다음 공격에 쓰려 했습니다(GTIG). 한번 샌 계정정보는 다른 사건에서 다시 노려집니다.
국내에서는 GS리테일·티머니·알바몬 크리덴셜 스터핑이 같은 모양이었습니다. GS샵 회원 계정에는 2024년 6월부터 약 8개월 동안 다른 곳에서 새어 나간 아이디·비밀번호로 대량 로그인이 이어졌고, 158만여 명의 정보가 빠져나갔습니다. 서버 침해는 없었지만 개인정보위는 로그인 이상을 탐지하지 못한 책임을 물어 GS리테일에 과징금 128억 3,600만 원을 부과했습니다. 두 사건 모두 "비밀번호가 맞으면 통과"가 원인이었습니다. 다른 점은 대상입니다. GS리테일은 소비자 회원 계정이었고, 스노우플레이크 사건은 회사 데이터 전체에 닿는 업무 계정이었습니다.
위 흐름도의 그린 표시와 같은 번호입니다.
1번은 시크릿의 수명을 줄이고, 2·3번은 새어 나간 시크릿을 쓰지 못하게 하며, 4번은 그래도 들어온 공격을 빨리 찾게 합니다.
MFA를 켜는 비용과 비교하면 합의금은 단위가 다릅니다. 위 내용은 공개 보고서·발표를 정리한 것이며 법률 자문이 아닙니다.
인프런 「백엔드 개발자를 위한 서버 보안 실무」 수업
관련 velog 시리즈: 해킹 시도를 몇 초 안에 잡는 서버(실시간 탐지·차단)
같은 패턴의 편: MFA 빈틈은 Change Healthcare(02편)에서도 시작점이었습니다.
오늘 본 사고의 원인은 대부분 서버와 코드의 기본기에서 막을 수 있는 것들이었습니다. 직접 손으로 막아 보고 싶다면 이런 강의도 있습니다.
백엔드 개발자를 위한 서버 보안 실무: 해킹 방어부터 정보유출 방지까지
수치는 2026년 11월 1일 기준 공개 보고서·발표입니다. 진행 중인 사건은 바뀔 수 있고, 이 글은 법률 자문이 아닙니다.
이전 글 Change Healthcare 1억 9천만 명: MFA 없는 원격접속 포털 하나
다음 글 Salesloft Drift: 연동 토큰 하나로 700곳의 Salesforce가 열렸다
시리즈 전체 목록 해외 보안사고 사례 전체 목록