본문 바로가기
4. 모바일 앱 취약점 진단/Android

[Android] 1.1. 소스코드 난독화 및 암호화 취약점

by Robert8478 2024. 6. 19.

개요

1.1 소스코드 난독화 및 암호화 취약점의 경우 앱을 디컴파일하고 내부 소스코드를 확인하여 로직을 분석할 수 있게 되는 취약점이라고 볼 수 있다.

해당 취약점 존재 여부를 확인하기 위해서 우선 앱 디컴파일 작업을 진행한다.

이를 위해 apktooladb(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 파일만 별도 경로에 삽입하고 설정하면 클릭만으로 앱 컴파일, 디컴파일, 서명 등의 작업을 손쉽게 해준다.

[ apk easy tool의 GUI ]

앱을 디컴파일하고 나면 앱의 로직을 점검 및 변조할 수 있는 smali 코드 파일과 앱의 정보가 담겨있는 AndroidManifest.xml 파일 등 앱에 대한 파일 분석이 가능해진다.

디컴파일을 하고 나면 이제 우회 등 각종 작업을 하기 위해서 앱 내부 소스코드 점검이 본격적으로 필요하다.

내부 소스코드는 JEB나 JDGUI와 같은 리버스 엔지니어링을 위한 도구를 사용하여 점검한다.

[JEB를 활용한 앱 내부 소스코드 로직 분석]

단순히 JEB에 APK 파일을 호출하는 것 만으로 디컴파일이 진행되며 위처럼 분석이 가능해진다.

보통 루팅 탐지 로직이 존재하여 rooting, /which/su 등 루팅 탐지 로직의 위치를 확인하는데 사용할 수 있고, 다른 각종 로직의 흐름을 분석할 수 있다.

 

대응방안

그렇다면 앱의 소스코드를 분석하지 못하게 막는 대응 방안은 무엇이 있을까?

아래에서 두 가지 방식으로 설명하려 한다.

  1. 앱 내부 소스코드를 암호화 및 난독화

앱을 디컴파일하고 내부 소스코드를 확인한들 해당 코드가 사람이 이해할 수 없는 방식으로 암호화 및 난독화 되어있다면 이러한 작업은 무용지물이다.

앱을 개발하고 앱 난독화 및 암호화를 적용하는 **유료 솔루션(AppIron 등)**을 사용하면 가장 좋겠지만 현실적으로 이러한 유료 솔루션을 도입하기 어려운 경우가 많다.

이럴때에는 무료 난독화 및 암호화 라이브러리를 고객에게 적용하라고 추천을 드리고는 하는데 대표적으로는 Android Studio에서 무료로 제공하는 ‘Proguard’ 라이브러리다.

[ Proguard의 로직 Map ]

위의 라이브러리를 사용하게 되면 소스코드를 난독화해주는데 결과는 아래와 유사하게 적용된다.

[ ProGuard 난독화 적용 전 → 후 ]

위에서 설명한 ProGuard 뿐 아니라 찾아보면 다양한 난독화 및 암호화 오픈소스 라이브러리가 존재한다. 그렇기에 이러한 솔루션을 적용하면 공격자는 앱을 분석하기 더욱 어려워진다.

물론 오픈소스 솔루션의 경우 마음만 먹으면 분석이 가능할 수는 있으나 공격자에게 더 어려운 챌린지를 주는 것은 공격자가 이번 공격을 포기하게 만드는 계기가 될 수도 있는 것이므로 반드시 적용하는 것이 권고된다.

    2. 앱 리패키징 방지

앱 내부 소스코드 분석은 결과적으로 디컴파일 및 컴파일 과정이 반드시 필요하다. 그렇기에 APK 파일 내부 Dex 파일에 디컴파일 방지 등의 기능을 추가하여 디컴파일 및 컴파일을 방지하게 되면 이 또한 소스코드 난독화 및 암호화 취약점의 대응 방안으로 쓰일 수 있다.

이 또한 유료 솔루션과 무료 솔루션이 존재하며, 오픈소스의 경우 ‘APK Protect’ 솔루션 등이 존재하는데 이는 APK 파일 내에 임의 파일을 삽입해서 dex2jar 도구로 자바 바이트 코드 변환 시 에러를 유발하게 만든다.

 * APK Protect = https://download.cnet.com/apk-protect/3000-2092_4-75987288.html

위와 같은 두 가지의 대응 방안을 수립하면 소스코드 난독화 및 암호화 취약점에 대응할 수 있을 것이다.