์์ฒด ์ธ์ฆ ์ฐํ (์๋๋ก์ด๋)
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๋ฐฉ๋ฒ 1 โ ์ํธํ ๊ฐ์ฒด ์ฌ์ฉ ์์ด ์ฐํํ๊ธฐ
์ฌ๊ธฐ์ ์ด์ ์ ์ธ์ฆ ๊ณผ์ ์์ ์ค์ํ onAuthenticationSucceeded ์ฝ๋ฐฑ์ ์์ต๋๋ค. WithSecure์ ์ฐ๊ตฌ์๋ค์ NULL _CryptoObject_๋ฅผ _onAuthenticationSucceeded(โฆ)_์์ ์ฐํํ ์ ์๋ Frida ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ๋ฉ์๋ ํธ์ถ ์ ์ง๋ฌธ ์ธ์ฆ์ ์๋์ผ๋ก ์ฐํํ๋๋ก ๊ฐ์ ํฉ๋๋ค. ์๋๋ ์๋๋ก์ด๋ ์ง๋ฌธ ์ปจํ ์คํธ์์ ์ฐํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฐ๋จํ ์ฝ๋ ์กฐ๊ฐ์ด๋ฉฐ, ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ GitHub์์ ํ์ธํ ์ ์์ต๋๋ค.
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 ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ช ๋ น:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
Method 2 โ Exception Handling Approach
Another Frida script by WithSecure addresses bypassing insecure crypto object usage. The script invokes onAuthenticationSucceeded with a CryptoObject that hasnโt been authorized by a fingerprint. If the application tries to use a different cipher object, it will trigger an exception. The script prepares to invoke onAuthenticationSucceeded and handle the javax.crypto.IllegalBlockSizeException in the Cipher class, ensuring subsequent objects used by the application are encrypted with the new key.
Frida ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ช ๋ น:
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
Instrumentation frameworks like Xposed or Frida๋ ๋ฐํ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ์๋์ ํ ์ ๊ฑธ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ง๋ฌธ ์ธ์ฆ์ ๊ฒฝ์ฐ, ์ด๋ฌํ ํ๋ ์์ํฌ๋:
- ์ธ์ฆ ์ฝ๋ฐฑ ๋ชจ์:
BiometricPrompt.AuthenticationCallback์onAuthenticationSucceeded,onAuthenticationFailed, ๋๋onAuthenticationError๋ฉ์๋์ ํ ์ ๊ฑธ์ด ์ง๋ฌธ ์ธ์ฆ ํ๋ก์ธ์ค์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. - SSL ํ๋ ์ฐํ: ์ด๋ ๊ณต๊ฒฉ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ๊ณ ์์ ํ ์ ์๊ฒ ํ์ฌ, ์ธ์ฆ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ ์ ์์ต๋๋ค.
Frida์ ์์ ๋ช ๋ น:
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
Method 4 โ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋ฐ ์ฝ๋ ์์
๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋๊ตฌ์ธ APKTool, dex2jar, ๋ฐ JD-GUI๋ฅผ ์ฌ์ฉํ์ฌ Android ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ปดํ์ผํ๊ณ , ์์ค ์ฝ๋๋ฅผ ์ฝ๊ณ , ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์ดํดํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- APK ๋์ปดํ์ผ: APK ํ์ผ์ ๋ ์ธ๊ฐ์ด ์ฝ๊ธฐ ์ฌ์ด ํ์(์: Java ์ฝ๋)์ผ๋ก ๋ณํํฉ๋๋ค.
- ์ฝ๋ ๋ถ์: ์ง๋ฌธ ์ธ์ฆ์ ๊ตฌํ์ ์ฐพ์๋ณด๊ณ ์ ์ฌ์ ์ธ ์ฝ์ (์: ๋์ฒด ๋ฉ์ปค๋์ฆ ๋๋ ๋ถ์ ์ ํ ๊ฒ์ฆ ๊ฒ์ฌ)์ ์๋ณํฉ๋๋ค.
- APK ์ฌ์ปดํ์ผ: ์ง๋ฌธ ์ธ์ฆ์ ์ฐํํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ ํ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ปดํ์ผํ๊ณ ์๋ช ํ ๋ค์ ํ ์คํธ๋ฅผ ์ํด ์ฅ์น์ ์ค์นํฉ๋๋ค.
Method 5 โ ์ฌ์ฉ์ ์ ์ ์ธ์ฆ ๋๊ตฌ ์ฌ์ฉ
์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ํ ์คํธํ๊ณ ์ฐํํ๋๋ก ์ค๊ณ๋ ์ ๋ฌธ ๋๊ตฌ์ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
- MAGISK ๋ชจ๋: MAGISK๋ ์ฌ์ฉ์๊ฐ ์ฅ์น๋ฅผ ๋ฃจํ ํ๊ณ ์ง๋ฌธ์ ํฌํจํ ํ๋์จ์ด ์์ค ์ ๋ณด๋ฅผ ์์ ํ๊ฑฐ๋ ์คํธํํ ์ ์๋ ๋ชจ๋์ ์ถ๊ฐํ ์ ์๊ฒ ํด์ฃผ๋ Android ๋๊ตฌ์ ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ: Android Debug Bridge (ADB)์ ์ํธ์์ฉํ๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฑ์๋์ ์ง์ ์ํธ์์ฉํ์ฌ ์ง๋ฌธ ์ธ์ฆ์ ์๋ฎฌ๋ ์ด์ ํ๊ฑฐ๋ ์ฐํํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Method 6 โ BiometricPrompt(API 28-34)๋ฅผ ์ํ ์ ๋๋ฒ์ค Frida ํ
2023๋
, Universal-Android-Biometric-Bypass๋ผ๋ ์ปค๋ฎค๋ํฐ Frida ์คํฌ๋ฆฝํธ๊ฐ CodeShare์ ๋ฑ์ฅํ์ต๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ BiometricPrompt.authenticate()์ ๋ชจ๋ ์ค๋ฒ๋ก๋์ ๋ ๊ฑฐ์ FingerprintManager.authenticate()๋ฅผ ํ
ํนํ๊ณ , **null CryptoObject๋ฅผ ํฌํจํ๋ ์กฐ์๋ AuthenticationResult**๋ก onAuthenticationSucceeded()๋ฅผ ์ง์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. API ๋ ๋ฒจ์ ๋์ ์ผ๋ก ์ ์ํ๊ธฐ ๋๋ฌธ์, ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐํ๋ CryptoObject์ ๋ํด ์ํธํ ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์๋ ๊ฒฝ์ฐ Android 14(API 34)์์๋ ์ฌ์ ํ ์๋ํฉ๋๋ค.
# Install the script from CodeShare and run it against the target package
frida -U -f com.target.app --no-pause -l universal-android-biometric-bypass.js
Key ideas
- ๋ชจ๋ ์์ ์ ์ฌ์ฉ์ ๊ณต๊ฐ์์ ๋ฐ์ํฉ๋๋ค โ ์ปค๋ ์ต์คํ๋ก์์ด๋ ๋ฃจํธ ๊ถํ์ด ํ์ํ์ง ์์ต๋๋ค.
- ๊ณต๊ฒฉ์ UI์ ์์ ํ ์นจ๋ฌต์ ์ ์งํฉ๋๋ค: ์์คํ ์์ฒด ์ธ์ ๋ํ ์์๊ฐ ๋ํ๋์ง ์์ต๋๋ค.
- ์ํ: ๋ฏผ๊ฐํ ๊ธฐ๋ฅ์ ์ ๊ธ ํด์ ํ๊ธฐ ์ ์ ํญ์
result.cryptoObject์ ๊ทธ ์ํธ/์๋ช ์ ํ์ธํ์ญ์์ค.
Method 7 โ Downgrade / Fallback Manipulation
Android 11๋ถํฐ ๊ฐ๋ฐ์๋ setAllowedAuthenticators() (๋๋ ์ด์ ์ setDeviceCredentialAllowed())๋ฅผ ํตํด ํ์ฉ๋๋ ์ธ์ฆ๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฐํ์ ํํน ๊ณต๊ฒฉ์ allowedAuthenticators ๋นํธ ํ๋๋ฅผ ๋ ์ฝํ BIOMETRIC_WEAK | DEVICE_CREDENTIAL ๊ฐ์ผ๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค:
// Frida one-liner โ replace strong-only policy with weak/device-credential
var PromptInfoBuilder = Java.use('androidx.biometric.BiometricPrompt$PromptInfo$Builder');
PromptInfoBuilder.setAllowedAuthenticators.implementation = function(flags){
return this.setAllowedAuthenticators(0x0002 | 0x8000); // BIOMETRIC_WEAK | DEVICE_CREDENTIAL
};
์ฑ์ด ๋ฐํ๋ AuthenticationResult๋ฅผ ๊ฒ์ฆํ์ง ์๋ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ ๋จ์ํ PIN/Pattern ๋์ฒด ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋ ์๋ก์ด ์ฝํ ์์ฒด ์ธ์์ ๋ฑ๋กํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ฐฉ๋ฒ 8 โ ๊ณต๊ธ์ ์ฒด / ์ปค๋ ์์ค CVE
์๋๋ก์ด๋ ๋ณด์ ๊ฒ์ํ์ ์ฃผ์ ๊น๊ฒ ์ดํด๋ณด์ธ์: ์ต๊ทผ ์ปค๋ ์ธก ๋ฒ๊ทธ ๋ช ๊ฐ์ง๊ฐ ์ง๋ฌธ HAL์ ํตํด ๋ก์ปฌ ๊ถํ ์์น์ ํ์ฉํ๊ณ ์ผ์ ํ์ดํ๋ผ์ธ์ ๋นํ์ฑํํ๊ฑฐ๋ ์ฐํํ ์ ์์ต๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- CVE-2023-20995 โ ์ฌ์ฉ์ ์ํธ์์ฉ ์์ด ์ ๊ธ ํด์ ๋ฅผ ํ์ฉํ๋
CustomizedSensor.cpp์captureImage์์์ ๋ ผ๋ฆฌ ์ค๋ฅ (Pixel 8, Android 13). - CVE-2024-53835 / CVE-2024-53840 โ โ๋น์ ์์ ์ธ ๊ทผ๋ณธ ์์ธ์ผ๋ก ์ธํ ๊ฐ๋ฅํ ์์ฒด ์ธ์ ์ฐํโ๊ฐ 2024๋ 12์ Pixel ๊ฒ์ํ์์ ํจ์น๋์์ต๋๋ค.
์ด๋ฌํ ์ทจ์ฝ์ ์ ์ ๊ธ ํ๋ฉด์ ๋ชฉํ๋ก ํ์ง๋ง, ๋ฃจํ ๋ ํ ์คํฐ๋ ์ฑ ์์ค์ ๊ฒฐํจ๊ณผ ์ฐ๊ฒฐํ์ฌ ์ธ์ฑ ์์ฒด ์ธ์์ ์ฐํํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฐํ ์ฒดํฌ๋ฆฌ์คํธ (๋น ๋ฅธ ํํ ์คํฐ ๋ ธํธ)
- Keystore ํค๋ฅผ ์์ฑํ ๋
setUserAuthenticationRequired(true)๋ฐsetInvalidatedByBiometricEnrollment(true)๋ฅผ ๊ฐ์ ์ ์ฉํ์ธ์. ์ ํจํ ์์ฒด ์ธ์์ด ํ์ํฉ๋๋ค. - null ๋๋ ์์์น ๋ชปํ ์ํธ / ์๋ช
์ด ์๋
CryptoObject๋ฅผ ๊ฑฐ๋ถํ์ธ์; ์ด๋ฅผ ์น๋ช ์ ์ธ ์ธ์ฆ ์ค๋ฅ๋ก ๊ฐ์ฃผํฉ๋๋ค. BiometricPrompt๋ฅผ ์ฌ์ฉํ ๋,BIOMETRIC_STRONG์ ์ ํธํ๊ณ ๊ณ ์ํ ์์ ์ ๋ํดBIOMETRIC_WEAK๋๋DEVICE_CREDENTIAL๋ก ์ ๋ ๋์ฒดํ์ง ๋ง์ธ์.- ์ต์
androidx.biometric๋ฒ์ (โฅ1.2.0-beta02)์ ๊ณ ์ ํ์ธ์ โ ์ต๊ทผ ๋ฆด๋ฆฌ์ค๋ ์๋ null-์ํธ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๊ณ ํ์ฉ๋ ์ธ์ฆ์ ์กฐํฉ์ ๊ฐํํฉ๋๋ค.
์ฐธ๊ณ ๋ฌธํ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


