Android Applications Pentesting

Reading time: 31 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

Android Applications Basics

이 페이지를 읽는 것을 강력히 권장합니다. 안드로이드 보안과 안드로이드 애플리케이션에서 가장 위험한 구성 요소와 관련된 가장 중요한 부분에 대해 알아보세요:

Android Applications Basics

ADB (Android Debug Bridge)

이것은 안드로이드 장치(에뮬레이트된 또는 물리적)에 연결하는 데 필요한 주요 도구입니다.
ADB는 컴퓨터에서 USB 또는 네트워크를 통해 장치를 제어할 수 있게 해줍니다. 이 유틸리티는 파일 복사, 앱 설치 및 제거, 셸 명령 실행, 데이터 백업, 로그 읽기 등 여러 기능을 지원합니다.

다음 목록의 ADB Commands를 확인하여 adb 사용 방법을 배우세요.

Smali

때때로 숨겨진 정보(아마도 잘 난독화된 비밀번호나 플래그)에 접근하기 위해 애플리케이션 코드를 수정하는 것이 흥미로울 수 있습니다. 그런 다음, apk를 디컴파일하고 코드를 수정한 후 다시 컴파일하는 것이 흥미로울 수 있습니다.
이 튜토리얼에서 APK를 디컴파일하고, Smali 코드를 수정하고, 새로운 기능으로 APK를 다시 컴파일하는 방법을 배울 수 있습니다. 이는 동적 분석 중 여러 테스트의 대안으로 매우 유용할 수 있습니다. 그러므로, 이 가능성을 항상 염두에 두세요.

Other interesting tricks

bash
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • 모든 분할 및 기본 APK를 APKEditor로 병합합니다:
bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

정적 분석

우선, APK를 분석하기 위해서는 디컴파일러를 사용하여 Java 코드를 살펴봐야 합니다.
자세한 내용은 다양한 사용 가능한 디컴파일러에 대한 정보를 읽어보세요.

흥미로운 정보 찾기

