[▲ 배현직 대표]

인벤에서는 국내최초로 서버엔진을 개발하고 상용화한 '넷텐션'의 배현직 대표님을 모시고 서버 관련 칼럼을 기고받게 되었습니다.

넷텐션은 '프라우드넷(ProudNet)'이라는 이름의 서버 엔진을 개발해 현재 '마비노기영웅전', '마계촌온라인' 등 60개 이상의 개발 프로젝트에서 사용 중이며 미국, 한국, 독일 중국 등 9개국 이상에서 게임 서버로 운용 중입니다.

이번 시간은 '게임과 서버에 대한 해킹 기술의 작동원리'와 그에 대한 '방어 원리'를 주제로 이어집니다.


※ 넷텐션 공식홈페이지 바로가기






게임서버에 대해 말해주마 - 5부, 해킹 기술의 작동과 방어 원리




필자는 앞 편에서 온라인 게임에서 발생하는 각종 장애를 소개했었다. 이번 편에서는 온라인 게임에서의 해킹이나 프리서버에 대해 소개하고자 한다. 해킹 기술은 어떻게 작동하는지, 게임 개발자들은 이를 막기 위해 어떤 노력을 하는지 알아보도록 하자. 단, 해킹이나 프리서버를 만드는 방법을 소개하지는 않을 것임을 미리 밝힌다.

[ ▲ 독일출장으로 연재가 늦었습니다. 죄송합니다.
사진은 필자가 직접 찍은 베를린 브란덴부르크 대문]



패키지 게임에서의 해킹

온라인 게임의 해킹을 알기 전에, 패키지 게임의 해킹부터 알고 넘어가면 이해가 빠를 것이다.

인터넷이 발달하기 전에는 패키지 게임을 매장에서 구매한 뒤 혼자 혹은 바로 옆에 있는 친구와 함께 플레이하는 문화가 전부였다. 하지만 이때에도 게임 해킹은 만연했었다. 패키지 게임의 해킹은 플레이어 캐릭터의 능력치를 잔뜩 올려서 게임의 난이도를 없애버리거나, 어려운 스테이지를 그냥 넘어가기 위한 목적으로 이루어졌다.

게임을 실행하면 화면에 멋진 게임 월드가 등장한다. 그리고 그 안에서 플레이어 캐릭터는 생사가 갈린 험난한 여정을 시작하게 된다. 컴퓨터 입장에서 그 플레이어 캐릭터는 한 줌의 작은 데이터 덩어리다. 그 데이터 덩어리는 그 플레이어가 어디에 있는지, 그리고 그 플레이어가 어떠한 장비를 쥐고 있는지, 생명력(HP라고 불림)은 얼마나 되는지 등의 정보를 포함한다. 그리고 그것은 컴퓨터의 RAM이라고 불리는 장비 어딘가에 저장되어 있다.

자, 이제 우리는 이 플레이어 캐릭터의 능력치를 어마어마하게 높여서 게임 플레이를 쉽게 만들고 싶다. 그렇다면 어떻게 해야 할까? 우선 RAM 곳곳을 뒤져서 어디에 그 플레이어 캐릭터의 생명력이 저장되어 있는지를 찾아야 한다. 그리고 그것을 내가 원하는 대로 조작해 버리면 해킹은 성공하게 된다.

이것은 게임을 즐기는 보통의 사람들이 하기에는 무척 어려운 일이다. 그래서 실력 좋은 해커들은 그러한 어려운 일을 누구든지 간단하게 할 수 있는 프로그램을 개발해서 판매했다. 그것이 '해킹 도구(hacking tool)'이다(물론 해킹도구 스스로도 해킹을 당해 불법복제의 피해를 받은 사례도 있다). 대표적인 해킹 도구가 Game Wizard였다.

[▲ Game Wizard를 이용해서 플레이어 데이터를 조작하면
게임의 난이도를 완전히 없애 버릴 수 있다. (이미지 출처) ]


RAM을 해킹하지 않더라도 저장된 게임 플레이어 상태를 해킹하기, 즉 세이브 파일 해킹을 하기도 한다.

게임 해킹은 플레이어 난이도를 조작하는 목적으로 하기도 하지만, 원래 게임에서 의도되지 않은 것을 해 보려는 목적으로 하기도 한다. 예를 들면 절대 갈 수 없도록 해놓은 지역에 들어가려는 것이 있다. 담장으로 막혀 있어 넘어갈 수 없는 지역을 건너가 본다든지, 큰 보상이 기다리고 있는 건너편 장소에 가기 위해 중간에 있는 어려운 장애물을 건너뛴다든지 하는 것 말이다.

