Fear and Loathing on the UNIX Trail
Confessions of a Berkeley system mole.
by Doug Merritt with Ken Arnold and Bob Toxen
It was 2 am and I was lying face down on the floor in Cory Hall, the EECS
building on the UC Berkeley campus, waiting for Bob to finish installing out
bootleg copy of the UNIX kernel. If successful, new and improved terminal
drivers we had written would soon be up and running.
We were enhancing the system in the middle of the night because we had no
official sanction to do the work. That didn't stop us, though, since UNIX had
just freshly arrived from Bell Labs, where computer security had never been an
issue. The system was now facing its first acid test -- exposure to a group of
intelligent, determined students -- and its security provisions were failing
with regularity.
I was lying face down because I'd gone without sleep for over two days, and the
prone position somehow seemed the most logical under the circumstances. Bob
was still working because he'd napped not 30 hours before, giving him seniority
under the "Hacker-best-able-to-perform" rule of our informal order. We might
have called our group "Berkeley Undergraduate Programmers for a Better UNIX",
or, less euphemistically, "Frustrated Hackers for Our Own Ideas". But, in
truth, our group was never named. It was simply a matter of Us versus Them.
"Them" was the bureaucracy -- the school administrators, most professors, some
grad students, and even the legendary Implementors themselves at Bell Labs.
"Us" was a small, self-selected group of undergraduates with a passion for
UNIX. We were interested in computers and in programming because it fascinated
us; we lived for the high level of intellectual stimulation only hacking could
provide. Although some in our group never expressed an interest in breaking
computer security, others invested thousands of fruitful hours in stealing
accounts and gaining superuser access to various UNIX systems. Our object?
To read system source code.
For the most part we stayed out of trouble, although one of our rank once had
his phone records subpoenaed by the FBI -- after a minor incident with a
Lawrence Livermore National Laboratory computer. The Feds seemed to think our
comrade had been diddling with top secret weapons research, but he actually
hadn't.
Our group could probably best be characterized by its interest in creating and
using powerful software, regardless of the source of the idea. Our battle cry,
thanks to Ross Harvey, was "FEATURES!!!", and we took it seriously. Well,
Ross may have been a little sarcastic about it, since he was referring to
superfluous bells and whistles. But I used the expression as a shorthand for
"elegant, powerful, and flexible". We were always bugging Them to add "just
one more feature" to some utility like the shell or kernel. Although They
accepted some suggestions, They didn't think twice about most.
One example stands out. In early 1977, Ross, Bob, and I spent months
collaborating on a new and improved shell, just before Bill Joy had started
on what is now known as the C shell. The most historically significant
features we designed were Ross's command to change the shell's prompt, Bob's
command to print or chdir to the user's
home directory, and my own edit feature, which allowed screen
editing and re-execution of previous commands. What we did was smaller in
scope than what Bill later included in the C shell, but to Us it was
unarguably better what was then available. We ceased work on our projects only
when it became clear that Bill was developing what would obviously become a new
standard shell. Our energies then were re-focused on persuading him to include
our ideas. Some of our features ultimately were incorporated, some weren't.
We modified the kernel to support asynchronous I/O, distributed files, security
traces, "real-time" interrupts for subprocess multitasking, limited screen
editing, and various new system calls. We wrote compilers, assemblers,
linkers, disassemblers, database utilities, cryptographic utilities, tutorial
help systems, games, and screen-oriented versions of standard utilities.
User friendly utilities for new users that avoided accidental file deletion,
libraries to support common operations on data structure such as lists,
strings, trees, symbol tables, and libraries to perform arbitrary precision
arithmetic and symbolic mathematics were other contributions. We
suggested improvements to many system calls and to most utilities. We
offered to fix the option flags so that the different utilities were
consistent with one another.
To Us, nothing was sacred, and We saw a great deal in UNIX that could stand
improvement. Much of what We implemented, or asked to be allowed to
implement, is now a part of System V and 4.2 BSD; others of our innovations
are still missing from all versions of UNIX. Despite these accomplishments,
it seemed that whenever We asked The Powers That Be to install Our software
and make it available to the rest of the system's users, We were greeted with
stony silence.
Fred Brooks, in The Mythical Man-Month, describes the NIH (Not Invented Here)
Syndrome, wherein a group of people will tend to ignore ideas originated
outside their own social group. However, there was a stronger force at work
at Berkeley, where a certain social stratification prevails that finds Nobel
Laureates and department chairs ranking as demigods, professors functioning
as high priests, graduate students considered as lower class citizens, and
undergraduates existing only on sufferance from the higher orders --
and suffered very little at that. Now, the individuals cannot be blamed for
what is, in essence, an entire social order. But this is not to say that we
did not hold it against them -- for we most assuredly did. Unfortunately, it
took time for us to appreciate the difficulties of Fighting City Hall.
This is why We were frustrated. This is why We felt We HAD to break security.
Once We did, We simply added Our features to the system, whether The Powers
That Be liked it or not. Needless to say, They didn't. This is why We felt
like freedom fighters, noble figures even when found in the ignoble position
of lying face down on the floor of Cory Hall at two in the morning.
We were on a mission that morning to install our new terminal driver. With the
old, standard terminal driver, the screen gave you no indication that the
previous character had been deleted when you pressed the erase character.
You had to accept it on faith. This remains true on many UNIX systems today.
Most people on Cory Hall UNIX changed their erase character to backspace so
that later characters would overwrite the erased ones, but even that was not
sufficient. This was especially true when erasing a backslash, which
counter-intuitively required two erase characters. We wanted the system to
show that the character was gone by blanking it out. We also wanted the
line-erase character to display a blanked-out line. Some UNIX systems such as
4.2 BSD and System V now support this, but it was not then available anywhere
under UNIX version 6.
Bob and I had argued, somewhat sleepily, for hours as to the correct method
of erasing characters, and Bob had started putting our joint design into
effect just as I collapsed on the floor for "a short nap". I awoke around
dawn to find Bob asleep over the terminal. When he woke up, he said he was
pretty sure he'd finished the job before falling asleep, but neither of us
had enough energy to check. It was time for food and 14 hours of sleep.
When we finally checked our handiwork the next day, we found some serious flaws
in the implementation -- not an uncommon situation with work performed under
extreme conditions. But the system was up and running, and although the new
features were flawed, they didn't seem to cause any problems, so we forgot
about it for the time being. A week later, I was consulting in Cory --
we all offered free programming help to other students in the time-honored
tradition of hackers everywhere -- when Kurt Schoens called me over to the
other side of the room.
"Hey Doug," he said. "Look at this. It looks like someone tried to put
character deletion into the terminal drivers, but only half finished."
My heart raced. Did he suspect me? Or was he just chatting? I could never
tell whether Kurt was kidding; he had the most perfect poker face I had ever
seen.
But he quickly made the question academic, and proved again that he was one
of Them.
"I showed this to Bill, and he wanted to fix it", Kurt said. "Oh,
really?" I stammered. "Sounds good to me," thinking that it was a real stroke
of luck that Bill Joy would be interested in the half-completed project. If
Bill finished it, then it would be in the system on legitimate grounds, and
would stay for good.
Kurt paused for effect. "Yeah, he was all fired up about it, but I talked him
out of it, and I just deleted it from the system instead."
Oh, cruel fate! Kurt must know that I was involved; he just wanted to see me
jump when he said "boo!"
Although I'm sure Kurt thought the whole incident very funny, all I could think
of was that yet another of my features had gone down the drain. I discussed
this latest setback with others in the group, and we shared a sense of
frustration. More than ever before, we were determined to get our
contributions accepted somehow.
Kurt was both a graduate student and a system administrator, but I liked him
all the same -- chiefly because of his practical jokes. We had recently
cooperated in a spontaneous demonstration of Artificial Intelligence at the
expense of an undergraduate named Dave who had joined Them as a system
administrator. Dave had watched Kurt as he typed pwd to his
shell prompt and received /usr/kurt/mind as the response. His
next command had been mind -i -1 english. During all this
time, Kurt was double-talking about psychology and natural language processing
and some new approach to simulating the human mind that he'd thought of.
Dave looked dubious, but was willing to see how well Kurt's program worked.
What Dave didn't realize was that Kurt had not been typing commands to the
system at all; although we were sitting not 10 feet apart, Kurt and I had been
writing to each other and chatting for half an hour, and as a joke I had been
pretending I was Kurt's shell, sending him prompts and faking responses to
commands.
Dave had walked in at just the right time. So when Kurt typed
mind -i -1 english, I had naturally responded with:
"Synthetic Cognition System, version 17.8"
"Interactive mode on, Language=english"
"Please enter desired conversational topic: (default:philosophy)"
Dave couldn't help looking a little impressed; Kurt's "artificial intelligence"
system was off to a great start. Kurt had talked to his budding mind for
several minutes, and Dave of course had grown more and more impressed. Kurt
and I faced the greatest challenge of our lives in keeping a straight face
during the demonstration, but we eventually made the mistake of making the mind
altogether TOO smart to be believable, in effect sending Dave off to tackle
more serious work.
There was one practical joke that was notable for the length of time that it
was supported by the entire group. The target was system administrator Dave
Mosher. Dave had been suspicious of bugs in our system's homebrewed terminal
multiplexer for some time. Ross decided to persecute Dave by having random
characters appear on his screen from time to time, which of course convinced
Dave that the terminal multiplexer did indeed have problems. To help Ross
with the prank, each of us sent Dave some garbage characters at random
intervals whenever any one of us was on the system. We had settled on the
letter "Q" so that Dave would be sure it was always the same bug showing
the same symptoms. Since Dave had these problems no matter which terminal he
was on, day or night, no matter who else was logged onto the system, he was
positive there was a problem, and he spent much time and effort trying to get
someone to fix it.
Unfortunately for Dave he was the only one who ever saw these symptoms, so
everyone thought he was a little paranoid. We thought it was pretty funny at
first, but after a few months of this, it seemed that Dave was really getting
rattled, so one day Ross generated a capital "Q" as big as the entire screen
and sent it to Dave's screen. This made it pretty obvious to poor Dave that
someone, somehow, really had been persecuting him, and that he wasn't
paranoid after all. He had an understandably low tolerance for practical jokes
after that.
The numerous practical jokes we played were probably a reaction to the high
level of stress we felt from our ongoing illicit operations; it provided some
moments of delightful release from what was, at times, a grim battle.
There were many secret battles in the war; if Our motto was "Features!",
Theirs was "Security for Security's Sake" and the more the better. We were
never sure how long our victories would last; on the other hand, They were
never sure whether They had won. The war lasted almost three years.
We were primarily interested in the EECS department's PDP 11/70 in Cory Hall,
since that was the original UNIX site and continued to be the hotbed of UNIX
development, but We "collected" all the other UNIX systems on campus, too. One
peculiar aspect of the way the Underground had to operate was that we rarely
knew the root password on systems to which we had gained superuser access.
This is because there were easier ways to get into, and stay into, a system
than guessing the root password. We tampered, for instance, with the
su program so that it would make someone superuser when given
our own secret password as well as when given the usual root password, which
remained unknown to us. In the early days, one system administrator would
mail a new root password to all the other system administrators on the system,
apparently not realizing that we were monitoring their mail for exactly this
kind of security slip. Sadly, they soon guessed that this was not a good
procedure, and we had to return to functioning as "password-less superusers",
which at times could be a bit inconvenient.
Late one night on Cory Hall UNIX, as I was using my illegitimate superuser
powers to browse through protected but interesting portions of the system, I
happened to notice a suspicious-looking file called /usr/adm/su.
This was suspicious because there were almost never new files in the
administrative /usr/adm directory. If I was suspicious when I saw the
filename, I was half paralyzed when I saw it contained a full record of every
command executed by anyone who had worked as superuser since the previous day,
and I was in a full state of shock when I found, at the end of the file, a
record of all the commands that I'd executed during my current surreptitious
session, up to and including reading the damning file.
It took me perhaps 10 minutes of panic-stricken worry before I realized that I
could edit the record and delete all references to my illicit commands. I then
immediately logged out and warned all other members of the group. Since
nothing illicit ever appeared, the system administrators were lulled into a
sense of false security. Their strategy worked brilliantly for us, allowing us
to work in peace for quite a while before the next set of traps were laid.
The next potential trap I found was another new file in /usr/adm
called password, that kept track of all unsuccessful attempts to login
as root or to su to root, and what password was used
in the attempt. Since none of us had known the root password for months and
therefore weren't going to become superuser by anything as obvious as logging
in as root, this wasn't particularly threatening to us, but it was very
interesting. The first few days that we watched the file it showed attempts
by legitimate system administrators who had made mistakes of various sorts.
One of Them once gave a password that We discovered, through trial and
error, to be the root password on a different system. Several of Them gave
passwords that seemed to be the previous root password. Most of them were
misspellings of the correct root password. Needless to say, this was a
rather broad hint, and it took Us less than five minutes to ascertain what the
correct spelling was.
One might think that, since we had several ways to become superuser anyway, it
wouldn't make any real difference whether or not we knew the actual root
password as well. The problem was that our methods worked only so long as
nothing drastically changed in the system; the usual way that They managed to
win a battle was to backup the entire system from tape and recompile all
utilities. That sometimes set Us back weeks, since it undid all of our
"backdoors" into superuserdom, forcing us to start from ground zero on breaking
into the system again. But once we knew the root password, we could always
use that as a starting place.
We worked very hard to stay one step ahead of Them, and we spent most of our
free time reading source code, in search of either pure knowledge or another
weapon for the battle. At one time, I had modified every single utility that
ran as superuser with some kind of hidden feature that could be triggered to
give us superuser powers. Chuck Haley once sent a letter to Jeff Schriebman
commenting that he "had even found the card reader program" to show signs of
tampering. I thought that I had disguised it well, but it was extremely
difficult to keep things hidden from a group of system administrators who were
not only very intelligent, but also highly knowledgeable about the inner
workings of UNIX. As an indication of the caliber of the people we were
working against, I should note that Chuck Haley is now a researcher at Bell
Labs; Bill Joy is VP of Engineering at Sun Microsystems; Kurt Schoens is a
researcher at IBM; Jeff Schriebman is founder and President of UniSoft;
and Bob Kridle, Vance Vaughn, and Ed Gould are founders of Mt. Xinu.
This was an unusual situation; system administrators are not usually this
talented. Otherwise, they'd be doing software development rather than
administration. But at the time, there was no one else capable of
doing UNIX system administration.
As a result, we had to move quickly, quietly, and cleverly to stay ahead, and
planting devious devices in the midst of standard software was our primary
technique. Normally trusted programs which have been corrupted in this way are
called "Trojan Horses",
after the legend of the Greeks who were taken in by a bit of misplaced trust.
One of our favorite tricks for hiding our tracks when we modified standard
utilities was the diddlei program, which allowed us to reset
the last change time on a modified file so that it appeared to have been
unchanged since the previous year. Bob modified the setuid
system call in the UNIX kernel so that, under certain circumstances, it would
give the program that used it root privileges. The "certain circumstances"
consisted simply of leaving a capital "S" (for Superuser) in one of the
machine's registers. Bob was bold enough to leave this little feature in the
system's source code. We usually put our Trojan Horses in the system
executables only -- to decrease the chance of it being noticed. But Bob took
the chance so that the feature would persist even if the system were
recompiled. Sure enough, it lasted several months and through more than one
system compilation before Dave Mosher noticed it (undoubtedly with a sense of
shock) as he was patiently adding comments to the previously undocumented
kernel.
This sort of battling continued for several years, and although They were
suspicious of most of Us at one time or another, none of Us was ever caught
red-handed. It undoubtedly helped that we never performed any malicious acts.
We perhaps flouted authority, but we always enhanced the system's features.
We never interfered with the system's normal operation, nor damaged any user's
files. We learned that absolute power need not corrupt absolutely; instead it
taught us restraint.
This is probably why we were eventually accepted as members of the system
staff, even though by then several of Us had confessed to our nefarious deeds.
Once we were given license to modify and improve UNIX, we lost all
motivation to crack system security. We didn't know it at the time, but this
has long been known to be one of the most effective ways of dealing with
security problems; hire the offenders, so that there is no more Us verses
Them, but simple Us.
It worked well in our case; under the auspices of the System Development and
Research Group, created by the ever-industrious Dave Mosher, we went happily
to work on UNIX development. The development of UNIX at Berkeley, always
fast-paced, exploded once everyone -- including undergraduates -- were
participating.
The only fly in the ointment was the introduction a short while later of UNIX
Version 7. While it was a vast improvement in many ways over the Version 6
that we had been working with, most of the enhancements we had developed were
lost in the changeover. Some were reimplemented under Version 7 by those of
the group who remained at Berkeley, but by then many of us were leaving
school, and the impetus behind our ideas left with us.
Ken Arnold is, perhaps, the most famous of our original group. He stayed at
Berkeley longer than any of the rest of us, and became well known for such
contributions as Termlib, curses, fortune, Mille Bourne,
and of course his co-authorship of Rogue. But somehow it seemed a Pyrrhic
victory even for Ken; much of his best work in the early years never saw
the light of day.
We could not help but feel that we had passed through a sort of Dark Age for
UNIX development, and even with the Renaissance in full bloom, We ponder what
might have been, and bewail the features that UNIX will now never have.
Doug Merritt became one of the earliest UNIX users outside of Bell Laboratories
while attending UC Berkeley in 1976. He helped to debug
termcap and contributed to the development of
vi and curses. Mr. Merritt now works as a
consultant in the San Francisco Bay Area.
Bob Toxen is a member of the technical staff at Silicon Graphics, Inc,
who has gained a reputation as a leading expert on uucp
communications, file system repair and UNIX utilities. He has also done
ports of System III and System V to systems based on the Zilog 8000
and Motorola 68010 chips.
Best known as the author of curses and co-author of Rogue,
Ken Arnold was also President of the Berkeley Computer Club and the
Computer Science Undergraduates Association during his years at UC Berkeley.
He currently works as a programmer in the Computer Graphics Lab at UC
San Francisco and serves as a member of the UNIX Review
Software Review Board.
Copyright © 1984 by Doug Merritt, Ken Arnold, and Bob Toxen. All rights reserved.
Back
|