[기고칼럼] 모바일게임 해킹과 방어전략에 대한 모든 것-1부

칼럼 | 홍진선 기자 | 댓글: 65개 |


디지털 컨텐츠 보안 전문기업 잉카엔트웍스 앱실링 홍진선 CTO가 '모바일 게임 앱 해킹 그리고 보안' 정보를 기반으로 모바일 게임을 둘러싼 해킹의 다양한 방법과 이를 대처할 수 있는 각각의 보안 방법을 소개합니다.

가상의 인물이 '게임 스타트업'을 시작하는 과정에서 발생하는 해킹 이슈와 보안 컨셉을 질의응답 형태로 전문적인 정보를 알기 쉽게 전달하고자 합니다.


* 외부 필진의 기고 내용은 본지의 편집방향과 일치하지 않을 수도 있습니다.



먼저 최근 빈번하게 발생하는 모바일 게임 해킹 사례를 두 가지 소개하겠습니다.

사례1. 해킹 피해 때문에 개발팀이 모두 공중분해 될 뻔 함

[취재] 탐정의 왕, 눈물의 읍소. "해킹하지 말아 주세요."

지난 7일, '탐정의 왕' 공식 블로그에 '지극히 일부겠지요.'라는 제목으로 하나의 포스팅이 올라왔다. 우회 결제가 가능하다는 제보로 시작된 이 글은 신통치 못한 매출과 물 건너간 차기작의 현실을 한탄하는 내용이었다.

이 글이 시선을 끈 이유는 단순히 신통치 못한 매출을 한탄하는 글뿐만이 아니라 우회 결제 즉, 해킹에 관한 내용이 포함되어 있었기 때문이다. '탐정의 왕'은 소규모 인력으로 개발을 진행해서 보안에 신경 쓰지 못했다는 점을 언급하며 차라리 비난과 욕을 할지언정 '탐정의 왕'을 무가치한 게임으로 만들지 말라고 했다

Q. 그럼 그 이야기를 해보자.

일단 표를 보며 말하겠다. 표를 보면 이게 구글에서 잡힌 매출이다. X원이다. 이 정도면 차기작도 진행할 수 있을 거로 생각했다. 하지만 프리덤이라는 프로그램을 이용해서 가짜 결제를 한 것까지 구글 디벨로퍼 콘솔화면에서 수익으로 잡힌다. 그땐 몰랐지만...

그리고 정산금을 받았다. X원이다. 처음엔 내가 잘못 봤는지 알고 한참을 쳐다봤다. 그래도 이상해서 팀원들을 불러놓고 보라고 했다. 팀원들도 나랑 같은 반응이었다. 참담했다. 영업 수익이 -XXX% 였다.


사례2. 대박인줄 알았는데,쪽박이었네...

떼돈 번 줄 알고 소고기 먹었더니 위조지폐? 결제 해킹

사례>
출시 후 6시간, 회사 과금 로그 1억 찍음!!
소고기 맛 나게 먹다가... 찜찜
구글(애플) 결제 로그 결제 금액 0원 ㅠ_ㅠ

"게임을 출시한 지 6시간 만에 결제된 금액이 1억 원을 돌파했습니다. 좋아서 죽는 줄 알았죠. 신나서 직원들과 소고기를 먹었습니다. 그리고 숙취에 찌들어 출근한 다음 날, 얼마나 매출이 늘었을까 마켓을 보니 1억 원은 커녕 그 반도 없더군요. 결제 해킹이었습니다."

송찬호 이사는 과거에 자신이 실제로 겪었던 해킹 이야기로 강연을 시작했다. 비싼(?)게임을 공짜로 즐기게 하는 결제 모듈 해킹은 모바일 게임 해킹의 대다수를 차지한다. 시도가 많은 만큼 방법도 다양하다.


위에서 언급한 사례들은 모두 실제 일어났던 사건들입니다.그 만큼 모바일 게임에 대한 해킹은 빈번하게 일어나고 있습니다. 모바일 게임에 대한 해킹 시도에 대한 정확한 빈도를 측정하기는 현실적으로 어렵지만, 당사의모바일 게임 보안 서비스를 적용한 게임앱에 대한 데이터에 의하면 모바일 게임 실행 시도의 70% 이상의 해킹을 목적으로 함을 알 수가 있었습니다.

