인벤에서는 국내최초로 서버엔진을 개발하고 상용화한 '넷텐션'의 배현직 대표님을 모시고 서버 관련 칼럼을 기고받게 되었습니다.
넷텐션은 '프라우드넷(ProudNet)'이라는 이름의 서버 엔진을 개발해 현재 '마비노기영웅전', '마계촌온라인' 등 60개 이상의 개발 프로젝트에서 사용 중이며 미국, 한국, 독일 중국 등 9개국 이상에서 게임 서버로 운용 중입니다.
이번 시간은 '프리서버와 봇의 탄생 비화'와 그에 대한 '진화하는 해킹 기술'을 주제로 이어집니다.
※ 넷텐션 공식홈페이지 바로가기
▶ [연재] 게임서버의 정의와 역사
▶ [연재] 게임서버의 작동원리, 섭다와 렉은 왜 생길까?
▶ [연재] 게임 서버 개발자가 게임 회사 안에서 겪게 되는 일
▶ [연재] '잘 되던 게임이 멈췄다', 서버 다운일까 랙일까?
▶ [연재] '해커와 개발자의 두뇌 싸움', 해킹 기술과 방어 원리에 대해
▶ [연재]프리서버와 봇의 탄생, 틈새를 파고드는 서버해킹
지난 편에서 온라인 게임의 해킹은 어떤 것이 이루어지는지 살펴보았다. 본편에서는 온라인 게임에서만 일어나는 새로운 종류의 해킹들을 알아보도록 하자. 본편에서도 게임 서버의 해킹이 어떻게 시도되는 것인지 이해를 하는 데까지만 그치자.
온라인 게임은 패키지 게임과 달리 불법복제의 장벽이 높다. 하지만 높을 뿐이지 불가능한 것은 아니다. 불법복제가 과거에 비해 어려워진 만큼 개발자들의 노력으로 만들어진 작품이 불법복제로 얼룩지는 일이 줄어든 것은 사실이다.
온라인 게임을 사용료 전혀 없이 모든 콘텐츠를 자유롭게 이용하려면 게임 클라이언트 하나만으로는 부족하다. 앞에서 소개한 대로 온라인 게임은 게임 서버와 맞물려 작동하기 때문이다.
그래도 불법복제를 강행하려는 해커들은 이러한 문제 앞에서 주저앉지 않는다. '안 되면 되게 하라!'는 군인정신(군미필자는 잉여력... 필자는 군대를 4주밖에 안갔다온 산업기능요원 출신이다.)으로 저 서버라는 놈을 통째로 불법복제 해버린다.
이렇게 해커에 의해 불법복제된 게임 서버는 사설 서버로서 가동된다. 실제로 불법복제로 작동하는 사설 서버들이 있는데, 이를 프리서버(free server)라고 부른다.
온라인 게임의 불법복제: 프리 서버
게임 서버는 회사 내에서도 1급 보안으로 다루는 물건이다. 그럼에도 해커의 공격이나 업무상 과실 등으로 시중에 유출될 수가 있다. 이럴 때 프리서버를 통해 온라인 게임의 불법복제가 발생할 수 있다.
프리서버를 취득해서 그냥 사용하는 것도 불법행위인데, 프리서버를 마음대로 띄워놓고 다른 사람들에게 유상으로 서비스하는 것도 당연히 불법행위이다. 남의 재산을 도둑질해서 쓰는 것도 불법인데 그것을 다른 사람들에게 팔아서 돈을 챙기는 것 또한 불법행위 듯이 말이다.
반면에 유출된 적도 없는 온라인 게임의 서버가 버젓이 작동하는 예도 볼 수 있다. 도대체 이것은 어떻게 가능한 것인가?
게임 클라이언트는 해커의 손에 이미 주어져 있다. 누구나 그냥 다운로드를 받으면 되기 때문에 당연하다. 게임 서버와 클라이언트는 네트워크를 통해 정보를 주고받는다. 게임을 하는 동안 말이다. 그렇다면, 게임 클라이언트가 서버와 주고받는 통신 정보들의 구조를 분석해서, 그것과 똑같이 작동하는 게임 서버를 '따라 만들면' 어떨까? 이 아이디어에서 나온 것이 것이 프리 서버이다.
자, 이제 해커는 잘 돌아가는 공식 온라인 게임을 플레이해본다. 그러면서 서버와 주고받는 데이터를 로그(log)로 남긴다.
해커는 게임 안에서 캐릭터를 움직이고, 몹 사냥과 아이템 거래를 통해 네트워크의 정보교환을 분석한다. 그리고 일정한 패턴들을 찾아낸다. 웬만한 온라인 게임은 그 패턴의 수가 수백 개에서 수천 개다. 폭발하는 잉여력이 아니면 못할 짓이다.
마침내, 해커는 네트워크 정보의 패턴을 파악할 것이다. 그리고 이것을 따라 게임 서버를 직접 만들기 시작한다. 오리지날 게임을 플레이해보면서 그 게임에 나와있는 게임 진행 방식을 흉내내서 만든다.
정품 온라인 게임을 만드는 회사와 달리 성능이나 안정성을 그렇게 신경을 쓰지 않아도 되기 때문에, 해커들은 훨씬 빠른 시간에 게임 서버를 개발할 수 있다. 물론, 간이 수준의 게임 서버이다. 이렇게 해커는 ‘따라 만든’ 게임 서버, 즉 프리 서버를 만든다.
자, 이제 해커가 직접 만든 프리 서버는 정품 게임 서버와 비슷하게 작동한다. 무엇보다도 게임 서버 안에서 일어나는 게임 로직을 해커 스스로 속속들이 알고 있기 때문에, 게임 안에서는 뭐든지 마음대로 할 수가 있다. 필자가 앞서 언급했듯이 게임 서버가 하는 역할은 게임 세계 안에서 일어나는 사건들을 주체적으로 다루고 판단하는 것이다. 만약 게임 서버의 역할 비중이 높은 게임이라면, 당연히 해커는 게임 안에서 더욱 신적인 존재가 될 수 있다!
원래의 게임 서버를 '따라 만들기(모작)'해서 만들어진 프리 서버는 기상천외한 게임 플레이를 제공하기도 한다. 정품 게임보다 100배 이상 빠른 레벨업, 회원 가입을 하자마자 만렙이 되는 등 모든 것이 가능하다. 또한, 프리 서버를 이용하면 도저히 깰 수 없는 몬스터, 도저히 가기 어려운 레벨, 퀘스트를 경험하는 것도 가능하다. 더구나, 해커가 게임 클라이언트까지 해킹했을 때에는 오리지날 게임에는 없는 새로운 맵과 새로운 캐릭터를 등장시킬 수도 있다.
영화속에서 그렇게 해서 사랑을 얻으나, 현실은 직권남용(자료출처 : 구글 이미지)]
모작으로 만들어진 프리 서버에 대한 법적 제재를 어디까지 수 있는지 필자도 확실히는 모른다. 하지만 천문학적인 비용을 들여 만든 온라인 게임이 제 수익을 내주지 못하고, 오히려 엉뚱한 사람들의 잇속을 챙겨주는 상황이 된다는 점은 분명하다. 당연히 게임 개발사는 프리서버 운영자들을 색출하고 다닐 수밖에 없다.
프리 서버를 하는 이유는 재미있어서, 공짜라서, 혹은 정품 서비스보다 이용료가 싸서 등 다양하다. 그러나 프리 서버는 언제든지 원저작자에 의해 고발을 당할 위험이 있다. 고발을 당하면 당연히 프리 서버에 만들어놓은 계정도 파괴될 수 있다. 당연히 이를 복구받을 권리도 없다. 정품 서비스보다 싸다는 이유로 프리서버에 이용료를 내고 게임을 즐기다가 어느 날 계정이 사라지거나 캐릭터가 훼손되어도 하소연할 데가 없으니 주의하도록 하자.
다른 불법복제 소프트웨어도 그렇듯이 프리 서버 또한 불법 소프트웨어이다. 그러다보니 잘못된 프리서버 때문에 컴퓨터 손상이나 개인정보 유출을 당할 수도 있으니 주의해야 한다.
게임 개발사들이 프리서버를 막는 방법도 다양하게 진화했다. 우선, 게임 개발사 스스로의 사내 보안을 철통같이 지킨다. 물론 거래하는 다른 업체와의 보안도 예외없이 말이다.
해커들이 분석하기 어렵게 만드는 것도 게임 개발자들이 하는 노력이다. 네트워크를 통해 주고받는 정보를 복잡하게 만들어서 분석하기 어렵게 만든다. 수시로 클라이언트를 업데이트해 주고받는 정보의 구조를 자주 변경해서 기존 프리 서버를 무력화시키기도 한다. 게임 서버가 하는 역할을 넓혀서, 웬만한 프리서버는 상대적으로 멍텅구리 수준으로 전락시키는 방법도 존재한다.
어렵게 하기 위한 노력 중 하나]
패키지 게임에서 없었던 종류의 해킹들: 봇
앞서 언급했듯 패키지 게임에서는 캐릭터 정보를 해킹해서 엄청나게 강력한 캐릭터를 만든 후 게임을 쉽게 클리어해 나가는 것도 가능하다. 그러나 온라인 게임에서는 그렇게 할 수 있는 종류가 제한되어 있다.
서버에 저장된 캐릭터 정보를 직접 수정할 방안과 네트워크나 클라이언트를 해킹할 방법이 없다고 가정해보자. 그렇다면 할 수 있는 일은 열심히 ‘노가다 플레이’를 하는 방법밖에 없다. 하지만 이것은 무척 지루한 일이다.
만약 이 지루한 일을 사람 대신 기계가 하면 쉬워지지 않을까? 기계가 플레이어 대신 몹 사냥과 아이템 팔기를 반복해주게 해주면 말이다. 이러한 아이디어에서 등장한 것들이 ‘매크로’ 혹은 ‘봇’ 혹은 ‘오토’라고 불리는 것들이다. 필자는 이를 봇이라고 통칭하겠다.
봇은 플레이어가 직접 게임을 플레이를 하지 않아도 자동으로 게임을 대신 진행해주는 프로그램이다. 게임 클라이언트를 띄우고 게임을 켜 놓은 다음에, 봇 프로그램을 같이 실행시킨다. 그리고 봇 프로그램은 게임 클라이언트의 마우스와 키보드를 사람 대신 움직여준다. 그러면 사람은 자리를 비워도 봇이 계속해서 반복적으로 몹을 사냥하고, 아이템을 줍고, 상점에 가서 팔고, 다시 몹을 사냥하러 가는 과정을 무한 반복해준다.
온라인 게임은 패키지 게임과 달리 혼자 하는 게임이 아니라, 사람간의 협력과 경쟁이 오가는 게임이다. 그러다보니 플레이 시간이 많을수록 다른 사람들보다 우위적인 즐거움을 얻을 수 있기도 한다. 이를 위해서 오랜 시간의 플레이를 해야 한다. 그런데 봇은 오랜 시간의 플레이를 사람 대신 대신 해준다. 기계가 해주는 것이니만큼, 지치지도 않고 24시간 열심히 몹사냥을 해댈 수 있다. 결과적으로 사람이 플레이할 때보다 더 빠른 레벨업을 할 수 있다.
"남이야 봇을 쓰건 말건 뭔 상관이야?"라고 생각할 수 있지만, 온라인 게임에서 봇 때문에 게임을 하기 싫어지게 만드는 경우가 더러 있다.
우선, 봇을 쓰지 않는 사람들보다 빠르게 성장하는 타인들 때문에 자괴감을 느낄 수 있다. 그러면 너도나도 봇을 쓰게 되고 결국에는 게임 밸런싱이 무너지는 사태로 이어지게 된다. 게임 안에 들어갔더니 봇천지 뿐이면 게임을 더욱 하기 싫어지게 된다.
이렇게, 온라인 게임의 해킹은 불법복제와 밸런스 붕괴 등으로 다른 플레이어에게 피해를 준다. 그러하다 보니 게임 개발사들은 봇을 막으려고 애를 쓸 수밖에 없다.
봇을 막기 위한 기술적인 방법도 다양하다. 게임 개발자들은 봇에 의해 게임 클라이언트가 조종되고 있는지 검사하는 프로그램을 심어 넣는다. 한편, 게임 서버에서도 봇에 의해 게임 클라이언트가 조종되고 있는지 아닌지 행동을 분석하는 프로그램이 존재한다. 이런 프로그램은 '봇이 일반적으로 일련의 반복 행동을 하기 때문에, 매번 유사한 행동을 하는 플레이어라면 봇이라고 의심해볼 수 있다'는 데 기초하고 있다.
봇 자체가 들어설 필요가 없게 하는 방법으로 봇을 해결하는 특이한 케이스도 있다. 가령, 중국의 어떤 MMORPG는 시작하자마자 만렙으로 전환해주는 매우 비싼 유료 아이템도 판다.
진짜 사람들(죄수)들이 반복 노가다 플레이를 하고 있었다는 루머가 있다. 믿거나말거나]
계정 도용
인터넷 시대에서 발생하는 흔한 해킹은 사용자 계정 도용이 있다. 다른 사람의 아이디나 비밀번호를 몰래 훔쳐서 그것을 가지고 개인 정보를 빼내거나 심지어 신용카드 사용을 남발해 버리는 등의 피해 사례가 있다.
온라인 게임도 예외가 아니다. 온라인 게임에서도 아이디와 비밀번호를 해킹하는 사례가 늘고 있다. 온라인 게임의 계정 해킹은 다양한 수단을 통해 이루어진다. 컴퓨터 바이러스나 웜, 네트워크 공격으로도 이루어질 수 있다. PC 방 등 공공장소에서 입력한 비밀번호가 스파이웨어에 의해 도청되어서 해커의 손에 넘어갈 수도 있다. 네트워크 스니퍼(network sniffer)를 켜놓고 다른 컴퓨터에서 주고받는 정보를 도청해서 개인 정보를 빼갈 위험도 존재한다.
이러한 문제를 해결하려면 게임개발자 뿐만 아니라 사용자도 같이 노력을해야 한다. 편리함과 보안은 상충한다는 점을 잊지 말자.
= 불법 웹사이트로의 접속 한번으로 컴퓨터가 바이러스에 걸릴 수도 있다.
= 사용자 비밀번호를 길고 복잡하게 만들어서 머리속에 기억해야 한다.
= 잘 모르는 프로그램은 함부로 실행하지 말아야 한다.
= PC방 등 공공장소에서는 반드시 로그오프를 하고 끄도록 한다.
= 같은 비밀번호를 여러 곳에 쓰지 않는다.
= 자주 비밀번호를 변경한다.
= OTP 기기나 OTP 앱을 휴대폰에 넣어서 사용한다.
물론 게임 개발자들도 계정 도용을 최소화하기 위해 노력한다. 웹사이트의 보안 설치 프로그램이 강제로 설치되게 한다든지, OTP장치를 넣는다든지 하는 것들이다. 요새는 게임을 단독으로만 서비스하지 않고 게임 퍼블리셔와 협업으로 서비스하는 경우가 많다. 그러므로 협업 과정에서 보안의 틈새가 생기지 않도록 주의가 필요하다.
서버의 결함을 이용한 해킹
게임 서버의 딜레마 중 하나는 성능과 안정성, 그리고 보안성이 상충하는 데 있다. 성능에 집중하면 구조가 복잡해진다. 그러면 안정성이 떨어져 서버 다운이나 랙, 디스 등이 발생하기 쉬워진다. 보안에 집중하게 되면 서버와 클라이언트에서 계산해야 하는 양이 많아져 시스템에 부하를 더 주게 된다. 당연히 구조도 복잡해진다.
하지만 구조가 복잡한 만큼 프리 서버로부터 자유로워질 수 있다는 장점도 존재한다. 그러다 보니, 게임 개발자들은 성능과 보안의 적정성을 찾아내는데 고민을 할 수밖에 없다. 해커들은 이렇게 복잡해진 서버와 클라이언트 사이에서 결함을 이 잡듯이 파헤친다. 그리고 아주 작은 결함이라도 발견하게 되면 그 틈새를 이용해 해킹을 성공시켜 버린다.
게임 서버도 마찬가지로 안전성과 성능은 반비례한다. (이미지 출처)]
결함을 이용한 해킹의 대표적 케이스로 아이템 복제를 들 수 있다. 서버의 결함을 이용한 해킹은 특별한 툴이 없어도 요령만 알면 가능하다. 예를 들어 중복 로그인을 이용해 아이템 복사가 가능한 게임이 있다. 특별한 툴 없이 어떻게 가능했는지 보도록 하자.
아래 그림에서 플레이어가 접속을 하면, 접속한 플레이어의 정보를 게임 서버가 알아야 한다. 이를 얻기 위해 게임 서버는 데이터베이스에 플레이어 정보를 받는다. 그리고 플레이어는 열심히 게임을 즐긴다. 게임을 즐기는 동안 그의 정보는 종종 데이터베이스에 저장이 된다. 최종적으로, 플레이어가 접속을 끊으면 게임 서버가 가진 데이터는 데이터베이스에 완전히 저장된다.
(아래 예는 독자의 이해를 위해 단순화한 한 예일 뿐이다. 모든 게임 서버가 이렇게 작동하지는 않는다.)
일반적으로 게임 서버는 동시접속자를 최대한 많이 수용하기 위해서 한 대의 컴퓨터로 구성되지 않는다. 많은 수의 서버 머신들이 한 대의 서버처럼 작동한다. 이러한 것을 분산 처리 기술이라고 한다.
게임 클라이언트는 분산 처리로 작동하는 서버 중 하나를 선택해 접속한다. 그러면 플레이어의 정보를 접속을 받은 게임 서버가 데이터베이스로부터 얻어온다. 그리고 그 플레이어가 접속을 끊고 다시 게임을 접속하려고 하면, 같은 방법으로 서버 중 하나를 선택해 접속한다. 이 과정에서 처음 접속했던 게임 서버와 두 번째 접속하는 게임 서버는 서로 다를 수 있다. 이 부분에서 해커는 결함의 실마리를 찾기도 한다.
플레이어가 게임 서버1에 접속해서 플레이하다가 접속을 끊으면 게임 서버1은 플레이어 정보를 데이터베이스에 기록할 것이다. 이때, 기록은 즉시 끝나지 않는다. 매우 짧은 시간이지만 어쨌거나 시간이 걸린다. 게임 서버 1의 플레이어 정보는 서버 사이에 있는 초고속 네트워크 회선을 통해 지나가서 데이터베이스에 기록된다.
데이터베이스는 하드디스크나 SSD, 즉 물리적인 기록 장치이다. 이곳에 저장되기까지 약간의 시간이 필요하다. 물론 이 모든 시간은 매우 짧은 순간이다. 매우 짧은 순간이지만 어쨌든 이 시간은 완전한 제로가 아니다. 여기에 함정이 있다.
아이템 복사를 하고자 하는 플레이어는 게임 서버 1에서 접속을 끊음과 동시에 다시 재접속을 시도한다. 이때 게임 서버 1에서 플레이어 정보를 데이터베이스에 저장하기 위한 과정이 진행되고 있는 동안, 플레이어는 게임 서버 2에 접속을 해서 자신의 정보를 로딩할 것이다. 이때 플레이어 정보는 아주 약간의 과거 상태가 된다.
만약 플레이어가, 아이템 가방에 있던 아이템을 하나 바닥에 떨어뜨리자마자, 게임을 접속을 끊음과 동시에 같은 아이디로 로그인을 순식간에 성공할 경우, 게임 서버 2에는 약간 과거의 플레이어 정보, 즉 아이템을 바닥에 떨어뜨리기 전의 상태로 로그인을 성공시킬 수 있다.
그리고 그 플레이어가 게임 서버 1이 담당하는 게임 월드로 가면, 플레이어는 자신의 가방에 있는 아이템과 같은 아이템이 바닥에 떨어진 것을 보게 될 것이다. 그리고 바닥에 떨어진 아이템을 유유히 집으면 복사가 성공적으로 끝나게 된다.
전산학적으로 이러한 상황을 '데이터 비일관 문제(race condition)'라고 부른다. 다만 매우 낮은 확률로 발생하는 문제이다 보니 경험 없이는 쉽게 놓치는 실수일 뿐이다. 어쨌거나 해커는 이러한 작은 결함도 놓치지 않는다.
오늘날 이러한 방식의 아이템 복사는 어렵다. 이러한 결함은 이미 게임 서버 개발자들 사이에 잘 알려진 케이스이기 때문이다. 이제 이쯤의 문제는 다양한 방법으로 예방된다. 하지만 게임 서버의 구조가 복잡해지며, 다른 종류의 여러가지 위험 앞에서 맞서 싸워야 하는 것은 여전하다.
연재를 마치며
최근 등장한 '디아블로3'는 패키지 게임임에도 게임 서버 없이는 플레이할 수 없다는 흥미로운 사실을 발견했다. '디아블로3'는 사실상 온라인 게임이다. 필자는 '디아블로1'부터 게임을 즐겨왔는데, '디아블로1'은 게임 플레이 관련해서 게임 서버의 역할이 없었다. 덕분에 '디아블로 1'은 아이템복제나 해킹이 무척 쉬웠다.
하지만 '디아블로 3'는 게임 서버가 있으므로 인해 플레이어들이 쉽게 멀티플레이를 시작할 수 있고, 해킹으로 말미암은 밸런스 붕괴로부터 더 자유로워진다. (물론 게임 개발사 입장에서도, 불법복제도 크게 줄어드는 이익도 본다.)
게임 서버의 역할과 트렌드도 매년 다르게 발전하고 있다. 무선 인터넷의 확산, 더 빨라진 인터넷, 모바일과 소셜 게임의 인기, N스크린 유행은 과거의 게임 개발 노하우를 하나둘씩 무효화하고 있다. 그래도 여전히, 보이지 않는 곳에서 묵묵히 작동하는 게임 서버, 그리고 그것을 만들고 관리하는 개발자들의 역할은 앞으로도 계속 빛을 발할 것이다.
부족한 시간 짬짬히 내면서 연재를 했다. 느린 연재에도 불구하고 인내심을 갖고 읽어주신 독자들께 감사의 인사를 드리며 이만 연재를 마친다.