And You Thought You Were Paranoid...
Dennis L. Mumaugh
dlm at cuuxb.ATT.COM
Fri Nov 11 08:34:59 AEST 1988
In article <7080011 at eecs.nwu.edu> naim at eecs.nwu.edu (Naim
Abdullah) writes:
One of our staff members here, was suspicious that the recent
worm may have planted trojan horses for crucial binaries like
vmunix, fsck etc. He used "ls -l" to compare the sizes on
our infected machine with that of an uninfected machine and
satisfied himself that things were ok (actually he got a
nasty shock when "ls -l" showed up different sizes but then
he remembered he had recompiled stuff to toss out yp and use
the BIND stuff and that is why the sizes were different).
I thought about this and then later remembered Ken Thompson's
Turing award lecture. Here is a worst case scenario which we
were spared fortunately.
In PRINCIPLE "ls -l" is not enough. The worm had root
privileges, it could have installed a modified /bin/ls so
that if one of the files being listed was fsck, vmunix, ls,
telnetd etc (the tampered binaries) /bin/ls would always show
predetermined sizes. In that situation, "ls -l" wouldn't be
enough.
[ He goes on to explain the infinite recursion assuming the
cracker is smart and you realize it. And ... gets modified
so some other program won't fink, recurisively. ]
Yes, after Ken told me about the C compiler and then the NSA
tiger team broke su and had a setuid root shell squirreled away,
I thought a lot about that.
1). You need a read-only copy of the original distribution.
[Begging the question of can you trust the vendor. ]
2). Or, in advance build a disk with trusted utilities and a
unix to use.
3). Have a package audit program [such as the one I have written
at ATT] that verifies checksums. Compute check sums in a special
way. We have a psum that check sums only the text and data part
of a a.out (no headers or symbols).
4). Use a better check sum program. I have an unspoofable check
summer. It encrypts the file with cypher block chaining and
keeps the last [enciphered block] 64 bit result as the check sum.
In normal use it has a built in encryption key. But one can also
provide a private key. Hence the set of possible checksum is
unknowable in advance [ one could compute check sums for all
possible keys I suppose, but life is short]. Thus one can't
diddle a file and fix it to have the correct size and the correct
public checksum and the correct private checksum.
--
=Dennis L. Mumaugh
Lisle, IL ...!{att,lll-crg}!cuuxb!dlm OR cuuxb!dlm at arpa.att.com
More information about the Comp.unix.wizards
mailing list