▲ 사진 | 본인제공

  게임 핵은 어떻게 민간에서 쉽게 제작될까. 게임은 기본적으로 클라이언트-서버의 구조로 이루어져 있다. 클라이언트는 유저의 컴퓨터에서 네트워크를 통해 게임사의 서버에 원격으로 접속하는 프로그램을 의미한다. 게임 핵의 제작은 이 클라이언트를 해킹하는 것에서 출발한다. 유명 게임업체의 정보보안 실장이었던 ‘해커 출신’ 김휘강(정보보호대학원) 교수에게 게임 핵과 보안에 대한 이야기를 들었다.

- 게임 핵의 제작 원리는 어떻게 되나
  “제작방식은 크게 2종류가 있다. 두 방법 모두 역공학(reverse engineering) 기법을 사용한다. 역공학이란 이미 만들어진 시스템을 역으로 추적해 설계기법 등의 자료를 추출하는 행위다. 

  첫 번째 제작방식은 게임클라이언트 프로그램을 분석해서 게임이 실행될 때 중요한 값들(체력, 마력, 총알 개수, 위치 등)에 대한 자료를 추출하는 것이다. 값을 처리하는 변수명과 메모리 내의 주소값을 알아낸 뒤 계속 이 값들을 변경하면 된다. 그러면 총알을 써도 잔탄 수가 줄지 않는 무한총알을 만들 수도 있고, 위치를 조작해 벽 뒤에서도 벽을 뚫고 총을 쏠 수 있다. 혹은 총을 맞더라도 체력이 줄지 않는 불사신 모드를 만들 수도 있다.

  두 번째 제작방식은 게임클라이언트가 게임서버와 통신할 때 어떤 데이터를 주고받는지 통신 데이터(패킷)를 분석하는 것이다. 그러면 캐릭터가 이동할 때의 명령어, 몬스터를 사냥해서 죽일 때의 명령어 등 각 상황에 적합한 명령어 응답값이 서버에서 전달된다. 이를 분석해 게임 컨트롤에 필요한 다양한 값을 식별할 수 있다. 이 값을 조작해서 서버로 전송하게 되면 몬스터를 사냥하지 않았는데도 몬스터를 죽인 것처럼 서버를 속일 수 있다.”

- 게임 핵이 쉽게 제작되는 이유는 무엇인가
  “처음부터 보안이 철저하게 제작된 게임도 있다. 하지만 보안의 정도가 심하면 게임서버에 렉(Lag, 네트워크 지연)이 유발될 수 있다. 명령어가 게임클라이언트로부터 전달될 때마다 서버에서 일일이 검사를 하면서 필연적으로 게임클라이언트가 컴퓨팅 파워를 많이 요구하게 된다. 고사양 PC가 아니라면 렉이 생길 수밖에 없는 것이다. 렉은 게임회사나 유저에게 모두 부담이 된다. 게임사 입장에선 저사양에서도 렉 없이 잘 돌아가는 게임이어야 고객층도 넓어질 테고, 개발도상국에 게임을 수출할 때 진입이 순조롭게 될 수 있다. 유저 입장에선 게임 장르에 따라 렉에 무척 민감할 수도 있다. FPS와 같은 장르의 경우에는 조금의 렉 때문에 승패가 좌우된다. 결국 유저들의 불만을 최소화하기 위해서는 게임의 보안이 약할 수밖에 없다.”

- 게임 핵을 방어하는 방법엔 무엇이 있나
  “가장 확실한 방법은 게임클라이언트에서 일어나는 모든 일을 게임서버에서 다시 검사하는 것이다. 게임클라이언트가 ‘아이템 습득’이라는 메시지를 보내면 서버에서 ‘사냥을 해서 몬스터를 죽일 만큼 데미지를 발생시킨 것이 맞는가?’를 다시 한번 검사한다. 그 후에야 아이템 습득을 했다는 명령어를 인정해준다. 쉬워 보이지만, 매번 이중검사를 하니 서버 성능을 많이 요구하게 된다. 

  두 번째로는 역공학에 의해 게임프로그램이 분석 당하지 않도록 게임 트래픽을 암호화하고, 게임클라이언트에 난독화 프로그램(obfuscation)을 적용하는 방법이다. 난독화란, 프로그래밍 언어로 작성된 코드를 읽기 어렵게 만드는 작업이다. 이는 모두 디버깅(수정)을 어렵게 하는 기법이다. 

  마지막으로는 게임서버에서 모든 유저들이 생성시킨 게임 액션을 기록하고, 이 기록 데이터를 빅데이터로 분석하여 비정상적인 행위를 정의하는 것이다. 이를 통해 게임 핵을 사용하는 유저들을 찾아내 적발하는 데이터마이닝 기법이 가능하다. 
대개 대형 게임의 경우 이러한 방법을 모두 적용하고 있다. 특히 게임서버에서 데이터마이닝을 하는 방식은 게임클라이언트에 보안프로그램을 설치해야 한다거나 유저들에게 불필요한 부하를 유발하지 않는다는 점에서 많이 선호되고 있다.”

- 게임사에서 핵을 대처하기 어려운 이유는 무엇인가
  “위의 방법들은 쉬운 작업이 아니다. 게임 내에서 몬스터를 한 마리 사냥하려고 공격을 할 때마다 ‘몇월 며칠 몇 시 몇 분 몇 초에 어떤 캐릭터가 어떤 공격을 날려서 얼마의 데미지를 주었다’와 같은 로그(Log, 컴퓨터에 접속한 기록)를 남긴다고 생각해보라. 이 로그 한 줄이 20바이트 크기라고 해도, 게임 동시 접속자 수가 5만 명이면 수백억의 로그가 계속 쌓이게 된다. 어마어마한 데이터를 저장하고, 분석하는 것은 기술적으로 어려움이 있고, 이를 분석할 인력도 훨씬 많이 필요하다. 즉 기술적인 장벽, 운영 차원의 장벽, 인력 수급의 장벽이 존재하는 것이다.

  그 외에 게임시간이 단시간이거나, 게임 구성이나 흐름이 단순하면 게임로그를 남긴다 하더라도 적발이 어려운 면이 있다. 게임 핵을 사용하지 않더라도 프로게이머 수준으로 능숙한 유저들은 게임 핵을 쓴 경우와 구분하기 어렵기 때문이다. 로그 분석만으론 변별력이 떨어지게 된다. 게임회사에서 방조나 방관을 한다기보다는 이처럼 여러 한계로 인해 잡고 싶어도 잘 대처를 하지 못하는 경우가 많다.”

저작권자 © 고대신문 무단전재 및 재배포 금지