This idea was inspired by the recent discussion on the "talk" mailing list about the (in)security of the German ID card. The Chaos Computer Club and other researchers claim that the ID card is insecure. Actual attacks that have been demonstrated are based on keyloggers.

Keyloggers might be the biggest security threat for Linux users at this time. Keyloggers are trivial to write for Linux and readily installable, and a keylogger with normal user rights may read root's password. One might ask "Why are we caring about local root exploits at all as long as users run stuff like sudo in X terminals"? Keyloggers can even read the input from devices like the Yubikey.

Various techniques exist. The simplest way is just to read xinput events. More sophistcated attacks (usually requiring root) would read from /dev/input or ttys.

My idea is to explore possibilities for a "secure" keyboard mode. This is all totally crude, not thought-through brainstorm material. I'm thinking of an ioctl that would put an input device in a special mode in which events would be forwarded only to a single process (the process that made the ioctl). Care would need to be taken that this functionality couldn't be abused for locking the input device completely. The ability to use this ioctl could be bound to capabilities and/or further restricted e.g. by SELinux, so that not even root would be able to spy on keyboard input easily.

This "secure" mode would than be available for critical operations such as reading pass phrases. In a second step, we might consider doing the password hashing in the kernel, so that user space would never need to read the clear text password at all; I'm not sure what problems with keyboard mapping we'd encounter in such a setup though.

I'd like to understand if this is total bogus, and if not, discuss implementation steps and perhaps create a PoC.

Looking for hackers with the skills:

kernel c

This project is part of:

Hack Week 15

Activity

  • about 7 years ago: slahl liked this project.
  • about 7 years ago: hennevogel liked this project.
  • about 7 years ago: mwilck added keyword "kernel" to this project.
  • about 7 years ago: mwilck added keyword "c" to this project.
  • about 7 years ago: mwilck liked this project.
  • about 7 years ago: mwilck originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    Model checking the BPF verifier by shunghsiyu

    Project Description

    BPF verifier plays a ...


    Authenticated hashes for BTRFS by dsterba

    Project Description

    Implement a checksum ...


    early stage kdump support by mbrugger

    [comment]: # (Please use the project descriptio...


    Deep Packet Inspection: compare the performance between libnetfilter_queue, NF_HOOK and eBPF XDP by nguyens

    Deep Packet Inspection: compare the performan...


    80-bit floats support on x86_64 for Valgrind by mfranc

    [comment]: # (Please use the project descriptio...


    Extend GObject based introspectable API to libzypp by zbenjamin

    [comment]: # (Please use the project descriptio...


    Avahi Integration and Network Connection by vojha

    Avahi Integration and Network Connection

    ...


    Port OTPClient to GTK >= 4.12 by pstivanin

    Project Description

    OTPClient is currentl...