Il existe sur Mac OS X une API nommée KUNC (Kernel-User Notification Center).
Cette API est utilisée par le kernel (typiquement un kext) quand celui-ci veut afficher des notifications aux utilisateurs ou lancer des commandes userland.
Il existe donc une fonction : KUNCExecute()
Voici le prototype prit de xnu-xxxx.xx.x/osfmk/UserNotification/KUNCUserNotifications.h (disponible ici) :
1 2 3 4 5 6 7 8 | #define kOpenApplicationPath 0 #define kOpenPreferencePanel 1 #define kOpenApplication 2 #define kOpenAppAsRoot 0 #define kOpenAppAsConsoleUser 1 kern_ret_t KUNCExecute(char *executionPath, int openAsUser, int pathExecutionType); |
La fonction est toute simple, voici un bref détail des 3 paramètres :
- executionPath : Le chemin vers le programme à exécuter.
- openAsUser : Flag prenant soit la valeur kOpenAppAsConsoleUser qui exécutera le programme avec les droits de l’user loggé, soit kOpenAppAsRoot qui lancera le programme avec les droits root.
- pathExecutionType : Flag qui spécifie le type d’application à exécuter qui peut être un des 3 définis plus haut, kOpenApplicationPath : le chemin absolu vers un exécutable, kOpenPreferencePanel : le nom d’une Preference Pane dans /System/Library/PreferencePanes, kOpenApplication : Le nom d’une application dans /Applications.
Par exemple si on voulait lancer une backdoor située dans /tmp on procéderais de la façon suivante :
1 | KUNCExecute("/tmp/backdoor", kOpenAppAsRoot, kOpenApplicationPath); |
English
French