Maple Tech

메이플스토리 비인가 프로그램 방어하기

2022.01.07

메이플스토리는 왜 핵과 매크로에 집중하나

모든 게임에는 규칙이 있고, 이 규칙은 모든 유저에게 공정해야만 합니다. 비인가 프로그램으로 이 공통의 규칙이 무너지고, 게임 속 경제 시스템과 생태계 자체가 파괴될 수 있기 때문에 메이플스토리는 물론 모든 게임에서 핵과 매크로 등 불법 프로그램 대응에 팔을 걷어 부치고 나서고 있는 건데요, 이번 글에서는 메이플스토리에서 비인가 프로그램 방어를 위해 하고 있는 노력과 시행착오, 개선과정에 대해 소개해드리려고 합니다. 

핵과 매크로 제대로 알기

우선 핵과 매크로는 구분되어야 합니다. 핵을 암세포라 한다면 매크로는 잘못된 습관이라고 할 수 있습니다. 핵은 백해무익! 무조건 척결해야 하지만 매크로는 좀 더 신중한 대응이 필요합니다. 두 가지 모두 비공정한 방식으로 서비스에 악영향을 주지만, 상대적으로 핵이 더 큰 피해를 줄 수 있어 강한 조치를 하고 있습니다.
운영 정책 상 핵은 적발 시 바로 영구정지 제재가 될 수 있고, 매크로는 적발 횟수에 따라 제재 일수가 증가하는 누적 제재 방식을 적용하고 있습니다. 물론, 매크로 적발도 반복되는 경우 영구정지 조치됩니다.

핵 방어 

Ÿ   CRC 체크
Ÿ   클라이언트 난독화
Ÿ   NGS (Nexon Game Security)
 데이터 및 클라이언트 코드영역 CRC체크, 클라이언트 코드 보호를 위한 난독화, 또한 위 2가지 이외에도 다양한 방어로직이 포함된 NGS까지 핵 방어를 위한 클라이언트 단의 변조 방어를 구축하고 있습니다.
게임 업데이트에 따른 새로운 코드나 데이터 추가에 대응하고자 CRC체크 로직을 보강 및 추가하고 있으며, 난독화도 마찬가지로 추가 및 적용을 확장하고 있습니다. 
NGS는 활용도를 높이기 위해 넥슨 게임핵대응팀과 한층 밀접하게 컨텍하면서 업데이트 및 패치셋 적용을 빠르게 하고 있습니다. 특히 NGS 디텍팅을 이용한 자동제재를 추가하였고 다량의 의심 로그가 남은 유저에 대하여 자동추적 시스템과 연계하여 핵 동향파악과 함께 빠른 대응을 하고 있습니다.
매크로 방어  
1. 서버 단 행동패턴 유사도를 이용한 검출 (LCP=Longest Common Prefix 알고리즘)
과거, 매크로 방어를 위하여 유저의 패턴에 대한 유사도를 계산하기로 합니다. 해당 로직은 게임서버에 있었으며 패턴은 클라이언트에서 보내오는 패킷을 이용합니다. 참고로 패킷에는 다양한 정보가 있습니다. 사냥, 아이템 줍기, 맵 이동, 채널이동 등등 대부분 중요한 정보가 다 있었습니다. 하지만 실패했습니다. 주로 매크로는 사냥에 사용하게 되는데 사냥 관련 패킷이 일반유저와 매크로를 구분하기 어렵도록 유사도가 높았기 때문입니다. 사람이 매크로 구분하는 것은 사냥 이동경로와 스킬 사용 지점과 같이 미세한 포인트인데 유사성이 부각되지 않았습니다.
2. 키입력 패턴 검출
이전까지는 오토핫키와 같은 키 녹화 프로그램을 사용하는 유저가 많았습니다만 매크로 프로그램 사용법을 모르더라도 키보드에서 제공하는 키패턴 녹화 기능을 이용하면 누구나 매크로를 사용할 수 있었습니다. 또 이런 하드웨어 방식은 NGS에도 디텍팅이 되지 않기 때문에 실질적으로 방어할 방법이 없었습니다. 하지만 부정 동향은 매우 큰 편입니다. 사냥맵이 한정되어 있고 누가 보더라도 매크로인데 24시간 맵을 점령하고 있으니 당연한 것이죠.
그래서 플레이 패턴의 유사성을 체크하는 것이 아닌 키보드 입력값에 대한 패턴을 확인합니다. 모든 매크로를 막는 것은 불가능하지만 일반적으로 널리 사용되는 키보드 메크로는 방어할 수 있게 되었습니다.
물론 매크로 사용유저도 진화하고 있습니다. 키보드를 여러 개 사용하거나, 화상키보드를 조합하거나 소프트웨어 키보드를 사용하는 등 다양한 형태가 발견되었습니다. 이런 형태의 플레이는 또다른 힌트를 주고 새로운 매크로 검출 모델 개발에 이용됩니다. 그러면서 점점 플레이 패턴이 다양화되고 얼핏 봐서는 사람과 구분하기 어려운 형태가 되고 있습니다.
공격과 방어가 반복되면서 하드웨어 방식의 매크로는 대부분 한계에 봉착하게 되고, 공격자는 매크로 패턴에 변수를 주기 위해 프로그램 형태를 선택할 수 있습니다다만 프로그램은 상대적으로 검출하기 쉽고 불법프로그램 사용은 계정 제재 사유에 해당합니다.  
3. 마우스 패턴 검출
 키보드매크로 탐지와 유사하게 마우스 이벤트에 대한 매크로 특징을 이용해 체크 로직을 추가하였습니다. 사람의 패턴은 한 지점에서 다른 지점으로 이동할 때 속도가 일정하지 않습니다. 빨라지기도 하고 느려지기도 하죠.
