2285 lines
154 KiB
Plaintext
2285 lines
154 KiB
Plaintext
|
|
|||
|
IMPROVING THE SECURITY OF YOUR UNIX SYSTEM
|
|||
|
David A. Curry, Systems Programmer
|
|||
|
Information and Telecommunications Sciences and Technology Division
|
|||
|
ITSTD-721-FR-90-21
|
|||
|
Approved:
|
|||
|
Paul K. Hyder, Manager
|
|||
|
Computer Facility
|
|||
|
Boyd C. Fair, General Manager
|
|||
|
Division Operations Section
|
|||
|
Michael S. Frankel, Vice President
|
|||
|
Information and Telecommunications Sciences and Technology Division
|
|||
|
Final Report o+ April 1990
|
|||
|
SRI International 333 Ravenswood Avenue o+ Menlo Park, CA 94025-3493 o+
|
|||
|
(415) 326-6200 o+ FAX: (415) 326-5512 o+ Telex: 334486
|
|||
|
|
|||
|
SECTION 1
|
|||
|
INTRODUCTION
|
|||
|
1.1 UNIX SECURITY
|
|||
|
The UNIX operating system, although now in widespread use
|
|||
|
in environments concerned about security, was not really
|
|||
|
designed with security in mind [Ritc75]. This does not mean
|
|||
|
that UNIX does not provide any security mechanisms; indeed,
|
|||
|
several very good ones are available. However, most %%out of
|
|||
|
the box'' installation procedures from companies such as Sun
|
|||
|
Microsystems still install the operating system in much the
|
|||
|
same way as it was installed 15 years ago: with little or no
|
|||
|
security enabled.
|
|||
|
The reasons for this state of affairs are largely histori-
|
|||
|
cal. UNIX was originally designed by programmers for use by
|
|||
|
other programmers. The environment in which it was used was
|
|||
|
one of open cooperation, not one of privacy. Programmers typi-
|
|||
|
cally collaborated with each other on projects, and hence pre-
|
|||
|
ferred to be able to share their files with each other without
|
|||
|
having to climb over security hurdles. Because the first sites
|
|||
|
outside of Bell Laboratories to install UNIX were university
|
|||
|
research laboratories, where a similar environment existed, no
|
|||
|
real need for greater security was seen until some time later.
|
|||
|
In the early 1980s, many universities began to move their
|
|||
|
UNIX systems out of the research laboratories and into the com-
|
|||
|
puter centers, allowing (or forcing) the user population as a
|
|||
|
whole to use this new and wonderful system. Many businesses
|
|||
|
and government sites began to install UNIX systems as well,
|
|||
|
particularly as desktop workstations became more powerful and
|
|||
|
affordable. Thus, the UNIX operating system is no longer being
|
|||
|
used only in environments where open collaboration is the goal.
|
|||
|
Universities require their students to use the system for class
|
|||
|
assignments, yet they do not want the students to be able to
|
|||
|
copy from each other. Businesses use their UNIX systems for
|
|||
|
confidential tasks such as bookkeeping and payroll. And the
|
|||
|
government uses UNIX systems for various unclassified yet sen-
|
|||
|
sitive purposes.
|
|||
|
To complicate matters, new features have been added to
|
|||
|
UNIX over the years, making security even more difficult to
|
|||
|
control. Perhaps the most problematic features are those
|
|||
|
_________________________
|
|||
|
UNIX is a registered trademark of AT&T. VAX is a trademark of
|
|||
|
Digital Equipment Corporation. Sun-3 and NFS are trademarks of
|
|||
|
Sun Microsystems. Annex is a trademark of Xylogics, Inc.
|
|||
|
1
|
|||
|
relating to networking: remote login, remote command execution,
|
|||
|
network file systems, diskless workstations, and electronic
|
|||
|
mail. All of these features have increased the utility and
|
|||
|
usability of UNIX by untold amounts. However, these same
|
|||
|
features, along with the widespread connection of UNIX systems
|
|||
|
to the Internet and other networks, have opened up many new
|
|||
|
areas of vulnerability to unauthorized abuse of the system.
|
|||
|
1.2 THE INTERNET WORM
|
|||
|
On the evening of November 2, 1988, a self-replicating
|
|||
|
program, called a _w_o_r_m, was released on the Internet [Seel88,
|
|||
|
Spaf88, Eich89]. Overnight, this program had copied itself
|
|||
|
from machine to machine, causing the machines it infected to
|
|||
|
labor under huge loads, and denying service to the users of
|
|||
|
those machines. Although the program only infected two types
|
|||
|
of computers,* it spread quickly, as did the concern, confu-
|
|||
|
sion, and sometimes panic of system administrators whose
|
|||
|
machines were affected. While many system administrators were
|
|||
|
aware that something like this could theoretically happen - the
|
|||
|
security holes exploited by the worm were well known - the
|
|||
|
scope of the worm's break-ins came as a great surprise to most
|
|||
|
people.
|
|||
|
The worm itself did not destroy any files, steal any
|
|||
|
information (other than account passwords), intercept private
|
|||
|
mail, or plant other destructive software [Seel88]. However,
|
|||
|
it did manage to severely disrupt the operation of the network.
|
|||
|
Several sites, including parts of MIT, NASA's Ames Research
|
|||
|
Center and Goddard Space Flight Center, the Jet Propulsion
|
|||
|
Laboratory, and the U. S. Army Ballistic Research Laboratory,
|
|||
|
disconnected themselves from the Internet to avoid recontamina-
|
|||
|
tion. In addition, the Defense Communications Agency ordered
|
|||
|
the connections between the MILNET and ARPANET shut down, and
|
|||
|
kept them down for nearly 24 hours [Eich89, Elme88]. Ironi-
|
|||
|
cally, this was perhaps the worst thing to do, since the first
|
|||
|
fixes to combat the worm were distributed via the network
|
|||
|
[Eich89].
|
|||
|
This incident was perhaps the most widely described com-
|
|||
|
puter security problem ever. The worm was covered in many
|
|||
|
newspapers and magazines around the country including the _N_e_w
|
|||
|
_Y_o_r_k _T_i_m_e_s, _W_a_l_l _S_t_r_e_e_t _J_o_u_r_n_a_l, _T_i_m_e and most computer-
|
|||
|
oriented technical publications, as well as on all three major
|
|||
|
_________________________
|
|||
|
* Sun-3 systems from Sun Microsystems and VAX systems from Di-
|
|||
|
gital Equipment Corp., both running variants of 4._x BSD UNIX from
|
|||
|
the University of California at Berkeley.
|
|||
|
2
|
|||
|
television networks, the Cable News Network, and National Pub-
|
|||
|
lic Radio. In January 1990, a United States District Court
|
|||
|
jury found Robert Tappan Morris, the author of the worm, guilty
|
|||
|
of charges brought against him under a 1986 federal computer
|
|||
|
fraud and abuse law. Morris faces up to five years in prison
|
|||
|
and a $250,000 fine [Schu90]. Sentencing is scheduled for May
|
|||
|
4, 1990.
|
|||
|
1.3 SPIES AND ESPIONAGE
|
|||
|
In August 1986, the Lawrence Berkeley Laboratory, an
|
|||
|
unclassified research laboratory at the University of Califor-
|
|||
|
nia at Berkeley, was attacked by an unauthorized computer
|
|||
|
intruder [Stol88, Stol89]. Instead of immediately closing the
|
|||
|
holes the intruder was using, the system administrator, Clif-
|
|||
|
ford Stoll, elected to watch the intruder and document the
|
|||
|
weaknesses he exploited. Over the next 10 months, Stoll
|
|||
|
watched the intruder attack over 400 computers around the
|
|||
|
world, and successfully enter about 30. The computers broken
|
|||
|
into were located at universities, military bases, and defense
|
|||
|
contractors [Stol88].
|
|||
|
Unlike many intruders seen on the Internet, who typically
|
|||
|
enter systems and browse around to see what they can, this
|
|||
|
intruder was looking for something specific. Files and data
|
|||
|
dealing with the Strategic Defense Initiative, the space shut-
|
|||
|
tle, and other military topics all seemed to be of special
|
|||
|
interest. Although it is unlikely that the intruder would have
|
|||
|
found any truly classified information (the Internet is an
|
|||
|
unclassified network), it was highly probable that he could
|
|||
|
find a wealth of sensitive material [Stol88].
|
|||
|
After a year of tracking the intruder (eventually involv-
|
|||
|
ing the FBI, CIA, National Security Agency, Air Force Intelli-
|
|||
|
gence, and authorities in West Germany), five men in Hannover,
|
|||
|
West Germany were arrested. In March 1989, the five were
|
|||
|
charged with espionage: they had been selling the material they
|
|||
|
found during their exploits to the KGB. One of the men, Karl
|
|||
|
Koch (%%Hagbard''), was later found burned to death in an iso-
|
|||
|
lated forest outside Hannover. No suicide note was found
|
|||
|
[Stol89]. In February 1990, three of the intruders (Markus
|
|||
|
Hess, Dirk Bresinsky, and Peter Carl) were convicted of
|
|||
|
espionage in a German court and sentenced to prison terms,
|
|||
|
fines, and the loss of their rights to participate in elections
|
|||
|
[Risk90]. The last of the intruders, Hans Hu"bner (%%Pengo''),
|
|||
|
still faces trial in Berlin.
|
|||
|
3
|
|||
|
1.4 OTHER BREAK-INS
|
|||
|
Numerous other computer security problems have occurred in
|
|||
|
recent years, with varying levels of publicity. Some of the
|
|||
|
more widely known incidents include break-ins on NASA's SPAN
|
|||
|
network [McLe87], the IBM %%Christmas Virus'' [Risk87], a virus
|
|||
|
at Mitre Corp. that caused the MILNET to be temporarily iso-
|
|||
|
lated from other networks [Risk88], a worm that penetrated DEC-
|
|||
|
NET networks [Risk89a], break-ins on U. S. banking networks
|
|||
|
[Risk89b], and a multitude of viruses, worms, and trojan horses
|
|||
|
affecting personal computer users.
|
|||
|
1.5 SECURITY IS IMPORTANT
|
|||
|
As the previous stories demonstrate, computer security is
|
|||
|
an important topic. This document describes the security
|
|||
|
features provided by the UNIX operating system, and how they
|
|||
|
should be used. The discussion centers around version 4._x of
|
|||
|
SunOS, the version of UNIX sold by Sun Microsystems. Most of
|
|||
|
the information presented applies equally well to other UNIX
|
|||
|
systems. Although there is no way to make a computer com-
|
|||
|
pletely secure against unauthorized use (other than to lock it
|
|||
|
in a room and turn it off), by following the instructions in
|
|||
|
this document you can make your system impregnable to the
|
|||
|
%%casual'' system cracker,* and make it more difficult for the
|
|||
|
sophisticated cracker to penetrate.
|
|||
|
_________________________
|
|||
|
* The term %%hacker,'' as applied to computer users, originally
|
|||
|
had an honorable connotation: %%a person who enjoys learning the
|
|||
|
details of programming systems and how to stretch their capabili-
|
|||
|
ties - as opposed to most users of computers, who prefer to learn
|
|||
|
only the minimum amount necessary'' [Stee88]. Unfortunately, the
|
|||
|
media has distorted this definition and given it a dishonorable
|
|||
|
meaning. In deference to the true hackers, we will use the term
|
|||
|
%%cracker'' throughout this document.
|
|||
|
4
|
|||
|
SECTION 2
|
|||
|
IMPROVING SECURITY
|
|||
|
UNIX system security can be divided into three main areas
|
|||
|
of concern. Two of these areas, account security and network
|
|||
|
security, are primarily concerned with keeping unauthorized
|
|||
|
users from gaining access to the system. The third area, file
|
|||
|
system security, is concerned with preventing unauthorized
|
|||
|
access, either by legitimate users or crackers, to the data
|
|||
|
stored in the system. This section describes the UNIX security
|
|||
|
tools provided to make each of these areas as secure as possi-
|
|||
|
ble.
|
|||
|
2.1 ACCOUNT SECURITY
|
|||
|
One of the easiest ways for a cracker to get into a system
|
|||
|
is by breaking into someone's account. This is usually easy to
|
|||
|
do, since many systems have old accounts whose users have left
|
|||
|
the organization, accounts with easy-to-guess passwords, and so
|
|||
|
on. This section describes methods that can be used to avoid
|
|||
|
these problems.
|
|||
|
2.1.1 Passwords
|
|||
|
The password is the most vital part of UNIX account secu-
|
|||
|
rity. If a cracker can discover a user's password, he can then
|
|||
|
log in to the system and operate with all the capabilities of
|
|||
|
that user. If the password obtained is that of the super-user,
|
|||
|
the problem is more serious: the cracker will have read and
|
|||
|
write access to every file on the system. For this reason,
|
|||
|
choosing secure passwords is extremely important.
|
|||
|
The UNIX _p_a_s_s_w_d program [Sun88a, 379] places very few res-
|
|||
|
trictions on what may be used as a password. Generally, it
|
|||
|
requires that passwords contain five or more lowercase letters,
|
|||
|
or four characters if a nonalphabetic or uppercase letter is
|
|||
|
included. However, if the user %%insists'' that a shorter
|
|||
|
password be used (by entering it three times), the program will
|
|||
|
allow it. No checks for obviously insecure passwords (see
|
|||
|
below) are performed. Thus, it is incumbent upon the system
|
|||
|
administrator to ensure that the passwords in use on the system
|
|||
|
are secure.
|
|||
|
5
|
|||
|
In [Morr78], the authors describe experiments conducted to
|
|||
|
determine typical users' habits in the choice of passwords. In
|
|||
|
a collection of 3,289 passwords, 16% of them contained three
|
|||
|
characters or less, and an astonishing 86% were what could gen-
|
|||
|
erally be described as insecure. Additional experiments in
|
|||
|
[Gram84] show that by trying three simple guesses on each
|
|||
|
account - the login name, the login name in reverse, and the
|
|||
|
two concatenated together - a cracker can expect to obtain
|
|||
|
access to between 8 and 30 percent of the accounts on a typical
|
|||
|
system. A second experiment showed that by trying the 20 most
|
|||
|
common female first names, followed by a single digit (a total
|
|||
|
of 200 passwords), at least one password was valid on each of
|
|||
|
several dozen machines surveyed. Further experimentation by
|
|||
|
the author has found that by trying variations on the login
|
|||
|
name, user's first and last names, and a list of nearly 1800
|
|||
|
common first names, up to 50 percent of the passwords on any
|
|||
|
given system can be cracked in a matter of two or three days.
|
|||
|
2.1.1.1 Selecting Passwords
|
|||
|
The object when choosing a password is to make it as dif-
|
|||
|
ficult as possible for a cracker to make educated guesses about
|
|||
|
what you've chosen. This leaves him no alternative but a
|
|||
|
brute-force search, trying every possible combination of
|
|||
|
letters, numbers, and punctuation. A search of this sort, even
|
|||
|
conducted on a machine that could try one million passwords per
|
|||
|
second (most machines can try less than one hundred per
|
|||
|
second), would require, on the average, over one hundred years
|
|||
|
to complete. With this as our goal, and by using the informa-
|
|||
|
tion in the preceding text, a set of guidelines for password
|
|||
|
selection can be constructed:
|
|||
|
o+ _D_o_n'_t use your login name in any form (as-is,
|
|||
|
reversed, capitalized, doubled, etc.).
|
|||
|
o+ _D_o_n'_t use your first or last name in any form.
|
|||
|
o+ _D_o_n'_t use your spouse's or child's name.
|
|||
|
o+ _D_o_n'_t use other information easily obtained about
|
|||
|
you. This includes license plate numbers, telephone
|
|||
|
numbers, social security numbers, the brand of your
|
|||
|
automobile, the name of the street you live on, etc.
|
|||
|
o+ _D_o_n'_t use a password of all digits, or all the same
|
|||
|
letter. This significantly decreases the search time
|
|||
|
for a cracker.
|
|||
|
o+ _D_o_n'_t use a word contained in (English or foreign
|
|||
|
6
|
|||
|
language) dictionaries, spelling lists, or other
|
|||
|
lists of words.
|
|||
|
o+ _D_o_n'_t use a password shorter than six characters.
|
|||
|
o+ _D_o use a password with mixed-case alphabetics.
|
|||
|
o+ _D_o use a password with nonalphabetic characters,
|
|||
|
e.g., digits or punctuation.
|
|||
|
o+ _D_o use a password that is easy to remember, so you
|
|||
|
don't have to write it down.
|
|||
|
o+ _D_o use a password that you can type quickly, without
|
|||
|
having to look at the keyboard. This makes it harder
|
|||
|
for someone to steal your password by watching over
|
|||
|
your shoulder.
|
|||
|
Although this list may seem to restrict passwords to an
|
|||
|
extreme, there are several methods for choosing secure, easy-
|
|||
|
to-remember passwords that obey the above rules. Some of these
|
|||
|
include the following:
|
|||
|
o+ Choose a line or two from a song or poem, and use the
|
|||
|
first letter of each word. For example, %%In Xanadu
|
|||
|
did Kubla Kahn a stately pleasure dome decree''
|
|||
|
becomes %%IXdKKaspdd.''
|
|||
|
o+ Alternate between one consonant and one or two
|
|||
|
vowels, up to eight characters. This provides non-
|
|||
|
sense words that are usually pronounceable, and thus
|
|||
|
easily remembered. Examples include %%routboo,''
|
|||
|
%%quadpop,'' and so on.
|
|||
|
o+ Choose two short words and concatenate them together
|
|||
|
with a punctation character between them. For exam-
|
|||
|
ple: %%dog;rain,'' %%book+mug,'' %%kid?goat.''
|
|||
|
The importance of obeying these password selection rules
|
|||
|
cannot be overemphasized. The Internet worm, as part of its
|
|||
|
strategy for breaking into new machines, attempted to crack
|
|||
|
user passwords. First, the worm tried simple choices such as
|
|||
|
the login name, user's first and last names, and so on. Next,
|
|||
|
the worm tried each word present in an internal dictionary of
|
|||
|
432 words (presumably Morris considered these words to be
|
|||
|
%%good'' words to try). If all else failed, the worm tried
|
|||
|
going through the system dictionary, /_u_s_r/_d_i_c_t/_w_o_r_d_s, trying
|
|||
|
each word [Spaf88]. The password selection rules above suc-
|
|||
|
cessfully guard against all three of these strategies.
|
|||
|
7
|
|||
|
2.1.1.2 Password Policies
|
|||
|
Although asking users to select secure passwords will help
|
|||
|
improve security, by itself it is not enough. It is also
|
|||
|
important to form a set of password policies that all users
|
|||
|
must obey, in order to keep the passwords secure.
|
|||
|
First and foremost, it is important to impress on users
|
|||
|
the need to keep their passwords in their minds only. Pass-
|
|||
|
words should never be written down on desk blotters, calendars,
|
|||
|
and the like. Further, storing passwords in files on the com-
|
|||
|
puter must be prohibited. In either case, by writing the pass-
|
|||
|
word down on a piece of paper or storing it in a file, the
|
|||
|
security of the user's account is totally dependent on the
|
|||
|
security of the paper or file, which is usually less than the
|
|||
|
security offered by the password encryption software.
|
|||
|
A second important policy is that users must never give
|
|||
|
out their passwords to others. Many times, a user feels that
|
|||
|
it is easier to give someone else his password in order to copy
|
|||
|
a file, rather than to set up the permissions on the file so
|
|||
|
that it can be copied. Unfortunately, by giving out the pass-
|
|||
|
word to another person, the user is placing his trust in this
|
|||
|
other person not to distribute the password further, write it
|
|||
|
down, and so on.
|
|||
|
Finally, it is important to establish a policy that users
|
|||
|
must change their passwords from time to time, say twice a
|
|||
|
year. This is difficult to enforce on UNIX, since in most
|
|||
|
implementations, a password-expiration scheme is not available.
|
|||
|
However, there are ways to implement this policy, either by
|
|||
|
using third-party software or by sending a memo to the users
|
|||
|
requesting that they change their passwords.
|
|||
|
This set of policies should be printed and distributed to
|
|||
|
all current users of the system. It should also be given to
|
|||
|
all new users when they receive their accounts. The policy
|
|||
|
usually carries more weight if you can get it signed by the
|
|||
|
most %%impressive'' person in your organization (e.g., the
|
|||
|
president of the company).
|
|||
|
2.1.1.3 Checking Password Security
|
|||
|
The procedures and policies described in the previous sec-
|
|||
|
tions, when properly implemented, will greatly reduce the
|
|||
|
chances of a cracker breaking into your system via a stolen
|
|||
|
account. However, as with all security measures, you as the
|
|||
|
8
|
|||
|
system administrator must periodically check to be sure that
|
|||
|
the policies and procedures are being adhered to. One of the
|
|||
|
unfortunate truisms of password security is that, %%left to
|
|||
|
their own ways, some people will still use cute doggie names as
|
|||
|
passwords'' [Gram84].
|
|||
|
The best way to check the security of the passwords on
|
|||
|
your system is to use a password-cracking program much like a
|
|||
|
real cracker would use. If you succeed in cracking any pass-
|
|||
|
words, those passwords should be changed immediately. There
|
|||
|
are a few freely available password cracking programs distri-
|
|||
|
buted via various source archive sites; these are described in
|
|||
|
more detail in Section 4. A fairly extensive cracking program
|
|||
|
is also available from the author. Alternatively, you can
|
|||
|
write your own cracking program, and tailor it to your own
|
|||
|
site. For a list of things to check for, see the list of
|
|||
|
guidelines above.
|
|||
|
2.1.2 Expiration Dates
|
|||
|
Many sites, particularly those with a large number of
|
|||
|
users, typically have several old accounts lying around whose
|
|||
|
owners have since left the organization. These accounts are a
|
|||
|
major security hole: not only can they be broken into if the
|
|||
|
password is insecure, but because nobody is using the account
|
|||
|
anymore, it is unlikely that a break-in will be noticed.
|
|||
|
The simplest way to prevent unused accounts from accumu-
|
|||
|
lating is to place an expiration date on every account. These
|
|||
|
expiration dates should be near enough in the future that old
|
|||
|
accounts will be deleted in a timely manner, yet far enough
|
|||
|
apart that the users will not become annoyed. A good figure is
|
|||
|
usually one year from the date the account was installed. This
|
|||
|
tends to spread the expirations out over the year, rather than
|
|||
|
clustering them all at the beginning or end. The expiration
|
|||
|
date can easily be stored in the password file (in the full
|
|||
|
name field). A simple shell script can be used to periodically
|
|||
|
check that all accounts have expiration dates, and that none of
|
|||
|
the dates has passed.
|
|||
|
On the first day of each month, any user whose account has
|
|||
|
expired should be contacted to be sure he is still employed by
|
|||
|
the organization, and that he is actively using the account.
|
|||
|
Any user who cannot be contacted, or who has not used his
|
|||
|
account recently, should be deleted from the system. If a user
|
|||
|
is unavailable for some reason (e.g., on vacation) and cannot
|
|||
|
be contacted, his account should be disabled by replacing the
|
|||
|
encrypted password in the password file entry with an asterisk
|
|||
|
(*). This makes it impossible to log in to the account, yet
|
|||
|
9
|
|||
|
leaves the account available to be re-enabled on the user's
|
|||
|
return.
|
|||
|
2.1.3 Guest Accounts
|
|||
|
Guest accounts present still another security hole. By
|
|||
|
their nature, these accounts are rarely used, and are always
|
|||
|
used by people who should only have access to the machine for
|
|||
|
the short period of time they are guests. The most secure way
|
|||
|
to handle guest accounts is to install them on an as-needed
|
|||
|
basis, and delete them as soon as the people using them leave.
|
|||
|
Guest accounts should never be given simple passwords such as
|
|||
|
%%guest'' or %%visitor,'' and should never be allowed to remain
|
|||
|
in the password file when they are not being used.
|
|||
|
2.1.4 Accounts Without Passwords
|
|||
|
Some sites have installed accounts with names such as
|
|||
|
%%who,'' %%date,'' %%lpq,'' and so on that execute simple com-
|
|||
|
mands. These accounts are intended to allow users to execute
|
|||
|
these commands without having to log in to the machine. Typi-
|
|||
|
cally these accounts have no password associated with them, and
|
|||
|
can thus be used by anyone. Many of the accounts are given a
|
|||
|
user id of zero, so that they execute with super-user permis-
|
|||
|
sions.
|
|||
|
The problem with these accounts is that they open poten-
|
|||
|
tial security holes. By not having passwords on them, and by
|
|||
|
having super-user permissions, these accounts practically
|
|||
|
invite crackers to try to penetrate them. Usually, if the
|
|||
|
cracker can gain access to the system, penetrating these
|
|||
|
accounts is simple, because each account executes a different
|
|||
|
command. If the cracker can replace any one of these commands
|
|||
|
with one of his own, he can then use the unprotected account to
|
|||
|
execute his program with super-user permissions.
|
|||
|
Simply put, accounts without passwords should not be
|
|||
|
allowed on any UNIX system.
|
|||
|
2.1.5 Group Accounts and Groups
|
|||
|
Group accounts have become popular at many sites, but are
|
|||
|
actually a break-in waiting to happen. A group account is a
|
|||
|
10
|
|||
|
single account shared by several people, e.g., by all the col-
|
|||
|
laborators on a project. As mentioned in the section on pass-
|
|||
|
word security, users should not share passwords - the group
|
|||
|
account concept directly violates this policy. The proper way
|
|||
|
to allow users to share information, rather than giving them a
|
|||
|
group account to use, is to place these users into a group.
|
|||
|
This is done by editing the group file, /_e_t_c/_g_r_o_u_p [Sun88a,
|
|||
|
1390; Sun88b, 66], and creating a new group with the users who
|
|||
|
wish to collaborate listed as members.
|
|||
|
A line in the group file looks like
|
|||
|
groupname:password:groupid:user1,user2,user3,...
|
|||
|
The _g_r_o_u_p_n_a_m_e is the name assigned to the group, much like a
|
|||
|
login name. It may be the same as someone's login name, or
|
|||
|
different. The maximum length of a group name is eight charac-
|
|||
|
ters. The password field is unused in BSD-derived versions of
|
|||
|
UNIX, and should contain an asterisk (*). The _g_r_o_u_p_i_d is a
|
|||
|
number from 0 to 65535 inclusive. Generally, numbers below 10
|
|||
|
are reserved for special purposes, but you may choose any
|
|||
|
unused number. The last field is a comma-separated (no spaces)
|
|||
|
list of the login names of the users in the group. If no login
|
|||
|
names are listed, then the group has no members. To create a
|
|||
|
group called %%hackers'' with Huey, Duey, and Louie as members,
|
|||
|
you would add a line such as this to the group file:
|
|||
|
hackers:*:100:huey,duey,louie
|
|||
|
After the group has been created, the files and direc-
|
|||
|
tories the members wish to share can then be changed so that
|
|||
|
they are owned by this group, and the group permission bits on
|
|||
|
the files and directories can be set to allow sharing. Each
|
|||
|
user retains his own account, with his own password, thus pro-
|
|||
|
tecting the security of the system.
|
|||
|
For example, to change Huey's %%programs'' directory to be
|
|||
|
owned by the new group and properly set up the permissions so
|
|||
|
that all members of the group may access it, the _c_h_g_r_p and
|
|||
|
_c_h_m_o_d commands would be used as follows [Sun88a, 63-66]:
|
|||
|
# chgrp hackers %huey/programs
|
|||
|
# chmod -R g+rw %huey/programs
|
|||
|
2.1.6 Yellow Pages
|
|||
|
The Sun Yellow Pages system [Sun88b, 349-374] allows many
|
|||
|
11
|
|||
|
hosts to share password files, group files, and other files via
|
|||
|
the network, while the files are stored on only a single host.
|
|||
|
Unfortunately, Yellow Pages also contains a few potential secu-
|
|||
|
rity holes.
|
|||
|
The principal way Yellow Pages works is to have a special
|
|||
|
line in the password or group file that begins with a %%+''.
|
|||
|
In the password file, this line looks like
|
|||
|
+::0:0:::
|
|||
|
and in the group file, it looks like
|
|||
|
+:
|
|||
|
These lines should only be present in the files stored on Yel-
|
|||
|
low Pages client machines. They should not be present in the
|
|||
|
files on the Yellow Pages master machine(s). When a program
|
|||
|
reads the password or group file and encounters one of these
|
|||
|
lines, it goes through the network and requests the information
|
|||
|
it wants from the Yellow Pages server instead of trying to find
|
|||
|
it in the local file. In this way, the data does not have to
|
|||
|
be maintained on every host. Since the master machine already
|
|||
|
has all the information, there is no need for this special line
|
|||
|
to be present there.
|
|||
|
Generally speaking, the Yellow Pages service itself is
|
|||
|
reasonably secure. There are a few openings that a sophisti-
|
|||
|
cated (and dedicated) cracker could exploit, but Sun is rapidly
|
|||
|
closing these. The biggest problem with Yellow Pages is the
|
|||
|
%%+'' line in the password file. If the %%+'' is deleted from
|
|||
|
the front of the line, then this line loses its special Yellow
|
|||
|
Pages meaning. It instead becomes a regular password file line
|
|||
|
for an account with a null login name, no password, and user id
|
|||
|
zero (super-user). Thus, if a careless system administrator
|
|||
|
accidentally deletes the %%+''. the whole system is wide open
|
|||
|
to any attack.*
|
|||
|
Yellow Pages is too useful a service to suggest turning it
|
|||
|
off, although turning it off would make your system more
|
|||
|
secure. Instead, it is recommended that you read carefully the
|
|||
|
information in the Sun manuals in order to be fully aware of
|
|||
|
Yellow Pages' abilities and its limitations.
|
|||
|
2.2 NETWORK SECURITY
|
|||
|
_________________________
|
|||
|
* Actually, a line like this without a %%+'' is dangerous in
|
|||
|
any password file, regardless of whether Yellow Pages is in use.
|
|||
|
12
|
|||
|
As trends toward internetworking continue, most sites
|
|||
|
will, if they haven't already, connect themselves to one of the
|
|||
|
numerous regional networks springing up around the country.
|
|||
|
Most of these regional networks are also interconnected, form-
|
|||
|
ing the Internet [Hind83, Quar86]. This means that the users
|
|||
|
of your machine can access other hosts and communicate with
|
|||
|
other users around the world. Unfortunately, it also means
|
|||
|
that other hosts and users from around the world can access
|
|||
|
your machine, and attempt to break into it.
|
|||
|
Before internetworking became commonplace, protecting a
|
|||
|
system from unauthorized access simply meant locking the
|
|||
|
machine in a room by itself. Now that machines are connected
|
|||
|
by networks, however, security is much more complex. This sec-
|
|||
|
tion describes the tools and methods available to make your
|
|||
|
UNIX networks as secure as possible.
|
|||
|
2.2.1 Trusted Hosts
|
|||
|
One of the most convenient features of the Berkeley (and
|
|||
|
Sun) UNIX networking software is the concept of %%trusted''
|
|||
|
hosts. The software allows the specification of other hosts
|
|||
|
(and possibly users) who are to be considered trusted - remote
|
|||
|
logins and remote command executions from these hosts will be
|
|||
|
permitted without requiring the user to enter a password. This
|
|||
|
is very convenient, because users do not have to type their
|
|||
|
password every time they use the network. Unfortunately, for
|
|||
|
the same reason, the concept of a trusted host is also
|
|||
|
extremely insecure.
|
|||
|
The Internet worm made extensive use of the trusted host
|
|||
|
concept to spread itself throughout the network [Seel88]. Many
|
|||
|
sites that had already disallowed trusted hosts did fairly well
|
|||
|
against the worm compared with those sites that did allow
|
|||
|
trusted hosts. Even though it is a security hole, there are
|
|||
|
some valid uses for the trusted host concept. This section
|
|||
|
describes how to properly implement the trusted hosts facility
|
|||
|
while preserving as much security as possible.
|
|||
|
2.2.1.1 The hosts.equiv File
|
|||
|
The file /_e_t_c/_h_o_s_t_s._e_q_u_i_v [Sun88a, 1397] can be used by
|
|||
|
the system administrator to indicate trusted hosts. Each
|
|||
|
trusted host is listed in the file, one host per line. If a
|
|||
|
user attempts to log in (using _r_l_o_g_i_n) or execute a command
|
|||
|
(using _r_s_h) remotely from one of the systems listed in
|
|||
|
13
|
|||
|
_h_o_s_t_s._e_q_u_i_v, and that user has an account on the local system
|
|||
|
with the same login name, access is permitted without requiring
|
|||
|
a password.
|
|||
|
Provided adequate care is taken to allow only local hosts
|
|||
|
in the _h_o_s_t_s._e_q_u_i_v file, a reasonable compromise between secu-
|
|||
|
rity and convenience can be achieved. Nonlocal hosts (includ-
|
|||
|
ing hosts at remote sites of the same organization) should
|
|||
|
never be trusted. Also, if there are any machines at your
|
|||
|
organization that are installed in %%public'' areas (e.g., ter-
|
|||
|
minal rooms) as opposed to private offices, you should not
|
|||
|
trust these hosts.
|
|||
|
On Sun systems, _h_o_s_t_s._e_q_u_i_v is controlled with the Yellow
|
|||
|
Pages software. As distributed, the default _h_o_s_t_s._e_q_u_i_v file
|
|||
|
distributed by Sun contains a single line:
|
|||
|
+
|
|||
|
This indicates that _e_v_e_r_y _k_n_o_w_n _h_o_s_t (i.e., the complete con-
|
|||
|
tents of the host file) should be considered a trusted host.
|
|||
|
This is totally incorrect and a major security hole, since
|
|||
|
hosts outside the local organization should never be trusted.
|
|||
|
A correctly configured _h_o_s_t_s._e_q_u_i_v should never list any
|
|||
|
%%wildcard'' hosts (such as the %%+''); only specific host
|
|||
|
names should be used. When installing a new system from Sun
|
|||
|
distribution tapes, you should be sure to either replace the
|
|||
|
Sun default _h_o_s_t_s._e_q_u_i_v with a correctly configured one, or
|
|||
|
delete the file altogether.
|
|||
|
2.2.1.2 The .rhosts File
|
|||
|
The ._r_h_o_s_t_s file [Sun88a, 1397] is similar in concept and
|
|||
|
format to the _h_o_s_t_s._e_q_u_i_v file, but allows trusted access only
|
|||
|
to specific host-user combinations, rather than to hosts in
|
|||
|
general.* Each user may create a ._r_h_o_s_t_s file in his home
|
|||
|
directory, and allow access to her account without a password.
|
|||
|
Most people use this mechanism to allow trusted access between
|
|||
|
accounts they have on systems owned by different organizations
|
|||
|
who do not trust each other's hosts in _h_o_s_t_s._e_q_u_i_v. Unfor-
|
|||
|
tunately, this file presents a major security problem: While
|
|||
|
_h_o_s_t_s._e_q_u_i_v is under the system administrator's control and can
|
|||
|
be managed effectively, any user may create a ._r_h_o_s_t_s file
|
|||
|
granting access to whomever he chooses, without the system
|
|||
|
administrator's knowledge.
|
|||
|
_________________________
|
|||
|
* Actually, _h_o_s_t_s._e_q_u_i_v may be used to specify host-user combi-
|
|||
|
nations as well, but this is rarely done.
|
|||
|
14
|
|||
|
The only secure way to manage ._r_h_o_s_t_s files is to com-
|
|||
|
pletely disallow them on the system. The system administrator
|
|||
|
should check the system often for violations of this policy
|
|||
|
(see Section 3.3.1.4). One possible exception to this rule is
|
|||
|
the %%root'' account; a ._r_h_o_s_t_s file may be necessary to allow
|
|||
|
network backups and the like to be completed.
|
|||
|
2.2.2 Secure Terminals
|
|||
|
Under newer versions of UNIX, the concept of a %%secure''
|
|||
|
terminal has been introduced. Simply put, the super-user
|
|||
|
(%%root'') may not log in on a nonsecure terminal, even with a
|
|||
|
password. (Authorized users may still use the _s_u command to
|
|||
|
become super-user, however.) The file /_e_t_c/_t_t_y_t_a_b [Sun88a,
|
|||
|
1478] is used to control which terminals are considered
|
|||
|
secure.|- A short excerpt from this file is shown below.
|
|||
|
console "/usr/etc/getty std.9600" sun off secure
|
|||
|
ttya "/usr/etc/getty std.9600" unknown off secure
|
|||
|
ttyb "/usr/etc/getty std.9600" unknown off secure
|
|||
|
ttyp0 none network off secure
|
|||
|
ttyp1 none network off secure
|
|||
|
ttyp2 none network off secure
|
|||
|
The keyword %%secure'' at the end of each line indicates that
|
|||
|
the terminal is considered secure. To remove this designation,
|
|||
|
simply edit the file and delete the %%secure'' keyword. After
|
|||
|
saving the file, type the command (as super-user):
|
|||
|
# kill -HUP 1
|
|||
|
This tells the _i_n_i_t process to reread the _t_t_y_t_a_b file.
|
|||
|
The Sun default configuration for _t_t_y_t_a_b is to consider
|
|||
|
all terminals secure, including %%pseudo'' terminals used by
|
|||
|
the remote login software. This means that %%root'' may log in
|
|||
|
remotely from any host on the network. A more secure confi-
|
|||
|
guration would consider as secure only directly connected ter-
|
|||
|
minals, or perhaps only the console device. This is how file
|
|||
|
servers and other machines with disks should be set up.
|
|||
|
The most secure configuration is to remove the %%secure''
|
|||
|
designation from all terminals, including the console device.
|
|||
|
This requires that those users with super-user authority first
|
|||
|
log in as themselves, and then become the super-user via the _s_u
|
|||
|
_________________________
|
|||
|
|- Under non-Sun versions of Berkeley UNIX, this file is called
|
|||
|
/_e_t_c/_t_t_y_s.
|
|||
|
15
|
|||
|
command. It also requires the %%root'' password to be entered
|
|||
|
when rebooting in single-user mode, in order to prevent users
|
|||
|
from rebooting their desktop workstations and obtaining super-
|
|||
|
user access. This is how all diskless client machines should
|
|||
|
be set up.
|
|||
|
2.2.3 The Network File System
|
|||
|
The Network File System (NFS) [Sun88d] is designed to
|
|||
|
allow several hosts to share files over the network. One of
|
|||
|
the most common uses of NFS is to allow diskless workstations
|
|||
|
to be installed in offices, while keeping all disk storage in a
|
|||
|
central location. As distributed by Sun, NFS has no security
|
|||
|
features enabled. This means that any host on the Internet may
|
|||
|
access your files via NFS, regardless of whether you trust them
|
|||
|
or not.
|
|||
|
Fortunately, there are several easy ways to make NFS more
|
|||
|
secure. The more commonly used methods are described in this
|
|||
|
section, and these can be used to make your files quite secure
|
|||
|
from unauthorized access via NFS. Secure NFS, introduced in
|
|||
|
SunOS Release 4.0, takes security one step further, using
|
|||
|
public-key encryption techniques to ensure authorized access.
|
|||
|
Discussion of secure NFS is deferred until Section 4.
|
|||
|
2.2.3.1 The exports File
|
|||
|
The file /_e_t_c/_e_x_p_o_r_t_s [Sun88a, 1377] is perhaps one of the
|
|||
|
most important parts of NFS configuration. This file lists
|
|||
|
which file systems are exported (made available for mounting)
|
|||
|
to other systems. A typical _e_x_p_o_r_t_s file as installed by the
|
|||
|
Sun installation procedure looks something like this:
|
|||
|
/usr
|
|||
|
/home
|
|||
|
/var/spool/mail
|
|||
|
#
|
|||
|
/export/root/client1 -access=client1,root=client1
|
|||
|
/export/swap/client1 -access=client1,root=client1
|
|||
|
#
|
|||
|
/export/root/client2 -access=client2,root=client2
|
|||
|
/export/swap/client2 -access=client2,root=client2
|
|||
|
The _r_o_o_t= keyword specifies the list of hosts that are allowed
|
|||
|
to have super-user access to the files in the named file
|
|||
|
system. This keyword is discussed in detail in Section
|
|||
|
16
|
|||
|
2.2.3.3. The _a_c_c_e_s_s= keyword specifies the list of hosts
|
|||
|
(separated by colons) that are allowed to mount the named file
|
|||
|
system. If no _a_c_c_e_s_s= keyword is specified for a file system,
|
|||
|
any host anywhere on the network may mount that file system via
|
|||
|
NFS.
|
|||
|
Obviously, this presents a major security problem, since
|
|||
|
anyone who can mount your file systems via NFS can then peruse
|
|||
|
them at her leisure. Thus, it is important that all file sys-
|
|||
|
tems listed in _e_x_p_o_r_t_s have an _a_c_c_e_s_s= keyword associated with
|
|||
|
them. If you have only a few hosts which must mount a file
|
|||
|
system, you can list them individually in the file:
|
|||
|
/usr -access=host1:host2:host3:host4:host5
|
|||
|
However, because the maximum number of hosts that can be listed
|
|||
|
this way is ten, the _a_c_c_e_s_s= keyword will also allow netgroups
|
|||
|
to be specified. Netgroups are described in the next section.
|
|||
|
After making any changes to the _e_x_p_o_r_t_s file, you should
|
|||
|
run the command
|
|||
|
# exportfs -a
|
|||
|
in order to make the changes take effect.
|
|||
|
2.2.3.2 The netgroup File
|
|||
|
The file /_e_t_c/_n_e_t_g_r_o_u_p [Sun88a, 1407] is used to define
|
|||
|
netgroups. This file is controlled by Yellow Pages, and must
|
|||
|
be rebuilt in the Yellow Pages maps whenever it is modified.
|
|||
|
Consider the following sample _n_e_t_g_r_o_u_p file:
|
|||
|
A_Group (servera,,) (clienta1,,) (clienta2,,)
|
|||
|
B_Group (serverb,,) (clientb1,,) (clientb2,,)
|
|||
|
AdminStaff (clienta1,mary,) (clientb3,joan,)
|
|||
|
AllSuns A_Group B_Group
|
|||
|
This file defines four netgroups, called _A__G_r_o_u_p, _B__G_r_o_u_p,
|
|||
|
_A_d_m_i_n_S_t_a_f_f, and _A_l_l_S_u_n_s. The _A_l_l_S_u_n_s netgroup is actually a
|
|||
|
%%super group'' containing all the members of the _A__G_r_o_u_p and
|
|||
|
_B__G_r_o_u_p netgroups.
|
|||
|
Each member of a netgroup is defined as a triple: (host,
|
|||
|
user, domain). Typically, the _d_o_m_a_i_n field is never used, and
|
|||
|
is simply left blank. If either the _h_o_s_t or _u_s_e_r field is left
|
|||
|
17
|
|||
|
blank, then any host or user is considered to match. Thus the
|
|||
|
triple (host,,) matches any user on the named host, while the
|
|||
|
triple (,user,) matches the named user on any host.
|
|||
|
Netgroups are useful when restricting access to NFS file
|
|||
|
systems via the _e_x_p_o_r_t_s file. For example, consider this modi-
|
|||
|
fied version of the file from the previous section:
|
|||
|
/usr -access=A_Group
|
|||
|
/home -access=A_Group:B_Group
|
|||
|
/var/spool/mail -access=AllSuns
|
|||
|
#
|
|||
|
/export/root/client1 -access=client1,root=client1
|
|||
|
/export/swap/client1 -access=client1,root=client1
|
|||
|
#
|
|||
|
/export/root/client2 -access=client2,root=client2
|
|||
|
/export/swap/client2 -access=client2,root=client2
|
|||
|
The /_u_s_r file system may now only be mounted by the hosts in
|
|||
|
the _A__G_r_o_u_p netgroup, that is, _s_e_r_v_e_r_a, _c_l_i_e_n_t_a_1, and _c_l_i_e_n_t_a_2.
|
|||
|
Any other host that tries to mount this file system will
|
|||
|
receive an %%access denied'' error. The /_h_o_m_e file system may
|
|||
|
be mounted by any of the hosts in either the _A__G_r_o_u_p or _B__G_r_o_u_p
|
|||
|
netgroups. The /_v_a_r/_s_p_o_o_l/_m_a_i_l file system is also restricted
|
|||
|
to these hosts, but in this example we used the %%super group''
|
|||
|
called _A_l_l_S_u_n_s.
|
|||
|
Generally, the best way to configure the _n_e_t_g_r_o_u_p file is
|
|||
|
to make a single netgroup for each file server and its clients,
|
|||
|
and then to make other super groups, such as _A_l_l_S_u_n_s. This
|
|||
|
allows you the flexibility to specify the smallest possible
|
|||
|
group of hosts for each file system in /_e_t_c/_e_x_p_o_r_t_s.
|
|||
|
Netgroups can also be used in the password file to allow
|
|||
|
access to a given host to be restricted to the members of that
|
|||
|
group, and they can be used in the _h_o_s_t_s._e_q_u_i_v file to central-
|
|||
|
ize maintenance of the list of trusted hosts. The procedures
|
|||
|
for doing this are defined in more detail in the Sun manual.
|
|||
|
2.2.3.3 Restricting Super-User Access
|
|||
|
Normally, NFS translates the super-user id to a special id
|
|||
|
called %%nobody'' in order to prevent a user with %%root'' on a
|
|||
|
remote workstation from accessing other people's files. This
|
|||
|
is good for security, but sometimes a nuisance for system
|
|||
|
administration, since you cannot make changes to files as
|
|||
|
%%root'' through NFS.
|
|||
|
The _e_x_p_o_r_t_s file also allows you to grant super-user
|
|||
|
18
|
|||
|
access to certain file systems for certain hosts by using the
|
|||
|
_r_o_o_t= keyword. Following this keyword a colon-separated list
|
|||
|
of up to ten hosts may be specified; these hosts will be
|
|||
|
allowed to access the file system as %%root'' without having
|
|||
|
the user id converted to %%nobody.'' Netgroups may not be
|
|||
|
specified to the _r_o_o_t= keyword.
|
|||
|
Granting %%root'' access to a host should not be done
|
|||
|
lightly. If a host has %%root'' access to a file system, then
|
|||
|
the super-user on that host will have complete access to the
|
|||
|
file system, just as if you had given him the %%root'' password
|
|||
|
on the server. Untrusted hosts should never be given %%root''
|
|||
|
access to NFS file systems.
|
|||
|
2.2.4 FTP
|
|||
|
The File Transfer Protocol, implemented by the _f_t_p and
|
|||
|
_f_t_p_d programs [Sun88a, 195-201, 1632-1634], allows users to
|
|||
|
connect to remote systems and transfer files back and forth.
|
|||
|
Unfortunately, older versions of these programs also had
|
|||
|
several bugs in them that allowed crackers to break into a sys-
|
|||
|
tem. These bugs have been fixed by Berkeley, and new versions
|
|||
|
are available. If your _f_t_p_d* was obtained before December
|
|||
|
1988, you should get a newer version (see Section 4).
|
|||
|
One of the more useful features of FTP is the
|
|||
|
%%anonymous'' login. This special login allows users who do
|
|||
|
not have an account on your machine to have restricted access
|
|||
|
in order to transfer files from a specific directory. This is
|
|||
|
useful if you wish to distribute software to the public at
|
|||
|
large without giving each person who wants the software an
|
|||
|
account on your machine. In order to securely set up anonymous
|
|||
|
FTP you should follow the specific instructions below:
|
|||
|
1. Create an account called %%ftp.'' Disable the account
|
|||
|
by placing an asterisk (*) in the password field.
|
|||
|
Give the account a special home directory, such as
|
|||
|
/_u_s_r/_f_t_p or /_u_s_r/_s_p_o_o_l/_f_t_p.
|
|||
|
2. Make the home directory owned by %%ftp'' and unwrit-
|
|||
|
able by anyone:
|
|||
|
# chown ftp %ftp
|
|||
|
# chmod 555 %ftp
|
|||
|
_________________________
|
|||
|
* On Sun systems, _f_t_p_d is stored in the file /_u_s_r/_e_t_c/_i_n._f_t_p_d.
|
|||
|
On most other systems, it is called /_e_t_c/_f_t_p_d.
|
|||
|
19
|
|||
|
3. Make the directory %_f_t_p/_b_i_n, owned by the super-user
|
|||
|
and unwritable by anyone. Place a copy of the _l_s
|
|||
|
program in this directory:
|
|||
|
# mkdir %ftp/bin
|
|||
|
# chown root %ftp/bin
|
|||
|
# chmod 555 %ftp/bin
|
|||
|
# cp -p /bin/ls %ftp/bin
|
|||
|
# chmod 111 %ftp/bin/ls
|
|||
|
4. Make the directory %_f_t_p/_e_t_c, owned by the super-user
|
|||
|
and unwritable by anyone. Place copies of the pass-
|
|||
|
word and group files in this directory, with all the
|
|||
|
password fields changed to asterisks (*). You may
|
|||
|
wish to delete all but a few of the accounts and
|
|||
|
groups from these files; the only account that must
|
|||
|
be present is %%ftp.''
|
|||
|
# mkdir %ftp/etc
|
|||
|
# chown root %ftp/etc
|
|||
|
# chmod 555 %ftp/etc
|
|||
|
# cp -p /etc/passwd /etc/group %ftp/etc
|
|||
|
# chmod 444 %ftp/etc/passwd %ftp/etc/group
|
|||
|
5. Make the directory %_f_t_p/_p_u_b, owned by %%ftp'' and
|
|||
|
world-writable. Users may then place files that are
|
|||
|
to be accessible via anonymous FTP in this directory:
|
|||
|
# mkdir %ftp/pub
|
|||
|
# chown ftp %ftp/pub
|
|||
|
# chmod 777 %ftp/pub
|
|||
|
Because the anonymous FTP feature allows anyone to access
|
|||
|
your system (albeit in a very limited way), it should not be
|
|||
|
made available on every host on the network. Instead, you
|
|||
|
should choose one machine (preferably a server or standalone
|
|||
|
host) on which to allow this service. This makes monitoring
|
|||
|
for security violations much easier. If you allow people to
|
|||
|
transfer files to your machine (using the world-writable _p_u_b
|
|||
|
directory, described above), you should check often the con-
|
|||
|
tents of the directories into which they are allowed to write.
|
|||
|
Any suspicious files you find should be deleted.
|
|||
|
2.2.4.1 Trivial FTP
|
|||
|
The Trivial File Transfer Protocol, TFTP, is used on Sun
|
|||
|
20
|
|||
|
workstations (and others) to allow diskless hosts to boot from
|
|||
|
the network. Basically, TFTP is a stripped-down version of FTP
|
|||
|
- there is no user authentication, and the connection is based
|
|||
|
on the User Datagram Protocol instead of the Transmission Con-
|
|||
|
trol Protocol. Because they are so stripped-down, many imple-
|
|||
|
mentations of TFTP have security holes. You should check your
|
|||
|
hosts by executing the command sequence shown below.
|
|||
|
% tftp
|
|||
|
tftp> connect _y_o_u_r_h_o_s_t
|
|||
|
tftp> get /etc/motd tmp
|
|||
|
_E_r_r_o_r _c_o_d_e _1: _F_i_l_e _n_o_t _f_o_u_n_d
|
|||
|
_t_f_t_p> _q_u_i_t
|
|||
|
%
|
|||
|
If your version does not respond with %%_F_i_l_e _n_o_t _f_o_u_n_d,'' and
|
|||
|
instead transfers the file, you should replace your version of
|
|||
|
_t_f_t_p_d* with a newer one. In particular, versions of SunOS
|
|||
|
prior to release 4.0 are known to have this problem.
|
|||
|
2.2.5 Mail
|
|||
|
Electronic mail is one of the main reasons for connecting
|
|||
|
to outside networks. On most versions of Berkeley-derived UNIX
|
|||
|
systems, including those from Sun, the _s_e_n_d_m_a_i_l program
|
|||
|
[Sun88a, 1758-1760; Sun88b, 441-488] is used to enable the
|
|||
|
receipt and delivery of mail. As with the FTP software, older
|
|||
|
versions of _s_e_n_d_m_a_i_l have several bugs that allow security vio-
|
|||
|
lations. One of these bugs was used with great success by the
|
|||
|
Internet worm [Seel88, Spaf88]. The current version of _s_e_n_d_-
|
|||
|
_m_a_i_l from Berkeley is version 5.61, of January 1989. Sun is,
|
|||
|
as of this writing, still shipping version 5.59, which has a
|
|||
|
known security problem. They have, however, made a fixed ver-
|
|||
|
sion available. Section 4 details how to obtain these newer
|
|||
|
versions.
|
|||
|
Generally, with the exception of the security holes men-
|
|||
|
tioned above, _s_e_n_d_m_a_i_l is reasonably secure when installed by
|
|||
|
most vendors' installation procedures. There are, however, a
|
|||
|
few precautions that should be taken to ensure secure opera-
|
|||
|
tion:
|
|||
|
1. Remove the %%decode'' alias from the aliases file
|
|||
|
(/_e_t_c/_a_l_i_a_s_e_s or /_u_s_r/_l_i_b/_a_l_i_a_s_e_s).
|
|||
|
_________________________
|
|||
|
* On Sun systems, _t_f_t_p_d is stored in the file
|
|||
|
/_u_s_r/_e_t_c/_i_n._t_f_t_p_d. On most other systems, it is called
|
|||
|
/_e_t_c/_t_f_t_p_d.
|
|||
|
21
|
|||
|
2. If you create aliases that allow messages to be sent
|
|||
|
to programs, be absolutely sure that there is no way
|
|||
|
to obtain a shell or send commands to a shell from
|
|||
|
these programs.
|
|||
|
3. Make sure the %%wizard'' password is disabled in the
|
|||
|
configuration file, _s_e_n_d_m_a_i_l._c_f. (Unless you modify
|
|||
|
the distributed configuration files, this shouldn't
|
|||
|
be a problem.)
|
|||
|
4. Make sure your _s_e_n_d_m_a_i_l does not support the
|
|||
|
%%debug'' command. This can be done with the follow-
|
|||
|
ing commands:
|
|||
|
% telnet localhost 25
|
|||
|
220 yourhost Sendmail 5.61 ready at 9 Mar 90 10:57:36 PST
|
|||
|
debug
|
|||
|
500 Command unrecognized
|
|||
|
quit
|
|||
|
%
|
|||
|
If your _s_e_n_d_m_a_i_l responds to the %%debug'' command
|
|||
|
with %%_2_0_0 _D_e_b_u_g _s_e_t,'' then you are vulnerable to
|
|||
|
attack and should replace your _s_e_n_d_m_a_i_l with a newer
|
|||
|
version.
|
|||
|
By following the procedures above, you can be sure that your
|
|||
|
mail system is secure.
|
|||
|
2.2.6 Finger
|
|||
|
The %%finger'' service, provided by the _f_i_n_g_e_r program
|
|||
|
[Sun88a, 186-187], allows you to obtain information about a
|
|||
|
user such as her full name, home directory, last login time,
|
|||
|
and in some cases when she last received mail and/or read her
|
|||
|
mail. The _f_i_n_g_e_r_d program [Sun88a, 1625] allows users on
|
|||
|
remote hosts to obtain this information.
|
|||
|
A bug in _f_i_n_g_e_r_d was also exercised with success by the
|
|||
|
Internet worm [Seel88, Spaf88]. If your version of _f_i_n_g_e_r_d* is
|
|||
|
older than November 5, 1988, it should be replaced with a newer
|
|||
|
version. New versions are available from several of the
|
|||
|
sources described in Section 4.
|
|||
|
_________________________
|
|||
|
* On Sun systems, _f_i_n_g_e_r_d is stored in /_u_s_r/_e_t_c/_i_n._f_i_n_g_e_r_d. On
|
|||
|
most other systems, it is called /_e_t_c/_f_i_n_g_e_r_d.
|
|||
|
22
|
|||
|
2.2.7 Modems and Terminal Servers
|
|||
|
Modems and terminal servers (terminal switches, Annex
|
|||
|
boxes, etc.) present still another potential security problem.
|
|||
|
The main problem with these devices is one of configuration -
|
|||
|
misconfigured hardware can allow security breaches. Explaining
|
|||
|
how to configure every brand of modem and terminal server would
|
|||
|
require volumes. However, the following items should be
|
|||
|
checked for on any modems or terminal servers installed at your
|
|||
|
site:
|
|||
|
1. If a user dialed up to a modem hangs up the phone,
|
|||
|
the system should log him out. If it doesn't, check
|
|||
|
the hardware connections and the kernel configuration
|
|||
|
of the serial ports.
|
|||
|
2. If a user logs off, the system should force the modem
|
|||
|
to hang up. Again, check the hardware connections if
|
|||
|
this doesn't work.
|
|||
|
3. If the connection from a terminal server to the sys-
|
|||
|
tem is broken, the system should log the user off.
|
|||
|
4. If the terminal server is connected to modems, and
|
|||
|
the user hangs up, the terminal server should inform
|
|||
|
the system that the user has hung up.
|
|||
|
Most modem and terminal server manuals cover in detail how
|
|||
|
to properly connect these devices to your system. In particu-
|
|||
|
lar you should pay close attention to the %%Carrier Detect,''
|
|||
|
%%Clear to Send,'' and %%Request to Send'' connections.
|
|||
|
2.2.8 Firewalls
|
|||
|
One of the newer ideas in network security is that of a
|
|||
|
_f_i_r_e_w_a_l_l. Basically, a firewall is a special host that sits
|
|||
|
between your outside-world network connection(s) and your
|
|||
|
internal network(s). This host does not send out routing
|
|||
|
information about your internal network, and thus the internal
|
|||
|
network is %%invisible'' from the outside. In order to config-
|
|||
|
ure a firewall machine, the following considerations need to be
|
|||
|
taken:
|
|||
|
1. The firewall does not advertise routes. This means
|
|||
|
that users on the internal network must log in to the
|
|||
|
firewall in order to access hosts on remote networks.
|
|||
|
Likewise, in order to log in to a host on the
|
|||
|
23
|
|||
|
internal network from the outside, a user must first
|
|||
|
log in to the firewall machine. This is incon-
|
|||
|
venient, but more secure.
|
|||
|
2. All electronic mail sent by your users must be for-
|
|||
|
warded to the firewall machine if it is to be
|
|||
|
delivered outside your internal network. The
|
|||
|
firewall must receive all incoming electronic mail,
|
|||
|
and then redistribute it. This can be done either
|
|||
|
with aliases for each user or by using name server MX
|
|||
|
records.
|
|||
|
3. The firewall machine should not mount any file sys-
|
|||
|
tems via NFS, or make any of its file systems avail-
|
|||
|
able to be mounted.
|
|||
|
4. Password security on the firewall must be rigidly
|
|||
|
enforced.
|
|||
|
5. The firewall host should not trust any other hosts
|
|||
|
regardless of where they are. Furthermore, the
|
|||
|
firewall should not be trusted by any other host.
|
|||
|
6. Anonymous FTP and other similar services should only
|
|||
|
be provided by the firewall host, if they are pro-
|
|||
|
vided at all.
|
|||
|
The purpose of the firewall is to prevent crackers from
|
|||
|
accessing other hosts on your network. This means, in general,
|
|||
|
that you must maintain strict and rigidly enforced security on
|
|||
|
the firewall, but the other hosts are less vulnerable, and
|
|||
|
hence security may be somewhat lax. But it is important to
|
|||
|
remember that the firewall is not a complete cure against
|
|||
|
crackers - if a cracker can break into the firewall machine, he
|
|||
|
can then try to break into any other host on your network.
|
|||
|
2.3 FILE SYSTEM SECURITY
|
|||
|
The last defense against system crackers are the permis-
|
|||
|
sions offered by the file system. Each file or directory has
|
|||
|
three sets of permission bits associated with it: one set for
|
|||
|
the user who owns the file, one set for the users in the group
|
|||
|
with which the file is associated, and one set for all other
|
|||
|
users (the %%world'' permissions). Each set contains three
|
|||
|
identical permission bits, which control the following:
|
|||
|
_r_e_a_d If set, the file or directory may be read. In
|
|||
|
the case of a directory, read access allows a
|
|||
|
user to see the contents of a directory (the
|
|||
|
24
|
|||
|
names of the files contained therein), but not to
|
|||
|
access them.
|
|||
|
_w_r_i_t_e If set, the file or directory may be written
|
|||
|
(modified). In the case of a directory, write
|
|||
|
permission implies the ability to create, delete,
|
|||
|
and rename files. Note that the ability to
|
|||
|
remove a file is _n_o_t controlled by the permis-
|
|||
|
sions on the file, but rather the permissions on
|
|||
|
the directory containing the file.
|
|||
|
_e_x_e_c_u_t_e If set, the file or directory may be executed
|
|||
|
(searched). In the case of a directory, execute
|
|||
|
permission implies the ability to access files
|
|||
|
contained in that directory.
|
|||
|
In addition, a fourth permission bit is available in each
|
|||
|
set of permissions. This bit has a different meaning in each
|
|||
|
set of permission bits:
|
|||
|
_s_e_t_u_i_d If set in the owner permissions, this bit controls
|
|||
|
the %%set user id'' (setuid) status of a file.
|
|||
|
Setuid status means that when a program is exe-
|
|||
|
cuted, it executes with the permissions of the
|
|||
|
user owning the program, in addition to the per-
|
|||
|
missions of the user executing the program. For
|
|||
|
example, _s_e_n_d_m_a_i_l is setuid %%root,'' allowing it
|
|||
|
to write files in the mail queue area, which nor-
|
|||
|
mal users are not allowed to do. This bit is
|
|||
|
meaningless on nonexecutable files.
|
|||
|
_s_e_t_g_i_d If set in the group permissions, this bit controls
|
|||
|
the %%set group id'' (setgid) status of a file.
|
|||
|
This behaves in exactly the same way as the setuid
|
|||
|
bit, except that the group id is affected instead.
|
|||
|
This bit is meaningless on non-executable files
|
|||
|
(but see below).
|
|||
|
_s_t_i_c_k_y If set in the world permissions, the %%sticky''
|
|||
|
bit tells the operating system to do special
|
|||
|
things with the text image of an executable file.
|
|||
|
It is mostly a holdover from older versions of
|
|||
|
UNIX, and has little if any use today. This bit
|
|||
|
is also meaningless on nonexecutable files (but
|
|||
|
see below).
|
|||
|
2.3.1 Setuid Shell Scripts
|
|||
|
Shell scripts that have the setuid or setgid bits set on
|
|||
|
25
|
|||
|
them are _n_o_t secure, regardless of how many safeguards are taken
|
|||
|
when writing them. There are numerous software packages avail-
|
|||
|
able that claim to make shell scripts secure, but every one
|
|||
|
released so far has not managed to solve all the problems.
|
|||
|
Setuid and setgid shell scripts should never be allowed on
|
|||
|
any UNIX system.
|
|||
|
2.3.2 The Sticky Bit on Directories
|
|||
|
Newer versions of UNIX have attached a new meaning to the
|
|||
|
sticky bit. When this bit is set on a directory, it means that
|
|||
|
users may not delete or rename other users' files in this direc-
|
|||
|
tory. This is typically useful for the /_t_m_p directory. Nor-
|
|||
|
mally, /_t_m_p is world-writable, enabling any user to delete
|
|||
|
another user's files. By setting the sticky bit on /_t_m_p, users
|
|||
|
may only delete their own files from this directory.
|
|||
|
To set the sticky bit on a directory, use the command
|
|||
|
# chmod o+t _d_i_r_e_c_t_o_r_y
|
|||
|
2.3.3 The Setgid Bit on Directories
|
|||
|
In SunOS 4.0, the setgid bit was also given a new meaning.
|
|||
|
Two rules can be used for assigning group ownership to a file in
|
|||
|
SunOS:
|
|||
|
1. The System V mechanism, which says that a user's pri-
|
|||
|
mary group id (the one listed in the password file) is
|
|||
|
assigned to any file he creates.
|
|||
|
2. The Berkeley mechanism, which says that the group id of
|
|||
|
a file is set to the group id of the directory in which
|
|||
|
it is created.
|
|||
|
If the setgid bit is set on a directory, the Berkeley
|
|||
|
mechanism is enabled. Otherwise, the System V mechanism is
|
|||
|
enabled. Normally, the Berkeley mechanism is used; this mechan-
|
|||
|
ism must be used if creating directories for use by more than one
|
|||
|
member of a group (see Section 2.1.5).
|
|||
|
To set the setgid bit on a directory, use the command
|
|||
|
26
|
|||
|
# chmod g+s _d_i_r_e_c_t_o_r_y
|
|||
|
2.3.4 The umask Value
|
|||
|
When a file is created by a program, say a text editor or a
|
|||
|
compiler, it is typically created with all permissions enabled.
|
|||
|
Since this is rarely desirable (you don't want other users to be
|
|||
|
able to write your files), the _u_m_a_s_k value is used to modify the
|
|||
|
set of permissions a file is created with. Simply put, while the
|
|||
|
_c_h_m_o_d command [Sun88a, 65-66] specifies what bits should be
|
|||
|
turned _o_n, the umask value specifies what bits should be turned
|
|||
|
_o_f_f.
|
|||
|
For example, the default umask on most systems is 022. This
|
|||
|
means that write permission for the group and world should be
|
|||
|
turned off whenever a file is created. If instead you wanted to
|
|||
|
turn off all group and world permission bits, such that any file
|
|||
|
you created would not be readable, writable, or executable by
|
|||
|
anyone except yourself, you would set your umask to 077.
|
|||
|
The umask value is specified in the ._c_s_h_r_c or ._p_r_o_f_i_l_e files
|
|||
|
read by the shell using the _u_m_a_s_k command [Sun88a, 108, 459].
|
|||
|
The %%root'' account should have the line
|
|||
|
umask 022
|
|||
|
in its /._c_s_h_r_c file, in order to prevent the accidental creation
|
|||
|
of world-writable files owned by the super-user.
|
|||
|
2.3.5 Encrypting Files
|
|||
|
The standard UNIX _c_r_y_p_t command [Sun88a, 95] is not at all
|
|||
|
secure. Although it is reasonable to expect that _c_r_y_p_t will keep
|
|||
|
the casual %%browser'' from reading a file, it will present noth-
|
|||
|
ing more than a minor inconvenience to a determined cracker.
|
|||
|
_C_r_y_p_t implements a one-rotor machine along the lines of the Ger-
|
|||
|
man Enigma (broken in World War II). The methods of attack on
|
|||
|
such a machine are well known, and a sufficiently large file can
|
|||
|
usually be decrypted in a few hours even without knowledge of
|
|||
|
what the file contains [Reed84]. In fact, publicly available
|
|||
|
packages of programs designed to %%break'' files encrypted with
|
|||
|
_c_r_y_p_t have been around for several years.
|
|||
|
There are software implementations of another algorithm, the
|
|||
|
Data Encryption Standard (DES), available on some systems.
|
|||
|
27
|
|||
|
Although this algorithm is much more secure than _c_r_y_p_t, it has
|
|||
|
never been proven that it is totally secure, and many doubts
|
|||
|
about its security have been raised in recent years.
|
|||
|
Perhaps the best thing to say about encrypting files on a
|
|||
|
computer system is this: if you think you have a file whose con-
|
|||
|
tents are important enough to encrypt, then that file should not
|
|||
|
be stored on the computer in the first place. This is especially
|
|||
|
true of systems with limited security, such as UNIX systems and
|
|||
|
personal computers.
|
|||
|
It is important to note that UNIX passwords are _n_o_t
|
|||
|
encrypted with the _c_r_y_p_t program. Instead, they are encrypted
|
|||
|
with a modified version of the DES that generates one-way encryp-
|
|||
|
tions (that is, the password cannot be decrypted). When you log
|
|||
|
in, the system does not decrypt your password. Instead, it
|
|||
|
encrypts your attempted password, and if this comes out to the
|
|||
|
same result as encrypting your real password, you are allowed to
|
|||
|
log in.
|
|||
|
2.3.6 Devices
|
|||
|
The security of devices is an important issue in UNIX. Dev-
|
|||
|
ice files (usually residing in /_d_e_v) are used by various programs
|
|||
|
to access the data on the disk drives or in memory. If these
|
|||
|
device files are not properly protected, your system is wide open
|
|||
|
to a cracker. The entire list of devices is too long to go into
|
|||
|
here, since it varies widely from system to system. However, the
|
|||
|
following guidelines apply to all systems:
|
|||
|
1. The files /_d_e_v/_k_m_e_m, /_d_e_v/_m_e_m, and /_d_e_v/_d_r_u_m should
|
|||
|
never be readable by the world. If your system sup-
|
|||
|
ports the notion of the %%kmem'' group (most newer sys-
|
|||
|
tems do) and utilities such as _p_s are setgid %%kmem,''
|
|||
|
then these files should be owned by user %%root'' and
|
|||
|
group %%kmem,'' and should be mode 640. If your system
|
|||
|
does not support the notion of the %%kmem'' group, and
|
|||
|
utilities such as _p_s are setuid %%root,'' then these
|
|||
|
files should be owned by user %%root'' and mode 600.
|
|||
|
2. The disk devices, such as /_d_e_v/_s_d_0_a, /_d_e_v/_r_x_y_1_b, etc.,
|
|||
|
should be owned by user %%root'' and group %%opera-
|
|||
|
tor,'' and should be mode 640. Note that each disk has
|
|||
|
eight partitions and two device files for each parti-
|
|||
|
tion. Thus, the disk %%sd0'' would have the following
|
|||
|
device files associated with it in /_d_e_v:
|
|||
|
28
|
|||
|
sd0a sd0e rsd0a rsd0e
|
|||
|
sd0b sd0f rsd0b rsd0f
|
|||
|
sd0c sd0g rsd0c rsd0g
|
|||
|
sd0d sd0h rsd0d rsd0h
|
|||
|
3. With very few exceptions, all other devices should be
|
|||
|
owned by user %%root.'' One exception is terminals,
|
|||
|
which are changed to be owned by the user currently
|
|||
|
logged in on them. When the user logs out, the owner-
|
|||
|
ship of the terminal is automatically changed back to
|
|||
|
%%root.''
|
|||
|
2.4 SECURITY IS YOUR RESPONSIBILITY
|
|||
|
This section has detailed numerous tools for improving secu-
|
|||
|
rity provided by the UNIX operating system. The most important
|
|||
|
thing to note about these tools is that although they are avail-
|
|||
|
able, they are typically not put to use in most installations.
|
|||
|
Therefore, it is incumbent on you, the system administrator, to
|
|||
|
take the time and make the effort to enable these tools, and thus
|
|||
|
to protect your system from unauthorized access.
|
|||
|
29
|
|||
|
30
|
|||
|
SECTION 3
|
|||
|
MONITORING SECURITY
|
|||
|
One of the most important tasks in keeping any computer sys-
|
|||
|
tem secure is monitoring the security of the system. This
|
|||
|
involves examining system log files for unauthorized accesses of
|
|||
|
the system, as well as monitoring the system itself for security
|
|||
|
holes. This section describes the procedures for doing this. An
|
|||
|
additional part of monitoring security involves keeping abreast
|
|||
|
of security problems found by others; this is described in Sec-
|
|||
|
tion 5.
|
|||
|
3.1 ACCOUNT SECURITY
|
|||
|
Account security should be monitored periodically in order
|
|||
|
to check for two things: users logged in when they %%shouldn't''
|
|||
|
be (e.g., late at night, when they're on vacation, etc.), and
|
|||
|
users executing commands they wouldn't normally be expected to
|
|||
|
use. The commands described in this section can be used to
|
|||
|
obtain this information from the system.
|
|||
|
3.1.1 The lastlog File
|
|||
|
The file /_u_s_r/_a_d_m/_l_a_s_t_l_o_g [Sun88a, 1485] records the most
|
|||
|
recent login time for each user of the system. The message
|
|||
|
printed each time you log in, e.g.,
|
|||
|
Last login: Sat Mar 10 10:50:48 from spam.itstd.sri.c
|
|||
|
uses the time stored in the _l_a_s_t_l_o_g file. Additionally, the last
|
|||
|
login time reported by the _f_i_n_g_e_r command uses this time. Users
|
|||
|
should be told to carefully examine this time whenever they log
|
|||
|
in, and to report unusual login times to the system administra-
|
|||
|
tor. This is an easy way to detect account break-ins, since each
|
|||
|
user should remember the last time she logged into the system.
|
|||
|
3.1.2 The utmp and wtmp Files
|
|||
|
The file /_e_t_c/_u_t_m_p [Sun88a, 1485] is used to record who is
|
|||
|
31
|
|||
|
currently logged into the system. This file can be displayed
|
|||
|
using the _w_h_o command [Sun88a, 597]:
|
|||
|
% who
|
|||
|
hendra tty0c Mar 13 12:31
|
|||
|
heidari tty14 Mar 13 13:54
|
|||
|
welgem tty36 Mar 13 12:15
|
|||
|
reagin ttyp0 Mar 13 08:54 (aaifs.itstd.sri.)
|
|||
|
ghg ttyp1 Mar 9 07:03 (hydra.riacs.edu)
|
|||
|
compion ttyp2 Mar 1 03:01 (ei.ecn.purdue.ed)
|
|||
|
For each user, the login name, terminal being used, login time,
|
|||
|
and remote host (if the user is logged in via the network) are
|
|||
|
displayed.
|
|||
|
The file /_u_s_r/_a_d_m/_w_t_m_p [Sun88a, 1485] records each login and
|
|||
|
logout time for every user. This file can also be displayed
|
|||
|
using the _w_h_o command:
|
|||
|
% who /usr/adm/wtmp
|
|||
|
davy ttyp4 Jan 7 12:42 (annex01.riacs.ed)
|
|||
|
ttyp4 Jan 7 15:33
|
|||
|
davy ttyp4 Jan 7 15:33 (annex01.riacs.ed)
|
|||
|
ttyp4 Jan 7 15:35
|
|||
|
hyder ttyp3 Jan 8 09:07 (triceratops.itst)
|
|||
|
ttyp3 Jan 8 11:43
|
|||
|
A line that contains a login name indicates the time the user
|
|||
|
logged in; a line with no login name indicates the time that the
|
|||
|
terminal was logged off. Unfortunately, the output from this
|
|||
|
command is rarely as simple as in the example above; if several
|
|||
|
users log in at once, the login and logout times are all mixed
|
|||
|
together and must be matched up by hand using the terminal name.
|
|||
|
The _w_t_m_p file may also be examined using the _l_a_s_t command
|
|||
|
[Sun88a, 248]. This command sorts out the entries in the file,
|
|||
|
matching up login and logout times. With no arguments, _l_a_s_t
|
|||
|
displays all information in the file. By giving the name of a
|
|||
|
user or terminal, the output can be restricted to the information
|
|||
|
about the user or terminal in question. Sample output from the
|
|||
|
_l_a_s_t command is shown below.
|
|||
|
% last
|
|||
|
davy ttyp3 intrepid.itstd.s Tue Mar 13 10:55 - 10:56 (00:00)
|
|||
|
hyder ttyp3 clyde.itstd.sri. Mon Mar 12 15:31 - 15:36 (00:04)
|
|||
|
reboot % Mon Mar 12 15:16
|
|||
|
shutdown % Mon Mar 12 15:16
|
|||
|
arms ttyp3 clyde0.itstd.sri Mon Mar 12 15:08 - 15:12 (00:04)
|
|||
|
hyder ttyp3 spam.itstd.sri.c Sun Mar 11 21:08 - 21:13 (00:04)
|
|||
|
reboot % Sat Mar 10 20:05
|
|||
|
davy ftp hydra.riacs.edu Sat Mar 10 13:23 - 13:30 (00:07)
|
|||
|
32
|
|||
|
For each login session, the user name, terminal used, remote host
|
|||
|
(if the user logged in via the network), login and logout times,
|
|||
|
and session duration are shown. Additionally, the times of all
|
|||
|
system shutdowns and reboots (generated by the _s_h_u_t_d_o_w_n and
|
|||
|
_r_e_b_o_o_t commands [Sun88a, 1727, 1765]) are recorded. Unfor-
|
|||
|
tunately, system crashes are not recorded. In newer versions of
|
|||
|
the operating system, pseudo logins such as those via the _f_t_p
|
|||
|
command are also recorded; an example of this is shown in the
|
|||
|
last line of the sample output, above.
|
|||
|
3.1.3 The acct File
|
|||
|
The file /_u_s_r/_a_d_m/_a_c_c_t [Sun88a, 1344-1345] records each exe-
|
|||
|
cution of a command on the system, who executed it, when, and how
|
|||
|
long it took. This information is logged each time a command
|
|||
|
completes, but only if your kernel was compiled with the SYSACCT
|
|||
|
option enabled (the option is enabled in some GENERIC kernels,
|
|||
|
but is usually disabled by default).
|
|||
|
The _a_c_c_t file can be displayed using the _l_a_s_t_c_o_m_m command
|
|||
|
[Sun88a, 249]. With no arguments, all the information in the
|
|||
|
file is displayed. However, by giving a command name, user name,
|
|||
|
or terminal name as an argument, the output can be restricted to
|
|||
|
information about the given command, user, or terminal. Sample
|
|||
|
output from _l_a_s_t_c_o_m_m is shown below.
|
|||
|
% lastcomm
|
|||
|
sh S root __ 0.67 secs Tue Mar 13 12:45
|
|||
|
atrun root __ 0.23 secs Tue Mar 13 12:45
|
|||
|
lpd F root __ 1.06 secs Tue Mar 13 12:44
|
|||
|
lpr S burwell tty09 1.23 secs Tue Mar 13 12:44
|
|||
|
troff burwell tty09 12.83 secs Tue Mar 13 12:44
|
|||
|
eqn burwell tty09 1.44 secs Tue Mar 13 12:44
|
|||
|
df kindred ttyq7 0.78 secs Tue Mar 13 12:44
|
|||
|
ls kindred ttyq7 0.28 secs Tue Mar 13 12:44
|
|||
|
cat kindred ttyq7 0.05 secs Tue Mar 13 12:44
|
|||
|
stty kindred ttyq7 0.05 secs Tue Mar 13 12:44
|
|||
|
tbl burwell tty09 1.08 secs Tue Mar 13 12:44
|
|||
|
rlogin S jones ttyp3 5.66 secs Tue Mar 13 12:38
|
|||
|
rlogin F jones ttyp3 2.53 secs Tue Mar 13 12:41
|
|||
|
stty kindred ttyq7 0.05 secs Tue Mar 13 12:44
|
|||
|
The first column indicates the name of the command. The next
|
|||
|
column displays certain flags on the command: an %%F'' means the
|
|||
|
process spawned a child process, %%S'' means the process ran with
|
|||
|
the set-user-id bit set, %%D'' means the process exited with a
|
|||
|
core dump, and %%X'' means the process was killed abnormally.
|
|||
|
The remaining columns show the name of the user who ran the
|
|||
|
program, the terminal he ran it from (if applicable), the amount
|
|||
|
33
|
|||
|
of CPU time used by the command (in seconds), and the date and
|
|||
|
time the process started.
|
|||
|
3.2 NETWORK SECURITY
|
|||
|
Monitoring network security is more difficult, because there
|
|||
|
are so many ways for a cracker to attempt to break in. However,
|
|||
|
there are some programs available to aid you in this task. These
|
|||
|
are described in this section.
|
|||
|
3.2.1 The syslog Facility
|
|||
|
The _s_y_s_l_o_g facility [Sun88a, 1773] is a mechanism that
|
|||
|
enables any command to log error messages and informational mes-
|
|||
|
sages to the system console, as well as to a log file. Typi-
|
|||
|
cally, error messages are logged in the file /_u_s_r/_a_d_m/_m_e_s_s_a_g_e_s
|
|||
|
along with the date, time, name of the program sending the mes-
|
|||
|
sage, and (usually) the process id of the program. A sample seg-
|
|||
|
ment of the _m_e_s_s_a_g_e_s file is shown below.
|
|||
|
Mar 12 14:53:37 sparkyfs login: ROOT LOGIN ttyp3 FROM setekfs.itstd.sr
|
|||
|
Mar 12 15:18:08 sparkyfs login: ROOT LOGIN ttyp3 FROM setekfs.itstd.sr
|
|||
|
Mar 12 16:50:25 sparkyfs login: ROOT LOGIN ttyp4 FROM pongfs.itstd.sri
|
|||
|
Mar 12 16:52:20 sparkyfs vmunix: sd2c: read failed, no retries
|
|||
|
Mar 13 06:01:18 sparkyfs vmunix: /: file system full
|
|||
|
Mar 13 08:02:03 sparkyfs login: ROOT LOGIN ttyp4 FROM triceratops.itst
|
|||
|
Mar 13 08:28:52 sparkyfs su: davy on /dev/ttyp3
|
|||
|
Mar 13 08:38:03 sparkyfs login: ROOT LOGIN ttyp4 FROM triceratops.itst
|
|||
|
Mar 13 10:56:54 sparkyfs automount[154]: host aaifs not responding
|
|||
|
Mar 13 11:30:42 sparkyfs login: REPEATED LOGIN FAILURES ON ttyp3 FROM
|
|||
|
intrepid.itstd.s, daemon
|
|||
|
Of particular interest in this sample are the messages from the
|
|||
|
_l_o_g_i_n and _s_u programs. Whenever someone logs in as %%root,''
|
|||
|
_l_o_g_i_n logs this information. Generally, logging in as %%root''
|
|||
|
directly, rather than using the _s_u command, should be
|
|||
|
discouraged, as it is hard to track which person is actually
|
|||
|
using the account. Once this ability has been disabled, as
|
|||
|
described in Section 2.2.2, detecting a security violation
|
|||
|
becomes a simple matter of searching the _m_e_s_s_a_g_e_s file for lines
|
|||
|
of this type.
|
|||
|
_L_o_g_i_n also logs any case of someone repeatedly trying to log
|
|||
|
in to an account and failing. After three attempts, _l_o_g_i_n will
|
|||
|
refuse to let the person try anymore. Searching for these
|
|||
|
messages in the _m_e_s_s_a_g_e_s file can alert you to a cracker
|
|||
|
34
|
|||
|
attempting to guess someone's password.
|
|||
|
Finally, when someone uses the _s_u command, either to become
|
|||
|
%%root'' or someone else, _s_u logs the success or failure of this
|
|||
|
operation. These messages can be used to check for users sharing
|
|||
|
their passwords, as well as for a cracker who has penetrated one
|
|||
|
account and is trying to penetrate others.
|
|||
|
3.2.2 The showmount Command
|
|||
|
The _s_h_o_w_m_o_u_n_t command [Sun88a, 1764] can be used on an NFS
|
|||
|
file server to display the names of all hosts that currently have
|
|||
|
something mounted from the server. With no options, the program
|
|||
|
simply displays a list of all the hosts. With the -_a and -_d
|
|||
|
options, the output is somewhat more useful. The first option,
|
|||
|
-_a, causes _s_h_o_w_m_o_u_n_t to list all the host and directory combina-
|
|||
|
tions. For example,
|
|||
|
bronto.itstd.sri.com:/usr/share
|
|||
|
bronto.itstd.sri.com:/usr/local.new
|
|||
|
bronto.itstd.sri.com:/usr/share/lib
|
|||
|
bronto.itstd.sri.com:/var/spool/mail
|
|||
|
cascades.itstd.sri.com:/sparky/a
|
|||
|
clyde.itstd.sri.com:/laser_dumps
|
|||
|
cm1.itstd.sri.com:/sparky/a
|
|||
|
coco0.itstd.sri.com:/sparky/a
|
|||
|
There will be one line of output for each directory mounted by a
|
|||
|
host. With the -_d option, _s_h_o_w_m_o_u_n_t displays a list of all
|
|||
|
directories that are presently mounted by some host.
|
|||
|
The output from _s_h_o_w_m_o_u_n_t should be checked for two things.
|
|||
|
First, only machines local to your organization should appear
|
|||
|
there. If you have set up proper netgroups as described in Sec-
|
|||
|
tion 2.2.3, this should not be a problem. Second, only %%nor-
|
|||
|
mal'' directories should be mounted. If you find unusual direc-
|
|||
|
tories being mounted, you should find out who is mounting them
|
|||
|
and why - although it is probably innocent, it may indicate some-
|
|||
|
one trying to get around your security mechanisms.
|
|||
|
3.3 FILE SYSTEM SECURITY
|
|||
|
Checking for security holes in the file system is another
|
|||
|
important part of making your system secure. Primarily, you need
|
|||
|
to check for files that can be modified by unauthorized users,
|
|||
|
files that can inadvertently grant users too many permissions,
|
|||
|
35
|
|||
|
and files that can inadvertently grant access to crackers. It is
|
|||
|
also important to be able to detect unauthorized modifications to
|
|||
|
the file system, and to recover from these modifications when
|
|||
|
they are made.
|
|||
|
3.3.1 The find Command
|
|||
|
The _f_i_n_d command [Sun88a, 183-185] is a general-purpose com-
|
|||
|
mand for searching the file system. Using various arguments,
|
|||
|
complex matching patterns based on a file's name, type, mode,
|
|||
|
owner, modification time, and other characteristics, can be con-
|
|||
|
structed. The names of files that are found using these patterns
|
|||
|
can then be printed out, or given as arguments to other UNIX com-
|
|||
|
mands. The general format of a _f_i_n_d command is
|
|||
|
% find _d_i_r_e_c_t_o_r_i_e_s _o_p_t_i_o_n_s
|
|||
|
where _d_i_r_e_c_t_o_r_i_e_s is a list of directory names to search (e.g.,
|
|||
|
/_u_s_r), and _o_p_t_i_o_n_s contains the options to control what is being
|
|||
|
searched for. In general, for the examples in this section, you
|
|||
|
will always want to search from the root of the file system (/),
|
|||
|
in order to find all files matching the patterns presented.
|
|||
|
This section describes how to use _f_i_n_d to search for four
|
|||
|
possible security problems that were described in Section 2.
|
|||
|
3.3.1.1 Finding Setuid and Setgid Files
|
|||
|
It is important to check the system often for unauthorized
|
|||
|
setuid and setgid programs. Because these programs grant special
|
|||
|
privileges to the user who is executing them, it is necessary to
|
|||
|
ensure that insecure programs are not installed. Setuid %%root''
|
|||
|
programs should be closely guarded - a favorite trick of many
|
|||
|
crackers is to break into %%root'' once, and leave a setuid pro-
|
|||
|
gram hidden somewhere that will enable them to regain super-user
|
|||
|
powers even if the original hole is plugged.
|
|||
|
The command to search for setuid and setgid files is
|
|||
|
# find / -type f -a %( -perm -4000 -o -perm -2000 %) -print
|
|||
|
The options to this command have the following meanings:
|
|||
|
/ The name of the directory to be searched. In this
|
|||
|
case, we want to search the entire file system, so we
|
|||
|
specify /. You might instead restrict the search to
|
|||
|
36
|
|||
|
/_u_s_r or /_h_o_m_e.
|
|||
|
-type f
|
|||
|
Only examine files whose type is %%f,'' regular file.
|
|||
|
Other options include %%d'' for directory, %%l'' for
|
|||
|
symbolic link, %%c'' for character-special devices, and
|
|||
|
%%b'' for block-special devices.
|
|||
|
-a This specifies %%and.'' Thus, we want to know about
|
|||
|
files whose type is %%regular file,'' _a_n_d whose permis-
|
|||
|
sions bits match the other part of this expression.
|
|||
|
%( -perm -4000 -o -perm -2000 %)
|
|||
|
The parentheses in this part of the command are used
|
|||
|
for grouping. Thus, everything in this part of the
|
|||
|
command matches a single pattern, and is treated as the
|
|||
|
other half of the %%and'' clause described above.
|
|||
|
-perm -4000
|
|||
|
This specifies a match if the %%4000'' bit (speci-
|
|||
|
fied as an octal number) is set in the file's per-
|
|||
|
mission modes. This is the set-user-id bit.
|
|||
|
-o This specifies %%or.'' Thus, we want to match if
|
|||
|
the file has the set-user-id bit _o_r the set-
|
|||
|
group-id bit set.
|
|||
|
-perm -2000
|
|||
|
This specifies a match if the %%2000'' bit (speci-
|
|||
|
fied as an octal number) is set in the file's per-
|
|||
|
mission modes. This is the set-group-id bit.
|
|||
|
-printThis indicates that for any file that matches the
|
|||
|
specified expression (is a regular file _a_n_d has the
|
|||
|
setuid _o_r setgid bits set in its permissions), print
|
|||
|
its name on the screen.
|
|||
|
After executing this command (depending on how much disk
|
|||
|
space you have, it can take anywhere from 15 minutes to a couple
|
|||
|
of hours to complete), you will have a list of files that have
|
|||
|
setuid or setgid bits set on them. You should then examine each
|
|||
|
of these programs, and determine whether they should actually
|
|||
|
have these permissions. You should be especially suspicious of
|
|||
|
programs that are _n_o_t in one of the directories (or a subdirec-
|
|||
|
tory) shown below.
|
|||
|
/bin
|
|||
|
/etc
|
|||
|
/usr/bin
|
|||
|
/usr/ucb
|
|||
|
/usr/etc
|
|||
|
37
|
|||
|
One file distributed with SunOS, /_u_s_r/_e_t_c/_r_e_s_t_o_r_e, is dis-
|
|||
|
tributed with the setuid bit set on it, and should not be,
|
|||
|
because of a security hole. You should be sure to remove the
|
|||
|
setuid bit from this program by executing the command
|
|||
|
# chmod u-s /usr/etc/restore
|
|||
|
3.3.1.2 Finding World-Writable Files
|
|||
|
World-writable files, particularly system files, can be a
|
|||
|
security hole if a cracker gains access to your system and modi-
|
|||
|
fies them. Additionally, world-writable directories are
|
|||
|
dangerous, since they allow a cracker to add or delete files as
|
|||
|
he wishes. The _f_i_n_d command to find all world-writable files is
|
|||
|
# find / -perm -2 -print
|
|||
|
In this case, we do not use the -_t_y_p_e option to restrict the
|
|||
|
search, since we are interested in directories and devices as
|
|||
|
well as files. The -_2 specifies the world write bit (in octal).
|
|||
|
This list of files will be fairly long, and will include
|
|||
|
some files that _s_h_o_u_l_d be world writable. You should not be con-
|
|||
|
cerned if terminal devices in /_d_e_v are world writable. You
|
|||
|
should also not be concerned about line printer error log files
|
|||
|
being world writable. Finally, symbolic links may be world writ-
|
|||
|
able - the permissions on a symbolic link, although they exist,
|
|||
|
have no meaning.
|
|||
|
3.3.1.3 Finding Unowned Files
|
|||
|
Finding files that are owned by nonexistent users can often
|
|||
|
be a clue that a cracker has gained access to your system. Even
|
|||
|
if this is not the case, searching for these files gives you an
|
|||
|
opportunity to clean up files that should have been deleted at
|
|||
|
the same time the user herself was deleted. The command to find
|
|||
|
unowned files is
|
|||
|
# find / -nouser -print
|
|||
|
The -_n_o_u_s_e_r option matches files that are owned by a user id not
|
|||
|
contained in the /_e_t_c/_p_a_s_s_w_d database. A similar option,
|
|||
|
-_n_o_g_r_o_u_p, matches files owned by nonexistent groups. To find all
|
|||
|
files owned by nonexistent users _o_r groups, you would use the -_o
|
|||
|
option as follows:
|
|||
|
38
|
|||
|
# find / -nouser -o -nogroup -print
|
|||
|
3.3.1.4 Finding .rhosts Files
|
|||
|
As mentioned in Section 2.2.1.2, users should be prohibited
|
|||
|
from having ._r_h_o_s_t_s files in their accounts. To search for this,
|
|||
|
it is only necessary to search the parts of the file system that
|
|||
|
contain home directories (i.e., you can skip / and /_u_s_r):
|
|||
|
# find /home -name .rhosts -print
|
|||
|
The -_n_a_m_e option indicates that the complete name of any file
|
|||
|
whose name matches ._r_h_o_s_t_s should be printed on the screen.
|
|||
|
3.3.2 Checklists
|
|||
|
Checklists can be a useful tool for discovering unauthorized
|
|||
|
changes made to system directories. They aren't practical on
|
|||
|
file systems that contain users' home directories since these
|
|||
|
change all the time. A checklist is a listing of all the files
|
|||
|
contained in a group of directories: their sizes, owners, modifi-
|
|||
|
cation dates, and so on. Periodically, this information is col-
|
|||
|
lected and compared with the information in the master checklist.
|
|||
|
Files that do not match in all attributes can be suspected of
|
|||
|
having been changed.
|
|||
|
There are several utilities that implement checklists avail-
|
|||
|
able from public software sites (see Section 4). However, a sim-
|
|||
|
ple utility can be constructed using only the standard UNIX _l_s
|
|||
|
and _d_i_f_f commands.
|
|||
|
First, use the _l_s command [Sun88a, 285] to generate a master
|
|||
|
list. This is best done immediately after installing the operat-
|
|||
|
ing system, but can be done at any time provided you're confident
|
|||
|
about the correctness of the files on the disk. A sample command
|
|||
|
is shown below.
|
|||
|
# ls -aslgR /bin /etc /usr > MasterChecklist
|
|||
|
The file _M_a_s_t_e_r_C_h_e_c_k_l_i_s_t now contains a complete list of all the
|
|||
|
files in these directories. You will probably want to edit it
|
|||
|
and delete the lines for files you know will be changing often
|
|||
|
(e.g., /_e_t_c/_u_t_m_p, /_u_s_r/_a_d_m/_a_c_c_t). The _M_a_s_t_e_r_C_h_e_c_k_l_i_s_t file
|
|||
|
should be stored somewhere safe where a cracker is unlikely to
|
|||
|
39
|
|||
|
find it (since he could otherwise just change the data in it):
|
|||
|
either on a different computer system, or on magnetic tape.
|
|||
|
To search for changes in the file system, run the above _l_s
|
|||
|
command again, saving the output in some other file, say
|
|||
|
_C_u_r_r_e_n_t_L_i_s_t. Now use the _d_i_f_f command [Sun88a, 150] to compare
|
|||
|
the two files:
|
|||
|
# diff MasterChecklist CurrentList
|
|||
|
Lines that are only in the master checklist will be printed pre-
|
|||
|
ceded by a %%<,'' and lines that are only in the current list
|
|||
|
will be preceded by a %%>.'' If there is one line for a file,
|
|||
|
preceded by a %%<,'' this means that the file has been deleted
|
|||
|
since the master checklist was created. If there is one line for
|
|||
|
a file, preceded by a %%>,'' this means that the file has been
|
|||
|
created since the master checklist was created. If there are two
|
|||
|
lines for a single file, one preceded by %%<'' and the other by
|
|||
|
%%>,'' this indicates that some attribute of the file has changed
|
|||
|
since the master checklist was created.
|
|||
|
By carefully constructing the master checklist, and by
|
|||
|
remembering to update it periodically (you can replace it with a
|
|||
|
copy of _C_u_r_r_e_n_t_L_i_s_t, once you're sure the differences between the
|
|||
|
lists are harmless), you can easily monitor your system for unau-
|
|||
|
thorized changes. The software packages available from the pub-
|
|||
|
lic software distribution sites implement basically the same
|
|||
|
scheme as the one here, but offer many more options for control-
|
|||
|
ling what is examined and reported.
|
|||
|
3.3.3 Backups
|
|||
|
It is impossible to overemphasize the need for a good backup
|
|||
|
strategy. File system backups not only protect you in the even
|
|||
|
of hardware failure or accidental deletions, but they also pro-
|
|||
|
tect you against unauthorized file system changes made by a
|
|||
|
cracker.
|
|||
|
A good backup strategy will dump the entire system at level
|
|||
|
zero (a %%full'' dump) at least once a month. Partial (or
|
|||
|
%%incremental'') dumps should be done at least twice a week, and
|
|||
|
ideally they should be done daily. The _d_u_m_p command [Sun88a,
|
|||
|
1612-1614] is recommended over other programs such as _t_a_r and
|
|||
|
_c_p_i_o. This is because only _d_u_m_p is capable of creating a backup
|
|||
|
that can be used to restore a disk to the exact state it was in
|
|||
|
when it was dumped. The other programs do not take into account
|
|||
|
files deleted or renamed between dumps, and do not handle some
|
|||
|
specialized database files properly.
|
|||
|
40
|
|||
|
3.4 KNOW YOUR SYSTEM
|
|||
|
Aside from running large monitoring programs such as those
|
|||
|
described in the previous sections, simple everyday UNIX commands
|
|||
|
can also be useful for spotting security violations. By running
|
|||
|
these commands often, whenever you have a free minute (for exam-
|
|||
|
ple, while waiting for someone to answer the phone), you will
|
|||
|
become used to seeing a specific pattern of output. By being
|
|||
|
familiar with the processes normally running on your system, the
|
|||
|
times different users typically log in, and so on, you can easily
|
|||
|
detect when something is out of the ordinary.
|
|||
|
3.4.1 The ps Command
|
|||
|
The _p_s command [Sun88a, 399-402] displays a list of the
|
|||
|
processes running on your system. _P_s has numerous options, too
|
|||
|
many to list here. Generally, however, for the purpose of moni-
|
|||
|
toring, the option string -_a_l_x_w_w is the most useful.* On a Sun
|
|||
|
system running SunOS 4.0, you should expect to see at least the
|
|||
|
following:
|
|||
|
_s_w_a_p_p_e_r, _p_a_g_e_d_a_e_m_o_n
|
|||
|
System programs that help the virtual memory system.
|
|||
|
/_s_b_i_n/_i_n_i_t
|
|||
|
The _i_n_i_t process, which is responsible for numerous
|
|||
|
tasks, including bringing up login processes on termi-
|
|||
|
nals.
|
|||
|
_p_o_r_t_m_a_p, _y_p_b_i_n_d, _y_p_s_e_r_v
|
|||
|
Parts of the Yellow Pages system.
|
|||
|
_b_i_o_d, _n_f_s_d, _r_p_c._m_o_u_n_t_d, _r_p_c._q_u_o_t_a_d, _r_p_c._l_o_c_k_d
|
|||
|
Parts of the Network File System (NFS). If the system
|
|||
|
you are looking at is not a file server, the _n_f_s_d
|
|||
|
processes probably won't exist.
|
|||
|
_r_a_r_p_d, _r_p_c._b_o_o_t_p_a_r_a_m_d
|
|||
|
Part of the system that allows diskless clients to
|
|||
|
boot.
|
|||
|
Other commands you should expect to see are _u_p_d_a_t_e (file
|
|||
|
system updater); _g_e_t_t_y (one per terminal and one for the
|
|||
|
_________________________
|
|||
|
* This is true for Berkeley-based systems. On System V sys-
|
|||
|
tems, the option string -_e_l_f should be used instead.
|
|||
|
41
|
|||
|
console); _l_p_d (line printer daemon); _i_n_e_t_d (Internet daemon, for
|
|||
|
starting other network servers); _s_h and _c_s_h (the Bourne shell and
|
|||
|
C shell, one or more per logged in user). In addition, if there
|
|||
|
are users logged in, you'll probably see invocations of various
|
|||
|
compilers, text editors, and word processing programs.
|
|||
|
3.4.2 The who and w Commands
|
|||
|
The _w_h_o command, as mentioned previously, displays the list
|
|||
|
of users currently logged in on the system. By running this
|
|||
|
periodically, you can learn at what times during the day various
|
|||
|
users log in. Then, when you see someone logged in at a dif-
|
|||
|
ferent time, you can investigate and make sure that it's legiti-
|
|||
|
mate.
|
|||
|
The _w command [Sun88a, 588] is somewhat of a cross between
|
|||
|
_w_h_o and _p_s. Not only does it show a list of who is presently
|
|||
|
logged in, but it also displays how long they have been idle
|
|||
|
(gone without typing anything), and what command they are
|
|||
|
currently running.
|
|||
|
3.4.3 The ls Command
|
|||
|
Simple as its function is, _l_s is actually very useful for
|
|||
|
detecting file system problems. Periodically, you should use _l_s
|
|||
|
on the various system directories, checking for files that
|
|||
|
shouldn't be there. Most of the time, these files will have just
|
|||
|
%%landed'' somewhere by accident. However, by keeping a close
|
|||
|
watch on things, you will be able to detect a cracker long before
|
|||
|
you might have otherwise.
|
|||
|
When using _l_s to check for oddities, be sure to use the -_a
|
|||
|
option, which lists files whose names begin with a period (.).
|
|||
|
Be particularly alert for files or directories named %%...'', or
|
|||
|
%%..(space)'', which many crackers like to use. (Of course,
|
|||
|
remember that %%.'' and %%..'' are supposed to be there.)
|
|||
|
3.5 KEEP YOUR EYES OPEN
|
|||
|
Monitoring for security breaches is every bit as important
|
|||
|
as preventing them in the first place. Because it's virtually
|
|||
|
impossible to make a system totally secure, there is always the
|
|||
|
chance, no matter how small, that a cracker will be able to gain
|
|||
|
42
|
|||
|
access. Only by monitoring can this be detected and remedied.
|
|||
|
43
|
|||
|
44
|
|||
|
SECTION 4
|
|||
|
SOFTWARE FOR IMPROVING SECURITY
|
|||
|
Because security is of great concern to many sites, a wealth
|
|||
|
of software has been developed for improving the security of UNIX
|
|||
|
systems. Much of this software has been developed at universi-
|
|||
|
ties and other public institutions, and is available free for the
|
|||
|
asking. This section describes how this software can be
|
|||
|
obtained, and mentions some of the more important programs avail-
|
|||
|
able.
|
|||
|
4.1 OBTAINING FIXES AND NEW VERSIONS
|
|||
|
Several sites on the Internet maintain large repositories of
|
|||
|
public-domain and freely distributable software, and make this
|
|||
|
material available for anonymous FTP. This section describes
|
|||
|
some of the larger repositories.
|
|||
|
4.1.1 Sun Fixes on UUNET
|
|||
|
Sun Microsystems has contracted with UUNET Communications
|
|||
|
Services, Inc. to make fixes for bugs in Sun software available
|
|||
|
via anonymous FTP. You can access these fixes by using the _f_t_p
|
|||
|
command [Sun88a, 195-201] to connect to the host _f_t_p._u_u._n_e_t.
|
|||
|
Then change into the directory _s_u_n-_f_i_x_e_s, and obtain a directory
|
|||
|
listing, as shown in the example on the following page.
|
|||
|
45
|
|||
|
% ftp ftp.uu.net
|
|||
|
Connected to uunet.UU.NET.
|
|||
|
220 uunet FTP server (Version 5.93 Tue Mar 20 11:01:52 EST 1990) ready.
|
|||
|
Name (ftp.uu.net:davy): anonymous
|
|||
|
331 Guest login ok, send ident as password.
|
|||
|
Password: _e_n_t_e_r _y_o_u_r _m_a_i_l _a_d_d_r_e_s_s _y_o_u_r_n_a_m_e@_y_o_u_r_h_o_s_t _h_e_r_e
|
|||
|
230 Guest login ok, access restrictions apply.
|
|||
|
ftp> cd sun-fixes
|
|||
|
_2_5_0 _C_W_D _c_o_m_m_a_n_d _s_u_c_c_e_s_s_f_u_l.
|
|||
|
_f_t_p> _d_i_r
|
|||
|
200 PORT command successful.
|
|||
|
150 Opening ASCII mode data connection for /bin/ls.
|
|||
|
total 2258
|
|||
|
-rw-r--r-- 1 38 22 4558 Aug 31 1989 README
|
|||
|
-rw-r--r-- 1 38 22 484687 Dec 14 1988 ddn.tar.Z
|
|||
|
-rw-r--r-- 1 38 22 140124 Jan 13 1989 gated.sun3.Z
|
|||
|
-rwxr-xr-x 1 38 22 22646 Dec 14 1988 in.ftpd.sun3.Z
|
|||
|
.....
|
|||
|
.....
|
|||
|
-rw-r--r-- 1 38 22 72119 Aug 31 1989 sendmail.sun3.Z
|
|||
|
-rwxr-xr-x 1 38 22 99147 Aug 31 1989 sendmail.sun4.Z
|
|||
|
-rw-r--r-- 1 38 22 3673 Jul 11 1989 wall.sun3.Z
|
|||
|
-rw-r--r-- 1 38 22 4099 Jul 11 1989 wall.sun4.Z
|
|||
|
-rwxr-xr-x 1 38 22 7955 Jan 18 1989 ypbind.sun3.Z
|
|||
|
-rwxr-xr-x 1 38 22 9237 Jan 18 1989 ypbind.sun4.Z
|
|||
|
226 Transfer complete.
|
|||
|
1694 bytes received in 0.39 seconds (4.2 Kbytes/s)
|
|||
|
ftp> quit
|
|||
|
_2_2_1 _G_o_o_d_b_y_e.
|
|||
|
%
|
|||
|
The file _R_E_A_D_M_E contains a brief description of what each file in
|
|||
|
this directory contains, and what is required to install the fix.
|
|||
|
4.1.2 Berkeley Fixes
|
|||
|
The University of California at Berkeley also makes fixes
|
|||
|
available via anonymous FTP; these fixes pertain primarily to the
|
|||
|
current release of BSD UNIX (currently release 4.3). However,
|
|||
|
even if you are not running their software, these fixes are still
|
|||
|
important, since many vendors (Sun, DEC, Sequent , etc.) base
|
|||
|
their software on the Berkeley releases.
|
|||
|
The Berkeley fixes are available for anonymous FTP from the
|
|||
|
host _u_c_b_a_r_p_a._b_e_r_k_e_l_e_y._e_d_u in the directory _4._3/_u_c_b-_f_i_x_e_s. The
|
|||
|
file _I_N_D_E_X in this directory describes what each file contains.
|
|||
|
Berkeley also distributes new versions of _s_e_n_d_m_a_i_l and _n_a_m_e_d
|
|||
|
[Sun88a, 1758-1760, 1691-1692] from this machine. New versions
|
|||
|
46
|
|||
|
of these commands are stored in the _4._3 directory, usually in the
|
|||
|
files _s_e_n_d_m_a_i_l._t_a_r._Z and _b_i_n_d._t_a_r._Z, respectively.
|
|||
|
4.1.3 Simtel-20 and UUNET
|
|||
|
The two largest general-purpose software repositories on the
|
|||
|
Internet are the hosts _w_s_m_r-_s_i_m_t_e_l_2_0._a_r_m_y._m_i_l and _f_t_p._u_u._n_e_t.
|
|||
|
_w_s_m_r-_s_i_m_t_e_l_2_0._a_r_m_y._m_i_l is a TOPS-20 machine operated by the
|
|||
|
U. S. Army at White Sands Missile Range, New Mexico. The direc-
|
|||
|
tory _p_d_2:<_u_n_i_x-_c> contains a large amount of UNIX software, pri-
|
|||
|
marily taken from the _c_o_m_p._s_o_u_r_c_e_s newsgroups. The file _0_0_0-
|
|||
|
_m_a_s_t_e_r-_i_n_d_e_x._t_x_t contains a master list and description of each
|
|||
|
piece of software available in the repository. The file _0_0_0-
|
|||
|
_i_n_t_r_o-_u_n_i_x-_s_w._t_x_t contains information on the mailing list used
|
|||
|
to announce new software, and describes the procedures used for
|
|||
|
transferring files from the archive with FTP.
|
|||
|
_f_t_p._u_u._n_e_t is operated by UUNET Communications Services,
|
|||
|
Inc. in Falls Church, Virginia. This company sells Internet and
|
|||
|
USENET access to sites all over the country (and internation-
|
|||
|
ally). The software posted to the following USENET source news-
|
|||
|
groups is stored here, in directories of the same name:
|
|||
|
comp.sources.games
|
|||
|
comp.sources.misc
|
|||
|
comp.sources.sun
|
|||
|
comp.sources.unix
|
|||
|
comp.sources.x
|
|||
|
Numerous other distributions, such as all the freely distribut-
|
|||
|
able Berkeley UNIX source code, Internet Request for Comments
|
|||
|
(RFCs), and so on are also stored on this machine.
|
|||
|
4.1.4 Vendors
|
|||
|
Many vendors make fixes for bugs in their software available
|
|||
|
electronically, either via mailing lists or via anonymous FTP.
|
|||
|
You should contact your vendor to find out if they offer this
|
|||
|
service, and if so, how to access it. Some vendors that offer
|
|||
|
these services include Sun Microsystems (see above), Digital
|
|||
|
Equipment Corp., the University of California at Berkeley (see
|
|||
|
above), and Apple Computer.
|
|||
|
47
|
|||
|
4.2 THE NPASSWD COMMAND
|
|||
|
The _n_p_a_s_s_w_d command, developed by Clyde Hoover at the
|
|||
|
University of Texas at Austin, is intended to be a replacement
|
|||
|
for the standard UNIX _p_a_s_s_w_d command [Sun88a, 379], as well as
|
|||
|
the Sun _y_p_p_a_s_s_w_d command [Sun88a, 611]. _n_p_a_s_s_w_d makes passwords
|
|||
|
more secure by refusing to allow users to select insecure pass-
|
|||
|
words. The following capabilities are provided by _n_p_a_s_s_w_d:
|
|||
|
o+ Configurable minimum password length
|
|||
|
o+ Configurable to force users to use mixed case or digits
|
|||
|
and punctuation
|
|||
|
o+ Checking for %%simple'' passwords such as a repeated
|
|||
|
letter
|
|||
|
o+ Checking against the host name and other host-specific
|
|||
|
information
|
|||
|
o+ Checking against the login name, first and last names,
|
|||
|
and so on
|
|||
|
o+ Checking for words in various dictionaries, including
|
|||
|
the system dictionary.
|
|||
|
The _n_p_a_s_s_w_d distribution is available for anonymous FTP from
|
|||
|
_e_m_x._u_t_e_x_a_s._e_d_u in the directory _p_u_b/_n_p_a_s_s_w_d.
|
|||
|
4.3 THE COPS PACKAGE
|
|||
|
COPS is a security tool for system administrators that
|
|||
|
checks for numerous common security problems on UNIX systems,
|
|||
|
including many of the things described in this document. COPS is
|
|||
|
a collection of shell scripts and C programs that can easily be
|
|||
|
run on almost any UNIX variant. Among other things, it checks
|
|||
|
the following items and sends the results to the system adminis-
|
|||
|
trator:
|
|||
|
o+ Checks /_d_e_v/_k_m_e_m and other devices for world
|
|||
|
read/writability.
|
|||
|
o+ Checks special/important files and directories for
|
|||
|
%%bad'' modes (world writable, etc.).
|
|||
|
o+ Checks for easily guessed passwords.
|
|||
|
48
|
|||
|
o+ Checks for duplicate user ids, invalid fields in the
|
|||
|
password file, etc.
|
|||
|
o+ Checks for duplicate group ids, invalid fields in the
|
|||
|
group file, etc.
|
|||
|
o+ Checks all users' home directories and their ._c_s_h_r_c,
|
|||
|
._l_o_g_i_n, ._p_r_o_f_i_l_e, and ._r_h_o_s_t_s files for security prob-
|
|||
|
lems.
|
|||
|
o+ Checks all commands in the /_e_t_c/_r_c files [Sun88a,
|
|||
|
1724-1725] and _c_r_o_n files [Sun88a, 1606-1607] for world
|
|||
|
writability.
|
|||
|
o+ Checks for bad %%root'' paths, NFS file system exported
|
|||
|
to the world, etc.
|
|||
|
o+ Includes an expert system that checks to see if a given
|
|||
|
user (usually %%root'') can be compromised, given that
|
|||
|
certain rules are true.
|
|||
|
o+ Checks for _c_h_a_n_g_e_s in the setuid status of programs on
|
|||
|
the system.
|
|||
|
The COPS package is available from the _c_o_m_p._s_o_u_r_c_e_s._u_n_i_x
|
|||
|
archive on _f_t_p._u_u._n_e_t, and also from the repository on _w_s_m_r-
|
|||
|
_s_i_m_t_e_l_2_0._a_r_m_y._m_i_l.
|
|||
|
4.4 SUN C2 SECURITY FEATURES
|
|||
|
With the release of SunOS 4.0, Sun has included security
|
|||
|
features that allow the system to operate at a higher level of
|
|||
|
security, patterned after the C2* classification. These features
|
|||
|
can be installed as one of the options when installing the system
|
|||
|
from the distribution tapes. The security features added by this
|
|||
|
option include
|
|||
|
o+ Audit trails that record all login and logout times,
|
|||
|
the execution of administrative commands, and the exe-
|
|||
|
cution of privileged (setuid) operations.
|
|||
|
o+ A more secure password file mechanism (%%shadow pass-
|
|||
|
word file'') that prevents crackers from obtaining a
|
|||
|
list of the encrypted passwords.
|
|||
|
_________________________
|
|||
|
* C2 is one of several security classifications defined by the
|
|||
|
National Computer Security Center, and is described in [NCSC85],
|
|||
|
the %%orange book.''
|
|||
|
49
|
|||
|
o+ DES encryption capability.
|
|||
|
o+ A (more) secure NFS implementation that uses public-key
|
|||
|
encryption to authenticate the users of the system and
|
|||
|
the hosts on the network, to be sure they really are
|
|||
|
who they claim to be.
|
|||
|
These security features are described in detail in [Sun88c].
|
|||
|
4.5 KERBEROS
|
|||
|
Kerberos [Stei88] is an authentication system developed by
|
|||
|
the Athena Project at the Massachusetts Institute of Technology.
|
|||
|
Kerberos is a third-party authentication service, which is
|
|||
|
trusted by other network services. When a user logs in, Kerberos
|
|||
|
authenticates that user (using a password), and provides the user
|
|||
|
with a way to prove her identity to other servers and hosts scat-
|
|||
|
tered around the network.
|
|||
|
This authentication is then used by programs such as _r_l_o_g_i_n
|
|||
|
[Sun88a, 418-419] to allow the user to log in to other hosts
|
|||
|
without a password (in place of the ._r_h_o_s_t_s file). The authenti-
|
|||
|
cation is also used by the mail system in order to guarantee that
|
|||
|
mail is delivered to the correct person, as well as to guarantee
|
|||
|
that the sender is who he claims to be. NFS has also been modi-
|
|||
|
fied by M.I.T. to work with Kerberos, thereby making the system
|
|||
|
much more secure.
|
|||
|
The overall effect of installing Kerberos and the numerous
|
|||
|
other programs that go with it is to virtually eliminate the
|
|||
|
ability of users to %%spoof'' the system into believing they are
|
|||
|
someone else. Unfortunately, installing Kerberos is very
|
|||
|
intrusive, requiring the modification or replacement of numerous
|
|||
|
standard programs. For this reason, a source license is usually
|
|||
|
necessary. There are plans to make Kerberos a part of 4.4BSD, to
|
|||
|
be released by the University of California at Berkeley sometime
|
|||
|
in 1990.
|
|||
|
50
|
|||
|
SECTION 5
|
|||
|
KEEPING ABREAST OF THE BUGS
|
|||
|
One of the hardest things about keeping a system secure is
|
|||
|
finding out about the security holes before a cracker does. To
|
|||
|
combat this, there are several sources of information you can and
|
|||
|
should make use of on a regular basis.
|
|||
|
5.1 THE COMPUTER EMERGENCY RESPONSE TEAM
|
|||
|
The Computer Emergency Response Team (CERT) was established
|
|||
|
in December 1988 by the Defense Advanced Research Projects Agency
|
|||
|
to address computer security concerns of research users of the
|
|||
|
Internet. It is operated by the Software Engineering Institute
|
|||
|
at Carnegie-Mellon University. The CERT serves as a focal point
|
|||
|
for the reporting of security violations, and the dissemination
|
|||
|
of security advisories to the Internet community. In addition,
|
|||
|
the team works with vendors of various systems in order to coor-
|
|||
|
dinate the fixes for security problems.
|
|||
|
The CERT sends out security advisories to the _c_e_r_t-_a_d_v_i_s_o_r_y
|
|||
|
mailing list whenever appropriate. They also operate a 24-hour
|
|||
|
hotline that can be called to report security problems (e.g.,
|
|||
|
someone breaking into your system), as well as to obtain current
|
|||
|
(and accurate) information about rumored security problems.
|
|||
|
To join the _c_e_r_t-_a_d_v_i_s_o_r_y mailing list, send a message to
|
|||
|
_c_e_r_t@_c_e_r_t._s_e_i._c_m_u._e_d_u and ask to be added to the mailing list.
|
|||
|
Past advisories are available for anonymous FTP from the host
|
|||
|
_c_e_r_t._s_e_i._c_m_u._e_d_u. The 24-hour hotline number is (412) 268-7090.
|
|||
|
5.2 DDN MANAGEMENT BULLETINS
|
|||
|
The _D_D_N _M_a_n_a_g_e_m_e_n_t _B_u_l_l_e_t_i_n is distributed electronically by
|
|||
|
the Defense Data Network (DDN) Network Information Center under
|
|||
|
contract to the Defense Communications Agency. It is a means of
|
|||
|
communicating official policy, procedures, and other information
|
|||
|
of concern to management personnel at DDN facilities.
|
|||
|
The _D_D_N _S_e_c_u_r_i_t_y _B_u_l_l_e_t_i_n is distributed electronically by
|
|||
|
the DDN SCC (Security Coordination Center), also under contract
|
|||
|
to DCA, as a means of communicating information on network and
|
|||
|
51
|
|||
|
host security exposures, fixes, and concerns to security and
|
|||
|
management personnel at DDN facilities.
|
|||
|
Anyone may join the mailing lists for these two bulletins by
|
|||
|
sending a message to _n_i_c@_n_i_c._d_d_n._m_i_l and asking to be placed on
|
|||
|
the mailing lists.
|
|||
|
5.3 SECURITY-RELATED MAILING LISTS
|
|||
|
There are several other mailing lists operated on the Inter-
|
|||
|
net that pertain directly or indirectly to various security
|
|||
|
issues. Some of the more useful ones are described below.
|
|||
|
5.3.1 Security
|
|||
|
The UNIX Security mailing list exists to notify system
|
|||
|
administrators of security problems _b_e_f_o_r_e they become common
|
|||
|
knowledge, and to provide security enhancement information. It
|
|||
|
is a restricted-access list, open only to people who can be veri-
|
|||
|
fied as being principal systems people at a site. Requests to
|
|||
|
join the list must be sent by either the site contact listed in
|
|||
|
the Network Information Center's WHOIS database, or from the
|
|||
|
%%root'' account on one of the major site machines. You must
|
|||
|
include the destination address you want on the list, an indica-
|
|||
|
tion of whether you want to be on the mail reflector list or
|
|||
|
receive weekly digests, the electronic mail address and voice
|
|||
|
telephone number of the site contact if it isn't you, and the
|
|||
|
name, address, and telephone number of your organization. This
|
|||
|
information should be sent to _s_e_c_u_r_i_t_y-_r_e_q_u_e_s_t@_c_p_d._c_o_m.
|
|||
|
5.3.2 RISKS
|
|||
|
The RISKS digest is a component of the ACM Committee on Com-
|
|||
|
puters and Public Policy, moderated by Peter G. Neumann. It is a
|
|||
|
discussion forum on risks to the public in computers and related
|
|||
|
systems, and along with discussing computer security and privacy
|
|||
|
issues, has discussed such subjects as the Stark incident, the
|
|||
|
shooting down of the Iranian airliner in the Persian Gulf (as it
|
|||
|
relates to the computerized weapons systems), problems in air and
|
|||
|
railroad traffic control systems, software engineering, and so
|
|||
|
on. To join the mailing list, send a message to _r_i_s_k_s-
|
|||
|
_r_e_q_u_e_s_t@_c_s_l._s_r_i._c_o_m. This list is also available in the USENET
|
|||
|
newsgroup _c_o_m_p._r_i_s_k_s.
|
|||
|
52
|
|||
|
5.3.3 TCP-IP
|
|||
|
The TCP-IP list is intended to act as a discussion forum for
|
|||
|
developers and maintainers of implementations of the TCP/IP pro-
|
|||
|
tocol suite. It also discusses network-related security problems
|
|||
|
when they involve programs providing network services, such as
|
|||
|
_s_e_n_d_m_a_i_l. To join the TCP-IP list, send a message to _t_c_p-_i_p-
|
|||
|
_r_e_q_u_e_s_t@_n_i_c._d_d_n._m_i_l. This list is also available in the USENET
|
|||
|
newsgroup _c_o_m_p._p_r_o_t_o_c_o_l_s._t_c_p-_i_p.
|
|||
|
5.3.4 SUN-SPOTS, SUN-NETS, SUN-MANAGERS
|
|||
|
The SUN-SPOTS, SUN-NETS, and SUN-MANAGERS lists are all dis-
|
|||
|
cussion groups for users and administrators of systems supplied
|
|||
|
by Sun Microsystems. SUN-SPOTS is a fairly general list, dis-
|
|||
|
cussing everything from hardware configurations to simple UNIX
|
|||
|
questions. To subscribe, send a message to _s_u_n-_s_p_o_t_s-
|
|||
|
_r_e_q_u_e_s_t@_r_i_c_e._e_d_u. This list is also available in the USENET
|
|||
|
newsgroup _c_o_m_p._s_y_s._s_u_n.
|
|||
|
SUN-NETS is a discussion list for items pertaining to net-
|
|||
|
working on Sun systems. Much of the discussion is related to
|
|||
|
NFS, Yellow Pages, and name servers. To subscribe, send a mes-
|
|||
|
sage to _s_u_n-_n_e_t_s-_r_e_q_u_e_s_t@_u_m_i_a_c_s._u_m_d._e_d_u.
|
|||
|
SUN-MANAGERS is a discussion list for Sun system administra-
|
|||
|
tors and covers all aspects of Sun system administration. To
|
|||
|
subscribe, send a message to _s_u_n-_m_a_n_a_g_e_r_s-_r_e_q_u_e_s_t@_e_e_c_s._n_w_u._e_d_u.
|
|||
|
5.3.5 VIRUS-L
|
|||
|
The VIRUS-L list is a forum for the discussion of computer
|
|||
|
virus experiences, protection software, and related topics. The
|
|||
|
list is open to the public, and is implemented as a mail reflec-
|
|||
|
tor, not a digest. Most of the information is related to per-
|
|||
|
sonal computers, although some of it may be applicable to larger
|
|||
|
systems. To subscribe, send the line
|
|||
|
SUB VIRUS-L _y_o_u_r _f_u_l_l _n_a_m_e
|
|||
|
to the address _l_i_s_t_s_e_r_v%_l_e_h_i_i_b_m_1._b_i_t_n_e_t@_m_i_t_v_m_a._m_i_t._e_d_u.
|
|||
|
53
|
|||
|
54
|
|||
|
SECTION 6
|
|||
|
SUGGESTED READING
|
|||
|
This section suggests some alternate sources of information
|
|||
|
pertaining to the security and administration of the UNIX operat-
|
|||
|
ing system.
|
|||
|
_U_N_I_X _S_y_s_t_e_m _A_d_m_i_n_i_s_t_r_a_t_i_o_n _H_a_n_d_b_o_o_k
|
|||
|
Evi Nemeth, Garth Snyder, Scott Seebass
|
|||
|
Prentice Hall, 1989, $26.95
|
|||
|
This is perhaps the best general-purpose book on UNIX system
|
|||
|
administration currently on the market. It covers Berkeley
|
|||
|
UNIX, SunOS, and System V. The 26 chapters and 17 appen-
|
|||
|
dices cover numerous topics, including booting and shutting
|
|||
|
down the system, the file system, configuring the kernel,
|
|||
|
adding a disk, the line printer spooling system, Berkeley
|
|||
|
networking, _s_e_n_d_m_a_i_l, and _u_u_c_p. Of particular interest are
|
|||
|
the chapters on running as the super-user, backups, and
|
|||
|
security.
|
|||
|
_U_N_I_X _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _S_e_c_u_r_i_t_y
|
|||
|
F. T. Grammp and R. H. Morris
|
|||
|
AT&T Bell Laboratories Technical Journal
|
|||
|
October 1984
|
|||
|
This is an excellent discussion of some of the more common
|
|||
|
security problems in UNIX and how to avoid them, written by
|
|||
|
two of Bell Labs' most prominent security experts.
|
|||
|
_P_a_s_s_w_o_r_d _S_e_c_u_r_i_t_y: _A _C_a_s_e _H_i_s_t_o_r_y
|
|||
|
Robert Morris and Ken Thompson
|
|||
|
Communications of the ACM
|
|||
|
November 1979
|
|||
|
An excellent discussion on the problem of password security,
|
|||
|
and some interesting information on how easy it is to crack
|
|||
|
passwords and why. This document is usually reprinted in
|
|||
|
most vendors' UNIX documentation.
|
|||
|
_O_n _t_h_e _S_e_c_u_r_i_t_y _o_f _U_N_I_X
|
|||
|
Dennis M. Ritchie
|
|||
|
May 1975
|
|||
|
A discussion on UNIX security from one of the original crea-
|
|||
|
tors of the system. This document is usually reprinted in
|
|||
|
most vendors' UNIX documentation.
|
|||
|
_T_h_e _C_u_c_k_o_o'_s _E_g_g
|
|||
|
55
|
|||
|
Clifford Stoll
|
|||
|
Doubleday, 1989, $19.95
|
|||
|
An excellent story of Stoll's experiences tracking down the
|
|||
|
German crackers who were breaking into his systems and sel-
|
|||
|
ling the data they found to the KGB. Written at a level
|
|||
|
that nontechnical users can easily understand.
|
|||
|
_S_y_s_t_e_m _a_n_d _N_e_t_w_o_r_k _A_d_m_i_n_i_s_t_r_a_t_i_o_n
|
|||
|
Sun Microsystems
|
|||
|
May, 1988
|
|||
|
Part of the SunOS documentation, this manual covers most
|
|||
|
aspects of Sun system administration, including security
|
|||
|
issues. A must for anyone operating a Sun system, and a
|
|||
|
pretty good reference for other UNIX systems as well.
|
|||
|
_S_e_c_u_r_i_t_y _P_r_o_b_l_e_m_s _i_n _t_h_e _T_C_P/_I_P _P_r_o_t_o_c_o_l _S_u_i_t_e
|
|||
|
S. M. Bellovin
|
|||
|
ACM Computer Communications Review
|
|||
|
April, 1989
|
|||
|
An interesting discussion of some of the security problems
|
|||
|
with the protocols in use on the Internet and elsewhere.
|
|||
|
Most of these problems are far beyond the capabilities of
|
|||
|
the average cracker, but it is still important to be aware
|
|||
|
of them. This article is technical in nature, and assumes
|
|||
|
familiarity with the protocols.
|
|||
|
_A _W_e_a_k_n_e_s_s _i_n _t_h_e _4._2_B_S_D _U_N_I_X _T_C_P/_I_P _S_o_f_t_w_a_r_e
|
|||
|
Robert T. Morris
|
|||
|
AT&T Bell Labs Computer Science Technical Report 117
|
|||
|
February, 1985
|
|||
|
An interesting article from the author of the Internet worm,
|
|||
|
which describes a method that allows remote hosts to
|
|||
|
%%spoof'' a host into believing they are trusted. Again,
|
|||
|
this article is technical in nature, and assumes familiarity
|
|||
|
with the protocols.
|
|||
|
_C_o_m_p_u_t_e_r _V_i_r_u_s_e_s _a_n_d _R_e_l_a_t_e_d _T_h_r_e_a_t_s: _A _M_a_n_a_g_e_m_e_n_t _G_u_i_d_e
|
|||
|
John P. Wack and Lisa J. Carnahan
|
|||
|
National Institute of Standards and Technology
|
|||
|
Special Publication 500-166
|
|||
|
This document provides a good introduction to viruses,
|
|||
|
worms, trojan horses, and so on, and explains how they work
|
|||
|
and how they are used to attack computer systems. Written
|
|||
|
for the nontechnical user, this is a good starting point for
|
|||
|
learning about these security problems. This document can
|
|||
|
be ordered for $2.50 from the U. S. Government Printing
|
|||
|
Office, document number 003-003-02955-6.
|
|||
|
56
|
|||
|
SECTION 7
|
|||
|
CONCLUSIONS
|
|||
|
Computer security is playing an increasingly important role
|
|||
|
in our lives as more and more operations become computerized, and
|
|||
|
as computer networks become more widespread. In order to protect
|
|||
|
your systems from snooping and vandalism by unauthorized crack-
|
|||
|
ers, it is necessary to enable the numerous security features
|
|||
|
provided by the UNIX system.
|
|||
|
In this document, we have covered the major areas that can
|
|||
|
be made more secure:
|
|||
|
o+ Account security
|
|||
|
o+ Network security
|
|||
|
o+ File system security.
|
|||
|
Additionally, we have discussed how to monitor for security vio-
|
|||
|
lations, where to obtain security-related software and bug fixes,
|
|||
|
and numerous mailing lists for finding out about security prob-
|
|||
|
lems that have been discovered.
|
|||
|
Many crackers are not interested in breaking into specific
|
|||
|
systems, but rather will break into any system that is vulnerable
|
|||
|
to the attacks they know. Eliminating these well-known holes and
|
|||
|
monitoring the system for other security problems will usually
|
|||
|
serve as adequate defense against all but the most determined
|
|||
|
crackers. By using the procedures and sources described in this
|
|||
|
document, you _c_a_n make your system more secure.
|
|||
|
57
|
|||
|
58
|
|||
|
REFERENCES
|
|||
|
[Eich89] Eichin, Mark W., and Jon A. Rochlis. _W_i_t_h _M_i_c_r_o_s_c_o_p_e
|
|||
|
_a_n_d _T_w_e_e_z_e_r_s: _A_n _A_n_a_l_y_s_i_s _o_f _t_h_e _I_n_t_e_r_n_e_t _V_i_r_u_s _o_f
|
|||
|
_N_o_v_e_m_b_e_r _1_9_8_8. Massachusetts Institute of Technology.
|
|||
|
February 1989.
|
|||
|
[Elme88] Elmer-DeWitt, Philip. %% %The Kid Put Us Out of
|
|||
|
Action.' '' _T_i_m_e, 132 (20): 76, November 14, 1988.
|
|||
|
[Gram84] Grammp, F. T., and R. H. Morris. %%UNIX Operating Sys-
|
|||
|
tem Security.'' _A_T&_T _B_e_l_l _L_a_b_o_r_a_t_o_r_i_e_s _T_e_c_h_n_i_c_a_l _J_o_u_r_-
|
|||
|
_n_a_l, 63 (8): 1649-1672, October 1984.
|
|||
|
[Hind83] Hinden, R., J. Haverty, and A. Sheltzer. %%The DARPA
|
|||
|
Internet: Interconnecting Heterogeneous Computer Net-
|
|||
|
works with Gateways.'' _I_E_E_E _C_o_m_p_u_t_e_r _M_a_g_a_z_i_n_e, 16 (9):
|
|||
|
33-48, September 1983.
|
|||
|
[McLe87] McLellan, Vin. %%NASA Hackers: There's More to the
|
|||
|
Story.'' _D_i_g_i_t_a_l _R_e_v_i_e_w, November 23, 1987, p. 80.
|
|||
|
[Morr78] Morris, Robert, and Ken Thompson. %%Password Security:
|
|||
|
A Case History.'' _C_o_m_m_u_n_i_c_a_t_i_o_n_s _o_f _t_h_e _A_C_M, 22 (11):
|
|||
|
594-597, November 1979. Reprinted in _U_N_I_X _S_y_s_t_e_m
|
|||
|
_M_a_n_a_g_e_r'_s _M_a_n_u_a_l, 4.3 Berkeley Software Distribution.
|
|||
|
University of California, Berkeley. April 1986.
|
|||
|
[NCSC85] National Computer Security Center. _D_e_p_a_r_t_m_e_n_t _o_f
|
|||
|
_D_e_f_e_n_s_e _T_r_u_s_t_e_d _C_o_m_p_u_t_e_r _S_y_s_t_e_m _E_v_a_l_u_a_t_i_o_n _C_r_i_t_e_r_i_a,
|
|||
|
Department of Defense Standard DOD 5200.28-STD,
|
|||
|
December, 1985.
|
|||
|
[Quar86] Quarterman, J. S., and J. C. Hoskins. %%Notable Com-
|
|||
|
puter Networks.'' _C_o_m_m_u_n_i_c_a_t_i_o_n_s _o_f _t_h_e _A_C_M, 29 (10):
|
|||
|
932-971, October 1986.
|
|||
|
[Reed84] Reeds, J. A., and P. J. Weinberger. %%File Security
|
|||
|
and the UNIX System Crypt Command.'' _A_T&_T _B_e_l_l _L_a_b_o_r_a_-
|
|||
|
_t_o_r_i_e_s _T_e_c_h_n_i_c_a_l _J_o_u_r_n_a_l, 63 (8): 1673-1683, October
|
|||
|
1984.
|
|||
|
[Risk87] _F_o_r_u_m _o_n _R_i_s_k_s _t_o _t_h_e _P_u_b_l_i_c _i_n _C_o_m_p_u_t_e_r_s _a_n_d _R_e_l_a_t_e_d
|
|||
|
_S_y_s_t_e_m_s. ACM Committee on Computers and Public Policy,
|
|||
|
Peter G. Neumann, Moderator. Internet mailing list.
|
|||
|
Issue 5.73, December 13, 1987.
|
|||
|
[Risk88] _F_o_r_u_m _o_n _R_i_s_k_s _t_o _t_h_e _P_u_b_l_i_c _i_n _C_o_m_p_u_t_e_r_s _a_n_d _R_e_l_a_t_e_d
|
|||
|
_S_y_s_t_e_m_s. ACM Committee on Computers and Public Policy,
|
|||
|
Peter G. Neumann, Moderator. Internet mailing list.
|
|||
|
59
|
|||
|
Issue 7.85, December 1, 1988.
|
|||
|
[Risk89a] _F_o_r_u_m _o_n _R_i_s_k_s _t_o _t_h_e _P_u_b_l_i_c _i_n _C_o_m_p_u_t_e_r_s _a_n_d _R_e_l_a_t_e_d
|
|||
|
_S_y_s_t_e_m_s. ACM Committee on Computers and Public Policy,
|
|||
|
Peter G. Neumann, Moderator. Internet mailing list.
|
|||
|
Issue 8.2, January 4, 1989.
|
|||
|
[Risk89b] _F_o_r_u_m _o_n _R_i_s_k_s _t_o _t_h_e _P_u_b_l_i_c _i_n _C_o_m_p_u_t_e_r_s _a_n_d _R_e_l_a_t_e_d
|
|||
|
_S_y_s_t_e_m_s. ACM Committee on Computers and Public Policy,
|
|||
|
Peter G. Neumann, Moderator. Internet mailing list.
|
|||
|
Issue 8.9, January 17, 1989.
|
|||
|
[Risk90] _F_o_r_u_m _o_n _R_i_s_k_s _t_o _t_h_e _P_u_b_l_i_c _i_n _C_o_m_p_u_t_e_r_s _a_n_d _R_e_l_a_t_e_d
|
|||
|
_S_y_s_t_e_m_s. ACM Committee on Computers and Public Policy,
|
|||
|
Peter G. Neumann, Moderator. Internet mailing list.
|
|||
|
Issue 9.69, February 20, 1990.
|
|||
|
[Ritc75] Ritchie, Dennis M. %%On the Security of UNIX.'' May
|
|||
|
1975. Reprinted in _U_N_I_X _S_y_s_t_e_m _M_a_n_a_g_e_r'_s _M_a_n_u_a_l, 4.3
|
|||
|
Berkeley Software Distribution. University of Califor-
|
|||
|
nia, Berkeley. April 1986.
|
|||
|
[Schu90] Schuman, Evan. %%Bid to Unhook Worm.'' _U_N_I_X _T_o_d_a_y!,
|
|||
|
February 5, 1990, p. 1.
|
|||
|
[Seel88] Seeley, Donn. _A _T_o_u_r _o_f _t_h_e _W_o_r_m. Department of Com-
|
|||
|
puter Science, University of Utah. December 1988.
|
|||
|
[Spaf88] Spafford, Eugene H. _T_h_e _I_n_t_e_r_n_e_t _W_o_r_m _P_r_o_g_r_a_m: _A_n
|
|||
|
_A_n_a_l_y_s_i_s. Technical Report CSD-TR-823. Department of
|
|||
|
Computer Science, Purdue University. November 1988.
|
|||
|
[Stee88] Steele, Guy L. Jr., Donald R. Woods, Raphael A. Finkel,
|
|||
|
Mark R. Crispin, Richard M. Stallman, and Geoffrey S.
|
|||
|
Goodfellow. _T_h_e _H_a_c_k_e_r'_s _D_i_c_t_i_o_n_a_r_y. New York: Harper
|
|||
|
and Row, 1988.
|
|||
|
[Stei88] Stein, Jennifer G., Clifford Neuman, and Jeffrey L.
|
|||
|
Schiller. %%Kerberos: An Authentication Service for
|
|||
|
Open Network Systems.'' _U_S_E_N_I_X _C_o_n_f_e_r_e_n_c_e _P_r_o_c_e_e_d_i_n_g_s,
|
|||
|
Dallas, Texas, Winter 1988, pp. 203-211.
|
|||
|
[Stol88] Stoll, Clifford. %%Stalking the Wily Hacker.'' _C_o_m_m_u_n_-
|
|||
|
_i_c_a_t_i_o_n_s _o_f _t_h_e _A_C_M, 31 (5): 484-497, May 1988.
|
|||
|
[Stol89] Stoll, Clifford. _T_h_e _C_u_c_k_o_o'_s _E_g_g. New York: Double-
|
|||
|
day, 1989.
|
|||
|
[Sun88a] Sun Microsystems. _S_u_n_O_S _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l, Part Number
|
|||
|
800-1751-10, May 1988.
|
|||
|
[Sun88b] Sun Microsystems. _S_y_s_t_e_m _a_n_d _N_e_t_w_o_r_k _A_d_m_i_n_i_s_t_r_a_t_i_o_n,
|
|||
|
60
|
|||
|
Part Number 800-1733-10, May 1988.
|
|||
|
[Sun88c] Sun Microsystems. _S_e_c_u_r_i_t_y _F_e_a_t_u_r_e_s _G_u_i_d_e, Part Number
|
|||
|
800-1735-10, May 1988.
|
|||
|
[Sun88d] Sun Microsystems. %%Network File System: Version 2
|
|||
|
Protocol Specification.'' _N_e_t_w_o_r_k _P_r_o_g_r_a_m_m_i_n_g, Part
|
|||
|
Number 800-1779-10, May 1988, pp. 165-185.
|
|||
|
61
|
|||
|
62
|
|||
|
APPENDIX A - SECURITY CHECKLIST
|
|||
|
This checklist summarizes the information presented in this
|
|||
|
paper, and can be used to verify that you have implemented every-
|
|||
|
thing described.
|
|||
|
_A_c_c_o_u_n_t _S_e_c_u_r_i_t_y
|
|||
|
[] Password policy developed and distributed to all users
|
|||
|
[] All passwords checked against obvious choices
|
|||
|
[] Expiration dates on all accounts
|
|||
|
[] No %%idle'' guest accounts
|
|||
|
[] All accounts have passwords or %%*'' in the password field
|
|||
|
[] No group accounts
|
|||
|
[] %%+'' lines in _p_a_s_s_w_d and _g_r_o_u_p checked if running Yellow Pages
|
|||
|
_N_e_t_w_o_r_k _S_e_c_u_r_i_t_y
|
|||
|
[] _h_o_s_t_s._e_q_u_i_v contains only local hosts, and no %%+''
|
|||
|
[] No ._r_h_o_s_t_s files in users' home directories
|
|||
|
[] Only local hosts in %%root'' ._r_h_o_s_t_s file, if any
|
|||
|
[] Only %%console'' labeled as %%secure'' in _t_t_y_t_a_b (servers only)
|
|||
|
[] No terminals labeled as %%secure'' in _t_t_y_t_a_b (clients only)
|
|||
|
[] No NFS file systems exported to the world
|
|||
|
[] _f_t_p_d version later than December, 1988
|
|||
|
[] No %%decode'' alias in the aliases file
|
|||
|
[] No %%wizard'' password in _s_e_n_d_m_a_i_l._c_f
|
|||
|
[] No %%debug'' command in _s_e_n_d_m_a_i_l
|
|||
|
[] _f_i_n_g_e_r_d version later than November 5, 1988
|
|||
|
[] Modems and terminal servers handle hangups correctly
|
|||
|
_F_i_l_e _S_y_s_t_e_m _S_e_c_u_r_i_t_y
|
|||
|
[] No setuid or setgid shell scripts
|
|||
|
[] Check all %%nonstandard'' setuid and setgid programs for security
|
|||
|
[] Setuid bit removed from /_u_s_r/_e_t_c/_r_e_s_t_o_r_e
|
|||
|
[] Sticky bits set on world-writable directories
|
|||
|
[] Proper umask value on %%root'' account
|
|||
|
[] Proper modes on devices in /_d_e_v
|
|||
|
_B_a_c_k_u_p_s
|
|||
|
[] Level 0 dumps at least monthly
|
|||
|
[] Incremental dumps at least bi-weekly
|
|||
|
63
|
|||
|
This page intentionally left blank.
|
|||
|
Just throw it out.
|
|||
|
lxiv
|
|||
|
CONTENTS
|
|||
|
1 INTRODUCTION........................................... 1
|
|||
|
1.1 UNIX Security.......................................... 1
|
|||
|
1.2 The Internet Worm...................................... 2
|
|||
|
1.3 Spies and Espionage.................................... 2
|
|||
|
1.4 Other Break-Ins........................................ 3
|
|||
|
1.5 Security is Important.................................. 3
|
|||
|
2 IMPROVING SECURITY..................................... 5
|
|||
|
2.1 Account Security....................................... 5
|
|||
|
2.1.1 Passwords.............................................. 5
|
|||
|
2.1.1.1 Selecting Passwords6
|
|||
|
2.1.1.2 Password Policies7
|
|||
|
2.1.1.3 Checking Password Security7
|
|||
|
2.1.2 Expiration Dates....................................... 8
|
|||
|
2.1.3 Guest Accounts......................................... 8
|
|||
|
2.1.4 Accounts Without Passwords............................. 9
|
|||
|
2.1.5 Group Accounts and Groups.............................. 9
|
|||
|
2.1.6 Yellow Pages........................................... 10
|
|||
|
2.2 Network Security....................................... 11
|
|||
|
2.2.1 Trusted Hosts.......................................... 11
|
|||
|
2.2.1.1 The hosts.equiv File11
|
|||
|
2.2.1.2 The .rhosts File12
|
|||
|
2.2.2 Secure Terminals....................................... 12
|
|||
|
2.2.3 The Network File System................................ 13
|
|||
|
2.2.3.1 The exports File13
|
|||
|
2.2.3.2 The netgroup File14
|
|||
|
2.2.3.3 Restricting Super-User Access16
|
|||
|
2.2.4 FTP.................................................... 16
|
|||
|
2.2.4.1 Trivial FTP17
|
|||
|
2.2.5 Mail................................................... 18
|
|||
|
2.2.6 Finger................................................. 19
|
|||
|
2.2.7 Modems and Terminal Servers............................ 19
|
|||
|
2.2.8 Firewalls.............................................. 20
|
|||
|
2.3 File System Security................................... 20
|
|||
|
2.3.1 Setuid Shell Scripts................................... 21
|
|||
|
2.3.2 The Sticky Bit on Directories.......................... 22
|
|||
|
2.3.3 The Setgid Bit on Directories.......................... 22
|
|||
|
2.3.4 The umask Value........................................ 22
|
|||
|
2.3.5 Encrypting Files....................................... 23
|
|||
|
2.3.6 Devices................................................ 23
|
|||
|
2.4 Security Is Your Responsibility........................ 24
|
|||
|
3 MONITORING SECURITY.................................... 25
|
|||
|
3.1 Account Security....................................... 25
|
|||
|
3.1.1 The lastlog File....................................... 25
|
|||
|
3.1.2 The utmp and wtmp Files................................ 25
|
|||
|
3.1.3 The acct File.......................................... 26
|
|||
|
3.2 Network Security....................................... 27
|
|||
|
iii
|
|||
|
CONTENTS (continued)
|
|||
|
3.2.1 The syslog Facility..................................27
|
|||
|
3.2.2 The showmount Command................................28
|
|||
|
3.3 File System Security.................................29
|
|||
|
3.3.1 The find Command.....................................29
|
|||
|
3.3.1.1 Finding Setuid and Setgid Files29
|
|||
|
3.3.1.2 Finding World-Writable Files31
|
|||
|
3.3.1.3 Finding Unowned Files31
|
|||
|
3.3.1.4 Finding .rhosts Files31
|
|||
|
3.3.2 Checklists...........................................32
|
|||
|
3.3.3 Backups..............................................33
|
|||
|
3.4 Know Your System.....................................33
|
|||
|
3.4.1 The ps Command.......................................33
|
|||
|
3.4.2 The who and w Commands...............................34
|
|||
|
3.4.3 The ls Command.......................................34
|
|||
|
3.5 Keep Your Eyes Open..................................34
|
|||
|
4 SOFTWARE FOR IMPROVING SECURITY......................35
|
|||
|
4.1 Obtaining Fixes and New Versions.....................35
|
|||
|
4.1.1 Sun Fixes on UUNET...................................35
|
|||
|
4.1.2 Berkeley Fixes.......................................36
|
|||
|
4.1.3 Simtel-20 and UUNET..................................37
|
|||
|
4.1.4 Vendors..............................................37
|
|||
|
4.2 The npasswd Command..................................37
|
|||
|
4.3 The COPS Package.....................................38
|
|||
|
4.4 Sun C2 Security Features.............................38
|
|||
|
4.5 Kerberos.............................................39
|
|||
|
5 KEEPING ABREAST OF THE BUGS..........................41
|
|||
|
5.1 The Computer Emergency Response Team.................41
|
|||
|
5.2 DDN Management Bulletins.............................41
|
|||
|
5.3 Security-Related Mailing Lists.......................42
|
|||
|
5.3.1 Security.............................................42
|
|||
|
5.3.2 RISKS................................................42
|
|||
|
5.3.3 TCP-IP...............................................42
|
|||
|
5.3.4 SUN-SPOTS, SUN-NETS, SUN-MANAGERS....................42
|
|||
|
5.3.5 VIRUS-L..............................................43
|
|||
|
6 SUGGESTED READING....................................45
|
|||
|
7 CONCLUSIONS..........................................47
|
|||
|
REFERENCES..................................................49
|
|||
|
APPENDIX A - SECURITY CHECKLIST.............................51
|
|||
|
iv
|
|||
|
v
|
|||
|
|
|||
|
! ***
|
|||
|
|
|||
|
|
|||
|
3:38:37 p.m. ARE YOU STILL THERE ?
|
|||
|
! ***
|
|||
|
|
|||
|
|
|||
|
3:43:37 p.m. RESPOND OR BE LOGGED OFF
|
|||
|
! ***
|
|||
|
END OF SESSION
|
|||
|
|
|||
|
DISCONNECTED
|
|||
|
e5",*Kdlz
|
|||
|
NO CARRIER
|
|||
|
|