K-사이버 시큐리티 2020 아이온 게임봇 탐지대회 후기

안녕하세요, 이번 포스팅에서는 K-사이버 시큐리티 2020 아이온 게임봇 탐지대회의 분석 방법론에 대해 설명해 드리고, 간단한 참가 후기를 정리해볼 예정입니다.

해당 코드는 깃허브에서 볼 수 있고 영상은 유튜브에서 보실 수 있습니다.


K-사이버 시큐리티 2020 아이온 게임봇 탐지대회

해당 대회는 KISA와 고려대학교 정보보안학과 해킹탐지 연구소의 주최로 진행되는 대회였습니다. 주제는 '게임 데이터를 분석하여 높은 정확도로 게임봇을 탐지할 수 있는** 머신러닝 & AI 기반 알고리즘 개발' 입니다. 게임봇은 사전적인 정의상 '사람을 대신하여 자동으로 게임플레이를 해주는 프로그램'입니다. 게임봇을 이용한 “작업장”은 MMORPG와 온라인 게임 내 재화, 아이템의 환금성을 악용하여 대량의 캐릭터를 운용하여 수입을 얻으며 게임 밸런스를 해치고 이용자에게 불편을 일으킵니다.

위의 이미지와 같이 작업장에서 오토 프로그램을 이용해서 대규모의 작업을 진행합니다. 이로인해, 일반 유저의 게임 플레이에 방해되어 불평 발생하고 게임 내 설계된 콘텐츠를 빠르게 소진하여 게임 수명이 짧아지게 만드는 요인 중 하나가 됩니다. 최근, 배틀 그라운드와 오버워치 모두 게임봇과 같은 핵유저때문에 많은 유저층이 떠나는 문제도 일으켜서 초기에 게임봇을 잡는 것은 무엇보다도 중요해지고 있습니다.

이러한 문제를 해결하기 위해서 NC 소프트에서 운영하는 아이온 게임의 유저 액션 로그를 통해서 유저별 정상/게임봇 여부를 판별하는 AI 알고리즘을 개발하는 대회였습니다. 주어진 데이터는 아래와 같은데 짧은 기간이지만 로그데이터이기 때문에 데이터의 크기가 굉장히 큰 게 이슈 중 하나였습니다.

  • 예선 : 10일간의 게임로그와 분석용/제출용 유저 목록 (2010.05.08 ~ 2010.05.17) – 약, 70GB
  • 본선 : 7일간의 게임로그와 제출용 유저 목록 (2020.05.18 ~ 2020.05.24)

Exploratory Analysis

일반유저와 게임봇의 활동 시간 비교

위의 그래프는 게임봇과 일반유저의 24시간 동안의 플레이 로그의 횟수를 계산한 그래프입니다. 상식적으로 일반유저와 게임봇이 얼만큼의 플레이를 할지에 대해 생각해보면 게임봇은 기계이기 때문에 24시간 활동을 할 수 있지만, 일반유저는 출근, 등교, 숙면 등의 이유로 쉬는 시간과 플레이 시간이 나뉘게 됩니다. 위의 그림처럼 왼쪽의 게임봇은 24시간 내내 플레이 로그가 찍히지만, 일반 유저는 플레이 로그가 찍히는 구간과 아닌 구간이 분명하게 나뉘어 있습니다. 또한, 재밌는 점은 게임봇의 주황색 박스를 친 부분입니다. 몇몇 게임봇의 경우는 매시간의 로그의 수가 굉장히 유사한 특징을 가지는데 이는 게임봇이 주어진 특정 행위를 반복하는 오토 프로그램이기 때문에 위와 같은 현상이 발생하는 것입니다.

일반유저와 게임봇의 플레이 스타일 비교 - 상위 5개의 로그