매크로 패턴은 한 지점에서 다른 지점으로 이동할 때 속도가 일정하게 줄어드는 특징이 있습니다. 처음에는 경매장 자동 구매/판매 매크로 방어를 위하여 개발했는데요, 경매장 이외에도 인게임에서 사용하는 마우스매크로가 검출되었습니다. 물론 완벽하다고 할 수는 없고, 계속해서 연구와 개선작업이 진행 중입니다. 
4. 거짓말 탐지기 알림이 방어
 한글 캡챠(CAPTCHA : Completely Automated Public Turing test to tell Computers and Humans Apart ) 방식의 국내 거짓말탐지기는 영문 보다 자동해제가 어렵습니다. 그래서 매크로 사용 유저는 거짓말탐지기 알림이를 만들어 수동으로 해제하고 있습니다. 그래서 알림이가 필수적으로 필요한데요, 거짓말탐지기 UI 이미지를 서치하여 알림이를 만들고, 원격 입력을 위하여 카톡을 연동하여 사용하는 양상을 보입니다.
 알림이는 주로 오토핫키를 이용 이미지서치를 하는 방식이므로 UI를 반투명화하고 색상을 랜덤하게 변경했습니다.
UI의 일정한 패턴을 인식하는 이미지 서치 방식이 발견되면서 이에 대한 방어도 있었습니다. 거짓말 탐지기 화면이 사각형 형태가 아닌 랜덤성이 강한 형태로 강화된 버전을 사용했습니다. 다만 해당 버전은 매크로 사용이 의심되는 경우에만 사용되고 있습니다.

