-
[μλλ‘μ΄λ 리λ²μ±] μλλ‘μ΄λ μμ€ν μ΄ν΄ :: 보μ λͺ¨λΈ, μλͺ , ν€μ€ν μ΄, apkSECURITY/Android Reversing 2022. 1. 20. 00:14
μλλ‘μ΄λ 보μ λͺ¨λΈκ³Ό, κ°λ°μ μλͺ , .apk νμΌ λ± μ΄λ€ 보μμ μΈ μμκ° μ μ©λκ³ μκ³ ,
μ€μ λ°°ν¬κΉμ§ μ΄λ€ μΌμ΄ λ°μνλμ§ μ΄ν΄λ³΄κ² μ΅λλ€.
μλλ‘μ΄λ 보μ λͺ¨λΈ
μλλ‘μ΄λλ κΈ°λ³Έμ μΈ λ¦¬λ μ€ μ»€λ + μ€λ§νΈν°μ λ§λ 보μ κΈ°λ₯ ꡬμ±ν©λλ€.
κ·Έ μ€μμ μ§κ³ λμ΄κ°μΌ ν μ¬νλ€μ κ°λ¨ν μ΄ν΄λ³΄κ³ λμ΄κ°κ² μ΅λλ€.
- UID: μ± μ€μΉ μ κ³ μ ν UID λ₯Ό μλμΌλ‘ ν λΉν΄μ£Όλλ°, μ΄λ μ±μ 보νΈν΄μ£Όλ μλλ°μ€ μν μ νλ€.
- Permission: μ±μ νμν κΆνμ μ±μμ μμ²ν΄μΌ νλ€. (ex. μΉ΄λ©λΌ, μ ν λ±) μ΄λ AndroidManifest.xml μ μμ±ν΄λκ³ νμν λ κΆνμ μμ²νλ©΄ λλ€.
- TrustZone: μ£Όμν μ 보λ₯Ό λΆλ¦¬λ 곡κ°μ μ μ₯ν΄λλ κ². μ¦, λλ°μ΄μ€ 곡κ°μ 물리μ / λ Όλ¦¬μ μμμΌλ‘ λΆλ¦¬νμ¬ μ€μν λ΄μ©μ΄ λ°λ‘ λ ΈμΆλμ§ μλλ‘ νλ€. μ΄λ κ² λ³΄νΈλλ μμμ TEE (Trusted Execution Environment) λΌκ³ νλ€.
- κ°λ°μ μλͺ : μΆμ, μ¦ release μλ λ°λμ κ°λ°μ μλͺ μ΄ νμνλ€. (λ¨, debug λͺ¨λμμλ μλͺ μ΄ νμνμ§ μλ€)
- μνΈνμ ν΄μ νΈλ¦¬λ₯Ό μ΄μ©νμ¬ λλ°μ΄μ€μ 무결μ±μ κ²μ¦νλ€. μνΈνμ ν΄μλ₯Ό μ¬μ©νλ€λ κ²μ, μλ³Έμ΄ μμ λμλμ§ νμΈνλ €λ κ²μ΄κ³ μ΄λ₯Ό ν΅ν΄ 무결μ±μ κ²μ¦ν μ μλ€.
- SELinux: κ°μ μ κ·Ό μ μ΄λ₯Ό ν¬ν¨ν μ κ·Ό μ μ΄ λ³΄μ μ μ± μ μ§μνλ 리λ μ€ μ»€λ 보μ λͺ¨λλ‘, μλλ‘μ΄λ 5.0 λΆν° μμ ν μ μ©λκ³ μλ€. (μ κ·Ό μ μ΄ DAC, MAC, RBAC μ€ MAC μ ν΄λΉ) κ°μ μ κ·Ό μ μ΄λ "κ΄λ¦¬μ"μ μν΄ μ μλ κΆνκΉμ§λ§ μ¬μ© κ°λ₯νκ² νλ€λ κ²μ΄λ€.
μλλ‘μ΄λ μ± λΉλ νλ‘μΈμ€
Android λΉλ μμ€ν μ ,
- μ± λ¦¬μμ€ λ° μμ€ μ½λλ₯Ό μ»΄νμΌ
- ν μ€νΈ
- μλͺ
- λ°°ν¬ν μ μλ Android Application Package (APK) λλ Android App Bundle (AAB) λ‘ ν¨ν€μ§
μ ν©λλ€.
Android Studio λ Gradle μ μ¬μ©νμ¬ λΉλ νλ‘μΈμ€λ₯Ό μλννκ³ κ΄λ¦¬ν©λλ€.
Gradle μμ μμ±ν λ΄μ©μ Android Studio μ λ 립μ μΌλ‘ μλνμ¬ Android Studio κ° μ€μΉλμ§ μμμ΄λ λΉλκ° κ°λ₯ν©λλ€.
λ°λΌμ λΉλ νλ‘μΈμ€λ λ€μκ³Ό κ°μ΄ νλ‘μ νΈλ₯Ό APK λ AAB λ‘ λ³ννλ κ³Όμ μΌλ‘ λ³Ό μ μμ΅λλ€.
μ μ¬μ§μ μΌλ°μ μΈ Android μ± λΉλ νλ‘μΈμ€λ₯Ό 보μ¬μ€λλ€.
- 1) Compiler λ μμ€ μ½λλ₯Ό DEX (Dalvik Executable) λ‘ λ³ννκ³ , λ€λ₯Έ λͺ¨λ κ²λ μ»΄νμΌλ 리μμ€λ‘ λ³ννλ€. DEX νμΌμλ Android κΈ°κΈ°μμ μ€νλλ λ°μ΄νΈ μ½λκ° ν¬ν¨λλ€. (Dalvik μ λν μ 보λ μ΄μ ν¬μ€ν )
- 2) μΆμλ₯Ό μν΄ λΉλλ₯Ό μ€λΉνλ κ°λ°μλ μΆμ λ²μ μ ν€μ€ν μ΄λ₯Ό μ€λΉν©λλ€.
- 3) Packager λ DEX νμΌ + μ»΄νμΌλ 리μμ€λ₯Ό κ²°ν©νμ¬ APK λλ AAB (μ ν) λ₯Ό λ§λ λ€.
- 4) Packager κ° ν€μ€ν μ΄λ₯Ό μ¬μ©ν΄ 3) μμ λ§λ APK λ AAB μ μλͺ νλ€. (μΆμνλ €λ©΄ κΌ ν΄μΌν¨)
- 5) μ΅μ’ APK λ₯Ό μμ±νκΈ° μ μ, Packager λ μ±μ μ΅μ ννκΈ° μν΄ zipalign λꡬλ₯Ό μ¬μ©νλ€.
μ΄λ κ² μμ±ν APK νμΌμ λ°λ‘ μ€λ§νΈν°μ μ€μΉν μ μκ³ , μΆμν μ μμ΅λλ€.
(λ¬Όλ‘ λ°°ν¬λ μ λΉν μ±μ€ν μ΄μμ!)
μ± μλͺ
μ±μ μλͺ νλ κ²μ ν΅ν΄ μ΄ μ±μ λ³κ²½ν μ¬μ©μλ₯Ό μκ³ , μ λΉν μ¬μ©μμΈμ§ νμΈν μ μμ΅λλ€.
μ¦, μ 3μκ° μ±μ λ³νμν€κ³ λ€μ μ€ν μ΄μ μ λ‘λμν€λ κ²μ λΆκ°λ₯νκ² νλ €λ κ²μΈ λμμ μ±μ λν μ± μμ (λΆμ λ°©μ§) λλ κ²μΌλ‘ μ΄ν΄νλ©΄ λ κ²μ λλ€.
Google μμλ Play μ± μλͺ μΌλ‘ μ±μ μλͺ ν€λ₯Ό κ΄λ¦¬νκ³ λ³΄νΈνλ©°, λ°°ν¬ν APK μ μλͺ νλ λ°μ μ¬μ©ν©λλ€.
Play μ± μλͺ μ 2021λ 8μ μ΄μ μλ μ νμ¬νμ΄μμΌλ, μ΄μ λ Google Play μ€ν μ΄μ μ λ‘λνλ €λ©΄ νμμ¬νμ λλ€.
Play μ± μλͺ μ μλͺ ν€μ μ λ‘λ ν€μ 2κ°μ§ ν€λ₯Ό μ¬μ©ν©λλ€.
- μλͺ ν€: μ¬μ©μμ μ μ νμΈ, λ°°ν¬λ₯Ό μν΄ APK μ μλͺ νλ λ°μ μ¬μ©
- μ
λ‘λ ν€: κ°λ°μκ° λ³΄κ΄νλ€κ° μ±μ Google Play μ€ν μ΄μ μ
λ‘λνκΈ° μν΄ μλͺ
ν λ μ¬μ©
λ¨, μλ‘μ΄ μ λ‘λ ν€λ₯Ό μμ±νμ§ μμΌλ©΄ μ± μλͺ ν€λ₯Ό μ λ‘λ ν€λ‘ μ¬μ©νκ² λ©λλ€.
μ¬κΈ°μ λ³λμ μ λ‘λ ν€λ₯Ό μ¬μ©νλ©΄ μ¬κ±΄ λ°μ μ μ λ‘λ ν€ μ¬μ€μ μ μμ²ν μ μμ΅λλ€.
(μ£Όμ: 2021λ 8μ μ΄μ μ μμ±ν μ± μ€ Play μ± μλͺ μ μ ννμ§ μμ κ²½μ° μ± μλͺ ν€λ₯Ό λΆμ€νλ©΄ μ±μ μ λ°μ΄νΈν μ μμ΅λλ€.)
λν, μ± μλͺ ν€μ μ λ‘λ ν€λ λ°λμ κΈ°λ°λ‘ μ μ§νλ, κ° ν€λ₯Ό μ¬μ©νμ¬ μμ±ν μΈμ¦μλ 곡μ ν μ μμ΅λλ€.
Play μ± μλͺ μ ꡬμ±ν ν μ±μ μΆμνλ©΄ Google Playμμ μ±μ μλͺ ν€λ₯Ό μμ±(κΈ°μ‘΄ ν€λ₯Ό μ λ‘λν κ²½μ° μ μΈ)νκ³ κ΄λ¦¬ν©λλ€.
μ΄λ° ν€μ€ν μ΄λ₯Ό μμ±νλ κ²μ Android Studio μμ κ°λ¨ν ν μ μμ΅λλ€.
ν€μ€ν μ΄λ₯Ό λ§λ€ λ νμν κ²μ μ μ₯ μμΉ, λΉλ°λ²νΈ, μ ν¨κΈ°κ° λ±μ΄ μμ΅λλ€.
ν€μ€ν μ΄ κ΅¬μ‘°
Android Keystore μμ€ν μ Android 4.0 μμ λμ λ KeyChain API (https://developer.android.com/reference/android/security/KeyChain) μμ μ¬μ©λ©λλ€. μ¦, KeyChain μΌλ‘ X.509 (μΈμ¦μ νμ€) μΈμ¦μ chain μΈμ¦μ μ§ννλ κ²μΌλ‘, λ£¨νΈ μΈμ¦μμ μ ν¨μ±μ νλ¨ν©λλ€.
ν€μ€ν μ΄λ μνΈν ν€λ₯Ό 컨ν μ΄λμ μ μ₯νμ¬ ν€λ₯Ό μΆμΆνκΈ° μ΄λ ΅κ² λ§λ€λ©΄μ ν€λ₯Ό μνΈνμ μ¬μ©ν μ μμ΅λλ€.
λν, λ€μμ νΉμ§μ΄ μμ΅λλ€.
- μ± νλ‘μΈμ€κ° μμλ κ²½μ° κ³΅κ²©μκ° μ± ν€λ₯Ό μ¬μ©ν μ μμ§λ§ Android κΈ°κΈ° μΈλΆμμ μ¬μ©νκΈ° μν΄ ν€ μλ£λ₯Ό μΆμΆν μλ μλ€.
- ν€ μλ£λ₯Ό Android κΈ°κΈ°μ 보μ νλμ¨μ΄(TEE(μ λ’°ν μ μλ μ€ν νκ²½), SE(보μ μμ) λ±)μ λ°μΈλ©ν μ μλ€. ν€μ μ΄ κΈ°λ₯μ μ¬μ©νλλ‘ μ€μ νλ©΄ ν€ μλ£κ° 보μ νλμ¨μ΄ μΈλΆμ λ ΈμΆλμ§ μλλ€. μ¦, apk μ ν€μ€ν μ΄λ₯Ό λμ§ μμμ apk κ° λ ΈμΆλμ΄λ 곡격μκ° ν€λ₯Ό μΆμΆν μ μλ€.
- μμ€ν μ StrongBox Keymaster (Android 9 μ΄μμμ, νλμ¨μ΄ 보μ λͺ¨λμ μμ£Όνλ Keymaster HAL ꡬν) μ μ μ₯λ ν€λ₯Ό κ²μ¬ν λ TEE(μ λ’°ν μ μλ μ€ν νκ²½) λ₯Ό μ¬μ©νμ¬ ν€μ 무결μ±μ μ μ¦ν©λλ€.
KeyStoreλ KeyPairGenerator λ° KeyGenerator μ λμΌν ν€ μ νμ μ§μν©λλ€.
- KeyGenerator μ§μ μκ³ λ¦¬μ¦: AES, HmacSHA1, HmacSHA224, HmacSHA256, HmacSHA384, HmacSHA1
(https://developer.android.com/training/articles/keystore?hl=ko#SupportedKeyGenerators) - KeyPairGenerator μ§μ μκ³ λ¦¬μ¦: EC, RSA
(https://developer.android.com/training/articles/keystore?hl=ko#SupportedKeyPairGenerators)
곡κ°ν€, λμΉν€ μνΈ μκ³ λ¦¬μ¦μ λͺ¨λ μ§μνλ κ²μ νμΈν μ μμ΅λλ€.
μ΄λ° ν€μ€ν μ΄λ κ·Έ 보μμ±μΌλ‘ μΈν΄ μλͺ ν€ λΏλ§ μλλΌ, λ€λ₯Έ λ―Όκ°ν μ 보λ€μ μ μ₯νλ λ°μ μ΄μ©νκΈ°λ ν©λλ€.
.apk νμΌμ΄λ?
μλλ‘μ΄λ μ±μ κΈ°λ³Έμ μΌλ‘ .apk λΌλ νμ₯μλ₯Ό κ°μ§μ§λ§, μ¬μ€μ zip νμμΌλ‘ μμΆλ νμΌμ λλ€.
μμ€ νμΌ (.class) μ Dalvik μ΄ μΈμν μ μλλ‘ dex νμΌλ‘ λ³ν ν Packager κ° μμ±νλ νμΌλ‘, μΈμ¦μ μν μλͺ λ ν¬ν¨λμ΄ μμ΅λλ€. μ΄λ₯Ό μ€λ§νΈν°μμ μ€νμν€λ©΄ μ€μ§μ μΈ μ€ν νμΌμΈ dex νμΌμ΄ Dalvik VM μμ μλνκ² λ©λλ€.
dex νμΌμ ꡬ쑰λ https://source.android.com/devices/tech/dalvik/dex-format.html μμ νμΈν μ μμ΅λλ€.
apk λ΄λΆ ꡬ쑰λ apk μ μμΆμ νλ©΄ νμΈν μ μλλ°, λ€μκ³Ό κ°μ΄ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
- META-INF: μλͺ κ³Ό κ΄λ ¨λ μ 보
- lib: λΌμ΄λΈλ¬λ¦¬ νμΌ (.so)
- res: μ± μ€νμ νμν resource. λ³΄ν΅ μμ΄μ½ κ°μ νμΌμ΄ ν¬ν¨λμ΄ μλ€. (μ»΄νμΌ X)
- assets: μ± μ€νμ νμν μμ. res λ³΄λ€ μ©λμ΄ ν° λμμ κ°μ νμΌμ μ μ₯νλ€. (μ»΄νμΌ O)
- AndroidManifest.xml: μ±μ μ 보λ₯Ό μ μ₯νλ νμΌ. ν¨ν€μ§λͺ , λ²μ , κΆν μ 보 λ±μ΄ ν¬ν¨λμ΄ μλ€. λ¨, λμ»΄νμΌ μμ΄ λ³΄λ©΄μ .xml νμΌμ λ°μ΄λλ¦¬λ‘ λμ΄μμ΄μ λ΄μ©μ μμ보기 νλ€λ€.
- classes.dex: .class νμΌμ bytecode λ‘ λ³νμν¨ .dex μμ€ νμΌ
- resources.arsc: 리λ‘μ€μ λ°°μ΄μ΄λΌλ λ»μΌλ‘, res μ μ λ³΄κ° κΈ°λ‘λμ΄ μλ€.
μ΄λ° ꡬ쑰λ μ§μ apk νμΌμ λ―μ΄λ³΄λ©° μ΄ν΄λ³΄λ©΄ μ’μ κ²μ΄κ³ , μ΄ν μ€μ λ‘ ν΄λ³΄λλ‘ νκ² μ΅λλ€.
'SECURITY > Android Reversing' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