위의 그래프는 게임봇과 일반유저의 로그의 빈도에 대한 히스토그램을 그린 그래프입니다. 일반유저의 경우 다양한 로그를 진행하는 반면에 게임봇은 사냥과 채집과 관련한 로그에 집중되어있습니다. 특히, 아이템 채집이나 반복되는 사냥과 같이 지속적인 가치를 창출하는 행위를 반복합니다. 반대로, 일반유저의 경우에는 400번대의 스킬관련 로그와 700번대의 공성전 관련 플레이를 하는 모습을 보입니다. 공성전 활동에서 볼 수 있는 재밌는 사실은 일반유저는 게임봇과 다르게 게임 내의 여러 요소들을 즐기는 점입니다. 친구들과의 대화라든지, 퀘스트도 해당 측면에 들어가고 보스몹에 대한 사냥이라든지 파티를 통해서 던전에 들어가는 행위들은 게임봇보다는 일반유저들만이 가지는 특징인 것을 볼 수 있습니다.

기존 문헌 분석

데이터 탐색을 통해서 여러 가지 정보를 얻었지만, 이를 통해서 어떤 식으로 게임봇을 탐지할지에 대해 막막해서 여러가지 관련 문헌들을 분석했습니다. 아래와 같이 9개의 자료를 읽었고 그중에서 인상 깊게 본 3가지 논문에 대해서 정리하도록 하겠습니다.

  • Kang, A. R., Jeong, S. H., Mohaisen, A., & Kim, H. K. (2016). Multimodal game bot detection using user behavioral characteristics. SpringerPlus**, 5(1), 1-19.
  • Show me your Account Detecting MMORPG Game Bot Leveraging Financial Analysis with LSTM
  • Multimodal game bot detection using user behavioral characteristics
  • 온라인 게임 내의 부정 행위 탐지 연구 동향
  • 자기 유사도를 이용한 MMORPG 게임 봇 탐지 시스템
  • 자산변동 좌표 클러스터링 기반 게임 봇 탐지
  • 행위 시간 간격 기반 게임 봇 탐지 기법
  • 2019년도 게임봇 1등 솔루션
  • 2019년도 게임봇 2등 솔루션

Multimodal game bot detection using user behavioral characteristics

첫 번째 논문인 Multimodal game bot detection using user behavioral characteristics에서는 플레이어의 행동을 5가지 유형(Player Information, Player Actions, Group Activities, Social Interaction Diversity, Network measures)으로 나누고, 어떤 파생변수를 만들 수 있는지에 대한 기본적인 가이드를 제시합니다.

이를 기반으로 파생변수를 만들었고, 추가로 2019년도 게임봇 탐지대회의 1등, 2등 솔루션을 참고 해서 파생변수를 생성했습니다.

자산변동 좌표 클러스터링 기반 게임봇 탐지

두 번째 논문인 자산변동 좌표 클러스터링 기반 게임봇 탐지에서는 아래의 그림처럼 게임봇은 일반 유저에 비해서 활동반경의 범위가 좁고 특정 공간 내에서만 반복해서 움직이는 특징을 보인다고 주장합니다. 실제로 봇들은 특정 반경 내에서만 활동하고, 일반유저는 맵을 전체적으로 돌아다니는 특징이 있습니다.

실제로 받은 데이터에서 게임봇과 일반유저의 좌표를 찍어봤을 때, 아래의 그림처럼 게임봇은 특정 구간에만 모여져 있고 일반 유저와 게임봇의 Cumulative Distribution 또한 뚜렷하게 차이 나는 것을 볼 수 있습니다.

이러한 좌표를 모델에 반영해 주기 위해서 해당 논문에서는 소지금 변동 위치 좌표의 공간적 특징을 DBSCAN 알고리즘을 통해서 추출하고, CORE, MEMBER, NOISE를 파생변수로 활용합니다. 하지만 이를 실험했을 때에는 속도가 너무 오래 걸리는 단점이 있었고 이를 아래의 그림과 같이 특정 Core를 중심으로 다른 좌표들 간의 거리의 평균과 표준편차를 계산하는 방법으로 코드를 수정했습니다. 실제로, 기존대비 10배의 속도로 개선되었고 성능 또한 기존 대비 큰 차이가 없었습니다.

