Comment rendre un processus invisible pour les autres utilisateurs?

19

Comment pourriez-vous lancer un processus et le rendre invisible à la topcommande? Le processus est démarré par un utilisateur normal (pas root) et ne devrait pas être visible pour les autres utilisateurs normaux.

Débogueur
la source
1
Ce genre de défait le but du sommet et serait beaucoup trop facile à abuser. Pourquoi ne pas simplement renommer le processus? this_is_not_the_process_you_are_looking_for?
je vois, qu'en est-il de cacher l'utilisateur?
5
Veuillez nous dire que vous n'essayez pas d'écrire un root-kit. Pouvez-vous expliquer votre scénario afin que nous puissions peut-être suggérer une meilleure architecture de sécurité au lieu d'une qui est généralement considérée comme un comportement "mauvais"?
Caleb
2
Vous pouvez utiliser grsecurity ou SELinux . Les deux nécessitent une intervention root pour la configuration initiale.
Gilles 'SO- arrête d'être méchant'

Réponses:

11

La topcommande 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.cfichier.

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_getattrsymbole 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.

Corey Henderson
la source
4

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.

Caleb
la source
1

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.

marioosh
la source
2
Je pense que cela vient en standard avec un noyau selinux.
user606723
0

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 topcommande et le modifier en conséquence. Vous pouvez ensuite remplacer la topcommande dans /usr/sbin(ou où qu'elle soit) par votre version.

LawrenceC
la source
2
Remplacer «top» n'empêche pas un utilisateur de faire ce que fait top.
Tim Post
2
Non, mais la question demandait comment rendre les processus invisibles à la topcommande.
LawrenceC