절대 볼 수 없는 콘텐츠를 보기 위한 목적으로 해킹하는 경우도 있다. 즉, 원래 개발자들이 의도하지 않은 콘텐츠를 해킹을 통해 접하는 것이다. 예를 들면 캐릭터 의상을 해킹하는 것이 있다. 게임 개발자들은 옷을 갈아입을 수 있는 내용(코스튬 체인지 시스템)을 가진 게임에서의 캐릭터를 제작할 때 가장 처음 '베이스 캐릭터'를 만든다. 그리고 이 베이스 캐릭터는 대개 나체이다. 그 위에 다양한 의상들만을 제작하여 입히는 것이다. 해커들의 방법은 이를 조작해서 의상들을 안 입게 해 버리는 것이다.

원래 콘텐츠의 내용을 훼손해서 콘텐츠를 왜곡할 수도 있다. 가령 원래는 옷을 입고 있는 캐릭터지만 내용을 해킹해서 노골적인 음란물을 만드는 경우가 있다. 이 또한 광의적으로 해킹의 범주에 속한다.

이러한 해킹을 막기 위해 게임 개발자들은 여러 가지 노력을 한다. 가령 RAM에 저장되는 정보 중 플레이어 데이터를 여기저기 옮겨 다니게 하거나 암호화(데이터를 알아보지 못하게 뒤섞어 놓기)해서 해커가 위치를 찾지 못하게 한다든지, 세이브 파일을 암호화해서 알아보지 못하게 한다든지 하는 것들이 있다. 그래도 유능한 해커들은 그러한 것들을 찾아서 무력화(크래킹)를 한다.

이런 수준의 해킹이야 뭐, 자기만 즐거우면 됐으니 애교로 봐줄 수도 있다. 남에게 손해를 끼치지 않는다면야 상관없을 테니까. 하지만 안타깝게도 게임 해킹의 가장 큰 목적은 돈 주고 사지 않고도 게임을 하기, 즉 불법복제에 있다.

[▲ 패키지 게임의 불법복제는 아직도 만연하다.
이러한 상황에서, 국내에서 멋진 패키지 게임이 나올 일은
앞으로도 없을 것이다. (이미지 출처: 게임회사이야기)
더 알찬 내용은 책으로 출간되어 있다.]



불법복제의 원리 - 그것은 도둑질이다

패키지 게임에는 불법복제를 막기 위한 다양한 장치가 되어 있다.

지금은 사라져 버린 플로피 디스크에는 그 안쪽의 특수 영역에 흠집(bad sector 혹은 laser hole)을 내어 그것의 유무 여부로 진품인지 복제품인지를 파악하는 기능이 있었다. 또, 복사기로 복사할 수 없는 특수 인쇄지에 패스워드 코드를 나열해놓고, 게임을 할 때마다 그 패스워드 코드를 찾아 입력해야만 실행되게 하는 기술 등이 있었다.

패키지 게임의 해킹은 이러한 장치들을 무용지물로 만드는 용도로도 활용되었다. 그렇게 방어장치들을 무력화시키고 나면 불법복제가 나돌기 시작하는 것이다. 심지어 불법복제물을 돈 받고 파는 사람들도 많다.

[ ▲ 지금도 DVD 영화처럼 불법복제 방지 기술이 어려운 분야는
여전히 불법복제가 판을 치고 있다. (이미지 출처) ]


게임 하나를 만드는 데 들어가는 노력은 상상을 초월할 수 있다. 그렇게 피땀 흘려 만든 게임이 불법복제 되면 개발자는 물적으로도 심적으로도 큰 손해를 입게 된다. 만연한 불법복제 하나 때문에 망해버린 사업가가 강물에 뛰어들 수도 있다.

국내 패키지 게임의 불법복제는 오래전부터 시작되었고 근래까지도 심각한 수준이었다. 그 결과, 국내 시장에서 PC/콘솔 패키지 게임은 완전히 씨가 말라 버렸다. 불법복제가 계속 판을 치는 한 국내에서의 패키지 게임은 앞으로도 영원히 나오지 않을 것이다. 이 글을 읽는 독자들은 불법복제만큼은 제발 하지 말기를 바란다. 그것은 분명히 도둑질이다.

