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.
linux
top
process-management
Débogueur
la source
la source
this_is_not_the_process_you_are_looking_for
?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=
etgid=
monte les options pour / proc comme décrit dans les commit et Documentation / filesystems / proc.txt correspondants .Debian Wheezy inclut également cette fonctionnalité.
la source
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 danssecurity.c
, et la magie du diable dans les détails se trouve dans lehijacks.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 depid_getattr
.la source
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.
la source
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.
la source
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
la source
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 latop
commande et le modifier en conséquence. Vous pouvez ensuite remplacer latop
commande dans/usr/sbin
(ou où qu'elle soit) par votre version.la source
top
commande.