해커들은 모바일 앱을 변조해서 다시 재배포하여 금전적인 이득을 얻고자 합니다.
이와 같은 사례와 변조 유형에 대해서 알아보고 대응 방안에 대해서 가이드 합니다.
▶ 변조 앱(MOD)이란?
- MOD는 수정과 변경을 의미하는 Modification의 줄임말로 수정되거나 변경된 앱을 의미합니다.
- 해커들은 MOD를 제작하기 위해서 기존 앱을 디컴파일(역컴파일)하여 소스코드를 확인하고 악의적인 동작을 하도록 소스코드를 수정하여 해킹 사이트, SNS, SMS 등을 통해 배포합니다.
▶ 일반 앱의 변조 유형
유형 | 설명 |
재화 수정 | 정상적인 앱에 재화(돈, 포인트) 값을 찾아 코드 변경 |
개인정보 탈취 | 정상적인 앱에 개인정보를 찾아 해커의 서버로 전송하는 코드 추가 |
에드웨어 | 정상적인 앱에 해커가 이득을 얻기 위한 광고를 실행하는 코드 추가 |
랜섬웨어 | 정상적인 앱에 특정 파일(개인 이미지, 동영상, 문서 등)을 암호화거나 휴대폰의 비밀번호를 변경하는 코드 추가 |
<표 1> 일반 앱의 변조 유형
- 위 <표 1>처럼 PC에 유행하던 악성 행위들이 모바일 환경으로 넘어오고 있으며 이 외에도 다양한 방법으로 해킹사고 사례가 증가하고 있습니다.
▶ 게임 앱의 변조 유형
유형 | 설명 |
한방핵(1 Hit) | 자신의 공격력을 증가시키거나 상대의 HP와 방어력을 감소시켜 한방에 상대(타 유저와 몬스터)를 죽이도록 코드 변경 |
무적핵(God Mode) | 상대의 공격력을 감소 및 제거하거나 자신의 방어력을 증가시켜 자신이 무적이 되도록 코드 변경 |
스피드핵 | 공격 속도, 쿨타임 속도, 게임엔진의 속도 관련 값을 변경하여 게임 내의 속도를 증가 및 감소하도록 코드 변경 |
능력치핵 | HP, MP, 스킬 등 능력치와 관련된 값을 변경하여 악의적인 행동을 하도록 코드 변경 |
재화핵 | 재화의 습득량, 확률을 변경하여 이득을 얻도록 코드 변경 |
<표 2> RPG 장르 핵 유형
- 위 <표 2>의 경우 RPG 장르의 변조 앱의 유형이며 이 외에도 게임 장르와 특성에 따라 다양하게 변조가 되고 있습니다.
- FPS 장르의 게임에서는 월핵(상대방의 위치를 벽을 통과해 확인)과 무반동(총의 반동을 제거) 등이 만들어지고 AOS 및 MOBA(다대다 싸움을 뜻하는 'Multiplayer Online Battle Arena'의 줄임말) 장르에서는 맵핵(지도의 시야를 확보) 등이 제작되어 배포되고 있습니다.
- 모바일 게임 핵은 PC 게임 핵에 비해 유형 수가 적었으나 모바일 게임의 제작이 증가함에 따라 PC 게임 핵과 같은 다양한 유형의 핵이 발생되고 있습니다.
▶ 일반 변조 앱의 사례
<그림 1> 강제 광고 노출 | <그림 2> 삭제 방해 |
- 대부분의 변조 앱은 유명 인기 앱으로 위장하여 앱 설치를 유도를 합니다.
- 자사가 서비스했던 앱의 사례로 해커는 정상적인 운수도원 앱에 악의적인 코드를 추가하였고 위 <그림 1>처럼 강제적인 광고 노출을 통해 수익을 얻었으며 위 <그림 2>처럼 권한을 이용해 일반적인 삭제 방법으로 삭제를 못하도록 하였습니다.
- 해당 변조 앱은 NHN AppGuard 적용을 통해서 대응을 완료하였습니다.
▶ 게임 변조 앱의 사례
<그림 3> 정상 게임 미니맵 | <그림 4> 변조 게임 미니맵 |
- 위 <그림 3>, <그림 4>는 MOBA 장르의 모바일 게임의 화면이며 정상적인 앱의 경우 <그림 3>처럼 게임 시작 시 왼쪽 상단 미니 맵에서 적의 위치가 파악되지 않습니다.
- 하지만 위 <그림 4>처럼 변조 게임의 경우 레이더핵(맵핵) 사용 시 적의 모든 위치가 노출되어 게임에서 공격 및 방어에 유리하게 됩니다.
▶ 개발자 측면 보호 방법
파일 무결성 검사
- 원본 클라이언트 파일의 해시 값을 미리 클라이언트 혹은 서버에 저장을 하고 앱 실행 시 실행되는 클라이언트 파일의 해시 값과 비교하여 탐지가 가능합니다.
- 안드로이드에서는 원본 APK 해시 값과 설치된 APK 해시 값의 비교를 통해서 변조를 확인이 가능합니다.
- 게임의 경우에는 엔진 및 빌드에 따라 검사할 클라이언트 파일이 다르며 아래 <표 3>과 같습니다.
게임 엔진 | 클라이언트 파일 (안드로이드) |
Unity Mono | 게임 클라이언트 코드가 있는 dll 파일 (대부분이 Assembly-CSharp.dll에 있음) |
Unity Il2cpp | libil2cpp.so |
Unreal | libUE(버전).so / libUE3.so, libUE4.so |
Cocos2d-x | libgame.so 혹은 lib(사용자 지정).so |
<표 3> 게임 엔진별 클라이언트 파일 (안드로이드 빌드)
서명 값 검사 (안드로이드)
- 안드로이드 변조 앱의 경우 코드 수정 후 리패키징이란 작업 중에 기존에 배포된 개발자 서명이 아닌 해커의 서명을 통해 배포하게 됩니다.
- 서명 값은 고유의 값이므로 기존에 배포에 사용하는 서명 값을 미리 저장을 하고 게임 실행 시 비교를 통해 변조 확인이 가능하며 관련 코드는 아래 <표 4>와 같습니다.
Android Code | Unity Code |
Activity activity = this; // Activity PackageManager pm = activity.getPackageManager(); String packageName = activity.getPackageName(); PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES); Signature[] signature = packageInfo.signatures; String signatureHash = Integer.toHexString(signature.hashCode()); |
AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = player.GetStatic("currentActivity"); AndroidJavaObject packageManager = activity.Call("getPackageManager"); string packageName = activity.Call("getPackageName"); int GET_SIGNATURES = packageManager.GetStatic("GET_SIGNATURES"); AndroidJavaObject packageInfo = packageManager.Call("getPackageInfo", packageName, GET_SIGNATURES); AndroidJavaObject[] signatures = packageInfo.Get<AndroidJavaObject[]>("signatures"); string signaturesHash = signatures[0].Call.("hashCode").ToString("X"); |
<표 4> 서명 값을 가져오는 코드
코드 난독화
- 난독화가 되지 않은 코드는 분석 시 타겟이 되는 심볼 정보를 이용하여 변조할 위치를 빠르게 찾을 수 있지만 난독화가 된 코드의 경우 변조할 위치를 찾지 못하거나 분석을 어렵게 하는 장점이 있습니다.
- 코드 난독화의 제품 및 플러그인 사용을 권장하나 사용에 제한된 경우 중요한 클래스, 함수, 변수 이름을 직접 수동으로 변경하는 것을 권장합니다.
<그림 5> 난독화 전 | <그림 6> 난독화 후 |
데이터의 서버 검증
- 데이터의 서버 검증은 가장 강력한 방법으로 비정상적인 데이터를 확인하여 차단하는 방법입니다.
- 가능한 모든 값을 서버에서 처리하도록 구현이 필요하며 랜덤 값이 발생 시 임계값을 설정할 것을 권장합니다.
일반 앱 데이터 검증 예 | 게임 앱 데이터 검증 예 |
앱에서 물건을 구매시 포인트 적립 수치가 만약 3%이면 서버에서 3%이상 값이 들어올 경우 차단을 합니다. 앱에서 물건을 구매시 금액과 수량을 검증하여 소액으로 다량의 물건을 구매하는 비정상적인 행위를 차단을 합니다. |
공격이 증가시킨 변조앱의 경우 스테이지를 빠르게 클리어하게 됩니다. 여기서 서버에서는 스테이지 클리어 최소시간을 확인하여 비정상적으로 빠르게 클리어할 경우 차단하는 방법을 사용합니다. |
파일의 무결성 검사와 서명 값 검사는 NHN AppGuard에서 기본적으로 적용되어 탐지 및 차단을 제공하고 있습니다.
▶ 사용자 측면 보호 방법
정식 마켓 이용
<그림 7> 정식 마켓 | <그림 8> 출처를 알 수 없는 앱 설치 설정 (안드로이드) |
- 대부분의 변조 앱들은 비정상적인 경로를 통해서 설치를 유도하므로 위 <그림 7>처럼 정식 마켓을 이용하는 것을 권장합니다.
- 또한 위 <그림 8>처럼 안드로이드의 경우 설정 -> 보안 및 개인정보 보호 -> 출처를 알 수 없는 앱 설치 기능을 off로 설정하는 것을 권장합니다.
불필요한 권한 확인 (안드로이드)
<그림 9> 설치 권한 | <그림 10> 권한 확인 |
- 위 <그림 9>처럼 안드로이드에서는 마켓에서 설치 전에 앱의 권한 목록을 알려주며 불필요한 권한이 있을 경우 설치를 자제해야 합니다.
- 위 <그림 10>처럼 안드로이드 6.0 이상 기기에서는 앱에서 해당 권한이 필요할 때 사용자로부터 권한을 허가받도록 되었으며 불필요시 거부를 하시는 것을 권장하며 사용자가 권한을 허가를 하여도 설정->애플리케이션 -> 앱 이름 -> 권한 설정에서 변경이 가능합니다.
데이터 백업
- 최근에 증가하고 있는 랜섬웨어를 대비해 PC 및 클라우드에 데이터 백업을 권장합니다.
'BLOG > 인사이드' 카테고리의 다른 글
GPS 조작 어뷰징 탐지/차단 (0) | 2024.07.03 |
---|---|
2024년 상반기 결산 및 로드맵 (0) | 2024.06.26 |
[영상] 개발자 없이도 3분 만에 모바일 앱 보호하기 (0) | 2023.10.10 |
[영상] 게임을 아는 형님의, 아는 누님의 노하우가 담긴 앱 보안 솔루션, NHN AppGuard! (0) | 2023.10.05 |
[칼럼] 게임 앱을 부정행위로부터 보호하는 방법(feat. NHN AppGuard) (0) | 2023.10.04 |