그렇다면, 왜 이렇게 모바일 게임 해킹이 많이 일어나고 피해사례가 보고되고 있을까요? 그것은 일반적으로 해킹이라고 하는 행위 시도에 대한 난이도가 모바일 게임에 대해서는 상대적으로 매우 쉽기 때문입니다. 다시 이야기하면,소위 해커라고 불리우는 특정층만이 행할 수 있는 것이 아니라, 일반 유저도 얼마든지 쉽게 해킹을 할 수 있다는 이야기입니다.

이러한 현상은 해킹을 도와주는 각종 툴들이 활성화되었기 때문입니다. 특히 중국을 통해서 많은 툴이 개발되어 배포되고 있으며, 이러한 툴은 대부분 보안적으로 약한 안드로이드 플랫폼을 지원하는 게임앱을 공격대상으로 하고 있습니다.

요즘의 모바일 게임은 서버/클라이언트 구조를 많이 사용하고 있습니다. 따라서 클라이언트뿐만 아니라, 서버에 대한 공격도 가능합니다. 하지만, 게임서버에 대한 해킹은 본 문서에서 다루지 않고 클라이언트 중심으로 설명 드리도록 하겠습니다. 오늘부터 3차례에 걸쳐 모바일 게임앱 해킹(이하,게임해킹)과 그 방어전략에 대해서 Q&A형식으로 쉽게 설명을 드리도록 하겠습니다.




가장먼저, 게임해킹이라는 것을 무엇이라고 정의할 수 있을까요?


= 우선,위키피디아에 있는 해킹의 정의를 살펴볼까요?

“해킹(hacking)은 전자 회로나 컴퓨터의 하드웨어, 소프트웨어, 네트워크, 웹사이트 등 각종 정보 체계가 본래의 설계자나 관리자, 운영자가 의도하지 않은 동작을 일으키도록 하거나 체계 내에서 주어진 권한 이상으로 정보를 열람, 복제, 변경 가능하게 하는 행위를 광범위하게 이르는 말이다.”

위의 정의에 따르면, 해킹은 (1) 정보체계를 조작하여 저작권자에 반하는 동작을 일으키도록 하는 행위, (2) 주어진 권한 이상으로 정보를 조회,복제,변경하도록 하는 행위로 나눌 수 있습니다. 정보체계를 조작한다는 것은 모바일 게임내에 있는 각종 데이터나 처리 과정을 조작한다는 의미로 해석될 수 있습니다. 루팅 또는 탈옥과 같은 행위는 두 번째 설명된 권한 이상으로 정보를 조회/복제/변경하는 행위에 해당될 수 있겠습니다.

위에서 설명된 바에서 모바일 게임 해킹이라는 정의를 해 본다면, 모바일 게임의 개발자 또는 저작권 소유자의 의도에 반하게 게임내의 정보를 획득, 변조하여 정상적으로 게임을 즐기는 플레이어 대비하여 불공평하게 게임 시나리오를 수행하여 게임 전체적인 불균형을 유발시키는 행위라고 할 수 있습니다. 물론 게임의 장르에 따라서 “불균형”이라는 용어는 다양하게 해석될 수 있습니다.




그렇군요. 모바일 게임을 불공정하게 사용하기 위한 것이 게임해킹이라는 것이네요. 그렇다면 왜 게임앱에 대한 해킹인가요? 게임 서버에 대한 공격도 가능할거 같은데요?


=간단하게 이유를 말씀 드리면, 게임앱(클라이언트)해킹이 게임서버 해킹보다 쉽기 때문입니다. 물론 게임서버에 대한 공격 사례는 많습니다. 우리가 흔히 알고 있는 DDoS와 같은 것들이 가장 쉽게 접할 수 있는 예이지요.하지만 이러한 공격은 상대적으로 많은 준비를 해야 하고, 게임서버를 운영하는 회사에서도 많은 보안책을 마련하여 공격에 대비를 하고 있는 것이 현실입니다.

