hacktricks/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md

91 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 생체 인증 우회 (안드로이드)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
</details>
{% endhint %}
## **방법 1 암호화 객체 사용 없이 우회하기**
여기서의 초점은 인증 과정에서 중요한 *onAuthenticationSucceeded* 콜백입니다. WithSecure의 연구자들은 NULL *CryptoObject*를 *onAuthenticationSucceeded(...)*에서 우회할 수 있는 [Frida 스크립트](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js)를 개발했습니다. 이 스크립트는 메서드 호출 시 지문 인증을 자동으로 우회하도록 강제합니다. 아래는 안드로이드 지문 컨텍스트에서 우회를 보여주는 간단한 코드 조각이며, 전체 애플리케이션은 [GitHub](https://github.com/St3v3nsS/InsecureBanking)에서 확인할 수 있습니다.
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
});
```
Frida 스크립트를 실행하는 명령:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
```
## **방법 2 예외 처리 접근법**
또 다른 [Frida 스크립트](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js)인 WithSecure는 안전하지 않은 암호화 객체 사용을 우회하는 방법을 다룹니다. 이 스크립트는 지문으로 인증되지 않은 *CryptoObject*와 함께 *onAuthenticationSucceeded*를 호출합니다. 애플리케이션이 다른 암호 객체를 사용하려고 하면 예외가 발생합니다. 이 스크립트는 *onAuthenticationSucceeded*를 호출하고 _Cipher_ 클래스에서 *javax.crypto.IllegalBlockSizeException*을 처리할 준비를 하여, 애플리케이션에서 사용되는 후속 객체가 새로운 키로 암호화되도록 보장합니다.
Frida 스크립트를 실행하는 명령:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
```
지문 화면에 도달하고 `authenticate()`가 시작되면, Frida 콘솔에 `bypass()`를 입력하여 우회 기능을 활성화합니다:
```
Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()
```
## **Method 3 Instrumentation Frameworks**
Xposed 또는 Frida와 같은 도구는 런타임에 애플리케이션 메서드에 후킹하는 데 사용될 수 있습니다. 지문 인증의 경우, 이러한 프레임워크는:
1. **인증 콜백 모의**: `BiometricPrompt.AuthenticationCallback``onAuthenticationSucceeded`, `onAuthenticationFailed` 또는 `onAuthenticationError` 메서드에 후킹하여 지문 인증 프로세스의 결과를 제어할 수 있습니다.
2. **SSL 핀닝 우회**: 이를 통해 공격자는 클라이언트와 서버 간의 트래픽을 가로채고 수정할 수 있으며, 인증 프로세스를 변경하거나 민감한 데이터를 탈취할 수 있습니다.
Frida의 예제 명령:
```bash
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
```
## **방법 4 리버스 엔지니어링 및 코드 수정**
`APKTool`, `dex2jar`, `JD-GUI`와 같은 리버스 엔지니어링 도구를 사용하여 Android 애플리케이션을 디컴파일하고, 소스 코드를 읽고, 인증 메커니즘을 이해할 수 있습니다. 일반적인 단계는 다음과 같습니다:
1. **APK 디컴파일**: APK 파일을 더 인간이 읽기 쉬운 형식(예: Java 코드)으로 변환합니다.
2. **코드 분석**: 지문 인증 구현을 찾아보고 잠재적인 약점(예: 대체 메커니즘 또는 부적절한 검증 검사)을 식별합니다.
3. **APK 재컴파일**: 지문 인증을 우회하도록 코드를 수정한 후, 애플리케이션을 재컴파일하고 서명한 다음 테스트를 위해 장치에 설치합니다.
## **방법 5 사용자 정의 인증 도구 사용**
인증 메커니즘을 테스트하고 우회하도록 설계된 전문 도구와 스크립트가 있습니다. 예를 들어:
1. **MAGISK 모듈**: MAGISK는 사용자가 장치를 루팅하고 지문을 포함한 하드웨어 수준 정보를 수정하거나 스푸핑할 수 있는 모듈을 추가할 수 있는 Android 도구입니다.
2. **사용자 정의 스크립트**: Android Debug Bridge(ADB)와 상호 작용하거나 애플리케이션의 백엔드와 직접 상호 작용하여 지문 인증을 시뮬레이션하거나 우회하는 스크립트를 작성할 수 있습니다.
## 참고 문헌
* [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}