[▲ 에스웍스 김충희 선임 연구원]

충격적이었다. 클릭해서 알을 깨는 단순한 형태의 게임이기는 했지만, 30분 정도의 짧은 시간에 크랙 버전이 만들어졌다. 크게 복잡하지도 않았다. 두 개의 프로그램으로 분석하면서 코드의 일부를 슬쩍 변경하니 게임을 원하는 대로 변경할 수 있었다. 그만큼 모바일 게임 해킹이 위험하다는 것을 의미했다.

이번 KGC2014에서 진행된 "모바일 게임 해킹 위협과 보안"이라는 제목의 강연에서는 안드로이드 게임 앱 해킹의 위험성에 관한 이야기가 다뤄졌다. 모바일 보안 전문 업체 에스웍스의 김충희 선임 연구원이 강연을 맡았다. 과연 어느 정도 수준일까. 그의 강연을 통해 모바일 해킹 위험성에 관해 들을 수 있었다.


"스마트 폰 시장이 어떻게 변해가고 있는지 OS에 따라 그린 그래프입니다. 빨간색이 안드로이드, 회색이 iOS입니다. 안드로이드 마켓의 비중이 높아졌다는 의미는 보안 상 취약한 점이 많아졌다는 것을 의미합니다. 그렇기 때문에 보안 업체에서 큰 이슈가 되기도 했고요."

계속 커져가는 안드로이드는 그만큼 많은 사람이 해킹에 노출된다. 게임이나 뱅킹만이 아니라 스미싱, 스파이앱 등 보안 상 허점을 노리는 앱도 늘어났다. 이렇게 늘어난 배경으로 그는 안드로이드 정책을 꼽았다. 안드로이드가 오픈 소스를 지원하는 정책 때문에 보안 부분에서 손해를 본다는 것.

김충희 선임 연구원은 특정 앱이 단말기의 정보를 가져갈 수 있는가도 원인으로 짚었다. 안드로이드에서 외부 앱을 설치할 경우, 파일에 오류가 있을 수 있다며 앱을 설치할 것인지 묻는다. 그리고 설치하면서 단말기에서 특정 정보를 가져갈 수 있는 권한이 있다고 한 번만 설명해준다. 만약 이용자가 무심코 클릭해서 넘겨버렸을 경우에는 자신의 주요 정보가 쉽게 다른 곳으로 빠져나가게 되는 원인이 중 하나다.


실제로 그는 발표 중 게임 크랙으로 검색했을 때의 화면을 보여줬다. 구글에서 검색했을 때 첫 페이지에는 전부 안드로이드 게임 크랙에 관한 내용이었다. 이렇게 안드로이드 크랙이 많은 이유는 무엇일까. 첫 번째로 그는 파일 용량이 적기 때문이라고 했다. PC 게임이 경우 1GB 이상의 용량이라면, 안드로이드 앱은 40MB로 크게 차이가 난다. 적은 용량이기에 쉽게 다운로드를 할 수 있게 되면서 전파도 쉽다.

또한 기본적인 정보, 가령 전화번호와 같은 부분은 허가(Permission)만 있으면 다른 사람이 앱을 통해 가져갈 수 있다. 디컴파일(Decompile)과 리패키징(Re-packaging)이 쉽다. 외부 앱의 접근성도 좋다. 굳이 파헤치기 힘든 iOS보다 쉽게 접근할 수 있는 안드로이드에 보안 위협이 높은 이유도 접근성이 높아서다.


"본격적으로 게임 해킹 이슈에 관해 다뤄봅시다. 안드로이드가 등장하면서 루팅(Rooting)에 관한 이야기는 끊임없이 나왔죠. 루팅은 안드로이드 OS에서 권한을 마음대로 제어할 수 있는 시스템입니다. 루팅을 막는 건 현실적으로 불가능하죠. 루팅을 한 사람은 사용자가 아니냐고 맞받아치기 때문에, 게임 업계에서는 사실상 포기 단계입니다."

게임 조작 해킹툴도 있다. 가령 메모리 해킹이나 스피드 핵을 예로 들 수 있다. 루팅과 직접적으로 관련이 없다 하더라도 게임 상황을 바꾸는 요소이기 때문에 이 부분은 적극적으로 막는다. 툴과 관련해서는 데이터 난독화나 서버 동기화 등으로 어느 정도 해결 중이다. 자체적으로 처리하거나 외부 솔루션을 통해 문제를 해결해 나가고 있다.

김충희 선임 연구원은 결제 우회 역시 루트 권한이 필요한 부분이라고 짚었다. 모든 마켓에서 영수증 체크가 가능하게 되면서 자체적으로 체크하는 수밖에 없다. 모를 경우에는 당하게 된다. 분명 1억 원이 들어왔어야 했을 통장에 정작 잔고는 0원인 상황이 발생할 수도 있다. 그는 작년 KGC2013에서 진행된 에이앤비소프트 송찬호 대표이사 강연에서 쉽게 배울 수 있다고 설명했다. 결제, 메모리 해킹, 데이터 처리, 로컬 데이터 전환 부분이 많은 부분이 강연에 담겨 있으므로 자세한 사항은 그 강연을 참고하길 권유했다.