그에 반해 게임앱은 공격에 대한 방어책이 상대적으로 약하다고 할 수 있습니다. 대부분의 공격은 우리가 흔히 루팅 또는 탈옥(관리자 권한을 얻어와 스마트폰의 다양한 환경을 조작할 수 있도록 하는 행위)된 환경에서 가능한데, 많은 사용자들이 이러한 환경을 사용하고 있습니다. 또한 해커의 입장에서는 공격의 대상을 손에 넣는 것이 중요한데, 게임앱의 경우에는 이미 해커의 손에 그 대상이 존재하기 때문에 얼마든지 쉽게 공격을 시도할 수가 있는 것입니다.

결론적으로 게임 서버 공격에 대비하여 상대적으로 효과적이고 효율적인 게임앱에 대한 공격 시도가 더욱 많은 것이며, 수요가 있으면 공급이 있듯이 해킹을 위한 다양한 툴들이 인터넷 상에 공개되고 있는 것입니다.




그렇다면 게임해킹 종류는 어떻게 구분할 수 있습니까?


=사실 게임해킹 방법에 대한 구분 기준은 명확하지 않습니다. 게임해킹의 기술적인 난이도로 구분할 수도 있고, 게임해킹 대상에 따라서 구분할 수도 있습니다. 여기서는 좀 더 쉬운 이해를 위해 게임해킹 대상으로 구분해보면 해킹의 종류는 크게 3가지로 볼 수 있겠습니다.(서두에서도 이야기하였듯이 여기서는 게임앱에 대한 해킹으로 한정하였습니다.)

● 메모리 해킹
● 결제 해킹
● 스피드 해킹


메모리 해킹은 게임 내에 사용되는 아이템이나 화면에 표시되는 수치 등을 조작하는 것을 의미합니다. 결제 해킹은 통상 IAB(In App Billing) 또는 IAP (In App Purchase)로 설명되는 앱내 결제에 대한 해킹으로 정상적으로 결제가 되지 않았음에도 구매된 아이템을 사용할 수 있도록 하는 행위를 의미합니다.

스피드 해킹은 게임이 이루어지는 구성 요소들의 운영 속도를 조절하여 비정상적으로 게임을 빠르게 진행시킨다거나,속도를 느리게 하여 게임의 난이도를 조작하는 행위를 의미합니다. 해킹 방법과 방어법에 대한 상세한 내용에 대해서는 추후 각 항목별로 자세히 다루도록 하겠습니다.




그렇다면 '메모리 해킹'은 무엇인가요?


=게임해킹에서 가장 많이 행하여지는 것이 메모리 해킹이라고 할 수 있습니다. 메모리 해킹은 금융, 주식 등의 프로그램에서 많이 사용되는 공격방법으로 게임에 관련된 데이터가 메모리상에 로드된 이후에 게임에 영향을 미치는 데이터(돈, 레벨, 경험치, 공격력 등)를 인위적으로 조작하는 행위라고 정의할 수 있습니다.

사용자가 게임앱 을 실행시키면, 게임이 구동하면서 게임 구동에 필요한 모든 데이터는 메모리에 모두 로딩되게 됩니다. 메모리 해킹은 게임앱이 구동된 상태에서 메모리를 검색하여 해커가 원하는 데이터의 위치를 찾아내고, 데이터의 값을 조작함으로써 해커가 원하는 결과를 얻을 수 있도록 하는 행위를 의미합니다.

위에서 설명한 바와 같이 결국 모바일 게임의 소스를 수정하지 않고도 동적으로 로딩된 메모리상의 게임 데이터를 조작함으로써 해커가 원하는 결과를 얻어낼 수 있는 매우 강력하면서도 해킹의 기술적인 난이도가 쉬운 해킹이라고 할 수 있습니다.




메모리 해킹은 어떻게 수행하는 것인가요?