자기유사도를 이용한 MMORPG 게임봇 탐지 시스템

마지막으로 소개할 논문은 자시유사도를 이용한 MMORPG 게임봇 탐지 시스템입니다.

위의 게임봇의 시간에 대한 로그의 수를 보면 BOT 2, 4, 5, 6은 시간에 따라서 로그의 수가 크게 변하지 않습니다. 이를 반영해주기 위해서 해당 논문에서는 자기유사도라는 개념을 도입합니다.

게임봇은 일반 유저에 비해서 같은 로그들을 반복하는 행동을 보이므로, 분 혹은 시간단위로 유저가 행동한 로그를 기록합니다. 만일 게임봇이라면 아래의 표처럼 분마다 찍힌 로그의 모습이 매우 유사한 형태를 띨 것입니다.

Time Period 1**번 로그** 2**번 로그** . . . N**번 로그**
10/05/08 12:00 1 4 8
10/05/08 12:01 1 4 8
. . .
15/05/17 23:09 1 4 8

이러한 유사도를 측정하기 위해서 단위 벡터 [1, 1, . . . , 1]를 도입해 단위 벡터와 모든 Time Period 간의 코사인 유사도를 계산합니다. 이렇게 저장한 코사인 유사도의 모습을 보면 아래와 같습니다.

게임봇은 자기유사도가 분 단위로 굉장히 비슷한 모습을 보이지만 일반 유저는 자기유사도가 굉장히 다릅니다. 이를 이용해서 모든 분마다 자기유사도의 표준편차를 계산해서 파생변수로 활용해주면 모델의 성능이 기존대비 많이 상승하게 됩니다.

EDA와 리서치를 통한 파생변수 생성

저희 팀은 Multimodal game bot detection using user behavioral characteristics과 2019년도 게임봇 1등, 2등 솔루션을 통해서 아래와 같이 파생변수를 생성했습니다.

정규화를 통한 Covariate Shift 방지

하지만 단순하게 일별 혹은 주별의 행위를 Aggregation 하는 방법은 한계점이 존재합니다. 파생변수가 Count와 Sum 기반이어서 예선기간 열흘 동안에 10일 플레이한 일반 유저와 1일 플레이한 일반 유저간의 분포가 굉장히 달라지는 모습을 보이게 됩니다. 10일 모두 플레이한 유저는 변수의 값이 크고 1일 플레이한 유저는 낮게 되는 상관성이 생기게 되어버립니다. 이를 해결하기 위해서, Ratio 기반의 피처 엔지니어링을 진행했습니다.

  • Ratio1 : 전체 로그의 수로 나눈 경우
  • Ratio2 : 전체 플레이 시간으로 나눈 경우
  • Ratio3 : 전체 플레이 날의 수로 나눈 경우

위의 3가지 형태의 Ratio를 통해서 분포를 비슷하게 만들어주려고 했고, Cumulative Distribution을 봤을 때 단순 count보다 게임봇과 일반유저간의 차이가 더 뚜렷해지는 것을 볼 수 있습니다.

학습전략 및 검증방법 생성

학습 시에 가장 큰 문제점은 게임봇의 유저가 일반유저에 비해 현저하게 적었다는 점입니다. 게임봇은 7.4%로 매우 적었고 단순하게 학습할 때 대부분의 유저를 일반 유저로만 분류하는 문제가 있었습니다. 이를 해결하기 위해서 일반유저는 다운샘플링을 하고 게임봇은 전부 학습에 참여하도록 설정하였습니다. 특히, 이때 일반유저의 정보가 손실되는 문제를 방지하기 위해서 일반유저를 N번 샘플링하였고 N번의 샘플링을 통해 만들어지는 학습데이터 셋마다 게임봇은 모두 넣어주었습니다.

LightGBM을 이용한 모델링

최종적으로는 LightGBM을 이용해서 모델을 학습했습니다. 검증방법으로는 단순 KFold 방식이 아니라 폴드간의 클래스 분포를 맞춰주는 Stratified KFold 방식을 사용했습니다. 이는 단순하게 KFold를 하면 학습 데이터셋에 게임봇의 유저가 너무 적은 것을 방지해주기 위함이었습니다.