지금까지 내용을 정리해 보자. 패키지 게임의 해킹은 크게 다음과 같다.

= RAM(메모리) 조작을 통해 플레이어 데이터 고치기
= 세이브 파일 조작을 통해 플레이어 데이터 고치기
= 컨텐츠를 조작해서 비의도된 컨텐츠를 노출하기
= 불법복제 감지 장치를 무력화해서 불법복제하기

게임 시장이 온라인 게임 중심으로 바뀌면서 해커들의 관심도 자연스럽게 온라인 게임으로 향했다. 그리고 패키지 게임에서와 마찬가지로 그 곳에서도 개발자와 해커 간의 공방전이 벌어지고 있다.



온라인 게임에서의 해킹 - 어떤 원리인가?

연재 첫 편에서, 필자는 아래 그림과 함께 패키지 게임의 프로그램이 어떻게 작용하는지를 소개했었다.


패키지 게임에서 해킹당하는 부분은 그림에 나타난 전체이다. 모든 것이 내 컴퓨터 안에 있기 때문에 모두 해커의 손아귀에 있는 셈이다. 그렇다면 온라인 게임에서는 어떨까? 연재 1편에서 소개되었던 그림을 다시 꺼내보자.


위 그림에서 해커는 클라이언트에 있는 모든 것을 손아귀에 넣을 수 있다. 하지만 서버에 있는 것은 손을 댈 수 없다. 서버들이 아주 단단하고 안전한 곳에 고이 모셔져 있기 때문이다.

[▲ 이전 편에 사용했던 이미지를 자꾸 재사용하니 좀 부끄럽네요 ^^]

하지만 해커의 집념은 강하기 이를 데 없다. 게임 서버를 직접 해킹하지 못한다면 그 외 부분에서 할 수 있는 모든 수단과 방법을 가리지 않는다. 게다가 인터넷의 발달로 노하우의 공유가 훨씬 쉬워지면서 해커들은 패키지 게임 때보다 훨씬 능숙한 기술로 개발자들을 괴롭힌다. (물론 게임 개발자들도 능숙한 노하우를 배워서 대항한다. 즉, 만렙 대 만렙의 싸움이 계속되는 것이다.)

위에서 소개한, 패키지 게임에서 할 수 있는 해킹 4가지 중 게임 클라이언트에서 할 수 있는 것들이 뭐가 있는지 알아보자. RAM(메모리) 조작을 통해 플레이어 데이터 고치기는 온라인 게임에서 어디까지 써먹을 수 있을까? 2편에서 게임 서버가 하는 일을 아래 그림과 함께 소개한 적이 있다. 그것을 다시 꺼내보자.



온라인 게임에서의 해킹 - 목표는 서버



플레이어 1이 해커라고 가정해보자. 플레이어 1이 해킹을 통해 플레이어 2를 한 방에 죽이고 싶다고 하자. 그렇다면 어떻게 해야 할까? 플레이어 1이 가지고 있는 플레이어 2의 정보를 속이면 될까?

패키지 게임의 경우, 타격 결과에 대한 연산이 본인의 컴퓨터에서 이루어진다. 따라서 정보를 쉽게 속일 수 있다. 하지만 온라인 게임의 경우, 그 계산을 서버에서 하므로 개별 클라이언트에서는 해킹할 소재 자체가 존재하지 않는 것이다. 따라서 해킹은 불가능하다.

물론, 본인의 캐릭터와 상대 캐릭터의 정보를 보여주기 위한 데이터, 즉 ‘서버에서 보내준 사본(copy)’을 갖고는 있다. 하지만 그것을 해킹해봤자 아무 의미가 없다. 예를 들어 플레이어 1이 자신의 클라이언트를 해킹해서 플레이어 2의 HP를 0으로 만들어 버렸다고 가정하자. 플레이어 1은 자신의 컴퓨터에서는 플레이어 2가 죽는 것을 볼 수 있을 것이다. 그러나 실제 플레이어 2는 서버와 다른 컴퓨터 안에서는 살아있다. 플레이어 2는 화가 나서 플레이어 1을 다시 때릴 것이다. 결국, 플레이어 1 입장에서는 해킹을 통해 죽여버린 플레이어 2가 다시 부활해서 자신을 때리는 모습을 보게 된다.

