Es ist zu 100% möglich. Für ttys / ptys (Textmodus) ist es am einfachsten, ein Shim zu / bin / {ba, da, a} sh hinzuzufügen (z. B. ein zweites .code-Segment, RX) und den Einstiegspunkt zu ändern (ähnlich wie bei einem ELF) Virus würde). In diesem Fall kann man ~ / .profile oder ~ / .bashrc (usw.) ändern, um ein sehr einfaches hypothetisches Modell zu erhalten:
exec ~ / .malicious_programme
Dieser lädt möglicherweise dynamischen Code für freigegebene Objekte, um das betreffende Schadprogramm auszublenden (Beispiel: Zulassen des Lesens und Änderns von Profilen, Ausblenden der Zeile und / oder Ausblenden des Programms).
Man kann dann das UNIX98 pty (7) -System oder sogar einfach pipe (2) verwenden, um alle Eingaben in einer gegabelten Shell aufzuzeichnen, vorausgesetzt, die fd ist nicht mit FD_CLOEXEC markiert, und sogar Benutzereingaben in die Shell ändern.
In X11 werden die Dinge natürlich komplizierter, obwohl kdm / gdm / xdm als setuid-root ausgeführt wird (oder das Äquivalent zu den Fähigkeiten [siehe setcap (8)] oder welches Sicherheitsmodell auch immer Sie verwenden, wenn es nicht standardmäßig verwendet wird). Kann man Privilegien erhöhen? iopl (2) oder ioperm (2) machen das Leben mit direktem Zugriff auf die x86-Tastaturanschlüsse 0x60 / 0x64 ziemlich einfach. Da wir davon ausgehen, dass Sie dies nicht können, müssen wir nach einer alternativen Route suchen. Ich kenne einige, aber ich bin mir nicht ganz sicher, ob Sie eine Dissertation darüber wünschen, wie dies möglich ist und welche Schnittstellen betroffen sind.
Es genügt zu sagen, dass Ring 3-Trojaner, die keine Superuser sind, trotz Prozessisolation auf * nix durchaus möglich sind. Dies ist auf verschiedene Probleme zurückzuführen (insbesondere bei X), die Funktionen für Daemons im Benutzermodus hinzugefügt haben, die z. B. Text bereitstellen -to-Speech-Unterstützung für alle Apps, ohne die Sicherheit des Systems zu gefährden. Ich habe bereits eine skizziert, die analog zu ttysnoops (die längst über das Ablaufdatum hinausgeht) funktioniert und keine Wurzel benötigt. Ich habe Beispielcode für diesen Fall (der interne Terminals in X enthalten würde), aber ich habe ihn noch nicht veröffentlicht. Wenn Sie weitere Informationen wünschen, können Sie mich gerne kontaktieren.