APK의 문자열을 살펴보면 비밀번호, URL (https://github.com/ndelphit/apkurlgrep), API 키, 암호화, 블루투스 UUID, 토큰 및 흥미로운 모든 것을 검색할 수 있습니다... 코드 실행 백도어 또는 인증 백도어(앱에 하드코딩된 관리자 자격 증명)도 찾아보세요.

Firebase

firebase URL에 특별한 주의를 기울이고 잘못 구성되어 있는지 확인하세요. Firebase가 무엇인지 및 이를 악용하는 방법에 대한 더 많은 정보는 여기에서 확인하세요.

애플리케이션에 대한 기본 이해 - Manifest.xml, strings.xml

애플리케이션의 _Manifest.xml** 및 **strings.xml_** 파일의 검토는 잠재적인 보안 취약점을 드러낼 수 있습니다**. 이러한 파일은 디컴파일러를 사용하거나 APK 파일 확장자를 .zip으로 변경한 후 압축을 풀어 접근할 수 있습니다.

Manifest.xml에서 식별된 취약점은 다음과 같습니다:

  • 디버깅 가능한 애플리케이션: Manifest.xml 파일에서 디버깅 가능(debuggable="true")으로 설정된 애플리케이션은 연결을 허용하여 악용될 위험이 있습니다. 디버깅 가능한 애플리케이션을 찾고 악용하는 방법에 대한 튜토리얼을 참조하세요.
  • 백업 설정: 민감한 정보를 다루는 애플리케이션의 경우 android:allowBackup="false" 속성을 명시적으로 설정하여 adb를 통한 무단 데이터 백업을 방지해야 합니다. 특히 USB 디버깅이 활성화된 경우에 그렇습니다.
  • 네트워크 보안: _res/xml/_의 사용자 지정 네트워크 보안 구성(android:networkSecurityConfig="@xml/network_security_config")은 인증서 핀 및 HTTP 트래픽 설정과 같은 보안 세부정보를 지정할 수 있습니다. 예를 들어 특정 도메인에 대해 HTTP 트래픽을 허용하는 것입니다.
  • 내보낸 활동 및 서비스: 매니페스트에서 내보낸 활동 및 서비스를 식별하면 악용될 수 있는 구성 요소를 강조할 수 있습니다. 동적 테스트 중 추가 분석을 통해 이러한 구성 요소를 악용하는 방법을 드러낼 수 있습니다.
  • 콘텐츠 제공자 및 파일 제공자: 노출된 콘텐츠 제공자는 무단 데이터 접근 또는 수정이 가능할 수 있습니다. 파일 제공자의 구성도 면밀히 검토해야 합니다.
  • 브로드캐스트 수신기 및 URL 스킴: 이러한 구성 요소는 악용될 수 있으며, 입력 취약성에 대한 URL 스킴 관리 방법에 특히 주의해야 합니다.
  • SDK 버전: minSdkVersion, targetSDKVersion, maxSdkVersion 속성은 지원되는 Android 버전을 나타내며, 보안상의 이유로 구식의 취약한 Android 버전을 지원하지 않는 것이 중요합니다.

strings.xml 파일에서 API 키, 사용자 정의 스키마 및 기타 개발자 노트와 같은 민감한 정보를 발견할 수 있으며, 이러한 리소스를 신중하게 검토할 필요성을 강조합니다.

Tapjacking

Tapjacking악의적인 애플리케이션이 실행되어 피해자 애플리케이션 위에 위치하는 공격입니다. 피해자 앱을 가시적으로 가리면, 사용자 인터페이스는 사용자가 상호작용하도록 속이도록 설계되어 있으며, 이 상호작용은 피해자 앱으로 전달됩니다.
결과적으로, 사용자는 실제로 피해자 앱에서 작업을 수행하고 있다는 사실을 모르게 됩니다.

자세한 정보는 다음에서 확인하세요:

Tapjacking

작업 하이재킹

**launchMode**가 **singleTask**로 설정되고 taskAffinity가 정의되지 않은 활동은 작업 하이재킹에 취약합니다. 이는 애플리케이션이 설치되고 실제 애플리케이션보다 먼저 실행될 경우 실제 애플리케이션의 작업을 하이재킹할 수 있음을 의미합니다(즉, 사용자가 악의적인 애플리케이션과 상호작용하고 있다고 생각하게 됩니다).

자세한 내용은 다음에서 확인하세요:

Android Task Hijacking

안전하지 않은 데이터 저장

내부 저장소

Android에서 내부 저장소에 저장된 파일은 생성한 앱접근할 수 있도록 설계되어 있습니다. 이 보안 조치는 Android 운영 체제에 의해 강제되며, 대부분의 애플리케이션의 보안 요구 사항에 일반적으로 적합합니다. 그러나 개발자들은 때때로 MODE_WORLD_READABLEMODE_WORLD_WRITABLE와 같은 모드를 사용하여 파일이 서로 다른 애플리케이션 간에 공유되도록 허용합니다. 그러나 이러한 모드는 다른 애플리케이션, 특히 악의적인 애플리케이션의 접근을 제한하지 않습니다.

  1. 정적 분석:
  • MODE_WORLD_READABLEMODE_WORLD_WRITABLE의 사용이 면밀히 검토되어야 합니다. 이러한 모드는 원치 않거나 무단 접근노출할 수 있습니다.
  1. 동적 분석:
  • 앱에서 생성된 파일에 설정된 권한확인하세요. 특히, 파일이 전 세계적으로 읽거나 쓸 수 있도록 설정되어 있는지 확인하세요. 이는 어떤 애플리케이션이든 장치에 설치된 애플리케이션이 이러한 파일을 읽거나 수정할 수 있게 하여 상당한 보안 위험을 초래할 수 있습니다.

외부 저장소

외부 저장소에서 파일을 다룰 때는 몇 가지 주의 사항이 필요합니다:

  1. 접근성:
  • 외부 저장소의 파일은 전 세계적으로 읽고 쓸 수 있습니다. 즉, 모든 애플리케이션이나 사용자가 이러한 파일에 접근할 수 있습니다.
  1. 보안 문제:
  • 접근이 용이하므로 민감한 정보를 외부 저장소에 저장하지 않는 것이 좋습니다.
  • 외부 저장소는 제거되거나 모든 애플리케이션에 의해 접근될 수 있어 보안성이 떨어집니다.
  1. 외부 저장소에서 데이터 처리:
  • 외부 저장소에서 검색한 데이터에 대해 항상 입력 검증을 수행하세요. 이는 데이터가 신뢰할 수 없는 출처에서 온 것이기 때문에 중요합니다.
  • 동적 로딩을 위해 외부 저장소에 실행 파일이나 클래스 파일을 저장하는 것은 강력히 권장되지 않습니다.
  • 애플리케이션이 외부 저장소에서 실행 파일을 검색해야 하는 경우, 이러한 파일이 서명되고 암호학적으로 검증되었는지 확인한 후 동적으로 로드해야 합니다. 이 단계는 애플리케이션의 보안 무결성을 유지하는 데 중요합니다.

외부 저장소는 /storage/emulated/0, /sdcard, /mnt/sdcard에서 접근할 수 있습니다.

note

Android 4.4 (API 17)부터 SD 카드에는 앱 전용 디렉토리로의 접근을 제한하는 디렉토리 구조가 있습니다. 이는 악의적인 애플리케이션이 다른 앱의 파일에 대한 읽기 또는 쓰기 접근을 얻는 것을 방지합니다.

명확한 텍스트로 저장된 민감한 데이터

  • 공유 환경 설정: Android는 각 애플리케이션이 /data/data/<packagename>/shared_prefs/ 경로에 XML 파일을 쉽게 저장할 수 있도록 허용하며, 때때로 해당 폴더에서 명확한 텍스트로 민감한 정보를 찾을 수 있습니다.
  • 데이터베이스: Android는 각 애플리케이션이 /data/data/<packagename>/databases/ 경로에 SQLite 데이터베이스를 쉽게 저장할 수 있도록 허용하며, 때때로 해당 폴더에서 명확한 텍스트로 민감한 정보를 찾을 수 있습니다.

손상된 TLS

모든 인증서 수락

어떤 이유로 개발자들이 호스트 이름이 코드의 다음 줄과 일치하지 않더라도 모든 인증서를 수락하는 경우가 있습니다:

java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

Broken Cryptography

Poor Key Management Processes

일부 개발자는 민감한 데이터를 로컬 스토리지에 저장하고 코드에 하드코딩되거나 예측 가능한 키로 암호화합니다. 이는 리버싱을 통해 공격자가 기밀 정보를 추출할 수 있으므로 피해야 합니다.

Use of Insecure and/or Deprecated Algorithms

개발자는 권장되지 않는 알고리즘을 사용하여 검증을 수행하거나 데이터를 저장하거나 전송해서는 안 됩니다. 이러한 알고리즘의 예로는 RC4, MD4, MD5, SHA1 등이 있습니다. 예를 들어 해시를 사용하여 비밀번호를 저장하는 경우, 소금을 사용하여 해시 브루트 포스 저항이 가능한 해시를 사용해야 합니다.

Other checks

  • APK를 난독화하여 공격자의 리버스 엔지니어링 작업을 어렵게 만드는 것이 좋습니다.
  • 앱이 민감한 경우(예: 은행 앱) 모바일이 루팅되었는지 확인하는 자체 검사를 수행하고 그에 따라 행동해야 합니다.
  • 앱이 민감한 경우(예: 은행 앱) 에뮬레이터가 사용되고 있는지 확인해야 합니다.
  • 앱이 민감한 경우(예: 은행 앱) 실행하기 전에 자체 무결성을 확인하여 수정되었는지 확인해야 합니다.
  • APKiD를 사용하여 APK를 빌드하는 데 사용된 컴파일러/패커/난독화 도구를 확인하세요.

React Native Application

Read the following page to learn how to easily access javascript code of React applications:

React Native Application

Xamarin Applications

Read the following page to learn how to easily access C# code of a xamarin applications:

Xamarin Apps

Superpacked Applications

According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to execute the application and gather the decompressed files from the filesystem.

Automated Static Code Analysis

The tool mariana-trench is capable of finding vulnerabilities by scanning the code of the application. This tool contains a series of known sources (that indicates to the tool the places where the input is controlled by the user), sinks (which indicates to the tool dangerous places where malicious user input could cause damages) and rules. These rules indicates the combination of sources-sinks that indicates a vulnerability.

With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.

Secrets leaked

An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Other interesting functions

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions

Other tricks

content:// protocol



Dynamic Analysis

First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.

Online Dynamic analysis

You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.

You can even see the logs of your application in the web and connect through adb.

Thanks to the ADB connection you can use Drozer and Frida inside the emulators.

Local Dynamic Analysis

Using an emulator

  • Android Studio (You can create x86 and arm devices, and according to this latest x86 versions support ARM libraries without needing an slow arm emulator).
  • Learn to set it up in this page:

AVD - Android Virtual Device

  • Genymotion (Free version: Personal Edition, you need to create an account. It's recommend to download the version WITH VirtualBox to avoid potential errors.)
  • Nox (Free, but it doesn't support Frida or Drozer).

note

When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.

To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:

Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).

Use a physical device

You need to activate the debugging options and it will be cool if you can root it:

  1. Settings.
  2. (FromAndroid 8.0) Select System.
  3. Select About phone.
  4. Press Build number 7 times.
  5. Go back and you will find the Developer options.

Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.
I will suggest to perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, so we will be able to learn how the application works while MobSF captures a lot of interesting data you can review later on.

Unintended Data Leakage

Logging

개발자는 디버깅 정보를 공개적으로 노출하는 것에 주의해야 하며, 이는 민감한 데이터 유출로 이어질 수 있습니다. 애플리케이션 로그를 모니터링하여 민감한 정보를 식별하고 보호하기 위해 pidcatadb logcat 도구를 사용하는 것이 좋습니다. Pidcat은 사용 용이성과 가독성 때문에 선호됩니다.

warning

Android 4.0 이후 버전에서는 응용 프로그램이 자신의 로그에만 접근할 수 있습니다. 따라서 응용 프로그램은 다른 앱의 로그에 접근할 수 없습니다.
어쨌든, 민감한 정보를 기록하지 않는 것이 여전히 권장됩니다.

Copy/Paste Buffer Caching

Android의 클립보드 기반 프레임워크는 앱에서 복사-붙여넣기 기능을 가능하게 하지만, 다른 애플리케이션이 클립보드에 접근할 수 있어 민감한 데이터가 노출될 위험이 있습니다. 신용 카드 세부정보와 같은 애플리케이션의 민감한 섹션에 대해 복사/붙여넣기 기능을 비활성화하는 것이 중요합니다.

Crash Logs

애플리케이션이 충돌하고 로그를 저장하는 경우, 이러한 로그는 공격자에게 도움이 될 수 있으며, 특히 애플리케이션을 리버스 엔지니어링할 수 없는 경우 더욱 그렇습니다. 이 위험을 완화하기 위해 충돌 시 로그를 기록하지 않도록 하고, 로그를 네트워크를 통해 전송해야 하는 경우 보안을 위해 SSL 채널을 통해 전송되도록 해야 합니다.

펜테스터로서 이 로그를 살펴보는 것이 좋습니다.

Analytics Data Sent To 3rd Parties

애플리케이션은 종종 Google Adsense와 같은 서비스를 통합하여 개발자의 부적절한 구현으로 인해 민감한 데이터가 유출될 수 있습니다. 잠재적인 데이터 유출을 식별하기 위해 애플리케이션의 트래픽을 가로채고 제3자 서비스에 전송되는 민감한 정보가 있는지 확인하는 것이 좋습니다.

SQLite DBs

대부분의 애플리케이션은 정보를 저장하기 위해 내부 SQLite 데이터베이스를 사용합니다. 펜테스트 중에 생성된 데이터베이스, 테이블의 이름과 저장된 모든 데이터를 살펴보아야 합니다. 왜냐하면 민감한 정보(취약점이 될 수 있음)를 발견할 수 있기 때문입니다.
데이터베이스는 /data/data/the.package.name/databases에 위치해야 하며, 예를 들어 /data/data/com.mwr.example.sieve/databases와 같습니다.

데이터베이스가 기밀 정보를 저장하고 암호화되어 있지만 애플리케이션 내에서 비밀번호찾을 수 있다면 여전히 취약점입니다.

.tables를 사용하여 테이블을 나열하고, .schema <table_name>을 사용하여 테이블의 열을 나열합니다.

Drozer (Exploit Activities, Content Providers and Services)

From Drozer Docs: Drozer는 Android 앱의 역할을 가정하고 다른 앱과 상호작용할 수 있게 해줍니다. 이는 설치된 애플리케이션이 할 수 있는 모든 작업을 수행할 수 있으며, Android의 프로세스 간 통신(IPC) 메커니즘을 활용하고 기본 운영 체제와 상호작용할 수 있습니다.
Drozer는 내보낸 활동, 내보낸 서비스 및 콘텐츠 제공자를 악용하는 데 유용한 도구입니다.

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity.
또한 활동의 코드는 onCreate 메서드에서 시작된다는 점을 기억하세요.

Authorisation bypass

활동이 내보내지면 외부 앱에서 해당 화면을 호출할 수 있습니다. 따라서 민감한 정보내보내진 활동이 있는 경우 인증 메커니즘을 우회하여 접근할 수 있습니다.

Learn how to exploit exported activities with Drozer.

adb에서 내보낸 활동을 시작할 수도 있습니다:

  • PackageName은 com.example.demo입니다.
  • Exported ActivityName은 com.example.test.MainActivity입니다.
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTE: MobSF는 활동에서 android:launchMode로 _singleTask/singleInstance_를 사용할 경우 악성으로 감지하지만, 이것 때문에, 이는 구버전(API 버전 < 21)에서만 위험한 것으로 보입니다.

note

권한 우회가 항상 취약점이 되는 것은 아니며, 이는 우회가 어떻게 작동하는지와 어떤 정보가 노출되는지에 따라 다릅니다.

민감한 정보 유출

활동은 결과를 반환할 수도 있습니다. 만약 당신이 setResult 메서드를 호출하고 민감한 정보를 반환하는 내보내기된 보호되지 않은 활동을 찾는다면, 이는 민감한 정보 유출입니다.

Tapjacking

Tapjacking이 방지되지 않으면, 내보내기된 활동을 악용하여 사용자가 예상치 못한 행동을 하도록 만들 수 있습니다. Tapjacking에 대한 더 많은 정보는 여기를 클릭하세요.

콘텐츠 제공자 악용 - 민감한 정보 접근 및 조작

콘텐츠 제공자가 무엇인지 새롭게 알고 싶다면 이 글을 읽어보세요.
콘텐츠 제공자는 기본적으로 데이터를 공유하는 데 사용됩니다. 앱에 사용 가능한 콘텐츠 제공자가 있다면, 그들로부터 민감한 데이터를 추출할 수 있을지도 모릅니다. 또한 SQL 인젝션경로 탐색을 테스트하는 것도 흥미롭습니다. 이들은 취약할 수 있습니다.

Drozer로 콘텐츠 제공자를 악용하는 방법을 배우세요.

서비스 악용

서비스가 무엇인지 새롭게 알고 싶다면 이 글을 읽어보세요.
서비스의 동작은 onStartCommand 메서드에서 시작된다는 것을 기억하세요.

서비스는 기본적으로 데이터를 수신하고, 처리하며 응답(또는 하지 않을 수 있음)을 반환하는 것입니다. 따라서 애플리케이션이 일부 서비스를 내보내고 있다면, 코드를 확인하여 그것이 무엇을 하는지 이해하고, 민감한 정보를 추출하기 위해 동적으로 테스트해야 합니다, 인증 수단을 우회하는 등의 작업을 위해...
Drozer로 서비스를 악용하는 방법을 배우세요.

브로드캐스트 수신기 악용

브로드캐스트 수신기가 무엇인지 새롭게 알고 싶다면 이 글을 읽어보세요.
브로드캐스트 수신기의 동작은 onReceive 메서드에서 시작된다는 것을 기억하세요.

브로드캐스트 수신기는 특정 유형의 메시지를 기다리고 있습니다. 수신기가 메시지를 처리하는 방식에 따라 취약할 수 있습니다.
Drozer로 브로드캐스트 수신기를 악용하는 방법을 배우세요.

스킴 / 딥 링크 악용

MobSF와 같은 도구나 이 스크립트를 사용하여 딥 링크를 수동으로 찾을 수 있습니다.
adb 또는 브라우저를 사용하여 선언된 스킴열 수 있습니다:

bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

패키지 이름을 생략할 수 있으며, 모바일은 자동으로 해당 링크를 열어야 하는 앱을 호출합니다.

markup
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

코드 실행됨

앱에서 실행될 코드를 찾으려면, 딥링크로 호출된 액티비티로 가서 onNewIntent 함수를 검색하세요.

민감한 정보

딥링크를 찾을 때마다 URL 매개변수를 통해 민감한 데이터(예: 비밀번호)를 수신하지 않는지 확인하세요, 왜냐하면 다른 애플리케이션이 딥링크를 가장하여 그 데이터를 훔칠 수 있기 때문입니다!

경로의 매개변수

딥링크가 URL의 경로 내에서 매개변수를 사용하고 있는지 확인해야 합니다. 예: https://api.example.com/v1/users/{username}. 이 경우, 경로 탐색을 강제하여 다음과 같은 접근을 할 수 있습니다: example://app/users?username=../../unwanted-endpoint%3fparam=value.
애플리케이션 내에서 올바른 엔드포인트를 찾으면 Open Redirect(경로의 일부가 도메인 이름으로 사용되는 경우), 계정 탈취(CSRF 토큰 없이 사용자 세부정보를 수정할 수 있고 취약한 엔드포인트가 올바른 메서드를 사용하는 경우) 및 기타 취약점을 유발할 수 있습니다. 더 많은 정보는 여기에서 확인하세요.

더 많은 예시

링크에 대한 흥미로운 버그 바운티 보고서 (/.well-known/assetlinks.json).

전송 계층 검사 및 검증 실패

  • 인증서는 Android 애플리케이션에서 항상 제대로 검사되지 않습니다. 이러한 애플리케이션이 경고를 무시하고 자체 서명된 인증서를 수락하거나, 경우에 따라 HTTP 연결로 되돌아가는 경우가 흔합니다.
  • SSL/TLS 핸드셰이크 중 협상이 때때로 약합니다, 안전하지 않은 암호화 스위트를 사용하는 경우가 있습니다. 이 취약점은 연결을 중간자 공격(MITM)에 취약하게 만들어 공격자가 데이터를 복호화할 수 있게 합니다.
  • 민감한 정보 유출은 애플리케이션이 안전한 채널을 사용하여 인증하지만 다른 거래에 대해 비안전한 채널을 통해 통신할 때 위험이 있습니다. 이 접근 방식은 세션 쿠키나 사용자 세부정보와 같은 민감한 데이터를 악의적인 엔티티에 의해 가로채는 것으로부터 보호하지 못합니다.

인증서 검증

인증서 검증에 집중하겠습니다. 서버의 인증서 무결성을 검증하여 보안을 강화해야 합니다. 이는 안전하지 않은 TLS 구성과 암호화되지 않은 채널을 통한 민감한 데이터 전송이 상당한 위험을 초래할 수 있기 때문에 중요합니다. 서버 인증서를 검증하고 취약점을 해결하는 방법에 대한 자세한 단계는 이 리소스에서 포괄적인 지침을 제공합니다.

SSL 핀닝

SSL 핀닝은 애플리케이션이 서버의 인증서를 애플리케이션 내에 저장된 알려진 복사본과 비교하여 검증하는 보안 조치입니다. 이 방법은 MITM 공격을 방지하는 데 필수적입니다. 민감한 정보를 처리하는 애플리케이션에는 SSL 핀닝 구현이 강력히 권장됩니다.

트래픽 검사

HTTP 트래픽을 검사하려면 프록시 도구의 인증서를 설치해야 합니다(예: Burp). 이 인증서를 설치하지 않으면 암호화된 트래픽이 프록시를 통해 표시되지 않을 수 있습니다. 사용자 정의 CA 인증서를 설치하는 방법에 대한 가이드는 여기를 클릭하세요.

API Level 24 이상을 대상으로 하는 애플리케이션은 프록시의 CA 인증서를 수락하도록 네트워크 보안 구성을 수정해야 합니다. 이 단계는 암호화된 트래픽을 검사하는 데 중요합니다. 네트워크 보안 구성 수정에 대한 지침은 이 튜토리얼을 참조하세요.

SSL 핀닝 우회

SSL 핀닝이 구현된 경우 HTTPS 트래픽을 검사하기 위해 이를 우회해야 합니다. 이를 위한 다양한 방법이 있습니다:

  • 자동으로 apk를 수정하여 apk-mitm로 SSL 핀닝을 우회합니다. 이 옵션의 가장 큰 장점은 SSL 핀닝을 우회하기 위해 루트가 필요하지 않지만, 애플리케이션을 삭제하고 새로 설치해야 하며, 항상 작동하지는 않습니다.
  • Frida를 사용하여 이 보호를 우회할 수 있습니다(아래에서 논의됨). Burp+Frida+Genymotion을 사용하는 방법에 대한 가이드는 다음과 같습니다: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • objection을 사용하여 SSL 핀닝을 자동으로 우회할 수도 있습니다: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • MobSF 동적 분석을 사용하여 SSL 핀닝을 자동으로 우회할 수도 있습니다(아래에서 설명됨).
  • 여전히 캡처하지 못한 트래픽이 있다고 생각되면 iptables를 사용하여 트래픽을 burp로 포워딩할 수 있습니다. 이 블로그를 읽어보세요: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

일반 웹 취약점 찾기

애플리케이션 내에서 일반 웹 취약점을 검색하는 것도 중요합니다. 이러한 취약점을 식별하고 완화하는 방법에 대한 자세한 정보는 이 요약의 범위를 넘어가지만, 다른 곳에서 광범위하게 다루어지고 있습니다.

Frida

Frida는 개발자, 리버스 엔지니어 및 보안 연구자를 위한 동적 계측 툴킷입니다.
실행 중인 애플리케이션에 접근하고 런타임에서 메서드를 후킹하여 동작을 변경하고, 값을 변경하고, 값을 추출하고, 다른 코드를 실행할 수 있습니다...
Android 애플리케이션을 펜테스트하려면 Frida를 사용하는 방법을 알아야 합니다.

메모리 덤프 - Fridump

애플리케이션이 비밀번호나 니모닉과 같은 민감한 정보를 저장하고 있지 않은지 확인하세요.

Fridump3를 사용하여 다음과 같이 앱의 메모리를 덤프할 수 있습니다:

bash
# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

이것은 ./dump 폴더에 메모리를 덤프할 것이며, 그 안에서 다음과 같이 grep을 사용할 수 있습니다:

bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Keystore의 민감한 데이터

Android에서 Keystore는 민감한 데이터를 저장하기에 가장 좋은 장소입니다. 그러나 충분한 권한이 있으면 여전히 액세스할 수 있습니다. 애플리케이션이 여기에서 명확한 텍스트로 민감한 데이터를 저장하는 경향이 있기 때문에 pentests는 이를 확인해야 하며, 루트 사용자 또는 장치에 물리적으로 접근할 수 있는 사람이 이 데이터를 훔칠 수 있습니다.

앱이 keystore에 데이터를 저장하더라도, 데이터는 암호화되어야 합니다.

keystore 내부의 데이터에 접근하려면 이 Frida 스크립트를 사용할 수 있습니다: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

지문/생체 인식 우회

다음 Frida 스크립트를 사용하면 지문 인증을 우회할 수 있을 수 있으며, Android 애플리케이션이 특정 민감한 영역을 보호하기 위해 수행할 수 있습니다:

bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

배경 이미지

애플리케이션을 백그라운드에 두면, Android는 애플리케이션의 스냅샷을 저장하므로, 포그라운드로 복구될 때 앱보다 이미지를 먼저 로드하여 앱이 더 빨리 로드된 것처럼 보입니다.

그러나 이 스냅샷에 민감한 정보가 포함되어 있다면, 스냅샷에 접근할 수 있는 사람은 그 정보를 훔칠 수 있습니다 (접근하려면 루트 권한이 필요합니다).

스냅샷은 일반적으로 다음 위치에 저장됩니다: /data/system_ce/0/snapshots

Android는 FLAG_SECURE 레이아웃 매개변수를 설정하여 스크린샷 캡처를 방지하는 방법을 제공합니다. 이 플래그를 사용하면 창 내용이 안전한 것으로 처리되어 스크린샷에 나타나거나 비안전한 디스플레이에서 볼 수 없게 됩니다.

bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

안드로이드 애플리케이션 분석기

이 도구는 동적 분석 중 다양한 도구를 관리하는 데 도움이 될 수 있습니다: https://github.com/NotSoSecure/android_application_analyzer

인텐트 주입

개발자는 종종 이러한 인텐트를 처리하고 startActivity(...) 또는 sendBroadcast(...)와 같은 메서드로 전달하는 프록시 구성 요소인 액티비티, 서비스 및 브로드캐스트 수신기를 생성합니다. 이는 위험할 수 있습니다.

위험은 공격자가 이러한 인텐트를 잘못 유도하여 비공개 앱 구성 요소를 트리거하거나 민감한 콘텐츠 제공자에 접근할 수 있도록 허용하는 데 있습니다. 주목할 만한 예는 WebView 구성 요소가 URL을 Intent 객체로 변환하는 Intent.parseUri(...)를 통해 이를 실행하여 악의적인 인텐트 주입으로 이어질 수 있는 경우입니다.

주요 요점

  • 인텐트 주입은 웹의 오픈 리디렉션 문제와 유사합니다.
  • 익스플로잇은 Intent 객체를 추가로 전달하여 안전하지 않은 작업을 실행하도록 리디렉션할 수 있습니다.
  • 비공개 구성 요소와 콘텐츠 제공자를 공격자에게 노출할 수 있습니다.
  • WebView의 URL을 Intent로 변환하는 과정은 의도하지 않은 작업을 촉진할 수 있습니다.

안드로이드 클라이언트 측 주입 및 기타

아마도 웹에서 이러한 종류의 취약점에 대해 알고 계실 것입니다. 안드로이드 애플리케이션에서 이러한 취약점에 특히 주의해야 합니다:

  • SQL 주입: 동적 쿼리 또는 콘텐츠 제공자를 다룰 때 매개변수화된 쿼리를 사용하고 있는지 확인하십시오.
  • 자바스크립트 주입 (XSS): 모든 WebView에 대해 자바스크립트 및 플러그인 지원이 비활성화되어 있는지 확인하십시오 (기본적으로 비활성화됨). 자세한 정보는 여기를 참조하십시오.
  • 로컬 파일 포함: WebView는 파일 시스템에 대한 접근이 비활성화되어야 합니다 (기본적으로 활성화됨) - (webview.getSettings().setAllowFileAccess(false);). 자세한 정보는 여기를 참조하십시오.
  • 영구 쿠키: 여러 경우에 안드로이드 애플리케이션이 세션을 종료할 때 쿠키가 취소되지 않거나 디스크에 저장될 수 있습니다.
  • 쿠키의 보안 플래그

자동 분석

MobSF

정적 분석

애플리케이션의 취약점 평가를 위한 멋진 웹 기반 프론트엔드를 사용합니다. 동적 분석도 수행할 수 있지만 환경을 준비해야 합니다.

bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

MobSF는 Android(apk), IOS(ipa) 및 Windows(apx) 애플리케이션을 분석할 수 있습니다 (Windows 애플리케이션은 Windows 호스트에 설치된 MobSF에서 분석해야 합니다).
또한, Android 또는 IOS 앱의 소스 코드로 ZIP 파일을 생성하면 (애플리케이션의 루트 폴더로 이동하여 모든 것을 선택하고 ZIP 파일을 생성), 그것도 분석할 수 있습니다.

MobSF는 diff/Compare 분석을 허용하고 VirusTotal과 통합할 수 있습니다 (API 키를 _MobSF/settings.py_에 설정하고 활성화해야 합니다: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). VT_UPLOADFalse로 설정하면 해시가 파일 대신 업로드됩니다.

MobSF를 이용한 보조 동적 분석

MobSFAndroid에서 동적 분석에 매우 유용할 수 있지만, 이 경우 호스트에 MobSF와 genymotion을 설치해야 합니다 (VM이나 Docker는 작동하지 않습니다). 참고: 먼저 genymotion에서 VM을 시작한 후 MobSF를 시작해야 합니다.
MobSF 동적 분석기는 다음을 수행할 수 있습니다:

  • 애플리케이션 데이터 덤프 (URL, 로그, 클립보드, 사용자가 만든 스크린샷, "Exported Activity Tester"가 만든 스크린샷, 이메일, SQLite 데이터베이스, XML 파일 및 기타 생성된 파일). 이 모든 것은 자동으로 수행되며, 스크린샷은 사용자가 원하는 시점에 눌러야 하거나 "Exported Activity Tester"를 눌러야 모든 내보낸 활동의 스크린샷을 얻을 수 있습니다.
  • HTTPS 트래픽 캡처
  • Frida를 사용하여 런타임 정보를 얻기

안드로이드 버전 > 5에서는 Frida를 자동으로 시작하고 트래픽 캡처를 위해 전역 프록시 설정을 합니다. 테스트된 애플리케이션에서만 트래픽을 캡처합니다.

Frida

기본적으로 SSL 핀닝, 루트 탐지디버거 탐지를 우회하고 흥미로운 API를 모니터링하기 위해 일부 Frida 스크립트를 사용합니다.
MobSF는 또한 내보낸 활동을 호출하고, 그 스크린샷을 캡처하여 보고서에 저장할 수 있습니다.

동적 테스트를 시작하려면 초록색 버튼: "Start Instrumentation"을 누릅니다. "Frida Live Logs"를 눌러 Frida 스크립트에서 생성된 로그를 보고, "Live API Monitor"를 눌러 후킹된 메서드에 대한 모든 호출, 전달된 인수 및 반환 값을 확인합니다 (이것은 "Start Instrumentation"을 누른 후에 나타납니다).
MobSF는 또한 자신의 Frida 스크립트를 로드할 수 있습니다 (Frida 스크립트의 결과를 MobSF에 보내려면 send() 함수를 사용하십시오). 또한 로드할 수 있는 여러 사전 작성된 스크립트가 있습니다 (더 추가할 수 있습니다 MobSF/DynamicAnalyzer/tools/frida_scripts/others/), 그냥 선택하고, "Load"를 누르고 "Start Instrumentation"을 누릅니다 (해당 스크립트의 로그는 "Frida Live Logs"에서 볼 수 있습니다).

또한, 몇 가지 보조 Frida 기능이 있습니다:

  • 로드된 클래스 나열: 모든 로드된 클래스를 출력합니다.
  • 문자열 캡처: 애플리케이션을 사용하는 동안 캡처된 모든 문자열을 출력합니다 (매우 시끄러움).
  • 문자열 비교 캡처: 매우 유용할 수 있습니다. 비교되는 2개의 문자열과 결과가 True인지 False인지 보여줍니다.
  • 클래스 메서드 나열: 클래스 이름(예: "java.io.File")을 입력하면 클래스의 모든 메서드를 출력합니다.
  • 클래스 패턴 검색: 패턴으로 클래스를 검색합니다.
  • 클래스 메서드 추적: 전체 클래스추적합니다 (클래스의 모든 메서드의 입력 및 출력을 확인합니다). 기본적으로 MobSF는 여러 흥미로운 Android API 메서드를 추적합니다.

사용하려는 보조 모듈을 선택한 후 "Start Instrumentation"을 누르면 "Frida Live Logs"에서 모든 출력을 볼 수 있습니다.

Shell

Mobsf는 또한 동적 분석 페이지 하단에 몇 가지 adb 명령, MobSF 명령 및 일반 shell 명령을 포함한 셸을 제공합니다. 몇 가지 흥미로운 명령:

bash
help
shell ls
activities
exported_activities
services
receivers

HTTP 도구

HTTP 트래픽이 캡처되면 "HTTP(S) Traffic" 하단에서 캡처된 트래픽의 보기 또는 "Start HTTPTools" 녹색 버튼에서 더 나은 보기를 볼 수 있습니다. 두 번째 옵션에서 캡처된 요청프록시(예: Burp 또는 Owasp ZAP)로 전송할 수 있습니다.
이를 위해, Burp 켜기 --> Intercept 끄기 --> MobSB HTTPTools에서 요청 선택 --> "Send to Fuzzer" 버튼을 누르세요 --> 프록시 주소 선택 (http://127.0.0.1:8080\).

MobSF로 동적 분석을 마친 후 "Start Web API Fuzzer"를 눌러 HTTP 요청을 퍼징하고 취약점을 찾아보세요.

note

MobSF로 동적 분석을 수행한 후 프록시 설정이 잘못 구성될 수 있으며 GUI에서 이를 수정할 수 없습니다. 다음을 수행하여 프록시 설정을 수정할 수 있습니다:

adb shell settings put global http_proxy :0

Inspeckage를 이용한 보조 동적 분석

Inspeckage에서 도구를 받을 수 있습니다.
이 도구는 동적 분석을 수행하는 동안 애플리케이션에서 무슨 일이 일어나고 있는지 알리기 위해 몇 가지 후크를 사용합니다.

Yaazhini

이것은 GUI를 사용한 정적 분석을 수행하기 위한 훌륭한 도구입니다.

Qark

이 도구는 소스 코드 또는 패키지된 APK에서 여러 보안 관련 Android 애플리케이션 취약점을 찾기 위해 설계되었습니다. 이 도구는 또한 발견된 일부 취약점을 악용하기 위한 "Proof-of-Concept" 배포 가능한 APKADB 명령을 생성할 수 있습니다(노출된 활동, 인텐트, 탭재킹 등...). Drozer와 마찬가지로 테스트 장치를 루팅할 필요가 없습니다.

bash
pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • 모든 추출된 파일을 쉽게 참조할 수 있도록 표시
  • APK 파일을 자동으로 Java 및 Smali 형식으로 디컴파일
  • 일반적인 취약점 및 동작을 위해 AndroidManifest.xml 분석
  • 일반적인 취약점 및 동작에 대한 정적 소스 코드 분석
  • 장치 정보
  • 기타 사항
bash
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER는 Windows, MacOS X 및 Linux에서 사용할 수 있는 명령줄 애플리케이션으로, .apk 파일을 분석하여 취약점을 찾습니다. 이는 APK를 압축 해제하고 일련의 규칙을 적용하여 이러한 취약점을 감지합니다.

모든 규칙은 rules.json 파일에 중심을 두고 있으며, 각 회사나 테스터는 자신이 필요한 것을 분석하기 위해 자체 규칙을 만들 수 있습니다.

최신 바이너리는 download page에서 다운로드하세요.

super-analyzer {apk_file}

StaCoAn

StaCoAn은 개발자, 버그 바운티 헌터 및 윤리적 해커가 모바일 애플리케이션에 대해 정적 코드 분석을 수행하는 데 도움을 주는 크로스 플랫폼 도구입니다.

개념은 모바일 애플리케이션 파일(.apk 또는 .ipa 파일)을 StaCoAn 애플리케이션에 드래그 앤 드롭하면 시각적이고 휴대 가능한 보고서를 생성하는 것입니다. 설정과 단어 목록을 조정하여 맞춤형 경험을 얻을 수 있습니다.

다운로드 최신 릴리스:

./stacoan

AndroBugs

AndroBugs Framework는 개발자 또는 해커가 Android 애플리케이션에서 잠재적인 보안 취약점을 찾는 데 도움을 주는 Android 취약점 분석 시스템입니다.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn는 Android 애플리케이션에서 발생할 수 있는 악의적인 행동을 감지하고 사용자에게 경고하는 것을 주요 목표로 하는 도구입니다.

감지는 애플리케이션의 Dalvik 바이트코드에 대한 정적 분석을 통해 수행되며, 이는 Smali로 표현됩니다. androguard 라이브러리를 사용합니다.

이 도구는 다음과 같은 "나쁜" 애플리케이션의 일반적인 행동을 찾습니다: 전화 식별자 유출, 오디오/비디오 흐름 가로채기, PIM 데이터 수정, 임의 코드 실행...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARAMobile Application Reverse engineering 및 Analysis Framework입니다. 이는 OWASP 모바일 보안 위협에 대해 모바일 애플리케이션을 테스트하는 데 도움을 주기 위해 일반적으로 사용되는 모바일 애플리케이션 리버스 엔지니어링 및 분석 도구를 통합한 도구입니다. 이 작업을 모바일 애플리케이션 개발자와 보안 전문가에게 더 쉽고 친숙하게 만드는 것이 목표입니다.

다음과 같은 기능을 제공합니다:

  • 다양한 도구를 사용하여 Java 및 Smali 코드를 추출합니다.
  • 다음을 사용하여 APK를 분석합니다: smalisca, ClassyShark, androbugs, androwarn, APKiD
  • 정규 표현식을 사용하여 APK에서 개인 정보를 추출합니다.
  • 매니페스트를 분석합니다.
  • 다음을 사용하여 발견된 도메인을 분석합니다: pyssltest, testsslwhatweb
  • apk-deguard.com을 통해 APK를 디오브스큐레이션합니다.

Koodous

악성코드를 탐지하는 데 유용합니다: https://koodous.com/

코드 난독화/디오브스큐레이션

코드를 난독화하는 데 사용하는 서비스와 구성에 따라 비밀이 난독화될 수도 있고 그렇지 않을 수도 있습니다.

ProGuard

위키백과: ProGuard는 Java 코드를 축소, 최적화 및 난독화하는 오픈 소스 명령줄 도구입니다. 바이트코드를 최적화하고 사용되지 않는 명령어를 감지 및 제거할 수 있습니다. ProGuard는 무료 소프트웨어이며 GNU 일반 공중 라이선스 버전 2에 따라 배포됩니다.

ProGuard는 Android SDK의 일부로 배포되며 애플리케이션을 릴리스 모드로 빌드할 때 실행됩니다.

DexGuard

APK를 디오브스큐레이션하는 단계별 가이드를 https://blog.lexfo.fr/dexguard.html에서 확인하세요.

(그 가이드에서) 마지막으로 확인했을 때, Dexguard의 작동 모드는 다음과 같았습니다:

  • 리소스를 InputStream으로 로드합니다;
  • 결과를 FilterInputStream에서 상속받은 클래스에 제공하여 복호화합니다;
  • 리버서의 시간을 낭비하기 위해 쓸모없는 난독화를 수행합니다;
  • 복호화된 결과를 ZipInputStream에 제공하여 DEX 파일을 가져옵니다;
  • 마지막으로 loadDex 메서드를 사용하여 결과 DEX를 리소스로 로드합니다.

DeGuard

DeGuard는 Android 난독화 도구가 수행한 난독화 과정을 역전시킵니다. 이를 통해 코드 검사 및 라이브러리 예측을 포함한 수많은 보안 분석이 가능합니다.

난독화된 APK를 그들의 플랫폼에 업로드할 수 있습니다.

Deobfuscate android App

이것은 Android 앱에서 잠재적인 보안 취약점을 찾고 Android 앱 코드를 디오브스큐레이션하는 LLM 도구입니다. Google의 Gemini 공개 API를 사용합니다.

Simplify

이는 일반 Android 디오브스큐레이터입니다. Simplify는 앱을 가상 실행하여 그 동작을 이해하고, 코드를 최적화하여 동일하게 동작하지만 사람이 이해하기 쉽게 만듭니다. 각 최적화 유형은 간단하고 일반적이므로 사용된 특정 난독화 유형은 중요하지 않습니다.

APKiD

APKiD는 APK가 어떻게 만들어졌는지에 대한 정보를 제공합니다. 많은 컴파일러, 패커, 난독화 도구 및 기타 이상한 것들을 식별합니다. Android용 PEiD입니다.

Manual

사용자 정의 난독화를 리버스하는 방법에 대한 몇 가지 요령을 배우려면 이 튜토리얼을 읽으세요

Labs

Androl4b

AndroL4b는 우분투-메이트 기반의 Android 보안 가상 머신으로, 리버스 엔지니어링 및 악성코드 분석을 위한 다양한 보안 전문가와 연구자들의 최신 프레임워크, 튜토리얼 및 실습을 포함합니다.

References

Yet to try

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기