하지만 해커가 이 정도로 포기해버리면 자존심이 서지 않는다. 곧 다른 결함을 찾아 나선다. 그리고 타격행위가 서버에 '때렸음'을 '요청'하는 형태로 작동함을 발견할 것이다. 해커는 여기서 헛점을 찾아낸다. 클라이언트의 메모리가 아닌 클라이언트 프로그램이 작동하는 방식을 해킹하면 된다는 것을 발견한다.

[▲ 클라이언트의 메모리가 물이라면, 프로그램은 물을 담는 그릇이다.
물을 더럽히지 못한 해커는 그릇을 망가뜨리는 대안을 선택한다.]


작동 방식으로부터 상대방을 때리려면 상대방과 충분히 가까운 거리가 있어야 한다는 것과 내 캐릭터가 때리는 초당 횟수가 충족되어야 한다는 계산이 이루어져야 한다. 자, 이제 해커는 그 계산이 어디에서 이루어지는지 살펴본다.

다행히 그 연산은 클라이언트에서만 하는 것으로 파악되었다! 이제 고민 끝이다. 해커는 자기 컴퓨터에서 작동하는 프로그램을 조작하기 시작한다. 자, 이제 해커는 초당 때리는 횟수와 적과의 거리를 계산하는 곳을 찾아 헤맨 후 그 부분을 무력화시켰다. 초당 때리는 횟수를 1에서 1000으로 바꾸었고, 적과의 최소 거리를 1미터에서 1킬로미터로 변경했다.

그러고 났더니 근거리 무기밖에 안든 1렙 플레이어가 평소 데미지의 1,000배로 광역 PK를 하고 다닐 수 있게 된다!
해커는 이 기쁜 성과를 혼자만 갖고 있기가 너무 아깝다고 생각한다. 그래서 그는 이렇게 해킹을 하는 방법을 인터넷에 게시한다.

자, 이제, 게임 개발자 측면에서 보자. 인터넷에 게시된 방법이 퍼지면서 1렙에게 PK 당하는 만렙들이 속출한다는 보고를 받는다. 그리고 약 1분 동안 멘붕 상태가 된다. 정신을 가다듬고 앞 편에서 몇 번 언급되었던 로그(log)를 살펴보기 시작한다.

개발자들은 로그에서 1초에 1,000회의 매우 약한 데미지를 아주 먼 거리에서 다다다닥! 때려댄 기록을 오래지 않아 찾아낸다. 개발자들은 일단 문제를 찾고 나면 금방 고치기 마련이다. 그 문제를 찾는 데 오래 걸릴 뿐이다. 답은 간단하다. 거리와 초당 때리는 횟수를 서버에서 검산하게 하면 된다. 결국, 서버 패치를 하기 위해 한 차례의 점검 공지가 올라가게 되고, 1차 공방전은 개발자의 승리로 끝난다.

이와 유사한 종류의 수많은 공방전은 라이브 서비스 중인 게임의 개발자와 해커 사이에 자주 일어난다. 그리고 여러 가지 해킹 방지용 도구가 게임 클라이언트에 장착되기도 한다.

[▲ 온라인 게임을 실행하면 괜히 이렇게 생긴 것들이 같이 뜨는 것이 아니다.]


온라인 게임에서의 해킹 - 데이터베이스의 조작


이번에는 세이브 파일 조작을 통해 플레이어 데이터를 고치는 것이 온라인 게임에서는 어떻게 적용되나 보자.
앞 편에서 필자는 데이터베이스라는 것을 소개했다. 그 안에 모든 유저들의 세이브데이터가 있다고도 언급했다. 안타깝게도 세이브데이터는 애당초 게임 클라이언트에 없으니, 이것은 일단 답이 없어 보인다.

그래도 해커들은 이것도 놓치지 않는다. 이른바 ‘쿼리 인젝션’이라는 기법을 이용해서 장난을 치기도 한다.
예를 들어 어떤 온라인 게임에 ‘친구 찾기’ 기능이 있다고 치자. 친구 찾기에 친구의 아이디를 입력한 후 찾기를 누르면 되는 기능 말이다.

유저가 입력한 친구 찾기 이름이 X라고 가정했을 때 게임 서버에서는
’X’를 찾아라
라는 명령어를 만들어 데이터베이스에 명령을 내린다. 그런데 해커가 X 대신에
'그리고 'X'의 비밀번호를 Z로 바꿔라'
라고 입력할 수가 있다. 여기서 ' 표기가 들어간 것을 기억하자.

