macOS - AMFI - AppleMobileFileIntegrity
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
AppleMobileFileIntegrity.kext λ° amfid
μμ€ν μμ μ€νλλ μ½λμ 무결μ±μ 보μ₯νλ λ° μ€μ μ λλ©°, XNUμ μ½λ μλͺ κ²μ¦ λ€μ μλ λ Όλ¦¬λ₯Ό μ 곡ν©λλ€. λν κΆνμ νμΈνκ³ λλ²κΉ νμ© λλ μμ ν¬νΈ νλκ³Ό κ°μ λ€λ₯Έ λ―Όκ°ν μμ μ μ²λ¦¬ν μ μμ΅λλ€.
κ²λ€κ°, μΌλΆ μμ
μ κ²½μ° kextλ μ¬μ©μ 곡κ°μμ μ€νλλ λ°λͺ¬ /usr/libexec/amfidμ μ°λ½νλ κ²μ μ νΈν©λλ€. μ΄ μ λ’° κ΄κ³λ μ¬λ¬ νμ₯μμ μ
μ©λμμ΅λλ€.
AMFIλ MACF μ μ± μ μ¬μ©νλ©° μμλλ μκ° νν¬λ₯Ό λ±λ‘ν©λλ€. λν, μ΄λ₯Ό λ‘λνκ±°λ μΈλ‘λνλ κ²μ λ°©μ§νλ©΄ 컀λ ν¨λμ΄ λ°μν μ μμ΅λλ€. κ·Έλ¬λ AMFIλ₯Ό μ½νμν€λ λͺ κ°μ§ λΆν μΈμκ° μμ΅λλ€:
amfi_unrestricted_task_for_pid: νμν κΆν μμ΄ task_for_pidλ₯Ό νμ©amfi_allow_any_signature: λͺ¨λ μ½λ μλͺ μ νμ©cs_enforcement_disable: μ½λ μλͺ μ§νμ λΉνμ±ννλ μμ€ν μ 체 μΈμamfi_prevent_old_entitled_platform_binaries: κΆνμ΄ μλ νλ«νΌ λ°μ΄λ리λ₯Ό 무ν¨νamfi_get_out_of_my_way: amfiλ₯Ό μμ ν λΉνμ±ν
λ€μμ λ±λ‘λλ MACF μ μ± μ€ μΌλΆμ λλ€:
cred_check_label_update_execve:λ μ΄λΈ μ λ°μ΄νΈκ° μνλλ©° 1μ λ°νcred_label_associate: AMFIμ mac λ μ΄λΈ μ¬λ‘―μ λ μ΄λΈλ‘ μ λ°μ΄νΈcred_label_destroy: AMFIμ mac λ μ΄λΈ μ¬λ‘― μ κ±°cred_label_init: AMFIμ mac λ μ΄λΈ μ¬λ‘―μ 0 μ΄λcred_label_update_execve: νλ‘μΈμ€μ κΆνμ νμΈνμ¬ λ μ΄λΈμ μμ ν μ μλμ§ νμΈν©λλ€.file_check_mmap: mmapμ΄ λ©λͺ¨λ¦¬λ₯Ό νλνκ³ μ΄λ₯Ό μ€ν κ°λ₯μΌλ‘ μ€μ νλμ§ νμΈν©λλ€. μ΄ κ²½μ° λΌμ΄λΈλ¬λ¦¬ κ²μ¦μ΄ νμνμ§ νμΈνκ³ , νμνλ€λ©΄ λΌμ΄λΈλ¬λ¦¬ κ²μ¦ ν¨μλ₯Ό νΈμΆν©λλ€.file_check_library_validation: λΌμ΄λΈλ¬λ¦¬ κ²μ¦ ν¨μλ₯Ό νΈμΆνμ¬ νλ«νΌ λ°μ΄λλ¦¬κ° λ€λ₯Έ νλ«νΌ λ°μ΄λ리λ₯Ό λ‘λνλμ§ λλ νλ‘μΈμ€μ μλ‘ λ‘λλ νμΌμ΄ λμΌν TeamIDλ₯Ό κ°μ§κ³ μλμ§ νμΈν©λλ€. νΉμ κΆνμ λͺ¨λ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ‘λν μ μλλ‘ νμ©ν©λλ€.policy_initbsd: μ λ’°ν μ μλ NVRAM ν€ μ€μ policy_syscall: λ°μ΄λ리μ μ ν μλ μΈκ·Έλ¨ΌνΈκ° μλμ§, env λ³μλ₯Ό νμ©ν΄μΌ νλμ§μ κ°μ DYLD μ μ± μ νμΈν©λλ€β¦ μ΄λamfi_check_dyld_policy_self()λ₯Ό ν΅ν΄ νλ‘μΈμ€κ° μμλ λλ νΈμΆλ©λλ€.proc_check_inherit_ipc_ports: νλ‘μΈμ€κ° μ λ°μ΄λ리λ₯Ό μ€νν λ λ€λ₯Έ νλ‘μΈμ€κ° νλ‘μΈμ€μ μμ ν¬νΈμ λν SEND κΆνμ μ μ§ν΄μΌ νλμ§ νμΈν©λλ€. νλ«νΌ λ°μ΄λ리λ νμ©λλ©°,get-task-allowκΆνμ΄ μ΄λ₯Ό νμ©νκ³ ,task_for_pid-allowκΆνμ΄ νμ©λλ©° λμΌν TeamIDλ₯Ό κ°μ§ λ°μ΄λ리λ νμ©λ©λλ€.proc_check_expose_task: κΆν μ§νamfi_exc_action_check_exception_send: μμΈ λ©μμ§κ° λλ²κ±°μ μ μ‘λ©λλ€.amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update: μμΈ μ²λ¦¬(λλ²κΉ ) μ€ λ μ΄λΈ μλͺ μ£ΌκΈ°proc_check_get_task:get-task-allowμ κ°μ κΆνμ νμΈνμ¬ λ€λ₯Έ νλ‘μΈμ€κ° μμ ν¬νΈλ₯Ό κ°μ Έμ€κ³task_for_pid-allowκ° νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμ ν¬νΈλ₯Ό κ°μ Έμ¬ μ μλλ‘ νμ©νλμ§ νμΈν©λλ€. λ λ€ ν΄λΉλμ§ μμΌλ©΄amfid permitunrestricteddebuggingμ νΈμΆνμ¬ νμ©λλμ§ νμΈν©λλ€.proc_check_mprotect:mprotectκ°VM_PROT_TRUSTEDνλκ·Έμ ν¨κ» νΈμΆλλ©΄ κ±°λΆν©λλ€. μ΄λ ν΄λΉ μμμ΄ μ ν¨ν μ½λ μλͺ μ΄ μλ κ²μ²λΌ μ²λ¦¬λμ΄μΌ ν¨μ λνλ λλ€.vnode_check_exec: μ€ν νμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λλ λ νΈμΆλλ©°,cs_hard | cs_killμ μ€μ νμ¬ νμ΄μ§κ° 무ν¨νλλ©΄ νλ‘μΈμ€λ₯Ό μ’ λ£ν©λλ€.vnode_check_getextattr: MacOS:com.apple.root.installedλ°isVnodeQuarantined()νμΈvnode_check_setextattr: get + com.apple.private.allow-bless λ° λ΄λΆ μ€μΉμ λλ± κΆνvnode_check_signature: κΆν, μ λ’° μΊμ λ°amfidλ₯Ό μ¬μ©νμ¬ μ½λ μλͺ μ νμΈνκΈ° μν΄ XNUλ₯Ό νΈμΆνλ μ½λproc_check_run_cs_invalid:ptrace()νΈμΆ(PT_ATTACHλ°PT_TRACE_ME)μ κ°λ‘μ±λλ€.get-task-allow,run-invalid-allowλ°run-unsigned-codeμ κ°μ κΆνμ νμΈνκ³ , μμΌλ©΄ λλ²κΉ μ΄ νμ©λλμ§ νμΈν©λλ€.proc_check_map_anon: mmapμ΄MAP_JITνλκ·Έμ ν¨κ» νΈμΆλλ©΄ AMFIλdynamic-codesigningκΆνμ νμΈν©λλ€.
AMFI.kextλ λ€λ₯Έ 컀λ νμ₯μ μν APIλ λ
ΈμΆνλ©°, λ€μμ ν΅ν΄ μ’
μμ±μ μ°Ύμ μ μμ΅λλ€:
kextstat | grep " 19 " | cut -c2-5,50- | cut -d '(' -f1
Executing: /usr/bin/kmutil showloaded
No variant specified, falling back to release
8 com.apple.kec.corecrypto
19 com.apple.driver.AppleMobileFileIntegrity
22 com.apple.security.sandbox
24 com.apple.AppleSystemPolicy
67 com.apple.iokit.IOUSBHostFamily
70 com.apple.driver.AppleUSBTDM
71 com.apple.driver.AppleSEPKeyStore
74 com.apple.iokit.EndpointSecurity
81 com.apple.iokit.IOUserEthernet
101 com.apple.iokit.IO80211Family
102 com.apple.driver.AppleBCMWLANCore
118 com.apple.driver.AppleEmbeddedUSBHost
134 com.apple.iokit.IOGPUFamily
135 com.apple.AGXG13X
137 com.apple.iokit.IOMobileGraphicsFamily
138 com.apple.iokit.IOMobileGraphicsFamily-DCP
162 com.apple.iokit.IONVMeFamily
amfid
μ΄κ²μ AMFI.kextκ° μ¬μ©μ λͺ¨λμμ μ½λ μλͺ
μ νμΈνλ λ° μ¬μ©ν μ¬μ©μ λͺ¨λ μ€ν λ°λͺ¬μ
λλ€.AMFI.kextκ° λ°λͺ¬κ³Ό ν΅μ νκΈ° μν΄ HOST_AMFID_PORTλΌλ νΉλ³ν ν¬νΈ 18λ₯Ό ν΅ν΄ mach λ©μμ§λ₯Ό μ¬μ©ν©λλ€.
macOSμμλ λ£¨νΈ νλ‘μΈμ€κ° νΉλ³ν ν¬νΈλ₯Ό κ°λ‘μ±λ κ²μ΄ λ μ΄μ λΆκ°λ₯νλ€λ μ μ μ μν΄μΌ ν©λλ€. μ΄λ SIPμ μν΄ λ³΄νΈλλ©° μ€μ§ launchdλ§μ΄ μ΄λ₯Ό μ»μ μ μμ΅λλ€. iOSμμλ μλ΅μ λ€μ 보λ΄λ νλ‘μΈμ€κ° amfidμ CDHashκ° νλμ½λ©λμ΄ μλμ§ νμΈν©λλ€.
amfidκ° μ΄μ§ νμΌμ νμΈνλλ‘ μμ²λ λμ κ·Έ μλ΅μ λ³Ό μ μμΌλ©°, μ΄λ₯Ό λλ²κΉ
νκ³ mach_msgμ μ€λ¨μ μ μ€μ νμ¬ νμΈν μ μμ΅λλ€.
νΉλ³ν ν¬νΈλ₯Ό ν΅ν΄ λ©μμ§κ° μμ λλ©΄ MIGκ° νΈμΆνλ ν¨μμ κ° ν¨μλ₯Ό μ μ‘νλ λ° μ¬μ©λ©λλ€. μ£Όμ ν¨μλ 리λ²μ€ μμ§λμ΄λ§λμ΄ μ± μμμ μ€λͺ λμμ΅λλ€.
Provisioning Profiles
νλ‘λΉμ λ νλ‘νμΌμ μ½λλ₯Ό μλͺ νλ λ° μ¬μ©ν μ μμ΅λλ€. μ½λ μλͺ λ° ν μ€νΈμ μ¬μ©ν μ μλ Developer νλ‘νμΌκ³Ό λͺ¨λ μ₯μΉμμ μ¬μ©ν μ μλ Enterprise νλ‘νμΌμ΄ μμ΅λλ€.
μ±μ΄ Apple Storeμ μ μΆλ ν μΉμΈλλ©΄ Appleμ μν΄ μλͺ λλ©° λ μ΄μ νλ‘λΉμ λ νλ‘νμΌμ΄ νμνμ§ μμ΅λλ€.
νλ‘νμΌμ μΌλ°μ μΌλ‘ .mobileprovision λλ .provisionprofile νμ₯μλ₯Ό μ¬μ©νλ©°, λ€μκ³Ό κ°μ΄ λ€νν μ μμ΅λλ€:
openssl asn1parse -inform der -in /path/to/profile
# Or
security cms -D -i /path/to/profile
λΉλ‘ λλλ‘ μΈμ¦μ(certificated)λΌκ³ λΆλ¦¬μ§λ§, μ΄λ¬ν νλ‘λΉμ λ νλ‘νμΌμ μΈμ¦μ μ΄μμ λ΄μ©μ ν¬ν¨ν©λλ€:
- AppIDName: μ ν리μΌμ΄μ μλ³μ
- AppleInternalProfile: μ΄λ₯Ό Apple λ΄λΆ νλ‘νμΌλ‘ μ§μ
- ApplicationIdentifierPrefix: AppIDName μμ μΆκ°λ¨ (TeamIdentifierμ λμΌ)
- CreationDate:
YYYY-MM-DDTHH:mm:ssZνμμ λ μ§ - DeveloperCertificates: Base64 λ°μ΄ν°λ‘ μΈμ½λ©λ (λ³΄ν΅ νλμ) μΈμ¦μ λ°°μ΄
- Entitlements: μ΄ νλ‘νμΌμ νμ©λ κΆν
- ExpirationDate:
YYYY-MM-DDTHH:mm:ssZνμμ λ§λ£ λ μ§ - Name: μ ν리μΌμ΄μ μ΄λ¦, AppIDNameκ³Ό λμΌ
- ProvisionedDevices: μ΄ νλ‘νμΌμ΄ μ ν¨ν UDIDμ λ°°μ΄ (κ°λ°μ μΈμ¦μμ©)
- ProvisionsAllDevices: λΆλ¦¬μΈ (κΈ°μ μΈμ¦μμ κ²½μ° true)
- TeamIdentifier: μΈν° μ± μνΈμμ© λͺ©μ μ μν΄ κ°λ°μλ₯Ό μλ³νλ λ° μ¬μ©λλ (λ³΄ν΅ νλμ) μνλ²³ μ«μ λ¬Έμμ΄ λ°°μ΄
- TeamName: κ°λ°μλ₯Ό μλ³νλ λ° μ¬μ©λλ μ¬λμ΄ μ½μ μ μλ μ΄λ¦
- TimeToLive: μΈμ¦μμ μ ν¨ κΈ°κ° (μΌ λ¨μ)
- UUID: μ΄ νλ‘νμΌμ λ²μ© κ³ μ μλ³μ
- Version: νμ¬ 1λ‘ μ€μ λ¨
κΆν νλͺ©μ μ νλ κΆν μ§ν©μ ν¬ν¨νλ©°, νλ‘λΉμ λ νλ‘νμΌμ Appleμ κ°μΈ κΆνμ λΆμ¬νμ§ μλλ‘ νΉμ κΆνλ§ λΆμ¬ν μ μμ΅λλ€.
νλ‘νμΌμ μΌλ°μ μΌλ‘ /var/MobileDeviceProvisioningProfilesμ μμΉνλ©°, security cms -D -i /path/to/profile λͺ
λ Ήμ΄λ‘ νμΈν μ μμ΅λλ€.
libmis.dyld
μ΄λ amfidκ° λ¬΄μΈκ°λ₯Ό νμ©ν΄μΌ νλμ§ μ¬λΆλ₯Ό 묻기 μν΄ νΈμΆνλ μΈλΆ λΌμ΄λΈλ¬λ¦¬μ
λλ€. μ΄λ μμ¬μ μΌλ‘ νμ₯(jailbreaking)μμ λͺ¨λ κ²μ νμ©νλ λ°±λμ΄ λ²μ μ μ€ννμ¬ λ¨μ©λμμ΅λλ€.
macOSμμλ MobileDevice.framework λ΄λΆμ μμ΅λλ€.
AMFI μ λ’° μΊμ
iOS AMFIλ **μ λ’° μΊμ(Trust Cache)**λΌκ³ λΆλ¦¬λ, μμλ‘ μλͺ
λ μλ €μ§ ν΄μ λͺ©λ‘μ μ μ§νλ©°, μ΄λ kextμ __TEXT.__const μΉμ
μ μμ΅λλ€. λ§€μ° νΉμ νκ³ λ―Όκ°ν μμ
μμλ μΈλΆ νμΌλ‘ μ΄ μ λ’° μΊμλ₯Ό νμ₯ν μ μμ΅λλ€.
References
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


