BSD tty security, part 3: How to Fix It

Dan Bernstein brnstnd at kramden.acf.nyu.edu
Mon May 20 07:22:51 AEST 1991


This article includes a series of diagrams showing how I think hardwired
ttys should work. This has all been explained before, both in my pty
paper and in Steve Bellovin's session manager paper, but John refuses to
accept the fact that dynamically allocated ttys are secure. So here goes.

In article <19313 at rpp386.cactus.org> jfh at rpp386.cactus.org (John F Haugh II) writes:
> In article <23893:May1901:19:2191 at kramden.acf.nyu.edu> brnstnd at kramden.acf.nyu.edu (Dan Bernstein) writes:
> >(What I actually suggested is that SAK disconnect the current session.
> >This means that the user can later log in again and reconnect, resuming
> >work where he left off. For further details on session management, see
> >my pty paper, Bellovin's session manager paper, or VMS documentation.)
> [ I was going to respond to the other article from Dan.  I'm on a
>   "responding to Dan" diet ...  This last paragraph was too juicy to
>   pass up. ]
> Which means that your SAK scheme is actually less secure than I had
> originally thought.  What are you going to do to revoke TTY access to
> a process that =somehow= has illicitly gained access to the TTY?

``What are you going to do to revoke pipe access to a process that
=somehow= has illicitly gained access to the pipe?'' You don't do
anything. You create the pipe dynamically, and there is absolutely no
way that another process is going to have access to it.

I'm getting sick of explaining this to you again and again. So let me
draw you a picture of what the system looks like after suggestion #24:
                ___
     /^\       |abc|
     | <)      |def|
     | -  ---- |ghi| ---- /dev/tty00 ---- getty ---- /dev/ptyq7 ---- sh
     \_/       |___|
                          hardwired       system      pseudo-        user
    John      terminal      device        process       tty         process

Here getty never lets a user program access /dev/tty00; it forwards all
I/O through a pseudo-tty. Let's say you start a Trojan Horse:
                ___
     /^\       |abc|
     | <)      |def|
     | -  ---- |ghi| ---- /dev/tty00 ---- getty ---- /dev/ptyq7 ---- TROJAN
     \_/       |___|
                          hardwired       system      pseudo-        user
    John      terminal      device        process       tty         process

Now you leave the terminal alone, and another user comes along.
                ___
     /^\       |abc|
     | <       |def|
     | |  ---- |ghi| ---- /dev/tty00 ---- getty ---- /dev/ptyq7 ---- TROJAN
     \_/       |___|
                          hardwired       system      pseudo-        user
    Sally     terminal      device        process       tty         process

Sally bangs on ^K a few times. As I explained before, getty notices the
SAK and disconnects the current session:
                ___
     /^\       |abc|
     | <       |def|
     | |  ---- |ghi| ---- /dev/tty00 ---- getty    
     \_/       |___|
                          hardwired       system     
    Sally     terminal      device        process      


                                                   /dev/ptyq7 ---- TROJAN
						
                                                     pseudo-        user
                                                       tty         process

Notice that the link between the terminal and the Trojan Horse has been
completely severed. No process has access to /dev/tty00 other than
getty. Now Sally logs in, on an unused pseudo-tty allocated by getty:
                ___
     /^\       |abc|
     | <       |def|
     | |  ---- |ghi| ---- /dev/tty00 ---- getty ---- /dev/ptysb ---- login
     \_/       |___|
                          hardwired       system      pseudo-        safe
    Sally     terminal      device        process       tty         process


                                                   /dev/ptyq7 ---- TROJAN
						
                                                     pseudo-        user
                                                       tty         process

Your fake login program is still running, but it's inside a session that
Sally isn't talking to. Sally is talking to /dev/ptysb, which is
guaranteed clean. I explained in detail in a previous article why my
solution makes that guarantee.

Now do you understand why allocating an unused tty stops Trojans?

> Your scam lets the trojan or whatever lurk about in
> the background, and never kills it because you've been too kind hearted
> and let it live.

You have no idea what you are talking about.

> But
> what if /etc/getty isn't running?

Under my proposal, no I/O will happen at all if getty isn't talking to
the port. Note that all hardwired ttys are only accessible to root.

> All I want to know is what do you do to get rid of trojan horses after
> they have gained access to your tty line.  Could you please answer
> that one simple little question?

Can you please stop repeating the same stupid little question? If you
can't understand Bellovin's explanations or my explanations or the
series of diagrams above, I give up.

---Dan



More information about the Comp.unix.wizards mailing list