개요
1.1 소스코드 난독화 및 암호화 취약점의 경우 앱을 디컴파일하고 내부 소스코드를 확인하여 로직을 분석할 수 있게 되는 취약점이라고 볼 수 있다.
해당 취약점 존재 여부를 확인하기 위해서 우선 앱 디컴파일 작업을 진행한다.
이를 위해 apktool과 adb(Android Debug Bridge)라는 도구를 사용한다.
진단 방법
먼저 adb는 PC와 연결한 안드로이드 기기를 콘솔창에서 컨트롤할 수 있는 도구라고 볼 수 있다.
adb는 안드로이드 SDK 플랫폼 도구 설치를 통해 사용할 수 있다.
* SDK 플랫폼 도구 설치 : https://developer.android.com/tools/releases/platform-tools?hl=ko
adb 설치 후 안드로이드 기기를 PC에 연결하고 adb devices 명령어 입력 시 연결된 안드로이드 기기 목록을 확인할 수 있으며, adb shell 명령어를 통해 해당 기기에 CMD Shell로 접근이 가능하다.
그 다음은 apktool이다. apktool은 대표적인 안드로이드 애플리케이션 대상의 리버스 엔지니어링 도구로써 APK 파일을 분석하여 리소스를 뽑아낼 수 있다.
원래는 apktool jar 파일을 다운로드받아 java -jar apktool_2.4.1.jar d (apk 경로) 와 같은 명령어로 디컴파일, 그 후 아래의 도구들을 활용해 앱에 서명 작업까지 해줘야하는 방식으로 이루어진다.
- signapk.jar
- testkey.x509.pem
- testkey.pk8
하지만 신속성을 위해 왠만하면 apk easytool을 사용하는 것이 좋다. 해당 툴은 GUI 형태로 개발되어 apktool jar 파일만 별도 경로에 삽입하고 설정하면 클릭만으로 앱 컴파일, 디컴파일, 서명 등의 작업을 손쉽게 해준다.
앱을 디컴파일하고 나면 앱의 로직을 점검 및 변조할 수 있는 smali 코드 파일과 앱의 정보가 담겨있는 AndroidManifest.xml 파일 등 앱에 대한 파일 분석이 가능해진다.
디컴파일을 하고 나면 이제 우회 등 각종 작업을 하기 위해서 앱 내부 소스코드 점검이 본격적으로 필요하다.
내부 소스코드는 JEB나 JDGUI와 같은 리버스 엔지니어링을 위한 도구를 사용하여 점검한다.
단순히 JEB에 APK 파일을 호출하는 것 만으로 디컴파일이 진행되며 위처럼 분석이 가능해진다.
보통 루팅 탐지 로직이 존재하여 rooting, /which/su 등 루팅 탐지 로직의 위치를 확인하는데 사용할 수 있고, 다른 각종 로직의 흐름을 분석할 수 있다.
대응방안
그렇다면 앱의 소스코드를 분석하지 못하게 막는 대응 방안은 무엇이 있을까?
아래에서 두 가지 방식으로 설명하려 한다.
- 앱 내부 소스코드를 암호화 및 난독화
앱을 디컴파일하고 내부 소스코드를 확인한들 해당 코드가 사람이 이해할 수 없는 방식으로 암호화 및 난독화 되어있다면 이러한 작업은 무용지물이다.
앱을 개발하고 앱 난독화 및 암호화를 적용하는 **유료 솔루션(AppIron 등)**을 사용하면 가장 좋겠지만 현실적으로 이러한 유료 솔루션을 도입하기 어려운 경우가 많다.
이럴때에는 무료 난독화 및 암호화 라이브러리를 고객에게 적용하라고 추천을 드리고는 하는데 대표적으로는 Android Studio에서 무료로 제공하는 ‘Proguard’ 라이브러리다.
위의 라이브러리를 사용하게 되면 소스코드를 난독화해주는데 결과는 아래와 유사하게 적용된다.
위에서 설명한 ProGuard 뿐 아니라 찾아보면 다양한 난독화 및 암호화 오픈소스 라이브러리가 존재한다. 그렇기에 이러한 솔루션을 적용하면 공격자는 앱을 분석하기 더욱 어려워진다.
물론 오픈소스 솔루션의 경우 마음만 먹으면 분석이 가능할 수는 있으나 공격자에게 더 어려운 챌린지를 주는 것은 공격자가 이번 공격을 포기하게 만드는 계기가 될 수도 있는 것이므로 반드시 적용하는 것이 권고된다.
2. 앱 리패키징 방지
앱 내부 소스코드 분석은 결과적으로 디컴파일 및 컴파일 과정이 반드시 필요하다. 그렇기에 APK 파일 내부 Dex 파일에 디컴파일 방지 등의 기능을 추가하여 디컴파일 및 컴파일을 방지하게 되면 이 또한 소스코드 난독화 및 암호화 취약점의 대응 방안으로 쓰일 수 있다.
이 또한 유료 솔루션과 무료 솔루션이 존재하며, 오픈소스의 경우 ‘APK Protect’ 솔루션 등이 존재하는데 이는 APK 파일 내에 임의 파일을 삽입해서 dex2jar 도구로 자바 바이트 코드 변환 시 에러를 유발하게 만든다.
* APK Protect = https://download.cnet.com/apk-protect/3000-2092_4-75987288.html
위와 같은 두 가지의 대응 방안을 수립하면 소스코드 난독화 및 암호화 취약점에 대응할 수 있을 것이다.
'4. 모바일 앱 취약점 진단 > Android' 카테고리의 다른 글
[Android] 1.3. 디바이스 임의 개조 탐지 취약점 (0) | 2024.06.19 |
---|---|
[Android] 1.2. 앱 무결성 검증 취약점 (0) | 2024.06.19 |
안드로이드 가상환경을 구축하기 - Genymotion, 블루스택, Nox (0) | 2023.12.28 |
안드로이드 앱에 악성코드 넣기 [kwetza] (0) | 2023.12.26 |
Apktool을 활용 안드로이드 앱에 수동으로 악성코드 넣기 (0) | 2023.12.26 |