거짓말 탐지기 적발 사유를 보면 대략 20% 정도가 Disconnect입니다. 즉 알림이를 통해 연결을 끊고 자동으로 재접속하는 형태입니다. 반면 알림이 방어 타입의 거짓말 탐지기는 대부분 TimeOver, 즉 캡챠 입력 시간을 넘긴 경우인데요. 거짓말 탐지기 알림이가 거짓말 탐지기를 찾지 못했다고 할 수 있습니다.
5. 룬 자동 해방 방어
 메이플스토리에는 고렙 사냥터에 룬이 존재합니다. 룬은 주기적으로 맵의 랜덤한 위치에 소환되는데요, 룬을 해방하게 되면 사냥에 도움을 주는 버프를 받을 수 있기 때문에 일반적으로 유저들은 해방을 하게 됩니다. 반면 자동 사냥 매크로는 무시를 했었습니다.
 이러한 양상을 매크로 방어에 이용하기로 하고 17 4월 패치에저주받은룬효과를 추가 합니다. 즉 룬을 해방하지 않고 방치하면 경험치 및 드롭율 감소 패널티를 받게 됩니다. 예상대로 매크로 이용자는 이미지 서치를 이용하여 자동해제를 하기 시작했고 저희는 방어를 위해 화살표를 약간 변형하고 랜덤 색상을 적용하였습니다. 이에 매크로 사용자도 대응을 하고 있는데요, 이미지 서치 뿐만 아니라 이미지 흑백화 후 유사도까지 계산합니다. 그리고 다시 방어 작업으로 이미지 자체를 랜덤하게 만드는 추가작인 방어 작업을 진행하고 있습니다.

6. 작업장 방어
  • PC 여러대와 IP 방어
 작업장 운영을 위해서 필수적으로 여러 대의 PC가 필요한데요, 메이플스토리는 클라이언트를 여러 개 실행하는 멀티 클라이언트를 허용하지 않기에 해당 체크코드를 무력화하거나 가상 머신(vm)을 사용하려 합니다. 이에 대해서는 NGS와 인게임 체크코드를 꾸준히 업데이트 하면서 방어하고 있습니다. 또한 IP당 로그인 제한을 회피하기 위하여 VPN을 사용하는 경우가 있는데 이 경우에는 NGS로깅으로 추적하고 있습니다.
  • 여러 개의 계정 방어
 그리고 작업장에 여러 개의 계정은 꼭 필요합니다. 당연히 한 번에 돌려야 하니 여러 계정이 필요한 것이지만 혹시 계정이 영구정지 제재를 받는 경우 새로운 계정 생성이 가능해야 합니다.
과거에는 넥슨 계정 탈퇴 후 신규 생성으로 제재 이력을 세탁할 수 있었으나 신상 단위 이력을 남겨 대응하고 있습니다.
타인 명의를 구매하여 사용하는 경우도 있는데 판매자는 보통 알뜰폰을 이용하여 본인인증 후 계정을 생성하고 있습니다. 알뜰폰을 이용한 신상 도용 문제는 사회적으로도 문제가 많이 있는데요정상 유저의 불편함은 최소화하면서 대응할 수 있는 방책을 넥슨에서는 준비 중입니다.
  • 거짓말탐지기 알림이와 모니터링 근무자 방어 비올레타
 국내 메이플은 영문 캡챠 방식을 사용하는 해외 서비스와 달리 한글 거짓말탐기지가 아직까지는 자동해제가 쉽지 않은 것으로 여겨집니다. 다만 작업장에서는 모니터링하는 사람이 수동으로 거짓말탐지기 발동을 해제하고 있습니다. 그래서 작업장으로 의심되는 유저를 모았다가 한번에 거짓말탐지기를 발동시키는 방식인 비올레타거짓말탐지기를 추가로 개발하여 적용하였으며 발동 대비 적발율이 매우 높은 편입니다. 작업장 의심유저를 대상으로 하기에 일반 거짓말탐지기와 비교하여, 비올레타 거짓말탐지기는 매우 높은 적발율을 보입니다.
 위 영상은 쉬운 난이도의 비올레타입니다. 네 차례 정답을 입력해야 합니다.
 
지금 영상은 최고 난이도의 비올레타입니다. 움직이는 객체에 투명도가 들어갔고 뒷배경에 이미지 서치 방식을 방해하는 이미지가 들어갔습니다. 난이도는 하루 단위로 발동 상황에 따라 증가/감소합니다. 유저 숙련도에 따라, 쉬운 비올레타를 잘 풀면 이후 점점 난이도가 높아져 어려운 비올레타를 풀게 됩니다. 대부분의 유저는 최고 난이도의 비올레타를 경험하기 매우 어렵습니다.
 기존 캡챠 방식의 거짓말탐지기는 TimeOver 결과 비중이 높습니다. 반면 비올레타 거짓말탐지기는 연결종료(Disconnect) 결과가 대부분입니다. 즉 알림이는 가능하나 해제가 불가능한 상태입니다. 앞서 언급되었던 것과 같이 비올레타 거짓말탐지기는 동시에 발동하는 것이 중요합니다. 그래서 전 월드 동시에 거짓말탐지기를 발동시키는 시스템이 필요했고 저격 거짓말탐지기가 개발되었습니다.

 모니터링 강화 

