By the end of 2012, the number of Smartphone shipments around the world will explode to nearly 668 million units, and the Android operating system will have a fifty percent market share. This also means an increase in the number of attacks on mobile applications and also in the investment in securing the applications from the attacks.
2012년 말까지, 전 세계적으로 스마트폰의 수출량은 거의 6억 6천 8백만으로 크게 증가하고 있고, Android 운영체제는 50% 시장 점유율을 갖게 될 것 이다. 이것은 모바일 어플리케이션에 대한 공격의 수가 증가하고 있다는 것과 또한 공격으로부터 어플리케이션을 보호하는 투자가 증가하고 있다는 것을 의미한다.
The most important part of performing an application pentest for an Android application is understanding the manifest configuration. Analyzing the manifest file is one of the most important and tedious tasks while performing a penetration testing assessment on the world’s most popular mobile OS.
Android 어플리케이션에 대한 어플리케이션 pentest 를 수행하는 가장 중요한 부분은 manifest 속성을 이해하는 것이다. manifest 파일 분석은 전 세계 가장 인기있는 모바일 OS에 침투 테스트 평가를 수행하는 동안 가장 중요하면서도 지루한 업무 중 하나이다.
Android is a privilege-separated operating system, in which each application runs with a distinct system identity. At install time, Android gives each package a distinct Linux user ID. The identity remains constant for the duration of the package’s life on that device. On a different device, the same package may have a different UID; what matters is that each package has a distinct UID on a given device.
Android 는 권한이 구분되는 운영체제이다. 해당 운영체제는 각각의 어플리케이션이 고유한 시스템 identity 로 동작한다. 설치 시 Android 는 각각의 패키지에 고유한 리눅스 사용자 ID 를 제공한다. 그 identity 는 해당 기기에 패키지 주기 동안 일정하게 유지된다. 다른 기기에서 같은 패키지라도 다른 UID 를 가질수 있다. 중요한 것은 각각의 패키지가 주어진 기기에서 고유한 UID 를 갖는다는 사실이다.
Every Android application must have an AndroidManifest.xml file in its root directory. The manifest presents essential information about the application to the Android system, information the system must have before it can run any of the application’s code. High-level permissions restricting access to entire components of the system or application can be applied through the AndroidManifest.xml.
모든 Android 어플리케이션은 루트 디렉토리에 반드시 AndroidManifest.xml 파일이 있어야 한다. 그 manifest 파일은 Android 시스템에서 어플리케이션에 대한 중요 정보를 제공한다. Android 시스템은 이 어플리케이션의 코드를 실행하기 전에 반드시 앞서 말한 중요 정보를 갖고 있어야만 한다. 시스템 또는 어플리케이션의 전체 구성요소에 대한 접근을 제한하는 높은 수준의 권한은 AndroidManifest.xml 을 통해 적용할 수 있다.
The manifest file does the following:
manifest 파일은 다음과 같다 :
-
It describes the components like the activities, services, broadcast receivers, and content providers that the application is composed of. These declarations let the Android system know what the components are and under what conditions they can be launched.
어플리케이션의 액티비티, 서비스, 브로드캐스트 리시버 그리고 콘텐트 프로바이더와 같은 구성요소를 설명한다. 해당 선언은 Android 시스템이 구성 요소가 있다는 것과 실행을 할 수 있는 조건하에 있는지 알 수 있게 한다.
-
It determines which processes will host application components.
프로세스가 어플리케이션 구성요소를 호스팅 하는 것을 결정하게 한다.
-
It declares which permissions the application must have in order to access protected parts of the API and interact with other applications.
어플리케이션이 API의 보호된 부분에 접근하고 다른 어플리케이션과 상호작용을 하기 위해서 반드시 가져야 하는 권한을 선언한다.
-
It also declares the permissions that others are required to have in order to interact with the application’s components.
또한 어플리케이션의 구성요소와 상호작용을 하기 위해서 다른 사용자들이 필요로 하는 권한을 선언한다.
-
It declares the minimum level of the Android API that the application requires.
어플리케이션이 요구하는 Android API 의 최소 레벨을 선언한다.
-
It lists the libraries that the application must be linked against.
어플리케이션이 반드시 연결되어야 하는 라이브러리들을 보여준다.
-
And moreover, it names the Java package for the application. The package name serves a
s a unique identifier for the application.그리고 또한, 어플리케이션을 Java 패키지로 부른다. 그 패키지 이름은 어플리케이션에 대한 고유 식별자 역할을 한다.
AndroidManifest.xml file plays a very important role in analyzing the security of Android mobile applications. The file is of great interest when analyzing system security because it defines the permissions the system and applications enforce.
AndroidManifest.xml 파일은 Android 모바일 어플리케이션 보안성 분석에서 매우 중요한 역할을 한다. 이 파일은 시스템과 어플리케이션을 시행하는 권한을 정의하기 때문에 시스템 보안성을 분석 시 큰 흥미로운 점이 된다.
Android packages are .apk files. For test purposes you can download any Android application and extract it and you will see the AndroidManifest.xml file which would be difficult to open. (See below Figure1.0: AndroidManifest.xml natively obfuscated)
Android 패키지는 .apk 파일이다. 테스트 목적으로 Android 어플리케이션을 다운받고 압축을 풀 수 있다. 그리고 열기 힘든 AndroidManifest.xml 파일을 볼 수 있다. ( 아래 Figure 1.0 참조 : AndroidManifest.xml natively obfuscated)
Here is the step by step methodology to open and review it.
AndroidManifest.xml 파일을 열고 검토할 단계적인 방법은 다음과 같다.
1. 아래의 Tool 들을 다운로드 :
2. Windows 디렉토리에 모든 파일을 압축 해제.
3. 또한 디렉토리에 있는 해당 APK 파일을 복사하고 명령 프롬프트에서 아래의 명령을 실행. (Figure 1.1 참조 : Decoding apk application file) :
apktool d app.apk ./app_decrypted
Here app.apk is your Android APK file:
4. 현재 디렉토리 내에 "app_decrypted" 폴더를 생성하게 될 것이다. 이 폴더 내에서 디크립트 된 AndroidManifest.xml 파일을 찾을 수 있다. 또한 "app_decrypted/res/layout" 디렉토리 내에서 다른 XML 파일을 찾을 수 있다.
The manifest contains juicy information like permissions, intent filters, and lots more. A typical manifest file is shown below (Figure 1.2: Example of AndroidManifest.xml):
manifest 는 권한, 인텐트 필터 그리고 더 많은 흥미진진한 정보를 갖고 있다. 전형적인 manifest 파일은 아래와 같이 보여진다. (Figure 1.2 : Example of AndroidManifest.xml)
Some of the important configuration settings to look for while analyzing a manifest file:
manifest 파일을 분석면서 보게되는 중요한 속성 설정의 일부분 :
설정 |
확인해야 할 사항 |
추천방법 |
android:installLocation |
"auto" 로 설정할 경우, 어플리케이션은 외부 저장소에 설치될 것이다. 그러나 디폴트로 시스템은 어플리케이션을 내부 저장소에 설치할 것이다. 내부 저장소가 꽉찬 경우에 시스템은 외부 저장소에 어플리케이션을 설치할 것이다. 한 번 설치되면, 사용자는 어플리케이션을 시스템 설정을 통해 내부 또는 외부로 이동시킬 수 있다. |
해당 설정은 "internalOnly" 로 사용해라. |
android:protectionLevel |
어플리케이션이 요구하는 권한 부여를 결정할 때 권한에 포함된 잠재적인 위험을 특성화하고 시스템이 수행해야 하는 절차를 나타낸다. | 값이 "normal" 또는 "dangerous" 으로 설정되어 있는지 확인해라.
"dangerous" 로 설정된 경우에는 권한을 확인해라. |
android:persistent |
어플리케이션이 항상 실행 상태로 유지할 여부 - 유지할 경우 "true", 유지하지 않을 경우 "false". 기본값은 "false". | 어플리케이션은 일반적으로 이 플래그를 설정하지 않아야 한다. 이 값을 "false" 로 설정해야 한다. |
android:restoreAnyVersion |
어플리케이션이 백업된 데이터 설정으로 복원을 시도할 준비가 되어있다는 것을 나타낸다. 현재 기기에 설치된 어플리케이션 버전보다 최신일 경우에도 마찬가지이다. | 이 속성을 true 로 설정하면 백업 관리자가 복원을 시도하는 것을 허용한다. 버전이 일치하지 않는 경우에도 데이터가 호환되지 않는다는 것을 나타낸다. |
If the internal storage is full, then the system will install it on the external storage. Once installed, the user can move the application to either internal or external storage through the system settingsUse “internalOnly” value for this setting. android:protectionLevelCharacterizes the potential risk implied in the permission and indicates the procedure the system should follow when determining whether or not to grant the permission to an application requesting it.Check if the value is set to “normal” or “dangerous”. If it is set to “dangerous”, check the permissions.android:persistentWhether or not the application should remain running at all times — “true” if it should, and “false” if not. The default value is “false”. Applications should not normally set this flag. It should be set to “false”android:restoreAnyVersionIndicates that the application is prepared to attempt a restore of any backed-up data set, even if the backup was stored by a newer version of the application than is currently installed on the device.Setting this attribute to true will permit the Backup Manager to attempt restore even when a version mismatch suggests that the data are incompatible.
내부저장소가 꽉찬 경우 시스템은 외부 저장소에 어플리케이션을 설치하게 된다. 설치가 완료되면, 사용자는 시스템 설정에서 "internalOnly" 값을 이용하여 시스템 어플리케이션을 다른 내부 저장소 또는 외부 저장소로 이동시킬 수 있다. android:protectionLevel 은 어플리케이션이 요구하는 권한 부여를 결정할 때 권한에 포함된 잠재적인 위험을 특성화하고 시스템이 수행해야 하는 절차를 나타낸다. 값이 "normal" 또는 "dangerous" 으로 설정되어 있는지 확인해라. 만약 "dangerous" 로 설정된 경우에는 권한을 확인해라. android:persistent 은 는어플리케이션이 항상 실행 상태로 유지 여부를 정한다. - 유지할 경우 "true", 유지하지 않을 경우에는 "false". 기본값은 "false" 이다. 어플리케이션은 일반적으로 이 플래그를 설정하지 않아야 한다. 이 값은 "false" 로 설정해야 한다. android:restoreAnyVersion 은 어플리케이션이 백업된 데이터 설정으로 복원을 시도할 준비가 되었다는 것을 나타낸다. 현재 기기에 설치된 어플리케이션 버전보다 최신 버전일 경우에도 백업은 저장된다. 이 속성을 true 로 설정하면 백업 관리자가 복원을 시도하는 것을 허용한다. 버전이 일치하지 않는 경우에도 데이터가 호환되지 않는다는 것을 나타낸다.
Analyzing the manifest file thoroughly could help a penetration tester plan and execute other attacks. After it is done successfully , the remaining testing boils down to a normal web application pentest. So next time when you download any application from Android market, just take a while to open and analyze the AndroidManifest.xml file for fun.
manifest 파일을 완전히 분석하는 것은 침투 테스터 계획에 도움이 될 수 있고 다른 공격을 실행할 수 있다. 이 것이 성공적으로 완료가 되면 남아있는 테스트는 결국 정상적인 웹 어플리케이션에서 pentest 하는 것이다. 그래서 다음 에 Android 마켓에서 어떤 어플리케이션을 받을 때에는 그냥 재미로 AndroidManifest.xml 파일을 열고 분석하는 시간을 가져라.
원문 : http://resources.infosecinstitute.com/inside-android-applications/