특히, 이번 대회를 진행하면서 가장 좋은 아이디어라고 생각한 점은 학습 데이터셋을 10일을 7일씩 4구간으로 쪼개서 학습에 사용한 점입니다. 이렇게 해준 이유는 크게 2가지가 있습니다.

  • 게임봇은 매일 봇 행위를 하는 것이 아니며, 특정 구간에만 행동한다.
  • 게임봇의 패턴이 매일 같은 것이 아니라 시간이 흐름에 따라서 바뀐다.

위와 같은 특징들을 잡기 위해서는 모델이 시간의 흐름에 따라 바뀌어야 한다고 판단했고, 4가지에 대해 각자 모델을 만들어서 앙상블하는 형식을 취했습니다.

변수 중요도에 대한 해석 (LightGBM 중요도)

이렇게 만든 변수의 중요도를 보면 Player Information, Action, Group Activities, Social 중에서 Player 관련 정보가 가장 중요도가 높고 Research에서 만든 변수들은 중요도가 전부 상위권임을 확인할 수 있습니다. 그리고 Ratio 기반의 파생변수도 중요도가 높고 buyitemnpc 및 sellitemnpc와 같이 Social 관련 파생변수도 중요한 것을 볼 수 있습니다.

성능에 대한 분석

최종결과

하지만 이렇게 만든 모델로 결과를 제출하면 F1 78.6%로 다른 팀 대비해서는 많이 낮은 점수를 기록했습니다. (다행히 작년에는 21.97%이었는데 실력 측면에서 많은 상승이 있었습니다 ㅎㅎ)

Precision과 Recall

해당 원인을 분석하면서 파악한 점은 저희 팀의 모델은 굉장히 보수적으로 설계되어서, 게임봇과 일반유저를 분류할 때 일반유저를 게임봇으로 분류하는 케이스가 0.46%밖에 되지 않는 점이었습니다.

  • 게임봇 -> 게임봇 : 70.79%
  • 게임봇 -> 일반 유저 : 29.21%
  • 일반유저 -> 게임봇 : 0.46%
  • 일반유저 -> 일반유저 : 99.54%

실제 게임 운영상에는 게임봇을 맞추는 것도 중요하지만, 일반 유저를 게임봇으로 분류하지 않는 것도 중요하다고 판단하였고 무리하게 F1을 올리는 것보다는 현재의 전략을 고수하는 게 좋다고 판단했습니다. 결국, 발표까지 진행한 최종점수에서 3등이라는 점수를 받을 수 있었습니다.

모델의 장단점과 한계

분석을 진행한 이후에 글을 작성하면서 모델의 장단점과 한계에 대해서 다시 고민해보자면, 장단점은 아래와 같은 것 같습니다.

장점

  • 사람을 게임봇으로 분류하는 비율이 적기때문에, 운영상에서 유리하다.
  • 주단위로 모델을 생성하기에, 시간이 흘러 게임봇의 특징이 달라져도 모델이 학습할 수 있다. (유지보수에 강함)

단점

  • 다른 팀들에 비해서 모델의 성능이 낮다. (게임봇을 탐지하지 못한다.)
  • 기존에 제안한 방법들을 기반으로 모델을 생성해서 노벨티가 떨어진다.
  • 여러 개의 모델을 생성해야 하므로 자원측면에서 아쉬움이 존재한다.
  • 매일 혹은 매주 모델을 학습해야 한다.

시도한 방법들과 한계 – 네트워크 기반의 파생변수

