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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
κΆν λΆλ¦¬ λ° μλλ°μ€
iOSμμλ μ¬μ©μ μ κ·Ό κ°λ₯ν μ ν리μΌμ΄μ
κ³Ό μμ€ν
μ ν΅μ¬ νλ‘μΈμ€ κ°μ κΆνμ ꡬλΆμ΄ μ‘΄μ¬ν©λλ€. μ ν리μΌμ΄μ
μ mobile μ¬μ©μ μ μ μλμμ μ€νλλ©°, μ€μν μμ€ν
νλ‘μΈμ€λ **root**λ‘ μλν©λλ€. μ΄ λΆλ¦¬λ μ ν리μΌμ΄μ
μ΄ μνν μ μλ μμ
μ μ격ν μ νμ λΆκ³Όνλ μλλ°μ€ λ©μ»€λμ¦μ μν΄ κ°νλ©λλ€. μλ₯Ό λ€μ΄, μ ν리μΌμ΄μ
μ΄ λμΌν μ¬μ©μ μ μμ 곡μ νλλΌλ μλ‘μ λ°μ΄ν°μ μ κ·Όνκ±°λ μμ νλ κ²μ κΈμ§λ©λλ€.
μ ν리μΌμ΄μ
μ νΉμ λλ ν 리(private/var/mobile/Applications/{random ID})μ μ€μΉλλ©°, SMS λ° μ ν ν΅νμ κ°μ νΉμ μμ€ν
μμ λ° κΈ°λ₯μ λν μ νλ μ½κΈ° μ κ·Ό κΆνμ κ°μ§λλ€. 보νΈλ μμμ λν μ κ·Όμ μ¬μ©μ κΆν μμ² νμ
μ νΈλ¦¬κ±°ν©λλ€.
λ°μ΄ν° 보νΈ
iOSλ κ°λ°μμκ² λ°μ΄ν° λ³΄νΈ APIλ₯Ό μ 곡ν©λλ€. μ΄λ μνΈν μμ λ° ν€ κ΄λ¦¬λ₯Ό μν μ μ© μ½νλ‘μΈμμΈ Secure Enclave Processor (SEP) μμ ꡬμΆλμ΄ μμ΅λλ€. SEPλ μ₯μΉ UIDλΌλ κ³ μ ν μ₯μΉ μ μ© ν€λ₯Ό λ΄μ₯νμ¬ λ°μ΄ν° λ³΄νΈ λ¬΄κ²°μ±μ 보μ₯ν©λλ€.
νμΌ μμ± μ, κ³ μ ν 256λΉνΈ AES μνΈν ν€κ° μμ±λμ΄ νμΌμ λ΄μ©μ μνΈνν©λλ€. μ΄ μνΈν ν€λ ν΄λμ€ IDμ ν¨κ» ν΄λμ€ ν€λ₯Ό μ¬μ©νμ¬ μνΈνλκ³ νμΌμ λ©νλ°μ΄ν°μ μ μ₯λ©λλ€. νμΌμ 볡νΈννλ €λ©΄ μμ€ν ν€λ₯Ό μ¬μ©νμ¬ λ©νλ°μ΄ν°μ μ κ·Όνκ³ , ν΄λμ€ IDλ‘ ν΄λμ€ ν€λ₯Ό κ²μν λ€μ, νμΌμ κ³ μ ν μνΈν ν€λ₯Ό 볡νΈνν©λλ€.
iOSλ λ°μ΄ν° 보μμ μν΄ λ€ κ°μ§ λ³΄νΈ ν΄λμ€λ₯Ό μ μνλ©°, μ΄λ λ°μ΄ν°μ μ κ·Όν μ μλ μκΈ°μ λ°©λ²μ κ²°μ ν©λλ€:
- μμ λ³΄νΈ (NSFileProtectionComplete): μ¬μ©μμ λΉλ°λ²νΈλ‘ μ₯μΉκ° μ κΈ ν΄μ λ λκΉμ§ λ°μ΄ν°μ μ κ·Όν μ μμ΅λλ€.
- μ΄λ € μμ§ μλ ν 보νΈλ¨ (NSFileProtectionCompleteUnlessOpen): μ₯μΉκ° μ κΈ μνμΌ λλ νμΌμ μ κ·Όν μ μμΌλ©°, λ¨ μ‘°κ±΄μ μ₯μΉκ° μ κΈ ν΄μ λ λ νμΌμ΄ μ΄λ € μμ΄μΌ ν©λλ€.
- 첫 μ¬μ©μ μΈμ¦κΉμ§ 보νΈλ¨ (NSFileProtectionCompleteUntilFirstUserAuthentication): λΆν ν 첫 μ¬μ©μ μ κΈ ν΄μ μ΄ν λ°μ΄ν°μ μ κ·Όν μ μμΌλ©°, μ₯μΉκ° λ€μ μ κΈ μνκ° λμ΄λ μ κ·Όμ΄ κ°λ₯ν©λλ€.
- λ³΄νΈ μμ (NSFileProtectionNone): λ°μ΄ν°λ μ₯μΉ UIDμ μν΄μλ§ λ³΄νΈλλ©°, λΉ λ₯Έ μ격 λ°μ΄ν° μμ λ₯Ό μ©μ΄νκ² ν©λλ€.
NSFileProtectionNoneμ μ μΈν λͺ¨λ ν΄λμ€μ μνΈνλ μ₯μΉ UIDμ μ¬μ©μμ λΉλ°λ²νΈμμ νμλ ν€λ₯Ό ν¬ν¨νμ¬, 볡νΈνκ° μ¬λ°λ₯Έ λΉλ°λ²νΈλ₯Ό κ°μ§ μ₯μΉμμλ§ κ°λ₯νλλ‘ λ³΄μ₯ν©λλ€. iOS 7 μ΄ν κΈ°λ³Έ λ³΄νΈ ν΄λμ€λ β첫 μ¬μ©μ μΈμ¦κΉμ§ 보νΈλ¨βμ
λλ€.
κ°λ°μλ iPhoneμ νμΌ λ°μ΄ν° λ³΄νΈ ν΄λμ€λ₯Ό κ²μ¬νκΈ° μν λκ΅¬μΈ FileDPλ₯Ό μ¬μ©ν μ μμ΅λλ€.
# Example code to use FileDP for checking file protection class
# Note: Ensure your device is jailbroken and has Python installed to use FileDP.
# Installation and usage of FileDP:
git clone https://github.com/abjurato/FileDp-Source
cd FileDp-Source
python filedp.py /path/to/check
ν€μ²΄μΈ
iOSμμ ν€μ²΄μΈμ λ―Όκ°ν μ 보λ₯Ό μ μ₯νκΈ° μν μμ ν μνΈνλ 컨ν μ΄λ μν μ νλ©°, μ΄λ₯Ό μ μ₯ν μ ν리μΌμ΄μ μ΄λ λͺ μμ μΌλ‘ κΆνμ λΆμ¬λ°μ μ ν리μΌμ΄μ λ§ μ κ·Όν μ μμ΅λλ€. μ΄ μνΈνλ iOSμ μν΄ μμ±λ κ³ μ ν λΉλ°λ²νΈλ‘ κ°νλλ©°, μ΄ λΉλ°λ²νΈλ AESλ‘ μνΈνλ©λλ€. μ΄ μνΈν κ³Όμ μ PBKDF2 ν¨μλ₯Ό νμ©νμ¬ μ¬μ©μμ ν¨μ€μ½λμ μ₯μΉμ UIDμμ νμλ μνΈλ₯Ό κ²°ν©ν©λλ€. μ΄ κ΅¬μ± μμλ μ€μ§ 보μ μν΄λ μ΄λΈ μΉ©μ λ§ μ κ·Όν μ μμ΅λλ€. λ°λΌμ μ¬μ©μμ ν¨μ€μ½λκ° μλ €μ Έλ, ν€μ²΄μΈ λ΄μ©μ μλ μνΈνλ μ₯μΉ μΈμ λ€λ₯Έ μ₯μΉμμλ μ κ·Όν μ μμ΅λλ€.
ν€μ²΄μΈ λ°μ΄ν°μ κ΄λ¦¬ λ° μ κ·Όμ Keychain-access-groups λ° application-identifierμ κ°μ νΉμ μ± κΆνμ λ°λΌ securityd λ°λͺ¬μ μν΄ μ²λ¦¬λ©λλ€.
ν€μ²΄μΈ API μμ
ν€μ²΄μΈ APIλ Appleμ ν€μ²΄μΈ μλΉμ€ λ¬Έμμμ μμΈν μ€λͺ λμ΄ μμΌλ©°, μμ ν μ μ₯ κ΄λ¦¬μ νμν νμ κΈ°λ₯μ μ 곡ν©λλ€:
SecItemAdd: ν€μ²΄μΈμ μ νλͺ©μ μΆκ°ν©λλ€.SecItemUpdate: ν€μ²΄μΈμ μλ κΈ°μ‘΄ νλͺ©μ μ λ°μ΄νΈν©λλ€.SecItemCopyMatching: ν€μ²΄μΈμμ νλͺ©μ κ²μν©λλ€.SecItemDelete: ν€μ²΄μΈμμ νλͺ©μ μ κ±°ν©λλ€.
ν€μ²΄μΈ λΉλ°λ²νΈλ₯Ό λ¬΄μ°¨λ³ λμ νλ κ²μ μνΈνλ ν€λ₯Ό μ§μ 곡격νκ±°λ μ₯μΉ μ체μμ ν¨μ€μ½λλ₯Ό μΆμΈ‘νλ €κ³ μλνλ κ²μ ν¬ν¨νλ©°, 보μ μν΄λ μ΄λΈκ° μ€ν¨ν μλ κ°μ μ§μ°μ κ°μ ν¨μΌλ‘μ¨ ν¬κ² λ°©ν΄λ°μ΅λλ€.
ν€μ²΄μΈ νλͺ© λ°μ΄ν° λ³΄νΈ κ΅¬μ±
ν€μ²΄μΈ νλͺ©μ λ°μ΄ν° λ³΄νΈ μμ€μ νλͺ© μμ± λλ μ
λ°μ΄νΈ μ kSecAttrAccessible μμ±μ μ¬μ©νμ¬ μ€μ λ©λλ€. μ΄λ¬ν μμ€μ Appleμμ μ§μ ν λλ‘ ν€μ²΄μΈ νλͺ©μ μ κ·Όν μ μλ μκΈ°μ λ°©λ²μ κ²°μ ν©λλ€:
kSecAttrAccessibleAlways: μ₯μΉ μ κΈ μνμ κ΄κ³μμ΄ μΈμ λ μ§ μ κ·Ό κ°λ₯.kSecAttrAccessibleAlwaysThisDeviceOnly: νμ μ κ·Ό κ°λ₯νμ§λ§ λ°±μ μ ν¬ν¨λμ§ μμ.kSecAttrAccessibleAfterFirstUnlock: μ¬μμ ν 첫 μ κΈ ν΄μ ν μ κ·Ό κ°λ₯.kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: μμ λμΌνμ§λ§ μλ‘μ΄ μ₯μΉλ‘ μ΄μ ν μ μμ.kSecAttrAccessibleWhenUnlocked: μ₯μΉκ° μ κΈ ν΄μ λ κ²½μ°μλ§ μ κ·Ό κ°λ₯.kSecAttrAccessibleWhenUnlockedThisDeviceOnly: μ κΈ ν΄μ μ μ κ·Ό κ°λ₯, λ°±μ μ ν¬ν¨λμ§ μμ.kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: μ₯μΉ ν¨μ€μ½λκ° νμνλ©°, λ°±μ μ ν¬ν¨λμ§ μμ.
**AccessControlFlags**λ μ체 μΈμ¦ λλ ν¨μ€μ½λ μ¬μ©μ νμ©νμ¬ μ κ·Ό λ°©λ²μ λμ± μΈλΆνν©λλ€.
νμ₯ μ₯μΉ κ²½κ³
Warning
νμ₯λ μ₯μΉμμλ ν€μ²΄μΈμ 보νΈκ° μμλμ΄ μλΉν 보μ μνμ μ΄λν©λλ€.
ν€μ²΄μΈ λ°μ΄ν°μ μ§μμ±
μ±μ΄ μμ λ λ μμ λλ μ± νΉμ λ°μ΄ν°μ λ¬λ¦¬, ν€μ²΄μΈ λ°μ΄ν°λ μ₯μΉμ μ§μλ©λλ€. μ΄ νΉμ±μΌλ‘ μΈν΄ μ€κ³ μ₯μΉμ μλ‘μ΄ μμ μλ μ±μ μ¬μ€μΉνκΈ°λ§ νλ©΄ μ΄μ μμ μμ μ ν리μΌμ΄μ λ°μ΄ν°μ μ κ·Όν μ μμ΅λλ€. κ°λ°μλ μ΄ μνμ μννκΈ° μν΄ μ± μ€μΉ μ λλ λ‘κ·Έμμ μ ν€μ²΄μΈ λ°μ΄ν°λ₯Ό μ¬μ μ μΌλ‘ μ§μ°λ κ²μ΄ μ’μ΅λλ€. λ€μμ 첫 μ± μ€ν μ ν€μ²΄μΈ λ°μ΄ν°λ₯Ό μ§μ°λ λ°©λ²μ 보μ¬μ£Όλ Swift μ½λ μμ μ λλ€:
let userDefaults = UserDefaults.standard
if userDefaults.bool(forKey: "hasRunBefore") == false {
// Remove Keychain items here
// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}
μ± κΈ°λ₯
μ± κ°λ° λΆμΌμμ μλλ°μ±μ 보μμ κ°ννλ λ° μ€μν μν μ ν©λλ€. μ΄ κ³Όμ μ κ° μ±μ΄ κ³ μ ν ν λλ ν 리 λ΄μμ μλνλλ‘ λ³΄μ₯νμ¬ μμ€ν νμΌμ΄λ λ€λ₯Έ μ±μ λ°μ΄ν°μ μ κ·Όνλ κ²μ λ°©μ§ν©λλ€. μ΄λ¬ν μ ν μ¬νμ μνμ μ λ’°ν μ μλ BSD (MAC) μ무 μ κ·Ό μ μ΄ νλ μμν¬μ μΌνμΈ μλλ°μ€ μ μ± μ ν΅ν΄ μ΄λ£¨μ΄μ§λλ€.
κ°λ°μλ λ°μ΄ν° λ³΄νΈ λλ ν€μ²΄μΈ 곡μ μ κ°μ νΉμ κΈ°λ₯ λλ κΆνμ μ±μ ꡬμ±ν μ μλ λ₯λ ₯μ κ°μ§κ³ μμ΅λλ€. μ΄λ¬ν κΆνμ μ±μ΄ μ€μΉλ μ§νμ μ μ©λ©λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ νΉμ 보νΈλ 리μμ€μ μ κ·ΌνκΈ° μν΄μλ μ±μ΄ 첫 μλ μ μ¬μ©μλ‘λΆν° λͺ μμ μΈ λμλ₯Ό λ°μμΌ ν©λλ€. μ΄λ λͺ©μ λ¬Έμμ΄ λλ _μ¬μ© μ€λͺ λ¬Έμμ΄_μ μ¬μ©νμ¬ μ΄λ£¨μ΄μ§λ©°, μ΄λ κΆν μμ² μλ¦Όμμ μ¬μ©μμκ² νμλ©λλ€.
μμ€ μ½λμ μ κ·Όν μ μλ κ²½μ°, Info.plist νμΌμ ν¬ν¨λ κΆνμ νμΈνλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
- Xcodeμμ νλ‘μ νΈ μ΄κΈ°.
Info.plistνμΌ μ°Ύκ³ μ΄κΈ°."Privacy -"λ‘ μμνλ ν€λ₯Ό κ²μνλ©°, λͺ νμ±μ μν΄ μμ ν€/κ°μ λ³Ό μ μλ μ΅μ μ μ νν©λλ€.
IPA νμΌμ λ€λ£° λλ λ€μ λ¨κ³λ₯Ό λ°λ₯Ό μ μμ΅λλ€:
- IPA μμΆ ν΄μ .
Payload/<appname>.app/λ΄μμInfo.plistνμΌ μ°ΎκΈ°.- νμ μ νμΌμ XML νμμΌλ‘ λ³ννμ¬ λ μ½κ² κ²μ¬ν©λλ€.
μλ₯Ό λ€μ΄, Info.plist νμΌμ λͺ©μ λ¬Έμμ΄μ λ€μκ³Ό κ°μ΄ λ³΄μΌ μ μμ΅λλ€:
<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>
Device Capabilities
μ±μ Info.plist νμΌμ μ₯μΉ κΈ°λ₯μ μ§μ νμ¬ App Storeκ° μ₯μΉ νΈνμ±μ μν΄ μ±μ νν°λ§νλ λ° λμμ μ€λλ€. μ΄λ UIRequiredDeviceCapabilities ν€ μλμ μ μλ©λλ€. μλ₯Ό λ€μ΄:
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
μ΄ μμλ μ±μ΄ armv7 λͺ λ Ήμ΄ μ§ν©κ³Ό νΈνλλ€λ κ²μ λνλ λλ€. κ°λ°μλ nfcμ κ°μ κΈ°λ₯μ μ§μ νμ¬ μ±μ΄ NFCλ₯Ό μ§μνλ μ₯μΉμμλ§ μ¬μ©ν μ μλλ‘ ν μ μμ΅λλ€.
κΆν
κΆνμ iOS μ± κ°λ°μ λ λ€λ₯Έ μ€μν μΈ‘λ©΄μΌλ‘, μ±μ΄ λ°νμ κ²μ¬ μ΄μμ νΉμ μμ μ μνν μ μλ κΆνμ λΆμ¬νλ ν€-κ° μμΌλ‘ μμ©ν©λλ€. μλ₯Ό λ€μ΄, μ±μμ λ°μ΄ν° 보νΈλ₯Ό νμ±ννλ €λ©΄ Xcode νλ‘μ νΈμ νΉμ κΆνμ μΆκ°ν΄μΌ νλ©°, μ΄λ μ±μ κΆν νμΌμ΄λ IPAμ λ΄μ₯ λͺ¨λ°μΌ νλ‘λΉμ νμΌμ λ°μλ©λλ€.
μ°Έκ³ λ¬Έν
- https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage
- https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/
- https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


