I'm currently traducing the posts in english, my english is not very good, so if you find errors feel free to contact me.
  • Exécuter un programme userland à partir du mode kernel

    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);