Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
kfd — kfd, short for kernel file descriptor, is a project to read and write kernel memory on Apple devices. | Kitploit
도구/GitHubGitHub/felix-pb/kfd
iOS SecurityExploitationMobile SecurityBinary Exploitation
GitHubfelix-pb/kfd

kfd

kfd, short for kernel file descriptor, is a project to read and write kernel memory on Apple devices.

저장소 보기
1k1842년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

빠른 고지: 저는 다른 기기 및 iOS 버전에 대한 오프셋을 추가할 의도가 없습니다.

kfd

kfd는 커널 파일 디스크립터(kernel file descriptor)의 약자로, Apple 기기에서 커널 메모리를 읽고 쓰기 위한 프로젝트입니다. 이 프로젝트는 댕글링 PTE를 얻기 위해 악용될 수 있는 다양한 취약점을 활용하며, 이를 PUAF 프리미티브(physical use-after-free의 약자)라고 부릅니다. 그런 다음 해당 물리 페이지 내부에 특정 커널 객체를 재할당하고, 댕글링 PTE를 통해 사용자 공간에서 직접 조작하여 KRKW 프리미티브(kernel read/write의 약자)를 달성합니다. 익스플로잇 코드는 libkfd 라이브러리에 완전히 포함되어 있지만, 이 프로젝트에는 iOS 및 macOS용 간단한 실행 래퍼도 포함되어 있습니다. libkfd의 공개 API는 상당히 작고 직관적입니다:

root@kitploit:~
enum puaf_method {
    puaf_physpuppet,
    puaf_smith,
    puaf_landa,
};

enum kread_method {
    kread_kqueue_workloop_ctl,
    kread_sem_open,
};

enum kwrite_method {
    kwrite_dup,
    kwrite_sem_open,
};

u64 kopen(u64 puaf_pages, u64 puaf_method, u64 kread_method, u64 kwrite_method);
void kread(u64 kfd, u64 kaddr, void* uaddr, u64 size);
void kwrite(u64 kfd, void* uaddr, u64 kaddr, u64 size);
void kclose(u64 kfd);

kopen()은 개념적으로 "커널 파일 디스크립터"를 엽니다. 다음 4개의 인자를 받습니다:

  • puaf_pages: 댕글링 PTE가 있는 물리 페이지의 목표 개수.
  • puaf_method: PUAF 프리미티브를 얻는 데 사용되는 방법. 옵션은 다음과 같습니다:
    • puaf_physpuppet:
      • 이 방법은 CVE-2023-23536을 악용합니다.
      • iOS 16.4 및 macOS 13.3에서 수정되었습니다.
      • App Sandbox에서는 도달 가능하지만 WebContent 샌드박스에서는 불가능합니다.
      • $52,500 Apple Security Bounty 보상.
    • puaf_smith:
      • 이 방법은 CVE-2023-32434를 악용합니다.
      • iOS 16.5.1 및 macOS 13.4.1에서 수정되었습니다.
      • WebContent 샌드박스에서 도달 가능하며 실제로 악용되었을 수 있습니다.
    • puaf_landa:
      • 이 방법은 CVE-2023-41974를 악용합니다.
      • iOS 17.0 및 macOS 14.0에서 수정되었습니다.
      • App Sandbox에서는 도달 가능하지만 WebContent 샌드박스에서는 불가능합니다.
      • $70,000 Apple Security Bounty 보상.
  • kread_method: 초기 kread() 프리미티브를 얻는 데 사용되는 방법.
  • kwrite_method: 초기 kwrite() 프리미티브를 얻는 데 사용되는 방법.

익스플로잇이 성공하면 kopen()은 64비트 불투명 파일 디스크립터를 반환합니다. 실제로 이 값은 libkfd에 필요한 구조체를 가리키는 사용자 공간 포인터일 뿐입니다. 그러나 해당 구조체는 라이브러리 외부에서 접근하면 안 되므로 불투명 정수로 반환됩니다. 익스플로잇이 실패하면 라이브러리는 오류 메시지를 출력하고 30초 동안 대기한 후 상태 코드 1로 종료됩니다. KRKW 이후 약간의 정리가 필요한 특정 PUAF 방법(예: puaf_smith)의 경우, 종료 시 커널이 패닉할 수 있으므로 30초간 대기하는 것입니다.

kread()와 kwrite()는 각각 copyout() 및 copyin()의 사용자 공간에 해당하는 기능입니다. 참고로 kread_method 및 kwrite_method의 옵션은 별도의 분석 문서에 설명되어 있습니다. 또한 이러한 방법으로 얻은 초기 프리미티브는 더 나은 KRKW 프리미티브를 구축하는 데 사용할 수 있습니다. 마지막으로 kclose()는 커널 파일 디스크립터를 단순히 닫습니다. 이 모든 함수는 첫 번째 인자로 kopen()이 반환한 불투명 정수를 받습니다.


iPhone에서 kfd를 빌드하고 실행하는 방법?

Xcode에서 프로젝트의 루트 폴더를 열고 iOS 기기를 연결하세요.

  • 프로젝트를 빌드하려면 Product > Build (⌘B)를 선택하세요.
  • 프로젝트를 실행하려면 Product > Run (⌘R)을 선택한 다음 앱에서 "kopen" 버튼을 클릭하세요.

Mac에서 kfd를 빌드하고 실행하는 방법?

터미널에서 프로젝트의 루트 폴더로 이동합니다.

선택적으로, 전역 및 프로세스별 파일 디스크립터 제한을 늘리면 특히 연속으로 여러 번 실행할 때 성공률이 향상되므로 make s 명령을 입력하고 sudo 비밀번호를 입력하세요.

  • 프로젝트를 빌드하려면 make b 명령을 입력하세요.
  • 프로젝트를 실행하려면 make r 명령을 입력하세요.
  • 프로젝트를 한 번에 빌드하고 실행하려면 make br 명령을 입력하세요.

익스플로잇에 대한 자세한 분석 문서는 어디서 찾을 수 있나요?

이 README는 kfd 프로젝트에 대한 높은 수준의 개요를 제시했습니다. PUAF 프리미티브가 달성되면 나머지 익스플로잇은 공통적입니다. 따라서 익스플로잇의 공통 부분을 전용 분석 문서로 옮겼습니다:

  • PUAF 악용

또한 PUAF 프리미티브를 달성하는 데 사용된 익스플로잇의 취약점별 부분을 별도의 분석 문서로 나누었으며, 아래에 발견 순서대로 나열했습니다:

  • PhysPuppet
  • Smith
  • Landa

그러나 이러한 분석 문서는 XNU 가상 메모리 시스템에 이미 익숙한 독자를 대상으로 작성되었음을 유의하세요.

도구 다운로드