카카오톡에서 발생하는 별별 어뷰징 대응기(aka. SMS Pumping)
박종훈 - 카카오 / 한은경 - 카카오
SMS Pumping이란
- 전화번호 기반 서비스라면 어디든 대상, “인증번호 받기” 버튼이 있으면 공격 대상
- 카카오톡 / 왓츠앱 / 텔레그램 모두 전화번호 필수 -> 가입 시 서비스가 인증 문자 발송, 비용은 서비스 제공사가 통신사에 지불
- 인증 문자 시장: 글로벌 연 약 220억 달러 (약 30조 원)
- 국제 SMS 인증 트래픽 중 약 5% 정도를 어뷰저의 부정 요청으로 추정, 연 약 10억 달러 (약 1조 4천억 원)
- 카카오톡도 1년간 수억 원 이상이 부정 요청으로 지출된 사례
- 어느 날 콩고민주공화국 인증 요청이 분당 50건 이상으로 급증, 일주일에 23만 건
- 실제 가입 완료는 100명도 안 됨
- 85% (20만 건)는 안티어뷰징 시스템이 차단, 나머지 15% (3만 건) 통과 -> SMS 비용 약 천만 원
- 전혀 못 막았으면 억 단위, 실제로는 수십 개 국가 번호를 돌려가며 공격하므로 못 막으면 하루 2~3억도 쉽게 나감
- AIT (Artificially Inflated Traffic, 인위적으로 부풀린 가짜 트래픽) 중 인증 문자를 노리는 공격이 SMS Pumping
- 취약점이나 API 해킹이 아니라 그냥 인증 요청을 많이 보낼 뿐 -> 공격이 쉬움
어뷰저는 어떻게 돈을 버는가
- 문자 비용은 통신사로 가는데 어뷰저는 어떻게 돈을 버나? -> 복잡한 통신사 구조
- 통신사 간 정산: 발신자가 자기 통신사에 비용 지불 -> 일부를 수신 측 통신사에 접속료로 지불
- 문자를 받는 상대 통신사도 전달 대가로 돈을 범, 돈이 메시지 방향을 따라 흐름
- MVNO (알뜰폰, 국내 약 60여 곳): 망을 빌려 영업, 망 사용료를 통신사에 지불
- 해외는 더 복잡
- MVNA: 망 도매상, 대형 통신사 망을 대량으로 빌려 작은 MVNO에 재판매
- 망을 여러 회사가 합작해서 운영하기도 함, 부가서비스 플랫폼까지 얽힘
- 카카오톡은 전세계 통신사와 일일이 계약 불가 (약 195개국, 국가별 수~수십 개 통신사)
- API로 발송 대행사 이용 -> 여러 중개사, 현지 통신사를 거쳐 전달
- 카카오가 낸 비용이 경로상 통신사 / 도매상 / MVNO에게 나뉘어 들어감
- 이 회사들의 공통점: 문자가 많을수록 돈을 범
- 소형 MVNO, 영세 통신사 입장에선 자기 번호로 인증 문자가 올 때마다 수익, 비용은 서비스 회사가 냄
- 일부 계약은 실제 수신 여부와 무관하게 발송 요청 / 망 접수 기준으로 과금
- 구조가 복잡해 내부에서 무슨 일이 일어나는지 파악하기 어려움 -> 감시 / 규제가 덜한 국가의 영세 사업자가 유혹에 빠지기 쉬움
- 어뷰저는 이 사이 누군가와 수익을 나눔, 명백한 범죄지만 잡아내기 어려움
- 2022년 일론 머스크: 해외 통신사들이 인증 문자를 반복 발생시켜 트위터가 연간 6천만 달러 손해를 본다고 주장
- 국가별 단가
- 국내 문자는 건당 15원 이하
- 아프리카 / 러시아 / 중앙아시아: 비싼 나라는 건당 1,000원 넘고 평균 600원 안팎
- 중동 / 남아시아 / 동남아시아: 400~700원
- 국내의 40~100배, 카카오톡 인증 어뷰징이 몰린 곳도 바로 이 권역 -> 단가 비싼 나라를 골라서 공격
- ARS 인증도 대안이 못 됨
- 문자를 받기 어렵거나 접근성 지원이 필요한 사용자용으로 제공하지만 SMS보다 더 비쌈
- SMS는 건당, ARS는 통화 시간 비례 (파키스탄 분당 약 2,000원, 국내 30배 이상)
- 어뷰저가 전화를 받고 안 끊으면 비용 계속 증가, 통신 구조 문제도 그대로
왜 막기 어려운가
- 기본 탐지: 요청 특성 / 환경 / 반복 패턴 분석
- 비슷한 IP 대역, 디바이스, 모델, 언어 설정, User-Agent 등을 묶어 반복 조합 차단
- 머신러닝, 요즘은 AI도 사용 / 특별한 기법이 있는 건 아님
- 그래도 원천 차단이 어려운 이유 3가지
- 데이터 부족: 번호 인증은 가입 첫 단계, 이력도 이용자 데이터도 없음 -> 정보가 가장 없는 시점에 가장 중요한 판단
- 오탐 피해가 큼: 정상 사용자를 막으면 가입 자체가 불가, CS 폭발 -> 차단 범위를 넓히는 데 소극적일 수밖에 없음
- 어뷰저도 학습함: 차단되면 환경 / 패턴을 바꿔 재시도, 무한 반복 -> 점점 정상 요청과 비슷해짐
카카오톡의 대응: MO 인증
- 핵심은 오탐 리스크를 줄이는 것 (100% 구분하는 모델은 불가능)
- 기존: 어뷰징으로 판단하면 바로 차단 (인증 SMS를 안 보냄) -> 오탐이면 정상 유저 가입 불가 -> 탐지 범위가 계속 줄어듦
- 카카오톡 기획팀이 안티어뷰징 팀에 새 인증 수단을 줌: MO (Mobile Originated) 인증
- 카카오뱅크 같은 금융 앱처럼 사용자가 직접 문자를 보내 인증
- “인증 문자 전송하기” -> SMS 앱으로 전환, 코드를 직접 발송 -> 앱으로 돌아오면 인증 완료
- 방향이 반대: 서비스 -> 사용자가 아니라 사용자 -> 서비스, 비용을 사용자 쪽에서 냄
- 어뷰저 확률에 따라 차단과 선택적으로 적용
- 매우 높음 (예: 99%, 88%): 기존대로 차단
- 매우 낮음 (예: 1%): 기존처럼 카카오가 SMS 발송
- 애매한 구간 (예: 50%): 차단하지 않고 MO 인증으로 전환
- 차단만 있을 때
- 기준을 50%로 두면 정상 유저도 같이 차단, 구제 방법도 없음
- 그래서 확률이 매우 높을 때만 (예: 70% 이상) 차단 -> 어뷰저 일부를 놓침
- 이게 앞의 23만 건 중 85%는 막았지만 15% 때문에 손해가 컸던 상황
- MO 인증 추가 후
- 오탐이 걱정돼 통과시키던 애매한 구간부터 MO 인증으로 변경 -> 어뷰저가 통과되는 경우가 사라짐
- 정상 유저도 일부 MO 인증으로 바뀌지만 직접 문자를 보내면 가입 가능, 불편하지만 대안이 생김
효과
- MO 인증을 적용하자 전체 SMS 발송량이 예상보다 훨씬 많이 줄어듦
- 인지하던 것보다 훨씬 많은 어뷰징이 있었던 것
- 한 번 줄어든 뒤에도 시간이 지나며 계속 감소
- 애매한 구간까지 메우자 어뷰저에게 돈이 안 됨 -> 시도 자체가 줄어듦
- 어뷰징 요청이 줄자 부정 요청 식별도 쉬워짐 -> 선순환, 잘 막을수록 더 쉽게 막게 됨
업계 동향
- 메신저뿐 아니라 사용자에게 문자를 보내는 기능이 있으면 누구나 대상, 해외 번호를 서비스하면 더더욱
- 트위터: SMS 2단계 인증을 유료 구독자 전용으로 변경
- 위챗: 캡차를 적극 사용, 지금은 카카오처럼 MO 인증도 병행
- 텔레그램: 유료 멤버십 결제를 해야 인증 문자 발송
- 어뷰징 대응에 정답은 하나가 아님
정리
- 전화번호 인증이 있는 서비스라면 SMS Pumping의 타깃이 될 수 있음
- 순식간에 큰 비용 손실이 날 수 있으므로 미리 막아두는 게 중요