본문 바로가기
Previous Research

온라인 게임 보안 솔루션에 대한 이모저모

by _Jay_ 2021. 11. 30.
반응형

최근 보안 프로젝트 조정원 대표님이 올려주신 모의해킹과 관련된 공개 강의를 듣다가 문득 요즘은 게임 보안 솔루션의 트렌드가 어떻게 변했는지 궁금해졌다. 원래 보안에 관심을 가지게 된 계기도, 내가 어렸을 적부터 즐겨하던 "바람의나라"라는 게임에서 해킹을 당했었기 때문인데 지금 생각해보면 아무것도 몰랐을 시절이라 다른 사람들도 많이 당하지 않았었을까 싶다.

 

내가 겪은 상황을 간단하게 말하면.. 바람의나라에서 가지고 싶은 아이템을 싸게 사려다가, 어느 유저가 지금은 사라진 버디버디 메신저로 가격표를 보내준다고 해서 냉큼 받아서 파일을 열었더니 여는 동시에 컴퓨터가 꺼졌고, 다시 켰을 때는 이미 아이템을 싹 털린 이후였다. 보내준 첨부 파일의 확장자가 단순히 텍스트 파일(.txt)이었기 때문에 별 의심 안하고 열었던건데, 아마 .txt까지가 파일 이름이고 뒤에 .exe 확장자가 숨겨져 있었을 것이며 원격 제어와 세션 하이재킹 모듈이 같이 심어져있었던 걸로 추정된다. 지금도 그렇고 파일의 등록 정보에서 알려진 확장자 숨기기 옵션이 활성화되어 있어서 쉽게 눈치를 못챘을 것이며, 당시에는 전혀 그런 개념도 없었기 때문에 속을 수 밖에 없었을 것이다.

물론 지금이야 의심스러운 파일을 실행하면 백신에서 선제적으로 차단을 하기 때문에 그런 수법에 잘 걸려들지 않겠지만 2000년 대 초만 해도 파일의 해시값 등의 패턴으로 악성코드를 탐지했을테니 못잡아 냈었을 것으로 생각된다(혹은 백신 자체가 설치 안되어 있었을 수 있다). 정확히 말하면 내가 겪은 사례는 게임 보안보다는 엔드포인트 보안에 가깝지만, 어찌됬던 해당 악성코드로 인해 세션이 다른 유저에게 넘어간 것만 놓고 보면 세션 제어에 대해서는 게임에서 통제를 하는 것이 옳지 않았을가라는 생각이 든다.

그래서 이와 관련하여 자료를 찾아봤는데 한국이 온라임 게임 시장이 엄청 발달한 것과 다르게 온라인 게임 보안에 대해 서술한 책이 거의 없다시피 한 편이라, KISA에서 15년 전에 발간한 "온라인 게임 해킹 대응 가이드"를 보게 되었다. 15년 전이면 스마트폰도 없고 RPG류가 아닌 1명의 사용자 플레이하는 패키지 게임이 여전히 자리잡고 있으면서, 온라인 게임도 지금에 비해 많이 발전한 편이 아니기 때문에 그 시절에 발간한 것을 봐도 괜찮을까 했지만 크게 상관은 없었다. 단순히 게임 해킹으로 인해 발생할 수 있는 문제만 놓고 보면 이전이나 지금이나 크게 변하지 않았기 때문이며, 단지 게임 해킹을 하는데 사용되는 기법이나 툴만 변화했을 뿐이다.

온라인 게임 보안 솔루션은 온라인 게임의 불공정 플레이를 방지하기 위해 이와 관련된 해킹을 차단하기 위한 것이며, 이는 곧 클라이언트 보호로 이어지게 된다. 이전 패키지 게임에서도 분명히 해킹이 존재했었고 매크로나 메모리 변조의 시도가 있었다. 하지만 온라인 게임에서 더 큰 문제가 되는 이유는 패키지 게임처럼 1인으로 플레이 하는 것이 아니며, 해킹 툴을 사용하면 다른 사용자에게도 피해가 가고 이를 방치한다면 게임의 평판에도 크게 영향을 미칠 수 있기 때문이다. 그래서 바람의나라 같은 온라인 게임들이 지금이나 예전이나 해킹 툴을 사용하는 유저들을 잡아내기 위해는 보안 솔루션에 수 많은 기능들을 추가하고 있는 것이다(한 때 게임 보안 솔루션이 무거워져 게임 실행 자체가 실패했던 사례가 있었다).

"온라인 게임 해킹 가이드"에서는 메모리 보호, 스피드 핵 방지, 게임 클라이언트 위변조 탐지 등 게임 보안 솔루션이 갖춰야할 여러 기능들을 소개하고 있는데, 다른 기능들은 시간이 된다면 차차 소개하도록 하고 여기서는 디버깅 방지에 대해서 간략하게 이야기하고자 한다. 

 

아무래도 온라인 게임이 아니여도 대부분의 상용 프로그램이 갖추고 있다고 생각될 만큼 기본적인 기능이 디버깅 방지가 아닐까 싶다. 보통 우리가 흔히 아는 스타크래프트도 설치 CD를 사면 라이센스 키가 함께 동봉되어 있었는데, 크랙 버전이 돌아다니게 된 이유가 라이센스 키를 검증하는 부분을 분석해서 이를 우회했기 때문이다. 물론 스타크래프트는 키 생성 및 확인 알고리즘 자체가 굉장히 쉽기도 했지만 1차적으로는 안티 디버깅 기능이 전혀 고려가 안되있었기 때문에 이런 문제가 발생하게 된 것이다.

 

그래서 모든 온라인 게임에는 디버깅 방지 기능이 들어가 있으며, 구현 방식은 개발자들 마음이라고 할 만큼 굉장히 다양하다. 디버깅을 방지하는 가장 간단한 예로 지금은 사용되지 않는 것지만 커널 디버거의 대표로 불렸던 소프트아이스(SoftICE)로 프로그램을 attach해서 분석을 진행할 수 가 있는데, tasklist에 현재 소프트아이스와 관련된 드라이버 모듈이 실행되고 있는지 확인해서, 실행되고 있다면 프로그램을 종료시켜 버린다. 그리고 윈도우에서 IsDebuggerPresent() 함수와 같이 현재 디버깅 당하고 있는지 판별할 수 있는 API를 제공하고 있어서 이런 함수들을 사용할 수 있지만 이는 굉장히 고전적인 방법일 뿐더러 우회하기도 쉽다.

온라인 게임 해킹은 클라이언트 분석으로부터 시작되며, 클라이언트 분석은 반드시 디버깅 작업이 필수적으로 선행되기 때문에 게임 클라이언트에 대한 디버깅 시도는 모두 탐지하고 무력화되어야 한다. 또한 보안 솔루션에서 게임 클라이언트가 사용자에 의해 디버깅 중인지 아닌지 실시간으로 탐지되어야 하기 때문에, 게임 보안 솔루션 자체도 안티 디버깅 기능이 구현되어야 할 것이다.

 

현재 게임 보안 솔루션에서 어떻게 디버깅을 방지하고 사용자들이 어떻게 우회하고 있는지 알기 위해서는 많은 공부가 필요하겠지만, 이는 추후에 정리하기로 하고 지금은 전체적인 흐름만 정리해 보았다. 추후 기회가 된다면 메모리 보호나 난독화에 대해 이야기할 예정이며 이번 포스팅은 여기서 마치도록 하겠다.

반응형

댓글