본문 바로가기

프로젝트

어뷰징 대응의 시작 - 고정 윈도우 기반 Rate Limit 시범 운영기

1. 투표의 신뢰를 지키기 위한 첫 대응

 

이전 시상식 기간 중 매크로 사용과 다중 계정 생성 정황이 포착되었고, 행동이 이상한 일부 유저에 대해 CS 인입 및 커뮤니티 내 매크로 사용법 공유 사례도 있었습니다.

회사의 투표 시스템 신뢰성 강화를 위해, 이러한 어뷰징 유저 탐지 및 단속의 필요성이 높아졌습니다.

 

2. 작게 시작한 시범 운영, 리스크를 최소화하다

 

이번 시상식에서 투표 기간 중에 시범적으로 어뷰징 탐지 시스템을 만들어 운영해보기로 했습니다. 처음 적용하는 시스템이면서 해당 시스템이 우리가 예상한대로 동작했을 때 이점보다, 동작하지 않았을 때 리스크가 더 크다고 판단이 되었기 때문입니다. 고정 윈도우 기반의 간단한 탐지 체계를 구성해 특이 행동을 모니터링하고, 개발자가 수동으로 판단 및 조치하는 것을 1차 목표로 삼았습니다.

 

3. 고정 윈도우 + Rate Limit 기반 탐지 시스템

 

각 요청에 대해 Redis에 토큰/IP/DeviceId 기준의 각 API 카운트를 저장하고, TTL을 설정해 1시간 단위의 고정 윈도우를 구현했습니다. Rate Limit 초과 시 CloudWatch에 다음과 같은 로그를 남기도록 구성했습니다.

 

 System Sequence Diagram

 

 

  Cloud Watch Log Format

{"api":"/reward", "user_idx":"0000", "ip":"000.000.000", "device_id":"000-000-000", "count":"20", "reg_date":"2025-06-25"}

 

4. 실제 어뷰징 유저의 흔적과 탐지 사례들

 

예상보다 많은 이상 요청이 포착되었습니다. 예를 들어, 특정 사용자가 6일 이상 동안 단 한 번의 휴식 없이 보상 API를 호출한 기록이 있었고, 이는 어뷰징으로 판단되어 차단 조치했습니다. 회원가입 API의 경우 특정 IP에서 생성된 대량의 계정이 발견되었으며, 이메일 형식에서도 반복적인 패턴이 드러났습니다.

1. 동일한 문자열에 특수 기호가 입력된 이메일로 가입
    - jeongjihyun@gmail.com
    - jeongj.ihyun@gmail.com
    - j.eongjihyun@gmail.com
2. 동일한 문자열에 오름차순으로 된 숫자가 붙은 이메일로 가입
    - jeongjihyun1@gmail.com
    - jeongjihyun2@gmail.com
3. 임시 이메일을 사용한 이메일로 가입
    - jeongjihyun@temp.com
    - jeongjihyun@tempmail.com

 

이와 같은 패턴들이 추가 생성될 수 있을 것 같아, 빠른 파악을 위해 숫자, 특수 기호 제거를 한 이메일에도 RateLimit를 걸어 로그에 남기도록 설정해두었습니다. 이로 인해 추후 패턴에 의해 들어오는 회원가입 어뷰징을 발 빠르게 확인하여 대응할 수 있었습니다.

 

추가로 위와 같이 했던 유저들이 투표한 이력들을 추적했으며, 투표의 신뢰성을 확보하고자 차감하는 방식으로 처리를 했습니다.

 

5. 자동화보다 중요한 것: 관측 가능한 구조

 

간단한 룰 기반 탐지 시스템만으로도 예상보다 큰 효과를 얻을 수 있었고 투표 신뢰도를 지키는 데 실질적인 도움을 줄 수 있었습니다. 완전 자동화보다 문제를 관측하고 판단할 수 있는 체계부터 갖추는 것이 중요하다는 교훈을 얻었습니다. 향후에는 정교한 탐지 룰과 자동 대응 구조를 도입해, 정상 유저를 보호하면서도 어뷰징은 빠르게 차단할 수 있는 구조로 발전시킬 계획입니다.