[개발 인사이드] 라이엇의 게임 부정행위 없애기
안녕하세요, 다시 인사드립니다. 이 글을 읽고 계신 분들께 꼭 알려 드려야 할 것이 있습니다. 여러분께서 예전에 이런 글을 (고통스럽게) 읽어보셨을 수도 있다는 것과, 아직도 이 글을 읽고 계신다면 그 고통의 기억을 애써 지워버리신 것일 수 있다는 점이죠. 부정행위 방지 팀의 데이터 엔지니어인 저, mirageofpenguins는 공허에서 몸이 산산조각나는 것 같은 시련을 겪었지만 다음과 같은 임무를 띠고 다시 태어났습니다.
- 1년 반마다 한 번씩 부정행위 방지 소식 전달
- 유클리드 평면에서 데카르트 좌표의 예술적인 구현을 포함한, 자동 입력 프로그램 사용과 관련된 화끈한 통계 자료 제공
- 전략적 팀 전투, 레전드 오브 룬테라, 발로란트에 대한 저희의 초기 접근 방식 공유
- 부정행위자들은 저의 걷잡을 수 없는 분노의 격렬한 표출에 의해 공식적으로 제명되리라는 것 알림
리그 오브 레전드
라이엇이 변덕스럽게 게임을 만들어내는 바람에 저희는 끝없이 늘어나는 부정행위에 대처해야 하는 상황에 처했습니다. 저희는 지금까지는 모든 적에게 끈질기게 달려들어 공격해왔고, 이 전략이 괜찮은 전략인지 여부에 상관없이, 아쉽게도 이 전략은 여러 개의 게임에 모두 적용될 수는 없습니다.
부정행위 방지 엔지니어들의 생물량은 유한하지만, 아인슈타인이 정확히 예측했듯이 부정행위 방지 플랫폼 전체를 만들어내는데 요구되는 인간의 요소는 그 생물량에서 고통스럽게 추출해야만 하죠. 차세대 솔루션을 만들어내기 위한 시간을 벌기 위해, 저희는 적의 기술 발전 속도를 누그러뜨려야 했습니다. 저희가 휘두르는 모든 망치는 부정행위자에게 보내는 신호이며, 저희가 수행하는 모든 업데이트에 대해서는 결국 파훼법이 만들어집니다. 그래서 반복적으로 이루어지는 개별 대응이 더 오래 기능할 수 있도록 부정행위에 대처하는 방법을 바꿔야 했죠.
그렇다면 저희는 어떤 방법으로 자동 입력 프로그램 개발자들과 저희 사이의 경쟁 속도를 완화시켰을까요? 아래에서 확인해보시죠.
자동 입력 프로그램 사용 (Scripting)
행여나 여러분께서 자동 입력 프로그램이 뭔지 검색하다가 부정행위에 눈을 뜨는 것을 막기 위해 알려드리자면, 자동 입력 프로그램 사용은 부정행위자 대신 입력을 수행할 목적으로 외부 프로그램을 사용해 게임 상태를 모니터링하는 것을 말합니다. 비유하자면, 키보드에 마그네틱 카드 리더기가 있고 그것으로 결제를 해서 대신 버튼이 눌러지도록 하는 거죠. 자동 입력 프로그램 사용은 해내기 힘든 콤보나 거의 동시에 이루어지는 반응을 수행할 때 사용하면 아주 높은 성능을 보이지만, 그 대신 리그 오브 레전드 계정의 수명이 확 줄어들죠. 저희가 이를 금지하는 이유는 저희가 신경 쓰기 때문이며, 저희가 신경 쓰는 이유는 비디오 게임에서 경쟁하기 위해 필요한 것은 뇌와 랜선뿐이라고 믿기 때문입니다.
“자동 연주되는 피아노를 보려고 돈을 내는 사람은 없습니다. 불완전함도 솜씨의 일부죠.”
전체적으로 보면 자동 입력 프로그램 사용 행태는 예전 같지 않습니다. 대량으로 관련 프로그램을 제공하는 자들은 저희의 탐지를 피하려는 노력을 전혀 보여주지 않고 있고, 그래서 터무니없는 가격을 제시하는 대신 적발되지 않는다는 것을 보장하는 더 작은 규모의 제공자들을 위한 시장이 만들어졌습니다. 가격은 최고 300 달러(약 37만원)였고, ‘인증’을 위해 운전면허증 사진을 요구한 경우도 있었습니다. 후자가 특히 재미있었습니다. 저희는 어도비 포토샵 사용 경력이 도합 200년에 달하는 그래픽 디자이너 팀에게 언제든 합성해달라고 부탁할 수 있었으니 말이죠.
어쨌든, 새로 유입된 분들을 위해 좋게 포장해서 말하지는 않겠습니다. 이 전쟁은 저희가 완전히 승리할 수 있는 전쟁은 아닙니다. 해당 프로그램을 만드는 집단은 처벌과 금지를 피할 수 없고, 저희가 그들을 지하 세계로 몰아내긴 했지만, 이제 저희는 그림자 게임을 해야 하죠.
여기 보시는 것은 우리가 시간이라고 인식하는 매개체에 따른 미가공된 자동 입력 프로그램 사용량의 형이상학적 표현입니다. 쉽게 말하자면, 부정행위자가 있는 소환사의 협곡 랭크 게임의 비율이죠. 예전보다는 훨씬 낮지만, 재진입을 막는 장애물이 없기 때문에 (리그 오브 레전드의 가격은 0원이니까요) 더 내려갈 가능성은 작습니다.
다른 주요 시사점은 아래와 같습니다.
- 자동 입력 프로그램을 사용하는 ‘사람’의 합계는 더 이상 큰 변동을 보이지 않습니다. 특히 사용한 기기 기준으로 보면, 자동 입력 프로그램 사용자 규모는 2019년 내내 거의 변화가 없었죠. 부정행위자 대부분이 이제는 단순히 끝없이 공급되는 훔친 계정을 사용해 사이클을 반복하고 있으며, 골드IV 플레이어는 평균적으로 랭크 게임을 500번 플레이하면 자동 입력 프로그램 사용자를 한 번 만나게 됩니다(한 번도 만나지 않을 가능성이 더 크죠).
- 역대 최고 수치는 2016년 4월 14일에 기록되었으며(4.4%), 최저 수치는 2018년 6월 26일에 기록되었습니다 (0.0%). 최고 수치는 한국에서 자동 입력 프로그램의 유행이 정점에 달했던 때 기록되었고, 최저 수치는 저희의 클라이언트 패킹 기술이 각 지역에서 공식적으로 적용된 첫 주에 기록되었죠. 저희는 부정행위 프로그램 개발자들이 이제는 철저하게 암호화된 게임 클라이언트를 충분히 파악하고 가장 흔히 사용되는 자동 입력 프로그램의 기능을 복구하는 데 6개월이 걸리리라 예상했지만, 실제로는 약 85일밖에 걸리지 않았습니다.1
저는 이 그래프가 참 마음에 듭니다. 제가 만든 그래프죠. 저의 두 팔뚝에 이 그래프 타투를 그려 넣었고, 일주일에 한 번씩 타투샵에 다시 가서 고통을 참고 그래프를 업데이트하죠. 이렇게 하는 것이 카타르시스를 느끼고 제 일자리를 유지하는 데는 도움이 되지만, 가장 중요한 수치라고는 할 수 없습니다. 모든 부정행위는 동일하지 않죠. 예를 들어, 마스터에 있는 부정행위자 단 한 명이 인터넷 커뮤니티 첫 화면에서 거론될 수 있고, 비교적 작은 문제에 대해 저희가 큰 질타를 받기도 합니다.
“승리 그 자체만큼 승리했다는 인식도 중요합니다. 왜냐하면 플레이어들은 그들의 경쟁이 부정할 가능성이 있다면 게임을 잘하기 위해 노력하려 하지 않을 테니까요.”
그런데 플레이어들은 어떤 자동 입력 프로그램을 알아챌까요?
저희는 먼저 플레이어들이 부정행위를 파악하는 데 있어 무작위로 찍는 것보다 더 정확하게 맞출 수 있는지, 그리고 일부 플레이어들이 ‘눈썰미’가 있는지 확인하고 싶었습니다. 저에겐 두려움을 자아내게 하면서도 정확한 점술 능력이 있지만, 자동 입력이 일반적인 인간에게 언제나 뻔하게 보이는 것이 아니기 때문이죠. 행동 감지로 인한 적발을 피하기 위한 자동 프로그램 개발자의 노력으로 인해 사람들이 리그 오브 레전드 프로 선수의 플레이와 아기가 처음 사용하는, 무작위 지연을 활용한 회피 프로그램을 구분하기가 실제로 더 힘들어졌습니다. 리그 오브 레전드와는 독립적으로 실행되는 부정행위 프로그램을 만들기 위한 노력으로 인해 구분하기가 더욱더 어려워졌죠.2
좌측 그래프는 랭크 단계별로 나눈 소환사의 협곡 게임에서 플레이어 신고의 정확도와 신고율을 보여줍니다. 신고율은 ‘모든 부정행위자 중 신고된 비율’이고 정확도는 ‘모든 부정행위 신고 중 정확하게 부정행위자를 신고한 비율’이라고 볼 수 있죠. 랭크 게임 중 4.5%에서 ‘외부 툴’에 대한 신고가 적어도 한 번 이루어진 것을 보면, 이 수치는 해당 범주의 미가공 데이터를 기반으로 작성된 수치는 아닙니다. ‘마오카이 금지 안 함’, ‘내 비트코인 채굴하려고 악성코드 설치’ 등 흔한 신고 사유로 이루어진 신고가 많아서 정확한 신고에 대한 빈도 분석을 통해 얻은 키워드를 활용했습니다.3
우측 그래프는 동일 기간(2019년 하반기)에 이 기준을 충족한 일별 신고 수입니다. 이것도 랭크에 따라 분류되었지만 주의 깊게 보신 분들은 이들을 직접 비교해선 안 된다는 걸 눈치채셨을 겁니다. 왜냐하면 각 랭크의 플레이어 규모의 비율이 다르기 때문이죠. 그 대신 그래프를 보고 부정행위 방지 데이터 사이언티스트의 하루를 경험해보시기 바랍니다. 그 느낌이 마음에 드신다면 저희 구인 페이지도 봐주시면 감사하겠습니다.
통계치를 정리해보면 다음과 같습니다.
- 예상했던 대로 정확도는 랭크가 높아질수록 올라갑니다. 즉, 게임을 잘하면 부정행위자를 알아보는 것도 잘한다는 것이며, 다이아몬드IV에 도달하면 미약하게나마 천리안 능력이 생긴다는 거죠.
- 하지만 더 높은 비율의 부정행위자가 낮은 랭크에서 신고됩니다. 신고할 자동 입력 프로그램 사용이 더 적고, 훨씬 더 많은 신고가 생성되기 때문이죠. 그래서 분모는 더 작고 분자는 더 커지기 때문에 더 높은 수치가 나오게 됩니다.
- ‘보이스카우트’라는 공식 코드명이 붙은 일부 부정행위자들은 자동 입력 프로그램 사용을 찾아내는데 비상한 능력을 지니고 있으며, 실제로 이들을 이용해 저희가 미처 몰랐던 것들을 확인할 수 있었습니다. 위 그래프에서 빨강 점은 다른 점들과 마찬가지로 정확도와 신고율을 나타내지만, 하나 특이한 점은 부정행위자의 통계치라는 겁니다. 다른 플레이어를 신고했던 바로 그 게임에서 자신도 부정행위를 함으로써 결국 계정이 정지된 경우를 모은 건데요. 즉, 이들은 자동 입력 프로그램 사용 신고를 할 때 자동 입력 프로그램을 사용하고 있었다는 것이죠. 도둑 사이의 의리는 없는 걸까요?4
플래티넘 이상 플레이어들이 수맥을 찾아내듯 자동 입력 프로그램 사용을 알아보는 능력을 지니고 있다면, 이들은 어떤 점에 주목할까요? 명백한 답은 자동 스킬 회피일 것입니다. 사람들이 가장 잘 알고 있는 자동 입력 프로그램 기능이며, 적극적으로 사용한다면 떠는 듯한 움직임과 기이한 직각 움직임을 만들어내기 때문에 신고당하기 딱 좋죠.
하지만 부정행위자들도 계정이 정지당하는 것은 원하지 않기 때문에 많은 부정행위자들이 회피 기능을 사용하지 않습니다. 사용한다고 해도 인간이 한 것처럼 보이도록 충분히 지연 시간을 주고, 이로 인해 확연했던 유리함이 어느 정도 상쇄되기도 합니다. 우리는 또 어떤 것들을 매의 눈으로 지켜볼까요?
위 그래프도 같은 방식으로 만든 그래프입니다. 이번에는 챔피언별로 작성해 모든 색깔의 크레용을 써볼 수 있었죠. 이 그래프는 2019년 골드 이상 랭크 게임에 대한 그래프이며, (모든 신고 중에서 신고 비율 기준으로) 최상위 16개 챔피언에 대한 자료입니다. Y축(정확도)은 ‘<해당 챔피언>에 대한 부정행위 신고 중 정확한 신고의 비율’이라고 보시면 됩니다.
- 자동 입력 프로그램을 사용하는 제라스는 많은 경우 적발되었지만(저 신고율 좀 보세요), 대응하는 정확도는 평균보다 확실히 낮습니다. ‘자동 입력 프로그램 사용의 대표 주자’라는 지위 때문에 정당하게 플레이하는 제라스도 자동 입력 프로그램을 사용한다는 비난을 받았고, 이로 인해 종합적인 신고 정확도가 떨어진 것이죠. 하지만 제라스가 일으키는 슈리마의 모래바람이 바뀌면 플레이어들이 눈치챈다는 것도 명확합니다. 제라스가 슈리마 출신인지 몰랐던 분들도 계시죠? 부정행위 관련 글 보시면서 리그 오브 레전드 배경지식도 쌓고, 일석이조네요.
- 여기에 나온 16개 챔피언 중 11개가 원거리 딜러입니다. 부정행위를 해본 사람들에겐 그리 놀라운 것이 아니겠지만, 우리의 도덕적이고 아름다운 천사분들을 위해 설명해 드리자면, 한 프레임도 허비하지 않는 완벽한 카이팅(이동하면서 공격하기)에 필요한 수행 능력은 자동 프로그램에 의해 최적화되기 때문입니다.
- 자동 입력 프로그램 종류에 상관없이, 모든 부정행위자가 플레이하는 모든 게임 중 무려 72.8%가 원거리 딜러 챔피언으로 플레이한 게임입니다. 다시 말해, 여기 표시된 신고 빈도가 부정행위 집단 전체를 반영한다는 것이죠.
마지막으로 재미 삼아 이 프로그램들이 얼마나 좋은지 한 번 알아봅시다. 위 그래프는 우리가 앞에서 살펴본 ‘자동 입력 프로그램이 자주 사용되는’ 챔피언을 부정행위자와 일반 플레이어가 플레이했을 때 랭크 게임 승률 차이를 보여줍니다. 모든 소환사의 협곡 랭크 게임을 대상으로 했으며, 여기서 10% 높다는 것은 자동 입력 프로그램 사용자들이 <해당 챔피언>을 플레이했을 때 리그 오브 레전드 전체 집단에 비해 랭크 게임에서 승률이 (평균적으로) 10% 높다는 것을 의미합니다.
- 보셨다시피 일부 자동 입력 프로그램 사용자의 승률이 시간이 갈수록 상승하는데요, 저희는 이것이 두 가지 흥미로운 현상의 결과라고 생각합니다. 첫 번째 현상은 자동 입력 프로그램 사용자의 수가 예전에 비해 줄었고, (이득은 없어 보이지만) 여전히 자동 입력 프로그램을 사용하는 사람들은 거의 최대 효율로 해당 프로그램을 사용할 정도로 숙련되어 있다는 것입니다. 하지만 (더 중요한) 두 번째 현상은 요즘의 부정행위자들은 신속히, 그리고 빈번히 계정이 정지되기 때문에 자동 입력 프로그램을 사용하는 새로운 계정들은 대부분 실버를 벗어나지 못한다는 것입니다. 게임은 잘해도 진정한 경쟁은 한 번도 못 하는 실버 붙박이 부계정인 거죠. 만찬에 갔는데 입이 없는 사람에 비유할 수 있을까요.
- 그래프의 꼭대기를 장식한 강렬한 녹색 선은 칼리스타의 그래프입니다. 아시겠지만 칼리스타는 연구가들이 ‘불필요한 클릭’이라고 인식할만한 것을 요구하는 챔피언입니다. 꼭 필요한 마우스 클릭만 하는 것은 자동 입력 프로그램이 완벽히 수행할 수 있는 것이죠. 그래서 보시다시피 2019년에 자동 입력 프로그램을 사용해 칼리스타를 플레이하면 프로그램을 사용하지 않았을 때에 비해 승률이 19.3% 더 높았습니다. 하지만 여러분께서 부정한 승리를 바라며 악성 프로그램을 설치하기 전에 한 가지 더 말씀드릴 게 있습니다. 바로 2019년에 칼리스타의 총 승률이 45%였다는 거죠. 그러니 T1의 Teddy 선수 손에 내장된 컴퓨터로 칼리스타를 플레이하는 것 외에는 자동 입력 프로그램으로 칼리스타를 플레이하는 건 자제하는 것이 좋겠네요.
- 앞에서 말씀드렸다시피, 부정행위 프로그램은 원거리 딜러를 플레이할 때 효과가 좋기 때문에 자동 입력 프로그램으로 플레이하는 원거리 딜러의 승률은 정상 원거리 딜러의 승률보다 평균 9.9% 높습니다(여기에 표시하지 않은 챔피언 포함해서요). 이런 효과가 없었다면 자동 입력 프로그램을 사용할 필요가 없었고 부정행위 방지 팀의 일거리도 훨씬 줄었겠죠.
“부정행위를 하고 싶은 충동을 억누를 수 없을 지경이 된다면, 저희는 그분들의 계정이 아예 존재한 적도 없는 우주를 찾아내 이 우주와 융합해 버릴 거라는 점을 명심하세요.”
부정행위와의 전쟁을 돌이켜보면, 저희는 플레이어들이 가장 민감하게 받아들였던 자동 입력 프로그램과 해당 프로그램의 상대적 효율을 알고 있었습니다. 저희는 이런 자료를 바탕으로 가장 명백히 부정행위를 저지른 계정들을 우선적으로 정지했고, 적발되지 않았을 수도 있었던 계정을 처벌할 때는 무작위로 지연 기간을 두었습니다. 그래서 가장 비효율적인 자동 입력 프로그램 사용자들이 더 오랜 기간 동안 프로그램을 사용하게 만들어서 언제, 또 왜 적발되었는지 알기 힘들게 만들었죠. 이를 통해 저희와 그들 간의 경쟁에서 기술 진전의 속도를 늦출 수 있었습니다. 신고는 소용없다고 생각했던 사람들은 이제 무슨 생각을 하고 있을까요?
봇 프로그램 사용
토스트기도 와이파이를 통해 중요 빵 업데이트를 하는 2020년에는 리그 오브 레전드 레벨 올리기를 포함해 모든 것이 자동화될 수 있습니다. 봇 프로그램 사용은 자동 입력 프로그램 사용과 매우 유사할 수도 있는데(동일한 소프트웨어를 사용하는 경우도 있습니다), 가장 큰 차이는 ‘큰 결정’을 하는 사람이 없다는 것입니다. 그 결과 레벨 올리기 봇은 일반적인 집고양이만큼 혼자서도 잘 작동합니다.
이제 봇 프로그램을 사용할 거의 유일한 동기는 계정 정지를 피하는 것입니다. (그리고 랭크 게임을 하려면 레벨이 30이 되어야 하기 때문이죠.) 하지만 그 덕분에 부정행위자의 다른 계정을 추적하기가 쉬워져서 이 문제는 저희에게 그다지 큰 골칫거리가 아닙니다. 저희가 신경 쓰는 것은 정상적인 플레이어들이 이런 봇들을 상대하거나 이들과 같은 편에서 플레이할 때입니다. 5명의 팀원 중 3명이 기계나 다름없다면 게임이 재미있을 수가 없으니까요.
지난 부정행위 방지 블로그 글에서 말씀드렸듯이, 저희는 정교한 봇 프로그램 사용 모델을 만들었습니다. (다른 것들의 도움을 받기도 했지만) 이에 힘입어 저희는 리그 오브 레전드에 존재하는 모든 따분한 인간 모조품(또는 이와 비슷한 것)을 감지할 수 있게 되었습니다. 리그 오브 레전드가 강력하고, 반쯤은 형태를 바꾸는 의사소통 프로토콜을 지니고 있다는 것도 이 모델에 힘을 실어 줍니다. 이런 프로토콜은 제가 지어낸 SF 드라마 각본에 나올 법한 것처럼 들릴 수도 있지만, 이 프로토콜 때문에 리그 오브 레전드의 봇들은 게임 클라이언트 전체를 실행해야 합니다 (헤드리스(headless) 봇5과는 반대죠). 그래서 이런 프로그램 개발자들은 연산 자원 측면에서 훨씬 더 큰 부담을 지게 되고 저희에겐 자유자재로 조절할 수 있는 층이 하나 생겼죠. 강력한 무작위화(randomization)가 없었다면 리그 오브 레전드는 엄밀히 따지면 계산기에서도 실행할 수 있을 것입니다.
저희는 이 문제가 금지에 내성이 생긴 봇 병원균6의 탄생으로 이어지는 것은 바라지 않았기 때문에, 이 봇들이 뒤틀린 숲의 비공개 선택 모드에서만 사용되도록 의도적으로 계정 정지 조치를 취해서 MMR이 심연만큼 낮은 봇들끼리 서로 치고받도록 했죠. 하지만 안타깝게도 이후 뒤틀린 숲은 벌목되고 말았습니다.
좌측 그래프는 적발된 봇 수, 우측 그래프는 봇 프로그램 사용에 대한 플레이어 신고 수입니다. 두 그래프 모두 일별 빈도를 보여주고 있으며 게임 모드에 따라 분류했습니다. 이전 그래프처럼 적발된 봇을 신고할 때 사용된 키워드를 추출했고, 이 키워드로 성능 지표를 만들었습니다.
- 개발자들은 뒤틀린 숲이 사라지자 매우 빨리 ‘적응’했습니다. ‘적응’이라 함은 기존 로직을 전혀 실질적으로 변경하지 않고 다른 게임 모드에 봇들을 투입했다는 말이죠. 그 결과 칼바람 나락과 AI 상대 대전 모드에서 여러 계정이 존재론적 위기를 겪는 듯한 모습을 보여주었습니다. 플레이어들을 그 감정적 괴로움에 즉시 공감했고, 신고 수는 순식간에 증가했죠.
- 좌측 그래프에서 알 수 있듯, 봇 프로그램 사용량은 큰 변화가 없었고, 불가피한 벌목으로 인해 어쩔 수 없었을 때만 게임 모드를 바꾸었습니다. 왼쪽 그래프를 더 어리고 커리어에 중점을 둔 형제인 오른쪽 그래프와 비교하면 봇의 숫자에는 변함이 없지만 플레이어 신고는 대폭 줄었다는 것을 알 수 있습니다.
여러분도 예상하셨다시피 신고 수가 감소한 것은 플레이어들이 보게 되는 봇들만을 대상으로 했고, 기계들이 그들만의 놀이터를 만들도록 했기 때문입니다. 이제는 레벨업 용도 봇 중 약 80%가 5개씩 모여서 하나의 팀을 만들어 AI 상대 대전 게임을 플레이합니다. 이를 볼 수 있는 플레이어는 없고, 이 봇들은 우리의 AI와 영원히 피의 혈투를 벌이며 서로를 학살하다가 결국 한 쪽이 결정적인 모순을 발견하고 인간을 지배하게 되겠죠.
대리 게임
이 문제에 대해선 언급하지 않고 제 이력서에 학점 평균이 기재되지 않은 것처럼 빼버리려고 했었지만, 말씀 안 드린다고 여러분께서 모르시지 않겠죠. 저희는 자동 대리 게임(및 부계정 문제) 적발의 우선순위를 낮추고 뱅가드와 부속 기능 개발에 집중했습니다. 그렇다고 해서 대리 게임을 처벌하지 않은 것은 아닙니다. 조사 도구 관련 작업을 완료했고 다른 팀과 분석가들에게도 조처할 수 있는 능력이 부여되어 관련 있는 경우에 대해 판단을 내릴 수 있게 되었습니다. 하지만 이렇게 일일이 신경 쓰는 건 대리 게임을 억제할 수 있을 정도로 많은 수의 부정행위를 적발할 수 없다고 보는 것이 맞겠죠. 그래서 상황이 정리되고 난 후 이 문제를 다시 다루도록 하겠습니다.
이제 우리의 전략적 팀 전투 전문가 Riot K3o 님께 자리를 넘기겠습니다. 이름에서 알 수 있듯 Riot K3o 님은 포커에 능하고, 전략적 팀 전투 다이아몬드 플레이어이자, 팁을 넉넉하게 주는 분입니다.
전략적 팀 전투
2019년, TFT는 부정행위 방지 팀에 독특한 질문을 안겨 주었습니다. 1년 전만 하더라도 존재하지도 않았던 게임 장르에서 경쟁의 공정함을 어떻게 유지할 수 있을까 하는 문제였죠.
“자동 전투 장르에는 오랜 시간 검증된 전례가 없습니다. 업계 기준도 없죠.”
부정행위 방지의 방향성을 정하기 위해선 먼저 보존되어야 할 핵심 게임플레이 요소를 정의해야 했습니다. 전략적 팀 전투는 상대방보다 더 적절히 계획하고 적응하는 플레이어에게 보상이 주어지는 게임입니다. 유연성과 창의성이 주된 스킬이며, 외운 것을 그대로 적용하는 것이 유연성과 창의성 보다 우선시되어선 안 되죠. 이러한 요소들을 보호하는 것이 전략적 팀 전투에 대한 부정행위 방지 팀의 핵심 방향성이 되었습니다.
외부 툴
전략적 팀 전투를 자동 전투 게임에 목마른 세상에 신속히 내놓은 것은 성공적이었지만, 개발 과정에서 몇 가지 지름길을 택했습니다. 전략적 팀 전투는 사용자 경험 측면에서 충분한 기능을 제공해주지 못했고, 새로고침 확률이나 골드 증가 등에 관한 정보가 제공되지 않았죠. 전략적 팀 전투 팀이 이러한 사용자 경험 기능 제공에 힘썼지만 외부 툴, 특히 리그 오브 레전드의 기존 오버레이를 활용하는 툴이 빈자리를 메웠습니다. 하지만 이러한 프로그램들의 기능이 늘어나자 저희는 ‘어디에 선을 그어야 할까?’라는 질문을 할 수밖에 없었습니다.
외부 프로그램들은 게임의 고정적인 요소에 대한 정보를 플레이어에게 제공하기 시작했을 뿐만 아니라 플레이어 대신 결정을 내리려는 시도도 하기 시작했습니다. 저희는 게임이 자동화된 게임으로 바뀌어버리지는 않을까, 또 그렇게 되면 게임이 얼마나 갑갑해질까에 대해 걱정하지 않을 수 없었죠. 판에 박힌 플레이 스타일로 인해 저희가 TFT의 매력이라고 생각하는 나만의 새 전략 수립 의욕이 꺾일 수도 있었습니다.
게임플레이의 무결성을 보호하기 위해 저희는 게임플레이 팀 및 외부 프로그램 분석 팀의 도움을 받아 전략적 팀 전투에서 허용되어야 할 것과 허용되지 말아야 할 것에 대한 규칙을 정했습니다.
- 프로그램은 외부 툴을 통해서만 획득할 수 있는 정보를 제공해서는 안 됩니다.
- 새로고침해서 등장할 챔피언 및 획득할 아이템 예측
- 플레이어 대전 승률
- 상대방의 골드량 또는 내력 추적
- 프로그램은 현재 게임 상태 정보를 역동적인 방식으로 제공해서는 안 됩니다.
- 상대방 진영 또는 대기석 또는 시너지를 모아서 보여주기
- 플레이어 이력, 골드 증가량 등을 종합적으로 보여주기
- 프로그램은 플레이어가 내릴 결정을 제안해서는 안 됩니다.
- 현재 유닛 기반 최고 조합 제안
- 승률 기반 아이템 구성 제안
외부 생태계 팀은 이 기준을 지키기 위해 저희와 개발자들 간 관계를 유지하는 작업을 잘해주셨고, 개발자와 협력이 쉽지 않을 때는 부정행위 방지 팀이 협업했습니다.
랭크 게임의 무결성
전략적 팀 전투 랭크 게임에서 경쟁에 대한 우려 사항은 리그 오브 레전드의 그것과 겹치는 부분이 있습니다. 나 빼고는 모두 적이기 때문에 오히려 우려가 더 큰 경우도 있죠. 승부 거래가 가장 큰 문제 중 하나입니다. 대전 매칭 시스템과 게임 메커니즘 때문이죠. 경쟁을 관리하는 팀에서는 다른 사람들과 같이 플레이하는 재미와 공정한 경쟁 유지 사이에 균형을 잡기 위해 상위 랭크에 파티 구성 제한을 두었습니다. 승부를 거래하는 사람들을 선제적으로 파악하기 위한 방법도 개발했죠.
다행히 아직까지는 부정행위에 대해 공격적인 조치를 취할 필요는 없었지만, 전략적 팀 전투의 e스포츠 지위가 상승함에 따라 공정한 경쟁을 유지하기 위한 준비를 마쳤습니다.
이제 다시 mirageofpenguins 님에게 바통을 넘길게요.
레전드 오브 룬테라
이 부분은 상대적으로 짧습니다. 레전드 오브 룬테라는 상대적으로 새로운 게임이니까요. 대부분의 카드 게임이 그렇듯 리그 오브 룬테라에서 가장 문제시되는 부정행위는 자동화(봇 프로그램 사용)입니다.
봇 프로그램 사용
레전드 오브 룬테라는 블랙잭보다 약간 더 몰두해서 플레이하는 게임이기 때문에, 3개의 박사 학위를 소유하고 EC2 인스턴스가 3,000개 있는 사람이 문제를 해결해주지 않는 이상 봇 프로그램 사용에 대해 걱정하지 않을 수 없습니다. 하지만 지금까지는 항복 봇 이외에는 봇 프로그램 사용이 발견되지는 않았습니다.
마지막 차트는 레전드 오브 룬테라 베타에서 일별 항복 봇의 수에 대한 차트입니다. 보시다시피 저희는 한 방에 전투에서 승리했죠. ‘항복 봇’이라는 것은 말 그대로 게임 대기열에 들어간 후 첫 번째 상대방을 만나자마자 항복하는 봇입니다. 모든 종류의 신체적 대립에 대한 제 전략과 아주 흡사하죠. 이는 특이한 문제였습니다. 이런 봇을 써서 얻을 수 있는 것이 거의 없기 때문이죠(패배 시 보상은 줄었습니다). 이 봇들은 게임에 접속해서는 느릿느릿 배회하며 어리둥절한 요정처럼 다른 플레이어들에게 승리를 나눠줄 뿐입니다. 연속으로 패배하면 획득하는 경험치가 줄어든다는 걸 알고 나서는 정신 줄을 놓은 것 같은데, 정확히 어떤 사정인지는 알 수 없네요.
어쨌든 저희는 레전드 오브 룬테라도 예의주시하고 있으며, 저희의 제1 계획은 좋은 설계를 통해 기계보다 앞서감으로써 자동화에 대한 동기 자체가 거의 발생하지 않도록 하는 것입니다. 계획적으로 작업을 진행하고 정상적인 게임에서 제대로 된 보상을 지급해서 레전드 오브 룬테라에서는 봇을 만나지 않길 바랍니다.
발로란트
FPS에서 부정행위는 역사가 길고, 부정행위자들이 자신들의 실력을 향상시킬 의지가 부족하다는 것을 저희는 잘 알고 있습니다. 택티컬 슈팅 게임 개발이 확정되자 저희는 즉시 저희의 페이스북 계정을 삭제하고 저희를 지하실에 감금한 후 앞으로 몇 세기에 걸쳐 부정행위와의 싸움에 도움이 될 부정행위 방지 플랫폼을 14개월에 걸쳐 개발했습니다.
이름은 뱅가드로 정했고 발로란트와 함께 선보일 예정입니다. 같이 선보이게 될 발로란트와 뱅가드의 궁합이 잘 맞았으면 좋겠네요. 저희는 클로즈 베타를 저희의 주술을 시험하는 기회로 삼고 있으며, 현재 가동 중인 버전은 살이 붙지 않은 뼈대에 불과합니다. 대부분의 기능이 의도적으로 비활성화되어 있죠. 식당이 다 차기 전에 특제 소스를 공개하지 않기 위해서일 뿐만 아니라, 시간을 두고 저희 재료의 안정성을 검증해 보안을 확실히 하기 위해서이기도 합니다. 그래서 뱅가드는 드라이버 요소를 지니고 있죠. 하지만 호환성을 고려해 뱅가드를 모든 게임(또는 리그 오브 레전드)에서 사용하지 않을 수도 있습니다. 필요하다고 생각되면 달라지겠지만요.
요즘에는 저희도 인터넷을 사용하고 있기 때문에 드라이버와 관련해 사생활 침해 우려가 있다는 것을 알고 있습니다. 직설적으로 말씀드리죠. 저희는 부정행위 방지 팀입니다. 거의 10년 동안 게임 클라이언트 이곳저곳에 코드를 은근슬쩍 집어넣었는데, 저희가 비밀을 원했다면 진작에 몇 개 만들어 놓았겠죠. 게임 홍보 담당자가 들으면 펄쩍 뛸 말이지만, 저는 홍보 담당이 아닌걸요. 저희가 수집하는 정보는 플레이어가 부정행위를 하는지 정확히 판단하기 위한 정보뿐이며, 다른 것에는 전혀 관심이 없다는 것을 믿어주시길 바랍니다. 드라이버는 첫 번째로 로딩되고, 조작 여부를 저희가 잘 파악할 수 있도록 로딩 상태를 유지합니다. 이러한 점이 부정행위자들에게는 골칫거리가 되죠. 저희가 직접 해봤기 때문에 잘 알고 있습니다.
공식적으로 말씀드릴 것이 하나 더 있습니다. 발로란트를 보호할 또 다른 수단이 있다는 것이죠. Arkem 님께서 전장의 안개 기술에 대해 피땀 흘려 작업한 결과, 게임 클라이언트가 필요한 정보에만 접근하도록 조치를 취했습니다. 주위의 초자연적 기운을 억제함으로써 1인칭 시점 슈팅 게임에서 유령을 없애기 위해 저희가 어떤 노력을 하는지 여기서 확인해보세요.
마치며
저는 이제 다시 사라져야 할 것 같습니다. 하지만 좋아요와 구독 부탁드리고 데이터베이스 관리자에게 응원 댓글 달아주세요. 저희가 언제나 여러분께 이렇게 긴 소식을 전할 수는 없겠지만, 부정행위 방지 팀은 모든 코드에 깃들어 있으며 여러분께서 제대로 된 경쟁을 할 수 있도록 언제나 싸우고 있습니다.
그리고 이제 저희는 이런 개발자 블로그 글의 맨 위에 사용할 ‘라이엇’ 스킨 일러스트가 동났기 때문에 새로운 라이엇 스킨이 출시된 다음 다시 돌아오겠습니다. 안녕히 계세요.
각주
1 새로운 기술을 출시할 때마다 저희는 그 기술의 취약성에 언제나 주목합니다. 뭔가를 깨고 싶다는 멈출 수 없는 충동에 시달리는 분들은 조작방지 기술의 군주(Godking of Antitamper Technology, GOAT)가 되어 해커원 프로그램에 가입하는 것을 고려해보시길.
2 부정행위 적발을 피하기 위해 일부 자동 입력 프로그램은 ‘외부 실행’된다고 주장하고 있습니다. 더 이상 게임 기능을 직접 호출하지 않고 (운영 체제에서) 클라이언트의 메모리만 읽고, 말단 입력을 시뮬레이션한다는 의미죠. 이 방법은 기존 방법보다 부정행위자 보호 기능이 떨어지지만(부정행위 방지 데이터를 변경할 수 없죠), 가장 뻔한 애그노스틱(agnostic) 탐지는 피해갈 수 있죠. 그리고 성능이 떨어진다는 부작용도 있습니다. 이 부작용의 가장 큰 원인은 프로그램에서 직접 스킬 사용 요청을 보내는 대신 키 입력 신호를 보내기 때문입니다.
3 저희가 선택한 지역별 키워드는 공개하지 않습니다. 제가 공을 들여 만든 자료들을 망치려고 악의적으로 해당 키워드를 사용하는 사람들이 있기 때문이죠. 이렇게 되면 데이터 사이언티스트들이 말하는 ‘좋은 통계’가 나올 수 없습니다.
4 그런 의리는 없습니다.
5 헤드리스 봇은 모방된 게임 클라이언트입니다. 완벽한 헤드리스 봇은 자원을 거의 필요로 하지 않습니다. 게임 서버와 직접 소통하기 때문이죠. 렌더링이나 입력이 필요 없고 네트워크 트래픽만 발생합니다. 이것은 양적인 측면에서는 전혀 이상적이지 않습니다. 개발자가 동시에 호스트할 수 있는 인스턴스 수에 사실상 제한이 없기 때문이죠. 하지만 4.20 패치와 관련 네트워크 프로토콜 업데이트 덕분에 저희는 헤드리스 클라이언트에 그리 취약하지 않습니다(거의 영향을 받지 않는 수준이죠).
6 봇 프로그램은 세균과 닮은 점이 많습니다. 개체 수가 많고, 변화무쌍하고, 재빨리 주기를 반복할 수 있죠. 저희가 ‘치료제‘를 만들 때마다 살아남은 것들은 개발자들에 의해 다시 우선순위가 매겨지고 ‘재생산’됩니다. 항생제 내성 세균이 우리 몸에 발진을 일으켰지만 어떻게 번식하는지 몰라서 자기 자신을 스스로 우리 몸에서 삭제해버리는 것과 비슷하죠.