=모바일 게임에서 메모리 해킹은 크게 메모리 치팅 툴 이용하거나, 가상 머신 이용하는 방법을 통해서 이루어집니다. 메모리 치팅툴은 메모리 해킹을 쉽게 할 수 있도록 도움을 주는 툴로써 몇 번의 화면 터치만으로 원하는 값에 대한 변조를 가능케 하며, 10여종 이상의 툴이 인터넷상에 배포되어 있어 쉽게 찾아서 설치할 수 있습니다.

가상 머신은 모바일 단말 환경을 가상으로 구현하여 PC에서 안드로이드 앱을 구동할 수 있도록 만든 소프트웨어입니다. 가상 머신을 이용한 공격의 경우에는 PC에서 공격하는 것과 동일하다고 할 수 있습니다. 이는 상대적으로 열악한 디버깅 환경을 제공하는 모바일보다 더욱 많은 공격방법이 존재하기 때문에 가상 머신을 이용한 공격은 방어자 입장에서는 매우 위험한 공격이라고 할 수 있습니다.




메모리 치팅툴(Cheating Tool)은 어떤 것들이 주로 사용되나요?


=인터넷에는 10여개 이상의 메모리 치팅툴이 존재하는데,이중 대표적인 메모리 치팅툴은 Game H****, GameC**, GameK*****, Game G******* 등이 있습니다.





대부분의 치팅툴은 90% 이상이 중국에서 개발되어 인터넷을 통해 배포되고 있으며, 기존의 치팅툴을 변형하여 만든 유사 혹은 복제 치팅툴도 다수 존재하고 있습니다. 또한 신규 치팅툴도 지속적으로 개발되고 게임 커뮤니티를 중심으로 배포되고 있는 상황이기 때문에 그 수를 정확히 산출하기는 어렵습니다.




메모리 치팅툴은 루팅된 환경에서만 동작하나요?그리고 어떠한 프로세스로 동작하는 것인가요?


=모든 메모리 치팅툴은 오직 루팅된 환경(현재까지 순정 환경에서 동작이 가능한 메모리 치팅툴은 찾을 수 없었음)에서 동작을 수행합니다.그 이유는 치팅툴이 동작하는 원리 때문인데요.메모리 치팅툴은 대상이 되는 게임내 데이터를검색 또는 조작하기 위해서는 반드시 해당 게임 프로세스를 찾아서 감시를 하거나 자신의 모듈을 해당 프로세스에 Attach 하고 있어야 하기 때문입니다.

해당 프로세스를 검색하는 로직은 반드시 관리자 권한이 필요하고 이는 루팅된 환경이어야만 가능한 것입니다. 그리고 대부분의 메모리 치팅툴은 아래 그림과 같은 프로세스를 수행합니다.




메모리 치팅툴은 사용자가 찾기를 원하는 값을 입력받고 이 값에 대한 메모리 검색을 수행합니다.검색된 결과를 사용자에게 보이고,검색된 결과중에서 다른 값으로 다시한번 검색을 수행합니다.이렇게 결과내 검색을 반복함으로써 사용자가 원하는 값의 메모리내 위치 정보를 알아내어,그 값을 조작하게 되는 것입니다.




그럼 대표적인 치팅툴의 사용법과 이를 이용하여 게임앱을 공격하는 방법에 대해서 알려주세요.


=사실 치팅툴은 그 사용법이 너무나 쉽고 간단해서 별도로 지면을 할애하여 설명드릴 필요도 없습니다. 그만큼 많은 사람들이 사용하기 때문에 치팅툴의 사용성도 계속 진화하고 있습니다. (메모리 치팅툴도 지속적으로 업그레이드되고 있습니다.)

하지만, 여기서는 대표적인 메모리 치팅툴인 Game H****의 사용법에 대해서 간략히 설명을 드리도록 하겠습니다. (결코 메모리 치팅툴 사용을 권장하기 위한 목적이 아님을 다시 한 번 상기해 주시기 바랍니다.)

Game H****은 아래 그림과 같은 UI를 제공합니다.




먼저 앱을 실행하면 게임 activity 위로 플로팅 아이콘이 출력되고 플로팅 아이콘을 누르면 앱의 컨트롤이 출력됩니다.아래 그림에서 2번의 검색 아이콘을 탭하여 게임내 데이터 검색을 수행합니다.




