
iTunes를 통한 Windows 해킹 - 로컬 권한 상승 0-day
이 문서는 CVE-2024–44193에 대한 분석글입니다. 이 취약점은 iTunes 버전 12.13.2.3에서 발견된 로컬 권한 상승 익스플로잇입니다.
2024년 9월 12일 Apple에 의해 패치되었습니다. Apple 보안 권고 링크: Apple 보안 권고
iTunes 버전 12.13.2.3은 Apple Device Discovery Service를 설치합니다:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe는 로컬 권한 상승 익스플로잇에 취약합니다.
또 하나의 형편없이 쓰여졌고 너무 긴 글에 관심 없는 분들을 위해 짧게 요약합니다:
취약점은 C:\ProgramData\Apple\* 경로에서 사용자 권한 관리가 부실하여 발생합니다.
이로 인해 로컬 그룹 "Users"에 속한 사용자가 해당 경로 내에 임의의 파일을 쓸 수 있습니다. AppleMobileDeviceService.exe 서비스가 다시 시작될 때(비권한 사용자도 트리거 가능), 임의 폴더/파일 삭제 프리미티브가 활성화되어 SYSTEM 권한으로 임의 코드 실행이 가능해집니다.
경고! 초보자를 위한 도구 설명이 나옵니다.
이미 도구에 익숙하다면 이 부분을 건너뛰세요.
Oplock 도구는 Windows에서 "opportunistic lock"을 사용하는 도구입니다. 이 도구는 특정 조건이 충족될 때까지 파일을 잠가 프로세스를 "중단"시키는 데 사용되지만, 악의적인 목적으로 익스플로잇 페이로드가 실행될 시간을 확보하는 데도 사용할 수 있습니다.
FolderContentsDeleteToFolderDelete 도구는 자동으로 폴더 안에 파일을 생성합니다. 파일에 oplock을 설정하여 프로세스를 중단시킵니다. 프로세스가 중단되면 파일을 폴더 밖으로 이동시킵니다. 그런 다음 폴더를 삭제하고 NTFS 정션으로 재생성하여 대상 위치를 가리키게 합니다. Oplock이 해제되고 프로세스가 계속되면 파일/폴더 삭제가 새로 생성된 NTFS 정션을 따라 대상 위치로 이동하여 해당 파일을 삭제한 후 실행을 계속합니다.
이 도구는 Zero Day Initiative에서 가장 잘 설명했을 것이므로, 직접 설명 링크를 제공합니다:
Abusing Arbitrary File Deletes to Escalate Privileges and other Great Tricks
AppleMobileDeviceService.exe 소개iTunes가 설치되면 AppleMobileDeviceService.exe 서비스도 함께 설치되며, 이 서비스는 SYSTEM 권한으로 실행됩니다.
Windows Sysinternals Process Monitor(Procmon)를 사용하여 이 서비스를 조사했을 때 문제가 될 만한 동작을 즉시 발견했습니다.
이 서비스는 C:\ProgramData\Apple\Lockdown\* 경로 내의 모든 파일을 재귀적으로 검사하며, 거기에 속하지 않는 모든 폴더와 파일을 삭제합니다.
로컬 테스트를 위해 ProcessHacker2를 사용하여 서비스를 강제로 재시작하여 프로그램 동작을 검사했습니다.
확인된 동작은 SYSTEM으로 실행되는 서비스가 디렉터리와 그 하위 디렉터리를 모두 쿼리한 다음, Delete On Close 옵션이 활성화된 CreateFile 작업을 실행한다는 것입니다. 즉, SYSTEM 서비스가 C:\ProgramData\Apple\Lockdown\* 경로를 쿼리하고 그 안의 하위 폴더와 파일을 재귀적으로 쿼리하여 삭제합니다.
C:\ProgramData\Apple\* 경로의 문제 있는 사용자 권한Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe를 사용하여 특정 폴더에 대한 액세스 권한을 확인할 수 있습니다.
로컬 그룹 "Users"의 구성원은 C:\ProgramData\Apple\Lockdown\ 폴더에 쓰기 권한이 있어, 낮은 권한의 사용자가 해당 폴더 내에 임의의 파일을 쓸 수 있습니다.
Lockdown 경로 내에 임의의 파일을 쓸 수 있고, 서비스가 재시작되면 SYSTEM 프로세스가 이를 삭제하기 때문에, 임의 파일/폴더 삭제 프리미티브를 생성할 수 있었습니다.
이를 설명하기 위해 Lockdown 폴더 안에 두 개의 하위 폴더를 만듭니다.
하위 폴더 a, 그리고 그 안에 하위 폴더 b.
이렇게 생성됩니다: C:\ProgramData\Apple\Lockdown\a\b
하위 폴더 a 안에는 aa.txt라는 텍스트 파일이 있고, 하위 폴더 b 안에는 bb.txt라는 텍스트 파일이 있습니다.
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
위 스크린샷에서 볼 수 있듯이, "CreateFile" 작업이 aa.txt에 대해 Delete On Close 옵션으로 실행되어 삭제됩니다.
SYSTEM 프로세스가 aa.txt와 bb.txt에 대해 CreateFile 작업을 Delete On Close 옵션으로 실행하면, SYSTEM 프로세스 AppleMobileDeviceService.exe가 파일을 삭제합니다.
이제 Lockdown 폴더 내에 임의의 파일을 생성하고 삭제할 수 있으며, 이는 다음 단계로 이어집니다.
Windows에서는 NTFS 정션을 사용하여 폴더를 다른 위치로 연결할 수 있습니다. 이는 Linux의 심볼릭 링크와 유사합니다.
이를 설명하기 위해 C:\ProgramData\Apple\Lockdown 폴더 내에 바탕 화면의 폴더를 가리키는 NTFS 정션(심볼릭 링크)을 생성할 수 있습니다.
PowerShell을 사용하여 직접 생성하거나 New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes", ZDI에서 제공하는 도구 세트를 사용할 수 있습니다:
다음 명령을 실행하여 Lockdown 폴더 내에 NTFS 정션을 바탕 화면의 "Target" 폴더로 연결합니다.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
서비스가 재시작되면, 새로 생성된 NTFS 정션은 바탕 화면에 있는 AAyes 폴더를 가리킵니다.
서비스는 CreateFile 작업을 SYSTEM 권한으로 Delete On Close 옵션을 사용하여 실행하므로, 파일이 삭제됩니다.
이 작업이 SYSTEM 권한으로 실행되므로, 임의 폴더 또는 파일 삭제 프리미티브가 있으며, 이는 호스트에서 SYSTEM으로 코드 실행을 얻을 수 있음을 의미합니다.
참고:
FolderContentsDeleteToFolderDelete 프로젝트에서 파일 이름/폴더 이름 제한으로 인해 소스 코드를 수정해야 했습니다. 파일 이름/폴더 이름은 매우 짧아야 삭제가 이루어졌습니다. 그 이유는 알 수 없으며, 짧은 이름이 문제를 신뢰성 있게 해결했기 때문에 추가 조사는 수행되지 않았습니다.
const wchar_t folder2path[] = L"C:\\d";
const wchar_t exploitFileName[] = L"e.txt";
// 두 상수 “folder2path”와 “exploitFileName”을 짧게 줄여야 했습니다.
// L"C:\\d"와 L"e.txt"로 변경했습니다. 파일 및 폴더 이름 길이가 익스플로잇 기능에 영향을 미치는 것으로 보였습니다.
[...]
// 또한 “folder1path” 값을 L”c”로 편집하여 짧게 만들어야 했습니다.
folder1path += L"c";
서비스가 정션(심볼릭 링크)을 재귀적으로 따라가기 때문에, 취약한 Apple 서비스를 사용하여 SYSTEM 권한으로 시스템에서 임의의 파일을 삭제할 수 있다는 이론이 세워졌습니다. 이 취약한 서비스는 비권한 사용자가 Windows GUI를 통해 ("Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair) 트릭을 사용하여 서비스를 마음대로 재시작할 수 있게 해주므로, 익스플로잇을 원하는 시점에 트리거할 수 있습니다. 서비스가 재시작되면 NTFS 정션을 따라가며, 사용자가 가리키는 파일이나 폴더를 서비스가 삭제하도록 결정된 프로그램 동작이 실행됩니다.
즉, 사용자가 서비스가 삭제할 파일이나 폴더를 결정합니다. SYSTEM 권한으로 실행되므로, 시스템에서 거의 모든 파일을 삭제할 수 있습니다(TrustedInstaller 권한이 필요한 파일 제외).
이는 다음과 같은 일련의 이벤트를 조심스럽게 구성할 수 있음을 의미합니다:
개념 증명은 5단계로 구성됩니다.
C:\ProgramData\Apple\Lockdown\에 Oplock 설정.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
서비스 재시작 트리거 Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair
MSI 롤백 트릭 준비
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
5단계에서 Oplock이 해제되면, FolderContentsDeleteToFolderDelete 프로세스를 모니터링하여 NTFS 정션이 따라졌는지와 C:\에 있는 Config.MSI가 올바르게 삭제되었는지 확인합니다. 그런 다음 FolderOrFileDeletionToSystem.exe 프로세스를 모니터링하여 경쟁 조건에서 승리했는지와 수정된 롤백 스크립트가 포함된 "악성" Config.MSI 폴더가 작성되었는지 확인합니다. 모든 것이 올바르게 진행되면, CTRL+ALT+DELETE를 누르고 오른쪽 아래 모서리에 있는 접근성 메뉴를 열어 화상 키보드를 엽니다. 악성 롤백 스크립트를 사용하여 C:\Program Files\Common Files\microsoft shared\ink\HID.DLL을 덮어썼기 때문에, CMD 셸이 SYSTEM 권한으로 나타나 익스플로잇이 완료됩니다.
FolderContentsDeleteToFolderDelete.exe 실행 및 모니터링
FolderOrFileDeleteToSystem.exe 실행 및 모니터링
SYSTEM 셸 획득