분석하면서 시도한 방법들에 대해서도 몇 개 소개하자면, 첫 번째로는 Social Network 기반의 파생변수가 있습니다. 게임봇도 종류가 다양합니다. 사냥을 위주로 하는 게임봇, 채집을 위주로 하는 게임봇, 제작을 위주로 하는 게임봇 등 각자의 역할이 나누어져 있습니다. 아래의 모습은 Gold Farming을 통해서 돈을 번 게임봇이 대가를 받지 않고 여러명에게 돈을 나눠주는 행위를 보여주는 네트워크입니다. 이러한 네트워크는 보통 같은 작업장일 가능성이 높아서 해당 네트워크 집단을 Graph 기반의 파생변수들을 통해서 잡아내려고 했지만, 성능의 향상은 없었습니다.

시도한 방법들과 한계 – IP 기반의 게임봇 탐지

후처리나 과거에 많이 사용하는 방식으로 기존 게임봇 유저들의 IP 를 추출해서 해당 IP로 들어온 유저를 탐지하려고 만든 파생변수입니다. 게임봇 여부를 모르는 유저의 IP목록을 모두 수집해서 게임봇 유저가 과거에 접속한 IP와 겹치는 비율을 계산하여 후처리 및 파생변수로 활용해, 봤지만 점수는 좋아지지 않았습니다.

시도한 방법들과 한계 – 모델 및 방법론

모델 및 여러가지 방법들도 시도해봤는데 성능 향상에는 도움되지 않은 실험 목록입니다.

모델

  • 부스팅 모델 : XGBOOST, CATBOOST
  • 배깅 모델 : RANDOM FOREST
  • 선형 모델 : LORISTIC REGRESSION
  • 딥러닝 모델 : LSTM, DNN
  • 커널 모델 : SVM

방법론

  • PESUDO LABELING
  • SEED ENSEMBLE
  • STACKING
  • WEEK차별로 결과의 MAX

작년에 수상에 실패했던 공모전이고 모델 점수가 5등이라 수상에 대해서 크게 기대를 안 했는데 3등으로 수상권에 들어서 더욱 뿌듯한 공모전이었습니다. 그리고, 되게 감동받았던 점은 발표한 후에 분석 과정에 대한 피드백을 해준점이었습니다. 이제까지 겪은 빅콘테스트를 제외한 모든 공모전은 분석과정에 대해서 다른 피드백이 없었는데, 발표에 대해서 첫번째로 피드백해주고 발표가 끝난후에 메일로 전체팀에 대한 피드백을 해준게 정말 감동이었습니다. 다음번에는 데이콘에 진행한 공모전과 NIPA 정보통신산업진흥원에서 열린 2020 인공지능 문제 해결 경진대회의 분석과정에 대해서 소개해 드리도록 하겠습니다.

참고자료

  • Kang, A. R., Jeong, S. H., Mohaisen, A., & Kim, H. K. (2016). Multimodal game bot detection using user behavioral characteristics. SpringerPlus, 5(1), 1-19.
  • Show me your Account Detecting MMORPG Game Bot Leveraging Financial Analysis with LSTM
  • Multimodal game bot detection using user behavioral characteristics
  • 온라인 게임 내의 부정 행위 탐지 연구 동향
  • 자기 유사도를 이용한 MMORPG 게임 봇 탐지 시스템
  • 자산변동 좌표 클러스터링 기반 게임 봇 탐지
  • 행위 시간 간격 기반 게임 봇 탐지 기법
  • Permutation importance: a corrected feature importance measure
  • 2019년도 게임봇 1등 솔루션
  • 2019년도 게임봇 2등 솔루션

댓글(4)

  • 2020.12.08 10:34 신고

    대단하시네여

  • 좌랑수
    2020.12.11 20:14

    안녕하세요 포스팅해주신 분석과정 잘 보았습니다. 저는 빅데이터쪽으로 공부중인 대학생인데요 혹시 위 공모전 결과를 도출하기까지 얼마나 기간이 소요되셨는지 궁금합니다~!

    • 2020.12.12 11:34 신고

      안녕하세요. 분석 글 읽어주셔서 감사합니다. 대회기간은 본선과 예선을 합쳐서 2달정도 였습니다. 모든 시간을 대회에 투자하지는 않았지만 한달 이상은 계속 데이터 보면서 실험했던 것 같습니다.

Designed by JB FACTORY