한 개의 결과가 나올 때까지 반복 검색한 후 원하는 값으로 데이터를 조작합니다.




보시는 바와 같이 사용법이 매우 쉽다는 것을 아실 수 있을 것입니다.다른 메모리 치팅툴도 이와 유사한 사용법을 제공합니다.




매우 강력한 공격방법이라고 설명하신, '가상 머신 소프트웨어'에는 어떠한 것들이 있는지요?


=PC에서 모바일 환경을 구축할 수 있는 대표적인 가상 머신(Virtual Machine; VM)솔루션은 아래와 같습니다.




블루스택과 지니모션, 앤디가 가장 많이 사용되는 솔루션이라고 할 수 있으며 대부분은 유료로 판매되고 있습니다. 가상 머신은 원래부터 해킹을 목적으로 하여 개발된 것이 아니라, PC 환경에서 안드로이드 환경을 에뮬레이션 하여 안드로이드 운영 환경에 대한 디버깅을 용이하게 하기 위한 목적을 가진 소프트웨어입니다. 아래 그림은 가상 머신을 이용하여 앱을 구동시킨 화면을 나타내고 있습니다.







왜 가상 머신이 강력하고 무서운 해킹도구로 사용되는 것인가요?


=이미 앞선 잠시 언급한 바가 있는데요, 개발자 입장에서는 모바일 환경보다는 PC 환경에서 디버깅(Debugging; 컴퓨터 프로그램의 정확성이나 논리적인 오류를 찾아내는 테스트 과정을 의미)하는 것이 상대적으로 용이합니다. 농담 조금 보태서 약 10,000배는 편하다고 할 수 있습니다.

디버깅은 원래 목적이 오류를 찾아내는 것이지만, 해커는 디버깅 행위를 통하여 게임앱이 어떤 원리로 동작하고 어떠한 부분이 보안에 취약한지를 확인하는 통로로 이용하게 됩니다.

또한 가상 머신이 모바일 환경을 그대로 재현했다고 하지만, 운영체계의 커널 동작 등의 세부적인 측면에서 어쩔 수 없이 모바일과는 차이점이 발생하게 됩니다. 문제는 이러한 차이점에 의해서 메모리 해킹을 방어하기 위해 구현한 로직이 정상적으로 동작하지 않을 수 있다는 것입니다.

결국 모바일에서 잘 동작하는 메모리 해킹 공격 방어 로직이 가상 머신에서는 동작하지 않는 경우가 발생합니다. 그리고 디버깅도 매우 용이하게 되는 환경이다 보니 훨씬 쉽게 해킹을 할 수 있게 되는 것입니다.




그렇군요. 메모리 해킹 공격 방법에 대해서 두 가지로 설명해 주셨는데요, 모바일 게임 개발자 입장에서는 당연히 메모리 해킹을 방어해야겠다는 생각이 듭니다. 모바일 게임의 메모리 해킹을 방어하는 방법은 무엇이 있을까요?


=궁극적으로 메모리 해킹을 방어하기 위해서는 공격방법으로 사용되는 메모리 치팅툴과 가상 머신을 무력화하는 것이 최선이라고 생각합니다. 공격방법을 무력화시키면 자연스럽게 방어가 되겠지요? 먼저 메모리 치팅툴을 이용한 공격에 대한 방어 방법을 살펴볼까요? 메모리 치팅툴의 공격을 방어하기 위해서 크게 세가지 방법을 사용할 수 있습니다.

가장 먼저 생각할 수 있는 방법은 루팅을 감지하여 루팅된 환경에서 게임앱이 동작하는 것을 막는 것입니다. 루팅을 감지하는 방법은 관리자 권한으로만 접근이 가능한 위치에 있는 파일에 대한 액세스를 시도하여 그 결과를 분석하여 판단하거나, 현재 수퍼유저 권한 인지를 파악하면 됩니다. 대표적으로 블랙 마켓을 통해서 설치되는 앱들이 현재 단말에 있는지를 확인하는 방법 등이 사용됩니다.