그러면 이것으로 만들어지는 데이터베이스 명령어는 다음과 같이 된다.
'' 그리고 'X'의 비밀번호를 Z로 바꿔라''를 찾아라
' 표기 사이에서는 그것이 고유 단어인지 데이터베이스 명령어인지를 구별하게 된다. 해커는 데이터베이스의 이러한 성향을 알고 이용한 것이다.

이 명령이 실행되면 X의 비밀번호는 Z로 바뀌게 되고, 해커는 X의 계정을 털 수 있게 되는 것이다. 이것이 이른바 쿼리 인젝션 공격이다. 이를 어떻게 활용하는가에 따라 피해 정도가 달라진다. 최악에는 데이터베이스를 모조리 날려버리는 것뿐만 아니라 서버 컴퓨터의 하드디스크도 접근할 수 있게 된다. 이렇게 되면 서버 프로그램과 데이터, 유저 정보를 모두 외부에 유출하게 하는 공격도 가능해진다. 다행인 것은 쿼리 인젝션은 이제 웬만한 서버 개발자들은 다 알고 있는 지식이라는 점이다. 그리고 쉽게 원천 봉쇄가 가능하다.

'컨텐츠를 조작해서 의도되지 않은 컨텐츠를 노출하는 수법'은 어떻게 작용할까? 안타깝게도 게임 클라이언트에서 등장하는 컨텐츠는 모두 클라이언트 안에만 있다. 서버는 그 데이터의 속성만 가지고 있을 뿐이다. 빨간 옷이 '있다는 것'만 알 뿐, 빨간 옷 자체에 대한 '내용물'을 서버는 가지지 않는다는 말이다. 해커들은 이를 조작해서 남들은 보지 못하더라도 자기 클라이언트에는 적용된 '자기만의 컨텐츠'를 만들어낼 수 있다.

[▲ 패키지 게임에서도 성행했던 누드 패치. 온라인 게임이라고 피해갈 수는 없다.]


게임 제작자로서는 불쾌한 일이다. 일단은 이러한 행위가 다른 플레이어에게 영향을 주지는 않기 때문에 당장에는 크게 문제 삼을 필요가 없어 보인다. 그래도 엄연히 소프트웨어를 불법적으로 사용하는 행위이기 때문에 게임 업계는 이러한 종류의 해킹도 막기 위해 노력한다.

문제는 이러한 컨텐츠 조작으로 다른 사람에게 피해를 줄 때다. 대표적인 것이 FPS 게임에서의 벽 해킹이다. FPS 게임에서는 상대방 플레이어의 위치를 파악하는 것이 승패에 큰 영향을 주기 때문에 벽이나 엄폐물 뒤에 숨어있는 적을 파악할 목적으로 컨텐츠 조작을 하기도 한다.

예를 들어 클라이언트에 들어있는 벽 이미지나 모델 데이터를 해킹해서 벽을 투명하게 하거나 구멍을 낼 수 있다. 혹은 프로그램 소스에서 화면에 벽을 그리는 부분을 해킹해서 벽을 아예 그리지 않게 조작해버린다. 또는 플레이어들이 그려지는 부분을 해킹해서 플레이어가 벽을 뚫고 보여지게 만드는 방법도 있다. 이런 식의 조작이 이루어지면 벽 뒤에 숨은 플레이어들을 볼 수 있게 된다.

[▲ FPS 게임에서의 벽 해킹은 컨텐츠 조작을 통해 타인에게 피해를 주는 사례다.]


컨텐츠를 해킹하는 것은 서버가 쉽게 감지할 수 없다. 그 대신에 게임 클라이언트에는 이러한 공격을 막기 위해 클라이언트에 프로그램이나 컨텐츠 파일 변형이 일어났는지를 검사하는 기능을 포함하기도 한다. 당연히 이를 파괴하기 위한 해커들의 공격도 발생하고, 게임 개발자들은 그것을 방어하고자 노력한다.

불법복제 감지 장치를 무력화함으로써 불법복제를 실현하는 것 또한 온라인 게임이라고 피해 갈 수 없다. 다만 온라인 게임에서는 좀 다른 형태로 일어난다. 그 내용에 대해서는 다음 편에서 이야기하고자 한다.

※ '온라인 게임의 해킹' 나머지 내용은 6부에서 이어집니다.