1. 로그 기반 모니터링
문제 발생 시 빠른 대응을 위해서는 게임 전반의 모니터링이 매우 중요한데요, 모니터링 강화를 위하여 로그 기반의 이상감지를 보강하여 알림 메일을 발송하고 있으며, 게임 재화나 각종 에러로그가 대상입니다.
 2. 유저 패킷 덤프 
클라이언트에서 보내오는 패킷을 분석하면 어떻게 플레이 하는지 또는 어떻게 조작하고 있는지 확인할 수 있습니다. 그래서 특정 유저의 패킷을 게임서버 로그로 남기는 기능을 사용하고 있는데요. 이를 이용하여 유저의 플레이 하는 모습을 재현해 볼 수 있지 않을까? 하고 기대했습니다.
하지만 게임 업데이트 패치마다 새로운 패킷이 추가되거나 변경되기 때문에 자동화한다 하더라도 관리 이슈가 있고 분석이 쉽지 않습니다.
 3. 자동 추적 시스템 개발
사실 핵이나 매크로 사용 유저에 대한 확인은 직접 플레이 하는 장면을 보는 것이 가장 빠릅니다. 그렇다고 매번 해당 유저가 어느 월드에 있는지, 채널과 맵은 어디인지 찾아서 보는 것이 쉽지는 않습니다.
그래서 의심 유저를 자동으로 추적하여 모니터링하는 시스템을 개발하게 되었습니다.
추적자는 월드 별로 존재하며 전체 월드를 모니터링하고 있습니다.
4~5년 전에는 핵 사용자가 많아 모니터링 뿐만 아니라 핵 방어 로직 개발에 매우 유용하게 사용되었습니다. 최근에는 다른 핵 체크 시스템이 개발되어 꾸준히 제재를 하고 있어 핵사용자가 많이 줄어 활용도는 기존보다 낮아졌습니다만 현재 방어 시스템에 시작점이라 할 수 있습니다.

제재

핵 방어에 가장 어려운 것은 오인일 것입니다. 100% 오인 없이 핵방어 로직을 짜는 것은 매우 어려운 일입니다. 그리고 오인이 발생하면 해당 로직은 다음 서버 점검까지 사용할 수 없습니다. 최악의 경우 해당 로직에 On/Off기능이 없다면 서버점검을 해야 할 수도 있습니다. 그래서 핵툴 업데이트를 따라잡기가 어려웠습니다. 
메이플스토리는 오랜 서비스로 새로운 핵보다는 과거와 유사한 방식으로 핵을 만들기 때문에 대부분 비정상이라는 디텍팅 로그가 남고 있습니다. 다만 게임 업데이트로 오인이 발생하는 경우에 제재하고 있던 부분에 대해 예외처리를 하기에 로그만 남고 있는 경우가 많습니다.
 그래서 신규 핵 체크 로직 뿐만 아니라 기존의 핵 관련 로그를 새로 개발한 HackLogControl로 변경 하였습니다. 이를 통해 점검 없이도 제재 방법과 기준을 변경할 수 있어서 핵툴 발견 시 빠른 대응이 가능해졌습니다. 주요 기능으로는 거짓말탐지기 발동, 영상찍기, 접속 끊기, 계정 제재 등입니다.
1. HackRank 시스템
수많은 검출 로직에 의해서 남은 로그를 통계 및 점수화하여 합산합니다. 이 합산 점수가 높은 상위 랭킹 메이플ID에 대해서 정밀 분석을 실시하고 새로운 제재 기준이나 모델을 만들어 적용합니다. 즉 상위 랭킹부터 대응하기 때문에 오랜 기간 검출 없이 비정상플레이를 했다 하더라도 언젠가 제재될 수 있습니다. 

