어뷰징을 재고 나서, 아무것도 하지 않기로 했다
다계정 파밍이 의심됐다. 규모를 쟀더니 피해액이 $0.27이었다. 대책 대신 기존 방어 하나를 걷어냈다.
내가 운영하는 앱은 가입하면 무료 크레딧을 준다. 크레딧으로 AI 분석을 받고, 분석 한 번에 실비가 나간다. 사용자가 급증하자 예상된 질문이 따라왔다.
계정을 여러 개 만들어서 무료 크레딧만 빼먹는 사람이 있지 않을까.
의심할 근거는 있었다. 이름이 비슷한 계정 묶음이 보였고, 구글은 계정을 무한정 만들 수 있다. 대책 후보도 금방 나왔다. 기기 증명, 스토어 무결성 검사, IP 제한, 본인인증.
하나도 적용하지 않았다. 오히려 이미 있던 방어 하나를 지웠다. 그 판단에 이르는 과정이 이 글이다.
먼저 규모를 쟀다
대책을 고르기 전에 물어야 할 게 있다. 지금 얼마나 잃고 있는가.
읽기 전용 조회 스크립트를 만들어 주별 가입자와 사용량 분포, 이메일 정규화 후 중복, 이름 클러스터, 리퍼럴 상태, 계정별 AI 비용을 뽑았다.
숫자를 보고 논의가 끝났다. 본인인증을 붙이는 비용이 $0.27보다 훨씬 크다. 가입 전환율 하락은 금액으로 환산하기도 전에 이 숫자를 넘는다.
대조군이 있었다
그래도 "지금 4명이 나중에 400명이 되면?"이라는 질문이 남는다. 이건 규모가 아니라 추세의 문제다.
여기서 운이 좋았다. 이 앱에는 자연 대조군이 있었다.
로그인 수단이 여러 개인데, 카카오는 가입에 휴대폰 인증이 필요하다. 즉 카카오 계정은 다계정을 만들기 어렵다. 구글은 제한이 없다. 그러면 파밍이 실제로 일어나고 있다면 구글 쪽 사용 패턴이 카카오와 달라야 한다. 파머의 계정은 무료 크레딧만 소진하고 버려질 테니, 짧게 쓰고 이탈하는 비중이 구글에서 높아야 한다.
세 지표를 비교했다.
| 지표 | 구글 | 카카오 |
|---|---|---|
| 11~20회 사용 비중 | 34.3% | 40.9% |
| 하루만 쓰고 이탈 | 71.9% | 73.7% |
| 미사용 | 28.9% | 28.7% |
셋 다 갈리지 않았다. 첫 행의 차이는 z=1.24 로 유의하지 않고, 방향도 예상과 반대다. 파밍이 있었다면 구글 쪽이 더 높아야 하는데 카카오가 높다.
계정당 평균 사용량은 카카오 14.6회, 구글 10.7회, 애플 16.1회로 원시 평균에는 차이가 있다. 하지만 분포 검정에서는 유의하지 않았다. 평균의 차이를 근거로 쓰면 안 되는 전형적인 경우다.
결론은 이렇게 정리됐다. 파밍은 존재하지만 측정 가능한 규모로 자라지 않았다. 그리고 자라고 있다면 대조군에 신호가 먼저 잡힐 것이다.
파밍이 손해인 이유
왜 안 자라는지도 계산해 봤다. 리퍼럴 보상에는 자격 조건이 하나 붙어 있다. 초대받은 계정이 분석 10회를 완주해야 보상이 지급된다.
이 조건 때문에 파밍의 산수가 뒤집힌다.
부계정 하나당 무료 크레딧 15개를 받지만, 보상 자격을 채우려면 그 계정으로 분석 10회를 돌려야 한다. 계정을 늘릴수록 소모가 획득보다 빨리 는다. 실측으로도 3계정 파머가 30크레딧을 얻으려고 45회를 태우고 있었다.
경제적으로 이미 막혀 있는 구멍을, 기술로 한 번 더 막을 이유가 없다.
그리고 방어 하나를 걷어냈다
조사 중에 이미 켜져 있던 방어가 오히려 문제를 만들고 있다는 걸 발견했다.
자기추천을 막으려고 기기 핑거프린트를 비교하고 있었다. 그런데 그 핑거프린트는 UA, 언어, 코어 수, 화면 크기, 타임존 여섯 값의 해시였다. canvas 나 WebGL 이 없으니 엔트로피가 낮다.
같은 기종에 같은 OS 를 쓰는 남남이 동일한 해시로 나온다.
기숙사나 학교에서 같은 폰을 쓰는 친구를 초대하는, 완전히 정상적인 경우가 자기추천으로 판정돼 보상이 보류됐다.
미탐 비용은 0에 가깝고 오탐 비용은 그대로 사용자에게 갔다. 이럴 때 검사를 유지할 이유가 없다.
오탐 비용이 미탐 비용보다 컸다. 자기추천은 앞의 자격 조건이 이미 경제적으로 막고 있으니, 이 검사가 추가로 막아주는 것은 사실상 없었다. 반면 오탐은 정상 사용자의 보상을 실제로 빼앗고 있었다.
검사를 제거했다. 남은 방어는 자격 조건, IP 신호, 월 5건 상한 셋이다. 핑거프린트 수집 자체는 계측 목적으로 남겨뒀다.
가장 비쌌던 오탐
이 조사에서 제일 뜨끔했던 건 숫자가 아니라 사례 하나였다.
이름 클러스터로 "어뷰저 의심"에 올라온 계정이 있었다. 사용량이 253회로 압도적이었다. 다계정 파밍의 전형처럼 보였다.
그 계정은 최우량 유료 고객이었다.
가장 열심히 쓰는 사용자와 가장 열심히 악용하는 사용자는 로그에서 똑같이 생겼다. 사용량이라는 축 하나로는 절대 안 갈린다. 만약 그때 자동 차단 규칙을 걸어뒀다면, 나는 제일 좋은 고객을 잘랐을 것이다.
언제 다시 볼 것인가
"지금은 안 한다"는 결정은 언제 뒤집을지를 같이 정해두지 않으면 그냥 방치가 된다.
기준을 하나 박아뒀다. 무료 사용자에게 나가는 AI 비용이 월 $100을 넘으면 다시 검토한다. 지금은 월 $8 대다.
남은 것
대조군은 우연히 있었다. 카카오가 휴대폰 인증을 요구한다는 사실은 내가 설계한 게 아니라 그냥 그런 것이었고, 덕분에 공짜로 비교군을 얻었다. 다음에 이런 판단이 필요할 때 대조군이 또 있으리라는 보장은 없다. 의도적으로 대조군을 만들어 두는 설계는 아직 생각해 본 적이 없다.
핑거프린트를 판정에 다시 쓰려면 갈 길이 멀다. canvas 나 WebGL 로 엔트로피를 확보해야 하고, Safari 26 이상은 지문 방지를 위해 값에 노이즈를 섞어 매번 달라지므로 매칭 대상에서 빼야 한다. 즉 브라우저마다 다른 규칙이 필요하다. 그 복잡도를 $0.27 때문에 감수할 수는 없다.
$100 이라는 기준선의 근거는 약하다. 감당 가능한 손실의 상한으로 잡은 숫자이지, 어떤 분석에서 나온 값이 아니다. 지금 비용의 10배쯤이라는 것 말고는 설명할 말이 없다. 임계값은 재서 정해야 한다고 다른 글에 써놓고, 여기서는 골랐다.