C'est 100% possible. Pour ttys / ptys (mode texte), le moyen le plus simple consiste à ajouter un shim à / bin / {ba, da, a} sh (par exemple, un deuxième segment .code, RX) et à modifier le point d'entrée (un peu comme un ELF virus). À moins d'y accéder dans ce cas, on peut modifier ~ / .profile ou ~ / .bashrc (etc.) pour, comme un modèle hypothétique très simple:
exec ~ / .malicious_programme
qui peut charger du code objet partagé dynamique pour masquer le programme malveillant en question (exemple: autoriser la lecture et la modification du .profile, mais masquer la ligne. Et / ou masquer le programme.)
On peut alors utiliser le système UNIX98 pty (7) ou même simplement pipe (2) pour enregistrer toutes les entrées dans un shell fourchu, en supposant que le fd n'est pas marqué FD_CLOEXEC, et même changer l'entrée utilisateur dans le shell.
Dans X11, bien que kdm / gdm / xdm s'exécute en tant que racine setuid (ou l'équivalent en capacités [voir setcap (8)] ou quel que soit le modèle de sécurité que vous utilisez s'il n'est pas par défaut), les choses deviennent évidemment plus compliquées. Si l'on peut élever des privilèges? iopl (2) ou ioperm (2) facilite la vie avec un accès direct aux ports clavier 0x60 / 0x64 sur x86. Puisque nous supposons que vous ne pouvez pas, nous devons chercher un itinéraire alternatif. J'en connais plusieurs, mais je ne suis pas tout à fait sûr que vous vouliez une dissertation sur la façon dont c'est possible et les interfaces impliquées.
Qu'il suffise de dire, anneau 3, les chevaux de Troie non super-utilisateur sont tout à fait possibles sur * nix, malgré l'isolement du processus, en raison de divers problèmes (en particulier avec X) qui ont ajouté des fonctionnalités pour les démons en mode utilisateur pour fournir, par exemple, du texte prise en charge vocale de toutes les applications sans compromettre la sécurité du système. J'en ai déjà décrit un qui fonctionne de manière analogue à ttysnoops (qui est bien après sa date d'expiration) et qui ne nécessite pas de root. J'ai un exemple de code pour ce cas (qui inclurait les terminaux internes en X), mais je ne l'ai pas encore publié. Si vous souhaitez plus d'informations, n'hésitez pas à me contacter.