2. 어뷰징탐지(LBD, Live Bot Detection)
LBD는 넥슨에서 개발 및 사용하고 있는 데이터 기반 어뷰징(작업장, ) 대응 솔루션입니다. LBD는 라이브게임의 어뷰징 대응 경험을 탐지 룰로 개발하여 여러 게임에서 함께 활용할 수 있도록 하고 있습니다. 때문에 인력/인프라 중복 투자를 줄이고, 기술/노하우/플랫폼을 공유해 새로운 패턴에 신속하게 대응하는 것이 가능합니다.
LBD는 데이터로 식별할 수 있는 모든 영역에서 탐지 룰을 제작하며, 수동으로 발견한 패턴 뿐 아니라, 데이터 분석으로 탐지 영역을 발견하고 있습니다. 게임 내 행동 로그를 클러스터링하여 작업장을 탐지하거나, 거래 네트워크를 분석하여 뱅커를 식별하는 등의 사례가 있습니다. 현재 LBD의 탐지 결과는 HackRank 시스템에 연동하여 제재에 활용하고 있습니다.
3. NGS (Nexon Game Security)
거의 대부분의 넥슨 게임에 적용된 게임 보안 시스템으로 불법프로그램, 비정상적인 게임 접속, 클라이언트 변조 등을 검출하며 차단합니다. 현재 게임과 연동하여 확인된 불법프로그램에 대해서 자동 제재를 진행하고 있습니다.
4. 진실의방 시스템
매크로 방어를 위한 거짓말탐지기에 적발된 경우 일정시간 플레이를 제한하는 시스템입니다. 일반유저가 실수로 거짓말탐지기에 적발되었을 때 계정 제재는 방지하고 매크로 작업장 방어에는 효과가 있습니다.
5. 개인식별코드를 이용한 메이플ID 생성 제한
넥슨ID는 삭제 후 생성에 제한이 없기에 사실 상 무한 계정이 가능한 상태였습니다. 개인식별코드는 이런 불합리한 점을 개선하고 효과적으로 악성유저를 제재하기 위한 것으로 핵 및 매크로 방어 효과가 전체적으로 증대될 것으로 기대됩니다. 앞서 언급되었지만 알뜰폰 본인인증의 취약점을 보완하는 작업도 진행 중입니다.

마무리하며

지금까지 핵과 매크로에 대한 방어는 대부분 기능적으로 나눠모듈화하였습니다.
Ÿ   대상자를 어떻게 찾을 것인가?
Ÿ   오인을 어떻게 판단할 것인가?
Ÿ   제재는 어떻게 할 것인가?
떻게 생각하면 당연한 것인데모듈화를 설계초기부터 생각하지 않으면 새로운 작업이나 외부모듈 연계가 부담이거나 불가능할 수도 있을 것입니다. 
사실 처음부터 완벽하고 완전하게 방어하는 것은 불가능합니다. 핵툴도 계속 업데이트를 하기 때문입니다. 실행파일의 이름을 변경하거나 빌드를 다시 해서 검출을 우회하려는 시도도 계속되고 있습니다.
넥슨 공통 모듈인 NGS와 어뷰징탐지 시스템, 그리고 게임 로그 통계 기반의 핵랭킹 시스템은 명확히 구분되는 특징이 있으면서도 유사점이 있습니다. 서로 보완적인 관계로 꾸준한 협업을 통해 시스템이 진화하고 있습니다.
메이플스토리에서 하고자 하는 방향은, 새로운 핵과 매크로에 대한 빠른 대응이 가능하도록 틀을 만드는 것이고 이 작업은 지금도 진행 중입니다. 완벽하다고 할 수는 없지만 높은 수준의 핵/매크로 검출 시스템을 지속적으로 개선하며 발전시켜 나가고 있습니다
이상, 메이플스토리 비인가 프로그램 방어에 대해 소개해드렸는데요, 핵과 매크로 대응에 관심이 많은 분들에게 도움이 되셨으면 좋겠습니다. 감사합니다.
 
 15년차 라이브 서비스 프로그래머 김기온