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 flaunted
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, 2007, 2014, 2020 by Doug Merritt, Ken Arnold, and Bob Toxen. All rights
reserved.
Back |