Y a-t-il un moyen d'ajouter un appel système dynamique, par exemple via un module? J'ai trouvé des endroits où je peux remplacer un appel système existant avec un module en changeant juste le tableau sys_call_table[]
pour obtenir ma fonction substituée au lieu du natif quand mon module est installé, mais pouvez-vous le faire avec un nouvel appel système et un module?Noyau Linux - ajouter l'appel système dynamiquement via le module
Répondre
Intercepter un appel système existant (pour faire quelque chose dans le noyau) n'est pas la bonne solution dans certains cas. Par exemple, si vos pilotes d'espace utilisateur ont besoin d'exécuter quelque chose dans le noyau, envoyez-y quelque chose, ou lisez quelque chose à partir du noyau?
Habituellement pour les pilotes, le bon moyen est d'utiliser l'appel ioctl(), qui est un appel système, mais il peut appeler différentes fonctions du noyau ou modules pilotes en passant différents paramètres via ioctl().
Ce qui précède est pour l'exécution de code noyau contrôlé par l'utilisateur. Pour le transfert de données, vous pouvez utiliser des pilotes procfs ou sysfs pour parler au noyau. PS: lorsque vous interceptez l'appel système, qui affecte généralement l'ensemble du système d'exploitation, vous devez vous demander comment résoudre le problème de le faire en toute sécurité: si quelqu'un d'autre appelle à moitié l'appel système, puis intercepter les codes?
Zach, oui, il est possible: D
Bien que sys_call_table est de taille fixe, dans certains cas, il peut y avoir des positions libres dans la table
Regardez ce lien:
lxr.free électrons. com/source/arch/x86/kernel/syscall_32.c
lxr.free-electrons.com/source/arch/x86/kernel/syscall_64.c
tout d'abord le noyau remplit toutes les positions de sys_call_table avec un pointeur vers sys_ni_syscall
Lors de la compilation, les fichiers asm/syscalls_32.h et asm/syscalls_64.h sont générés sur la base des tableaux suivants:
lxr.free -electrons.com/source/arch/x86/syscalls/syscall_32.tbl
lxr.free-electrons.com/source/arch/x86/syscalls/syscall_64.tbl
Avec un bref regard sur ces tables y Vous pouvez voir que certaines positions vont continuer pointant vers sys_ni_syscall, par exemple, les positions 17, 31, 32, 35, ..., dans syscall_32.tbl puisqu'elles ne sont pas implémentées. Par conséquent, notre seule tâche consiste à identifier ces positions et à "enregistrer" notre nouveau syscall.
je mets quelque chose de similaire sur mon git
https://github.com/MrN0body/rsysadd
J'ai toujours pensé que l'ajout des appels système était un nono, mais c'est juste par ouï-dire. – jdizzle
Oui, l'ajout d'appels système est en quelque sorte inutile pour un rootkit :) –
L'ajout d'un syscall n'est définitivement pas supporté. Il est probable que vous souhaitiez une nouvelle solution à votre problème. Pourquoi pensez-vous avoir besoin d'un nouveau syscall de toute façon? – stsquad