게임사들이 메모리 해킹과 같은 특정 해킹을 막자 다른 쪽을 노리기 시작했다. 바로 앱 복제(크랙)다. 해킹은 사용자가 직접적으로 무엇인가를 해야 한다. 루팅을 하고 툴을 설치한 뒤 직접 게임을 실행하고 조작한다. 반면, 앱 복제는 복제한 파일을 올려두기만 하면 별다른 작업 없이 다운로드하고 이용할 수 있다. 그는 게임 개발사에서 막으려는 시도는 하지만, 전부 커버하기는 힘든 부분 중 하나가 앱 복제라고 짚었다.


실제로 강연에서는 직접 예시를 들며 설명했다. 김충희 선임 연구원은 사전에 동의를 구해둔 간단한 게임을 즉석에서 복제하는 과정을 보여줬다. APK 파일 구성 요소의 간략한 설명과 함께 복제를 직접 하는 과정을 보여주면서, 왜 모바일 게임 보안의 중요성을 강조했다.

"APK는 ZIP 파일 형태로 되어 있습니다. 일반 ZIP파일과 다른 부분은 ZIP Align을 하면서 32-bit 지원이 필요하다는 점이죠. 패키지를 열어보면 여러 파일이 있습니다. 그중에서 하단에 있는 두 파일이 중요하죠. 바로 'Classes.dex'(컴파일 됐을 때 모든 자바 코드가 들어있는 파일), 'AndroidManifest.xml'(권한 행동 제어 파일)입니다."

그가 예시로 든 게임은 클릭을 하면 숫자가 1씩 줄어들고 0이 됐을 때에는 알이 깨지면서 그 속의 내용물을 볼 수 있는 게임이었다. 총 99,999번을 클릭해야 결과물을 볼 수 있는데, 그렇게 클릭하기엔 너무 많다. 강연에서는 1씩 줄어든 것이 아니라 10,000씩 줄어들도록 만드는 과정을 보여주었다.

"APK 툴을 사용해 액티비티 부분을 찾을 수 있습니다. Dex2jar를 통해 쉽게 액티비티에 관한 태그를 볼 수 있죠. 우리가 하는 행위에서 1씩 줄어드는 부분을 10,000으로 바꿀 것이기 때문에 이 행위가 어디서 일어나는지 찾아가면 됩니다. APK를 분석해 나가는 과정이죠."


원하는 행위가 어떤 함수로 구성되어 있는지 찾은 뒤 코드를 변경한다. Java 코드는 Java decompiler를 통해 수정할 수 있다. 해당 함수를 찾아 클릭 시 -1이라는 값을 -10,000으로 변경한다. 10,000을 16진수로 바꾸어 2710이라는 값으로 변경하고 저장한다. 그리고 APK 툴을 통해 B 옵션을 주고 빌드를 한다. 간략하게 정리됐지만, 일련의 과정을 진행하기 위해선 프로그래밍 지식이 기반되어야 한다. 이렇게 변경된 APK는 DIST라는 폴더에 생성된다. 이 파일을 실행해 플레이해보면 이제 줄어드는 값은 1이 아닌 10,000으로 변경되어 있다.

그는 게임 자체가 간단해서 단 시간에 크랙을 만드는 것이 가능했다고 설명했다. 하지만 복잡하더라도 시간과 노력이 있다면 얼마든지 크랙을 만들 수 있기 때문에 주의해야 한다고 덧붙였다. 복제를 막기 위해 무결성 체크나 Signig Check라는 수단이 있다. 어느 정도 효과는 있지만, 이 두 가지 방법도 완전한 것은 아니다. 두 과정 모두 코드로 막는 방법이기 때문에 코드가 변경되어 버리면 문제가 발생한다.


혹은 난독화를 통해 막기도 한다. 변수를 바꾸거나 함수를 변경해 코드 분석을 하는 시간을 길게 만드는 것. 김충희 연구원은 이런 난독화 과정을 개발사가 모두 담당하기엔 힘들 거라고 설명했다. 난독화라는 기술을 만들어 내야 하기 때문에, 현재 보안 회사만큼의 인원과 비용이 필요하다. 따라서 그는 난독화를 활용할 경우 현재 나와 있는 많은 솔루션 중에서 적합한 것을 택하길 권했다.

마지막으로 김충희 선임 연구원은 게임 보안은 기획부터 착실히 다질 필요가 있다고 설명했다. 집을 지을 때에도 현관 문의 보안을 어떻게 할지 고민을 많이 한다. 앱도 그만큼 중요하다. 소잃고 외양간 고친다는 말이 있지만, 그는 소잃고 외양간 고치는 것조차 힘들다고 설명했다. 보안은 100% 막을 수 있는 것은 아니다. 하지만, 한 번 뚫리게 되면 그만큼 큰 피해를 준다. 따라서 모바일 앱 보안에도 신경써야 한다고 강조했다.