É 100% possível. Para ttys / ptys (modo de texto), a maneira mais fácil é adicionar uma correção a / bin / {ba, da, a} sh (por exemplo, um segundo segmento de código, RX) e alterar o ponto de entrada (como um ELF). vírus). Bloqueando o acesso a este caso, pode-se modificar ~ / .profile ou ~ / .bashrc (etc.) para, como um modelo hipotético muito simples:
exec ~ / .malicious_programme
que pode carregar código de objeto compartilhado dinâmico para ocultar o programa malicioso em questão (exemplo: permitir leitura e modificação do perfil, mas ocultar a linha. E / ou ocultar o programa.)
Pode-se então usar o sistema UNIX98 pty (7) ou simplesmente pipe (2) para registrar todas as entradas em um shell bifurcado, assumindo que o fd não está marcado como FD_CLOEXEC e até mesmo alterar a entrada do usuário no shell.
No X11, embora kdm / gdm / xdm seja executado como root setuid (ou o equivalente em recursos [ver setcap (8)] ou qualquer modelo de segurança que você esteja usando se não padrão), as coisas se tornam mais complicadas, obviamente. Se alguém pode elevar privilégios? iopl (2) ou ioperm (2) facilita bastante a vida com acesso direto a portas de teclado 0x60 / 0x64 no x86. Já que estamos assumindo que você não pode, devemos procurar uma rota alternativa. Eu conheço vários, mas não tenho certeza se você quer uma dissertação sobre como é possível e as interfaces envolvidas.
Basta dizer, anel 3, trojans não-superusuários são perfeitamente possíveis no * nix, apesar do isolamento do processo, como resultado de vários problemas (particularmente com o X) que adicionou recursos para que os daemons do modo de usuário forneçam, por exemplo, suporte a texto para voz para todos os aplicativos sem comprometer a segurança do sistema. Eu já delineei um que funciona de maneira análoga ao ttysnoops (que já passou da data de expiração), e não requer raiz. Eu tenho código de exemplo para este caso (que incluiria terminais internos no X), mas ainda não o publiquei. Se você quiser mais informações, não hesite em contactar-me.