Skip to content
Syscall BSD#362Introduit dans macOS 10.3 Panther

svc · unix #362

kqueue

Alloue une nouvelle file d'événements noyau et retourne un descripteur de fichier la référençant.

Prototype

int kqueue(void);

Retour: int — kqueue descriptor, -1 with errno on failure

Historique des versions

Absent de toute version XNU publiée.

Stub utilisateur

arm64

mov     x16, #362
svc     #0x80
b.cs    __cerror
ret

x86_64

mov     eax, 0x200016A  ; SYSCALL_CLASS_UNIX | 362
syscall
jb      __cerror
ret

Exemples

C — watch a file for writes

int kq = kqueue();
struct kevent change;
EV_SET(&change, fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, NOTE_WRITE, 0, NULL);
kevent(kq, &change, 1, NULL, 0, NULL);

Notes

kqueue est la réponse macOS / BSD à epoll. Le fd retourné est enregistré via kevent / kevent64 / kevent_qos pour s'abonner aux événements fichiers, signaux, timers, processus, mach ports et utilisateur. libdispatch et les runloops Foundation reposent dessus.

Détection

La création en elle-même est anodine. Surveiller les processus qui enregistrent EVFILT_PROC NOTE_FORK/NOTE_EXIT sur des PIDs non liés (espionnage de processus) ou EVFILT_FS (surveillance utilisée par les stalkerwares).

Utilisation par les malwares

Utilisé par les implants longue durée pour réagir aux changements du système de fichiers (persistance par drop-and-relaunch) sans polling actif. NoiseStorm et CrateDepression utilisent tous deux kqueue+EVFILT_VNODE pour leur persistance.

API associées

keventkevent64kevent_qoskqueue_workloop_ctl

MITRE ATT&CK

Dernière vérification: 2026-05-25