운영체계의 순정성 여부를 판단하는 이 방법은 사실상 가장 근본적인 메모리 치팅툴 방어 방법이지만, 해당 환경에서 게임앱 자체를 구동하지 않도록 하기 때문에 게임이 실행되는 환경에 대한 제약이 있다는 단점이 존재합니다. 많은 모바일 단말 유저들은 루팅된 환경에서 앱을 구동하길 원하는데 이를 지원하지 못하는 것은 사용자 입장에서는 매우 큰 제약사항이라고 할 수 있습니다.

두번째 방법은 메모리 치팅툴의 핵심 기능인 메모리내 데이터의 검색을 무력화시키는 것입니다. 즉 메모리 검색을 할 수 없게 함으로써 메모리 치팅툴이 원하는 값의 메모리 위치를 찾지 못하게 하는 것입니다. 이를 위해서는 통상적으로 데이터 난독화나 데이터 이원화라는 방법을 사용합니다. 데이터 난독화는 데이터를 암호화하여 저장하고,실제 노출시에 복호화하여 처리하는 방법이지요.

메모리 치팅툴은 화면상에 표현된 숫자나 문자로 검색을 하지만, 실제 메모리상의 해당 변수에 대한 저장은 암호화된 상태이기 때문에 검색시 동일한 값으로 검색되지 않습니다. 데이터 이원화는 화면에 표출되는 변수와 실제 연산을 수행하는 변수를 분리하는 방법으로 데이터 난독화와 유사한 효과를 냅니다.

또한 데이터의 연산을 모두 게임 서버에서 처리하는 방법도 사용됩니다. 이 방법은 해커가 메모리 치팅툴을 이용하여 값을 변경하였다고 하더라도 실제 처리는 모두 서버에서 이루어지므로 변경된 데이터가 게임에 영향을 주지 않습니다.

세번째 방법은 메모리 치팅툴 자체를 감지하는 것으로 게임앱이 구동시에 메모리 치팅툴이 동작하고 있는지를 확인하여 만약 그렇다고 한다면, 게임 실행을 종료하는 방법입니다. 보통 각종 메모리 치팅툴을 블랙리스트로 관리하여 현재 프로세스 중에 블랙리스트에 포함된 앱이 있는지를 판단하는 방법을 사용합니다만, 이러한 방법은 프로세스명을 바꾸거나 패키지명을 바꾸는 방법으로 쉽게 무력화될 수 있다는 단점이 있어 개선이 필요합니다.

위에서 설명드린 두번째, 세번째 방법은 루팅 여부와 관계없이 동작할 수 있기 때문에 사용자 입장에서 좋은 방안이라고 할 수 있겠습니다. 메모리 치팅툴 방어 방법에 대한 요약은 아래 표를 참고하시기 바랍니다. 참고로 방어 로직은 여러 개를 동시에 적용하는 것이 보안적으로는 더욱 권장됩니다.




가상 머신은 사실상 가장 강력한 메모리 해킹 공격 방법이라고 할 수 있습니다. 따라서 가상 머신의 경우에는 해당 환경에서 게임앱이 구동되지 않도록 하는 것이 가장 효과적인 방어전략이라고 할 수 있습니다. 위에서 설명드렸듯이 가상 머신의 경우 안드로이드 환경을 가상화하여 구현한 것이기에 가상 머신의 하드웨어 정보나 관련 드라이버 정보는 안드로이드 순정 환경과 차이점을 보이게 됩니다.

이를 이용하여 가상 머신 여부를 구분하여 가상 머신일 경우에는 게임앱을 실행하지 않도록 합니다. 대표적인 가상 머신 구분 방법은 안드로이드 빌드 버전을 확인하거, CPU Type, 지원 가능한 File System Type, CD-ROM 지원 여부 등을 확인하는 것을 들 수 있으나, 완벽하게 방어가 되지 않기 때문에 여러가지 방법을 함께 사용하는 등 개선하는 작업이 필요합니다.

1부는 이것으로 마치고, 다음 시간에는 본격적으로 모바일 해킹의 방어전략에 대해서 좀 더 상세히 알아보도록 하겠습니다.


댓글

새로고침
새로고침

기사 목록

1 2 3 4 5