Comment pourriez-vous lancer un processus et le rendre invisible à la top
commande? Le processus est démarré par un utilisateur normal (pas root) et ne devrait pas être visible pour les autres utilisateurs normaux.
Comment pourriez-vous lancer un processus et le rendre invisible à la top
commande? Le processus est démarré par un utilisateur normal (pas root) et ne devrait pas être visible pour les autres utilisateurs normaux.
Réponses:
Le noyau Linux depuis 3.3 contient la prise en charge du masquage des processus aux autres utilisateurs.
Il est fait par hidepid=
et gid=
monte les options pour / proc comme décrit dans les commit et Documentation / filesystems / proc.txt correspondants .
Debian Wheezy inclut également cette fonctionnalité.
La top
commande lit les données de proc, qui sont fournies directement à partir du noyau. Afin de masquer les processus, vous devez utiliser du code à l'intérieur du noyau pour effectuer le masquage.
Mis à part l'utilisation d'un cadre de sécurité comme SELinux et grsecurity (mentionné dans les autres réponses), le code de style rootkit est votre seule option restante. Je dis "style" parce qu'un "rootkit" n'est pas mauvais en soi, c'est comme ça qu'il est utilisé. Il y a des raisons parfaitement légitimes de cacher des processus à d'autres utilisateurs, c'est pourquoi cette capacité existe dans les cadres de sécurité.
L'itinéraire de base que vous devez suivre pour que cela fonctionne est de connecter (ou détourner, selon la façon dont vous le regardez) la ou les fonctions du noyau Linux qui distribuent les /proc/pid/
données. Je démontre une méthode de connexion aux fonctions du noyau Linux dans un module de sécurité que j'ai écrit:
https://github.com/cormander/tpe-lkm
Le code "de haut niveau" pour cela se trouve dans la hijack_syscalls()
méthode dans security.c
, et la magie du diable dans les détails se trouve dans le hijacks.c
fichier.
Vous trouverez probablement la ou les fonctions auxquelles vous voudrez vous connecter dans le fs/proc/
répertoire du code source du noyau linux. Gardez à l'esprit que linux ne fournit pas d'ABI stable, donc votre code devra être quelque peu modifié afin de le faire fonctionner dans différentes versions du noyau linux. Gardez également à l'esprit que vous avez besoin d'un accès root complet à la machine pour pouvoir insérer ce code.
MISE À JOUR:
Si vous enveloppez le pid_getattr
symbole du noyau avec du code supplémentaire, c'est très facile à faire. J'ai récemment ajouté quelque chose qui cache les processus au module de noyau ci-dessus:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Vous pourriez faire quelque chose de similaire en rendant les processus d'un certain utilisateur ou groupe non visibles par quiconque sauf root et cet utilisateur. Le faire par nom de processus est un peu plus complexe, mais possible. Jetez un oeil à la exe_from_mm()
fonction. Notez qu'il peut y avoir des implications sur les performances de son utilisation à l'intérieur de pid_getattr
.
Il semble que les deux options principales.
Selinux fonctionne en plaçant différentes personnes dans différents domaines de sécurité et en quelque sorte en les mettant en sandbox afin qu'elles ne puissent pas voir les choses les unes des autres. C'est couvert dans cette question . Puisque selinux devient rapidement le cadre de sécurité de facto dans le monde Linux, c'est probablement la direction que vous devriez regarder.
L'autre est la sécurité, comme mentionné par marioosh et comme demandé dans cette question . Certaines distributions ont des packages de noyau alternatifs avec des correctifs grsecurity appliqués. Si le vôtre a cela, vous pourriez envisager de les utiliser.
Si, pour une raison quelconque, vous souhaitez le faire sans l'ajout d'un cadre de sécurité comme selinux ou grsecurity, veuillez expliquer en quoi ce que vous faites n'est pas d'écrire un root-kit.
Ce n'est pas si simple sur un boîtier Linux standard. Regardez la sécurité , mais cela nécessite de patcher le noyau, etc.
vous pouvez remplacer votre argv [0] par un autre nom ... mais à proprement parler, vous cherchez une sorte de rootkit. cela peut vous aider: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
Vous pouvez écrire une commande équivalente qui fonctionne exactement comme cela top
, mais n'affiche pas les processus correspondant à un nom spécifique. Vous pouvez également obtenir le code source de la top
commande et le modifier en conséquence. Vous pouvez ensuite remplacer la top
commande dans /usr/sbin
(ou où qu'elle soit) par votre version.
top
commande.
this_is_not_the_process_you_are_looking_for
?