935 lines
36 KiB
Plaintext
935 lines
36 KiB
Plaintext
.\" Must use -- pic tbl eqn -- with this one.
|
|
.\"
|
|
.\" @(#)nfs.secure.ms 2.2 88/08/09 4.0 RPCSRC
|
|
.de BT
|
|
.if \\n%=1 .tl ''- % -''
|
|
..
|
|
.ND
|
|
.\" prevent excess underlining in nroff
|
|
.if n .fp 2 R
|
|
.OH 'Secure Networking''Page %'
|
|
.EH 'Page %''Secure Networking'
|
|
.if \\n%=1 .bp
|
|
.EQ
|
|
delim $$
|
|
gsize 11
|
|
.EN
|
|
.SH
|
|
\&Secure Networking
|
|
.nr OF 1
|
|
.IX "security" "of networks" "" "" PAGE START
|
|
.IX "network security" "" "" "" PAGE START
|
|
.IX "NFS security" "" "" "" PAGE START
|
|
.LP
|
|
RPCSRC 4.0 includes an authentication system
|
|
that greatly improves the security of network environments.
|
|
The system is general enough to be used by other
|
|
.UX
|
|
and non-UNIX systems.
|
|
The system uses DES encryption and public key cryptography
|
|
to authenticate both users and machines in the network.
|
|
(DES stands for Data Encryption Standard.)
|
|
.LP
|
|
Public key cryptography is a cipher system that involves two keys:
|
|
one public and the other private.
|
|
The public key is published, while the private key is not;
|
|
the private (or secret) key is used to encrypt and decrypt data.
|
|
Sun's system differs from some other public key cryptography systems
|
|
in that the public and secret keys are used to generate a common key,
|
|
which is used in turn to create a DES key.
|
|
DES is relatively fast,
|
|
and on Sun Workstations,
|
|
optional hardware is available to make it even faster.
|
|
.#
|
|
.NH 0
|
|
\&Administering Secure RPC
|
|
.IX "administering secure RPC"
|
|
.IX "security" "RPC administration"
|
|
.LP
|
|
This section describes what the system administrator must do
|
|
in order to use secure networking.
|
|
.IP 1
|
|
RPCSRC now includes the
|
|
.I /etc/publickey
|
|
.IX "etc/publickey" "" "\&\fI/etc/publickey\fP"
|
|
database, which should contain three fields for each user:
|
|
the user's netname, a public key, and an encrypted secret key.
|
|
The corresponding Yellow Pages map is available to YP clients as
|
|
.I publickey.byname
|
|
but the database should reside only on the YP master. Make sure
|
|
.I /etc/netid
|
|
exists on the YP master server.
|
|
As normally installed, the only user is
|
|
.I nobody .
|
|
This is convenient administratively,
|
|
because users can establish their own public keys using
|
|
.I chkey (1)
|
|
.IX "chkey command" "" "\&\fIchkey\fP command"
|
|
without administrator intervention.
|
|
For even greater security,
|
|
the administrator can establish public keys for everyone using
|
|
.I newkey (8).
|
|
.IX "newkey command" "" "\&\fInewkey\fP command"
|
|
Note that the Yellow Pages take time to propagate a new map,
|
|
so it's a good idea for users to run
|
|
.I chkey ,
|
|
or for the administrator to run
|
|
.I newkey ,
|
|
just before going home for the night.
|
|
.IP 2
|
|
Verify that the
|
|
.I keyserv (8c)
|
|
.IX "keyserv daemon" "" "\&\fIkeyserv\fP daemon"
|
|
daemon was started by
|
|
.I /etc/rc.local
|
|
and is still running.
|
|
This daemon performs public key encryption
|
|
and stores the private key (encrypted, of course) in
|
|
.I /etc/keystore :
|
|
.DS
|
|
% \fBps aux | grep keyserv\fP
|
|
root 1354 0.0 4.1 128 296 p0 I Oct 15 0:13 keyserv
|
|
.DE
|
|
When users log in with
|
|
.I login
|
|
.IX "login command" "" "\&\fIlogin\fP command"
|
|
or remote log in with
|
|
.I rlogin ,
|
|
these programs use the typed password to decrypt the secret key stored in
|
|
.I /etc/publickey .
|
|
This becomes the private key, and gets passed to the
|
|
.I keyserv
|
|
daemon.
|
|
If users don't type a password for
|
|
.I login
|
|
or
|
|
.I rlogin ,
|
|
either because their password field is empty
|
|
or because their machine is in the
|
|
.I hosts\fR.\fPequiv
|
|
.IX "etc/hosts.equiv" "" "\&\fI/etc/hosts.equiv\fP"
|
|
file of the remote host,
|
|
they can still place a private key in
|
|
.I /etc/keystore
|
|
by invoking the
|
|
.I keylogin (1)
|
|
.IX "keylogin command" "" "\&\fIkeylogin\fP command"
|
|
program.
|
|
Administrators should take care not to delete
|
|
.I /etc/keystore
|
|
and
|
|
.I /etc/.rootkey
|
|
(the latter file contains the private key for
|
|
.I root ).
|
|
.IP 3
|
|
When you reinstall, move, or upgrade a machine, save
|
|
.I /etc/keystore
|
|
and
|
|
.I /etc/.rootkey
|
|
along with everything else you normally save.
|
|
.LP
|
|
.LP
|
|
Note that if you
|
|
.I login ,
|
|
.I rlogin ,
|
|
or
|
|
.I telnet
|
|
to another machine, are asked for your password, and type it correctly,
|
|
you've given away access to your own account.
|
|
This is because your secret key is now stored in
|
|
.I /etc/keystore
|
|
on that remote machine.
|
|
This is only a concern if you don't trust the remote machine.
|
|
If this is the case,
|
|
don't ever log in to a remote machine if it asks for your password.
|
|
Instead, use NFS to remote mount the files you're looking for.
|
|
At this point there is no
|
|
.I keylogout
|
|
command, even though there should be.
|
|
.LP
|
|
The remainder of this chapter discusses the theory of secure networking,
|
|
and is useful as a background for both users and administrators.
|
|
.#
|
|
.NH 1
|
|
\&Security Shortcomings of NFS
|
|
.IX "security" "shortcomings of NFS"
|
|
.LP
|
|
Sun's Remote Procedure Call (RPC) mechanism has proved to be a very
|
|
powerful primitive for building network services.
|
|
The most well-known of these services is the Network File System (NFS),
|
|
a service that provides transparent file-sharing
|
|
between heterogeneous machine architectures and operating systems.
|
|
The NFS is not without its shortcomings, however.
|
|
Currently, an NFS server authenticates a file request by authenticating the
|
|
machine making the request, but not the user.
|
|
On NFS-based filesystems, it is a simple matter of running
|
|
.I su
|
|
.IX "su command" "" "\&\fIsu\fP command"
|
|
to impersonate the rightful owner of a file.
|
|
But the security weaknesses of the NFS are nothing new.
|
|
The familiar command
|
|
.I rlogin
|
|
is subject to exactly the same attacks as the NFS
|
|
because it uses the same kind of authentication.
|
|
.LP
|
|
A common solution to network security problems
|
|
is to leave the solution to each application.
|
|
A far better solution is to put authentication at the RPC level.
|
|
The result is a standard authentication system
|
|
that covers all RPC-based applications,
|
|
such as the NFS and the Yellow Pages (a name-lookup service).
|
|
Our system allows the authentication of users as well as machines.
|
|
The advantage of this is that it makes a network environment
|
|
more like the older time-sharing environment.
|
|
Users can log in on any machine,
|
|
just as they could log in on any terminal.
|
|
Their login password is their passport to network security.
|
|
No knowledge of the underlying authentication system is required.
|
|
Our goal was a system that is as secure and easy to use
|
|
as a time-sharing system.
|
|
.LP
|
|
Several remarks are in order. Given
|
|
.I root
|
|
access and a good knowledge of network programming,
|
|
anyone is capable of injecting arbitrary data into the network,
|
|
and picking up any data from the network.
|
|
However, on a local area network, no machine is capable of packet smashing \(en
|
|
capturing packets before they reach their destination, changing the contents,
|
|
then sending packets back on their original course \(en
|
|
because packets reach all machines, including the server, at the same time.
|
|
Packet smashing is possible on a gateway, though,
|
|
so make sure you trust all gateways on the network.
|
|
The most dangerous attacks are those involving the injection of data,
|
|
such as impersonating a user by generating the right packets,
|
|
or recording conversations and replaying them later.
|
|
These attacks affect data integrity.
|
|
Attacks involving passive eavesdropping \(en
|
|
merely listening to network traffic without impersonating anybody \(en
|
|
are not as dangerous, since data integrity had not been compromised.
|
|
Users can protect the privacy of sensitive information
|
|
by encrypting data that goes over the network.
|
|
It's not easy to make sense of network traffic, anyway.
|
|
.#
|
|
.NH 1
|
|
\&RPC Authentication
|
|
.IX "RPC authentication"
|
|
.IX "authentication" "RPC"
|
|
.LP
|
|
RPC is at the core of the new network security system.
|
|
To understand the big picture,
|
|
it's necessary to understand how authentication works in RPC.
|
|
RPC's authentication is open-ended:
|
|
a variety of authentication systems may be plugged into it
|
|
and may coexist on the network.
|
|
Currently, we have two: UNIX and DES.
|
|
UNIX authentication is the older, weaker system;
|
|
DES authentication is the new system discussed in this chapter.
|
|
Two terms are important for any RPC authentication system:
|
|
.I credentials
|
|
and
|
|
.I verifiers .
|
|
Using ID badges as an example, the credential is what identifies a person:
|
|
a name, address, birth date, etc.
|
|
The verifier is the photo attached to the badge:
|
|
you can be sure the badge has not been stolen by checking the photo
|
|
on the badge against the person carrying it.
|
|
In RPC, things are similar.
|
|
The client process sends both a credential and a verifier
|
|
to the server with each RPC request.
|
|
The server sends back only a verifier,
|
|
since the client already knows the server's credentials.
|
|
.#
|
|
.NH 2
|
|
\&UNIX Authentication
|
|
.IX "UNIX authentication"
|
|
.IX "authentication" "UNIX"
|
|
.LP
|
|
UNIX authentication was used by most of Sun's original network services.
|
|
The credentials contain the client's machine-name,
|
|
.I uid ,
|
|
.I gid ,
|
|
and group-access-list.
|
|
The verifier contains \fBnothing\fP!
|
|
There are two problems with this system.
|
|
The glaring problem is the empty verifier,
|
|
which makes it easy to cook up the right credential using
|
|
.I hostname
|
|
.IX "hostname command" "" "\&\fIhostname\fP command"
|
|
and
|
|
.I su .
|
|
.IX "su command" "" "\&\fIsu\fP command"
|
|
If you trust all root users in the network, this is not really a problem.
|
|
But many networks \(en especially at universities \(en are not this secure.
|
|
The NFS tries to combat deficiencies in UNIX authentication
|
|
by checking the source Internet address of
|
|
.I mount
|
|
requests as a verifier of the
|
|
.I hostname
|
|
field, and accepting requests only from privileged Internet ports.
|
|
Still, it is not difficult to circumvent these measures,
|
|
and NFS really has no way to verify the user-ID.
|
|
.LP
|
|
The other problem with UNIX authentication appears in the name UNIX.
|
|
It is unrealistic to assume that all machines on a network
|
|
will be UNIX machines.
|
|
The NFS works with MS-DOS and VMS machines,
|
|
but UNIX authentication breaks down when applied to them.
|
|
For instance, MS-DOS doesn't even have a notion of different user IDs.
|
|
.LP
|
|
Given these shortcomings,
|
|
it is clear what is needed in a new authentication system:
|
|
operating system independent credentials, and secure verifiers.
|
|
This is the essence of DES authentication discussed below.
|
|
.#
|
|
.NH 2
|
|
\&DES Authentication
|
|
.IX "DES authentication"
|
|
.IX "authentication" "DES"
|
|
.LP
|
|
The security of DES authentication is based on
|
|
a sender's ability to encrypt the current time,
|
|
which the receiver can then decrypt and check against its own clock.
|
|
The timestamp is encrypted with DES.
|
|
Two things are necessary for this scheme to work:
|
|
1) the two agents must agree on what the current time is, and
|
|
2) the sender and receiver must be using the same encryption key.
|
|
.LP
|
|
If a network has time synchronization (Berkeley's TEMPO for example),
|
|
then client/server time synchronization is performed automatically.
|
|
However, if this is not available,
|
|
timestamps can be computed using the server's time instead of network time.
|
|
In order to do this, the client asks the server what time it is,
|
|
before starting the RPC session,
|
|
then computes the time difference between its own clock and the server's.
|
|
This difference is used to offset the client's clock when computing timestamps.
|
|
If the client and server clocks get out of sync
|
|
to the point where the server begins rejecting the client's requests,
|
|
the DES authentication system just resynchronizes with the server.
|
|
.LP
|
|
Here's how the client and server arrive at the same encryption key.
|
|
When a client wishes to talk to a server, it generates at random
|
|
a key to be used for encrypting the timestamps (among other things).
|
|
This key is known as the
|
|
.I "conversation key, CK."
|
|
The client encrypts the conversation key using a public key scheme,
|
|
and sends it to the server in its first transaction.
|
|
This key is the only thing that is ever encrypted with public key cryptography.
|
|
The particular scheme used is described further on in this chapter.
|
|
For now, suffice to say that for any two agents A and B,
|
|
there is a DES key $K sub AB$ that only A and B can deduce.
|
|
This key is known as the
|
|
.I "common key,"
|
|
$K sub AB$.
|
|
.EQ
|
|
gsize 10
|
|
.EN
|
|
.ne 1i
|
|
.PS
|
|
.in +.7i
|
|
circlerad=.4
|
|
boxht=.2
|
|
boxwid=1.3
|
|
circle "\s+9A\s-9" "(client)" at 0,1.2
|
|
circle "\s+9B\s-9" "(server)" at 5.1,1.2
|
|
line invis at .5,2 ; box invis "\fBCredential\fP"; line invis;
|
|
box invis "\fBVerifier\fP"
|
|
arrow at .5,1.7; box "$A, K sub AB (CK), CK(win)$"; arrow;
|
|
box "$CK(t sub 1 ), CK(win + 1)$"; arrow
|
|
arrow <- at .5,1.4; line right 1.3; line;
|
|
box "$CK(t sub 1 - 1), ID$"; arrow <-
|
|
arrow at .5,1; box "ID"; arrow;
|
|
box "$CK(t sub 2 )$"; arrow
|
|
arrow <- at .5,.7; line right 1.3; line;
|
|
box "$CK(t sub 2 - 1), ID$"; arrow <-
|
|
arrow at .5,.3; box "ID"; arrow;
|
|
box "$CK(t sub n )$"; arrow
|
|
arrow <- at .5,0; line right 1.3; line;
|
|
box "$CK(t sub n - 1), ID$"; arrow <-
|
|
.PE
|
|
.EQ
|
|
gsize 11
|
|
.EN
|
|
.in -.7i
|
|
.LP
|
|
The figure above illustrates the authentication protocol in more detail,
|
|
describing client A talking to server B.
|
|
A term of the form $K(x)$ means $x$ encrypted with the DES key $K$.
|
|
Examining the figure, you can see that for its first request,
|
|
the client's credential contains three things:
|
|
its name $A$, the conversation key $CK$ encrypted with the common key
|
|
$K sub AB$, and a thing called $win$ (window) encrypted with $CK$.
|
|
What the window says to the server, in effect, is this:
|
|
.LP
|
|
.I
|
|
I will be sending you many credentials in the future,
|
|
but there may be crackers sending them too,
|
|
trying to impersonate me with bogus timestamps.
|
|
When you receive a timestamp, check to see if your current time
|
|
is somewhere between the timestamp and the timestamp plus the window.
|
|
If it's not, please reject the credential.
|
|
.LP
|
|
For secure NFS filesystems, the window currently defaults to 30 minutes.
|
|
The client's verifier in the first request contains the encrypted timestamp
|
|
and an encrypted verifier of the specified window, $win + 1$.
|
|
The reason this exists is the following.
|
|
Suppose somebody wanted to impersonate A by writing a program
|
|
that instead of filling in the encrypted fields of the credential and verifier,
|
|
just stuffs in random bits.
|
|
The server will decrypt CK into some random DES key,
|
|
and use it to decrypt the window and the timestamp.
|
|
These will just end up as random numbers.
|
|
After a few thousand trials, there is a good chance
|
|
that the random window/timestamp pair will pass the authentication system.
|
|
The window verifier makes guessing the right credential much more difficult.
|
|
.LP
|
|
After authenticating the client,
|
|
the server stores four things into a credential table:
|
|
the client's name A, the conversation key $CK$, the window, and the timestamp.
|
|
The reason the server stores the first three things should be clear:
|
|
it needs them for future use.
|
|
The reason for storing the timestamp is to protect against replays.
|
|
The server will only accept timestamps
|
|
that are chronologically greater than the last one seen,
|
|
so any replayed transactions are guaranteed to be rejected.
|
|
The server returns to the client in its verifier an index ID
|
|
into its credential table, plus the client's timestamp minus one,
|
|
encrypted by $CK$.
|
|
The client knows that only the server could have sent such a verifier,
|
|
since only the server knows what timestamp the client sent.
|
|
The reason for subtracting one from it is to insure that it is invalid
|
|
and cannot be reused as a client verifier.
|
|
.LP
|
|
The first transaction is rather complicated,
|
|
but after this things go very smoothly.
|
|
The client just sends its ID and an encrypted timestamp to the server,
|
|
and the server sends back the client's timestamp minus one,
|
|
encrypted by $CK$.
|
|
.#
|
|
.NH 1
|
|
\&Public Key Encryption
|
|
.IX "public key encryption"
|
|
.LP
|
|
The particular public key encryption scheme Sun uses
|
|
is the Diffie-Hellman method.
|
|
The way this algorithm works is to generate a
|
|
.I "secret key"
|
|
$SK sub A$ at random
|
|
and compute a
|
|
.I "public key"
|
|
$PK sub A$ using the following formula
|
|
($PK$ and $SK$ are 192 bit numbers and \(*a is a well-known constant):
|
|
.EQ
|
|
PK sub A ~ = ~ alpha sup {SK sub A}
|
|
.EN
|
|
Public key $PK sub A$ is stored in a public directory,
|
|
but secret key $SK sub A$ is kept private.
|
|
Next, $PK sub B$ is generated from $SK sub B$ in the same manner as above.
|
|
Now common key $K sub AB$ can be derived as follows:
|
|
.EQ
|
|
K sub AB ~ = ~ PK sub B sup {SK sub A} ~ = ~
|
|
( alpha sup {SK sub B} ) sup {SK sub A} ~ = ~
|
|
alpha sup {( SK sub A SK sub B )}
|
|
.EN
|
|
Without knowing the client's secret key,
|
|
the server can calculate the same common key $K sub AB$
|
|
in a different way, as follows:
|
|
.EQ
|
|
K sub AB ~ = ~ PK sub A sup {SK sub B} ~ = ~
|
|
( alpha sup {SK sub A} ) sup {SK sub B} ~ = ~
|
|
alpha sup {( SK sub A SK sub B )}
|
|
.EN
|
|
Notice that nobody else but the server and client can calculate $K sub AB$,
|
|
since doing so requires knowing either one secret key or the other.
|
|
All of this arithmetic is actually computed modulo $M$,
|
|
which is another well-known constant.
|
|
It would seem at first that somebody could guess your secret key
|
|
by taking the logarithm of your public one,
|
|
but $M$ is so large that this is a computationally infeasible task.
|
|
To be secure, $K sub AB$ has too many bits to be used as a DES key,
|
|
so 56 bits are extracted from it to form the DES key.
|
|
.LP
|
|
Both the public and the secret keys
|
|
are stored indexed by netname in the Yellow Pages map
|
|
.I publickey.byname
|
|
the secret key is DES-encrypted with your login password.
|
|
When you log in to a machine, the
|
|
.I login
|
|
program grabs your encrypted secret key,
|
|
decrypts it with your login password,
|
|
and gives it to a secure local keyserver to save
|
|
for use in future RPC transactions.
|
|
Note that ordinary users do not have to be aware of
|
|
their public and secret keys.
|
|
In addition to changing your login password, the
|
|
.I yppasswd
|
|
.IX "yppasswd command" "" "\&\fIyppasswd\fP command"
|
|
program randomly generates a new public/secret key pair as well.
|
|
.LP
|
|
The keyserver
|
|
.I keyserv (8c)
|
|
.IX "keyserv daemon" "" "\&\fIkeyserv\fP daemon"
|
|
is an RPC service local to each machine
|
|
that performs all of the public key operations,
|
|
of which there are only three. They are:
|
|
.DS
|
|
setsecretkey(secretkey)
|
|
encryptsessionkey(servername, des_key)
|
|
decryptsessionkey(clientname, des_key)
|
|
.DE
|
|
.I setsecretkey()
|
|
tells the keyserver to store away your secret key $SK sub A$ for future use;
|
|
it is normally called by
|
|
.I login .
|
|
The client program calls
|
|
.I encryptsessionkey()
|
|
to generate the encrypted conversation key
|
|
that is passed in the first RPC transaction to a server.
|
|
The keyserver looks up
|
|
.I servername 's
|
|
public key and combines it with the client's secret key (set up by a previous
|
|
.I setsecretkey()
|
|
call) to generate the key that encrypts
|
|
.I des_key .
|
|
The server asks the keyserver to decrypt the conversation key by calling
|
|
.I decryptsessionkey().
|
|
Note that implicit in these procedures is the name of caller,
|
|
who must be authenticated in some manner.
|
|
The keyserver cannot use DES authentication to do this,
|
|
since it would create deadlock.
|
|
The keyserver solves this problem by storing the secret keys by
|
|
.I uid ,
|
|
and only granting requests to local root processes.
|
|
The client process then executes a
|
|
.I setuid
|
|
process, owned by root, which makes the request on the part of the client,
|
|
telling the keyserver the real
|
|
.I uid
|
|
of the client. Ideally, the three operations described above
|
|
would be system calls, and the kernel would talk to the keyserver directly,
|
|
instead of executing the
|
|
.I setuid
|
|
program.
|
|
.#
|
|
.NH 1
|
|
\&Naming of Network Entities
|
|
.IX "naming of network entities"
|
|
.IX "network naming"
|
|
.LP
|
|
The old UNIX authentication system has a few problems when it comes to naming.
|
|
Recall that with UNIX authentication,
|
|
the name of a network entity is basically the
|
|
.I uid .
|
|
These
|
|
.I uid s
|
|
are assigned per Yellow Pages naming domain,
|
|
which typically spans several machines.
|
|
We have already stated one problem with this system,
|
|
that it is too UNIX system oriented,
|
|
but there are two other problems as well.
|
|
One is the problem of
|
|
.I uid
|
|
clashes when domains are linked together.
|
|
The other problem is that the super-user (with
|
|
.I uid
|
|
of 0) should not be assigned on a per-domain basis,
|
|
but rather on a per-machine basis.
|
|
By default, the NFS deals with this latter problem in a severe manner:
|
|
it does not allow root access across the network by
|
|
.I uid
|
|
0 at all.
|
|
.LP
|
|
DES authentication corrects these problems
|
|
by basing naming upon new names that we call
|
|
.I netnames.
|
|
Simply put, a netname is just a string of printable characters,
|
|
and fundamentally, it is really these netnames that we authenticate.
|
|
The public and secret keys are stored on a per-netname,
|
|
rather than per-username, basis.
|
|
The Yellow Pages map
|
|
.I netid.byname
|
|
maps the netname into a local
|
|
.I uid
|
|
and group-access-list,
|
|
though non-Sun environments may map the netname into something else.
|
|
.LP
|
|
We solve the Internet naming problem by choosing globally unique netnames.
|
|
This is far easier then choosing globally unique user IDs.
|
|
In the Sun environment, user names are unique within each Yellow Page domain.
|
|
Netnames are assigned by concatenating the operating system and user ID
|
|
with the Yellow Pages and ARPA domain names.
|
|
For example, a UNIX system user with a user ID of 508 in the domain
|
|
.I eng.sun.COM
|
|
would be assigned the following netname:
|
|
.I unix.508@eng.sun.COM .
|
|
A good convention for naming domains is to append
|
|
the ARPA domain name (COM, EDU, GOV, MIL) to the local domain name.
|
|
Thus, the Yellow Pages domain
|
|
.I eng
|
|
within the ARPA domain
|
|
.I sun.COM
|
|
becomes
|
|
.I eng.sun.COM .
|
|
.LP
|
|
We solve the problem of multiple super-users per domain
|
|
by assigning netnames to machines as well as to users.
|
|
A machine's netname is formed much like a user's.
|
|
For example, a UNIX machine named
|
|
.I hal
|
|
in the same domain as before has the netname
|
|
.I unix.hal@eng.sun.COM .
|
|
Proper authentication of machines is very important for diskless machines
|
|
that need full access to their home directories over the net.
|
|
.LP
|
|
Non-Sun environments will have other ways of generating netnames,
|
|
but this does not preclude them from accessing
|
|
the secure network services of the Sun environment.
|
|
To authenticate users from any remote domain,
|
|
all that has to be done is make entries for them in two Yellow Pages databases.
|
|
One is an entry for their public and secret keys,
|
|
the other is for their local
|
|
.I uid
|
|
and group-access-list mapping.
|
|
Upon doing this, users in the remote domain
|
|
will be able access all of the local network services,
|
|
such as the NFS and remote logins.
|
|
.#
|
|
.NH 1
|
|
\&Applications of DES Authentication
|
|
.IX "applications of DES authentication"
|
|
.IX "authentication" "DES"
|
|
.LP
|
|
The first application of DES authentication
|
|
is a generalized Yellow Pages update service.
|
|
This service allows users to update private fields in Yellow Page databases.
|
|
So far the Yellow Pages maps
|
|
.I hosts,
|
|
.I ethers,
|
|
.I bootparams
|
|
and
|
|
.I publickey
|
|
employ the DES-based update service.
|
|
Before the advent of an update service for mail aliases,
|
|
Sun had to hire a full-time person just to update mail aliases.
|
|
.LP
|
|
The second application of DES authentication is the most important:
|
|
a more secure Network File System.
|
|
There are three security problems with the
|
|
old NFS using UNIX authentication.
|
|
The first is that verification of credentials occurs only at mount time
|
|
when the client gets from the server a piece of information
|
|
that is its key to all further requests: the
|
|
.I "file handle" .
|
|
Security can be broken if one can figure out a file handle
|
|
without contacting the server, perhaps by tapping into the net or by guessing.
|
|
After an NFS file system has been mounted,
|
|
there is no checking of credentials during file requests,
|
|
which brings up the second problem.
|
|
If a file system has been mounted from a server that serves multiple clients
|
|
(as is typically the case), there is no protection
|
|
against someone who has root permission on their machine using
|
|
.I su
|
|
(or some other means of changing
|
|
.I uid )
|
|
gaining unauthorized access to other people's files.
|
|
The third problem with the NFS is the severe method it uses to circumvent
|
|
the problem of not being able to authenticate remote client super-users:
|
|
denying them super-user access altogether.
|
|
.LP
|
|
The new authentication system corrects all of these problems.
|
|
Guessing file handles is no longer a problem since in order to gain
|
|
unauthorized access, the miscreant will also have to guess the right
|
|
encrypted timestamp to place in the credential,
|
|
which is a virtually impossible task.
|
|
The problem of authenticating root users is solved,
|
|
since the new system can authenticate machines.
|
|
At this point, however,
|
|
secure NFS is not used for root filesystems.
|
|
Root users of nonsecure filesystems are identified by IP address.
|
|
.LP
|
|
Actually, the level of security associated with each filesystem
|
|
may be altered by the administrator. The file
|
|
.I /etc/exports
|
|
.IX "etc/exports" "" "\&\fI/etc/exports\fP"
|
|
contains a list of filesystems and which machines may mount them.
|
|
By default, filesystems are exported with UNIX authentication,
|
|
but the administrator can have them exported with DES authentication
|
|
by specifying
|
|
.I -secure
|
|
on any line in the
|
|
.I /etc/exports
|
|
file. Associated with DES authentication is a parameter:
|
|
the maximum window size that the server is willing to accept.
|
|
.#
|
|
.NH 1
|
|
\&Security Issues Remaining
|
|
.IX "security" "issues remaining"
|
|
.IX "remaining security issues"
|
|
.LP
|
|
There are several ways to break DES authentication, but using
|
|
.I su
|
|
is not one of them. In order to be authenticated,
|
|
your secret key must be stored by your workstation.
|
|
This usually occurs when you login, with the
|
|
.I login
|
|
program decrypting your secret key with your login password,
|
|
and storing it away for you.
|
|
If somebody tries to use
|
|
.I su
|
|
to impersonate you, it won't work,
|
|
because they won't be able to decrypt your secret key. Editing
|
|
.I /etc/passwd
|
|
isn't going to help them either, because the thing they need to edit,
|
|
your encrypted secret key, is stored in the Yellow Pages.
|
|
If you log into somebody else's workstation and type in your password,
|
|
then your secret key would be stored in their workstation and they could use
|
|
.I su
|
|
to impersonate you. But this is not a problem since you should not
|
|
be giving away your password to a machine you don't trust anyway.
|
|
Someone on that machine could just as easily change
|
|
.I login
|
|
to save all the passwords it sees into a file.
|
|
.LP
|
|
Not having
|
|
.I su
|
|
to employ any more, how can nefarious users impersonate others now?
|
|
Probably the easiest way is to guess somebody's password,
|
|
since most people don't choose very secure passwords.
|
|
We offer no protection against this;
|
|
it's up to each user to choose a secure password.
|
|
.LP
|
|
The next best attack would be to attempt replays.
|
|
For example, let's say I have been squirreling away
|
|
all of your NFS transactions with a particular server.
|
|
As long as the server remains up,
|
|
I won't succeed by replaying them since the server always demands timestamps
|
|
that are greater than the previous ones seen.
|
|
But suppose I go and pull the plug on your server, causing it to crash.
|
|
As it reboots, its credential table will be clean,
|
|
so it has lost all track of previously seen timestamps,
|
|
and now I am free to replay your transactions.
|
|
There are few things to be said about this.
|
|
First of all, servers should be kept in a secure place
|
|
so that no one can go and pull the plug on them.
|
|
But even if they are physically secure,
|
|
servers occasionally crash without any help.
|
|
Replaying transactions is not a very big security problem,
|
|
but even so, there is protection against it.
|
|
If a client specifies a window size that is smaller than the time it takes
|
|
a server to reboot (5 to 10 minutes), the server will reject
|
|
any replayed transactions because they will have expired.
|
|
.LP
|
|
There are other ways to break DES authentication,
|
|
but they are much more difficult.
|
|
These methods involve breaking the DES key itself,
|
|
or computing the logarithm of the public key,
|
|
both of which would would take months of compute time on a supercomputer.
|
|
But it is important to keep our goals in mind.
|
|
Sun did not aim for super-secure network computing.
|
|
What we wanted was something as secure as a good time-sharing system,
|
|
and in that we have been successful.
|
|
.LP
|
|
There is another security issue that DES authentication does not address,
|
|
and that is tapping of the net.
|
|
Even with DES authentication in place,
|
|
there is no protection against somebody watching what goes across the net.
|
|
This is not a big problem for most things,
|
|
such as the NFS, since very few files are not publically readable, and besides,
|
|
trying to make sense of all the bits flying over the net is not a trivial task.
|
|
For logins, this is a bit of a problem because you wouldn't
|
|
want somebody to pick up your password over the net.
|
|
As we mentioned before,
|
|
a side effect of the authentication system is a key exchange,
|
|
so that the network tapping problem can be tackled on a per-application basis.
|
|
.#
|
|
.NH 1
|
|
\&Performance
|
|
.IX "performance of DES authentication"
|
|
.IX "authentication" "performance"
|
|
.LP
|
|
Public key systems are known to be slow,
|
|
but there is not much actual public key encryption going on in Sun's system.
|
|
Public key encryption only occurs in the first transaction with a service,
|
|
and even then, there is caching that speeds things up considerably.
|
|
The first time a client program contacts a server,
|
|
both it and the server will have to calculate the common key.
|
|
The time it takes to compute the common key is basically the time it takes
|
|
to compute an exponential modulo $M$.
|
|
On a Sun-3 using a 192-bit modulus, this takes roughly 1 second,
|
|
which means it takes 2 seconds just to get things started,
|
|
since both client and server have to perform this operation.
|
|
This is a long time,
|
|
but you have to wait only the first time you contact a machine.
|
|
Since the keyserver caches the results of previous computations,
|
|
it does not have to recompute the exponential every time.
|
|
.LP
|
|
The most important service in terms of performance is the secure NFS,
|
|
which is acceptably fast.
|
|
The extra overhead that DES authentication requires versus UNIX authentication
|
|
is the encryption.
|
|
A timestamp is a 64-bit quantity,
|
|
which also happens to be the DES block size.
|
|
Four encryption operations take place in an average RPC transaction:
|
|
the client encrypts the request timestamp, the server decrypts it,
|
|
the server encrypts the reply timestamp, and the client decrypts it.
|
|
On a Sun-3, the time it takes to encrypt one block is about
|
|
half a millisecond if performed by hardware,
|
|
and 1.2 milliseconds if performed by software.
|
|
So, the extra time added to the round trip time is about
|
|
2 milliseconds for hardware encryption and 5 for software.
|
|
The round trip time for the average NFS request is about 20 milliseconds,
|
|
resulting in a performance hit of 10 percent if one has encryption hardware,
|
|
and 25 percent if not.
|
|
Remember that this is the impact on network performance.
|
|
The fact is that not all file operations go over the wire,
|
|
so the impact on total system performance will actually be lower than this.
|
|
It is also important to remember that security is optional,
|
|
so environments that require higher performance can turn it off.
|
|
.#
|
|
.NH 1
|
|
\&Problems with Booting and \&\fBsetuid\fP Programs
|
|
.IX "problems with booting and \&\fIsetuid\fP programs"
|
|
.IX "booting and \&\fIsetuid\fP problems"
|
|
.LP
|
|
Consider the problem of a machine rebooting,
|
|
say after a power failure at some strange hour when nobody is around.
|
|
All of the secret keys that were stored get wiped out,
|
|
and now no process will be able to access secure network services,
|
|
such as mounting an NFS filesystem.
|
|
The important processes at this time are usually root processes,
|
|
so things would work OK if root's secret key were stored away,
|
|
but nobody is around to type the password that decrypts it.
|
|
The solution to this problem is to store root's decrypted secret key in a file,
|
|
which the keyserver can read.
|
|
This works well for diskful machines that can store the secret key
|
|
on a physically secure local disk,
|
|
but not so well for diskless machines,
|
|
whose secret key must be stored across the network.
|
|
If you tap the net when a diskless machine is booting,
|
|
you will find the decrypted key.
|
|
This is not very easy to accomplish, though.
|
|
.LP
|
|
Another booting problem is the single-user boot.
|
|
There is a mode of booting known as single-user mode, where a
|
|
.I root
|
|
login shell appears on the console.
|
|
The problem here is that a password is not required for this.
|
|
With C2 security installed,
|
|
a password is required in order to boot single-user.
|
|
Without C2 security installed,
|
|
machines can still be booted single-user without a password,
|
|
as long as the entry for
|
|
.I console
|
|
in the
|
|
.I /etc/ttytab
|
|
.IX "etc/ttytab" "" "\&\fI/etc/ttytab\fP"
|
|
file is labeled as physically
|
|
.I secure
|
|
(this is the default).
|
|
.LP
|
|
Yet another problem is that diskless machine booting is not totally secure.
|
|
It is possible for somebody to impersonate the boot-server,
|
|
and boot a devious kernel that, for example,
|
|
makes a record of your secret key on a remote machine.
|
|
The problem is that our system is set up to provide protection
|
|
only after the kernel and the keyserver are running.
|
|
Before that, there is no way to authenticate
|
|
the replies given by the boot server.
|
|
We don't consider this a serious problem,
|
|
because it is highly unlikely that somebody would be able to write
|
|
this funny kernel without source code.
|
|
Also, the crime is not without evidence.
|
|
If you polled the net for boot-servers,
|
|
you would discover the devious boot-server's location.
|
|
.LP
|
|
Not all
|
|
.I setuid
|
|
programs will behave as they should.
|
|
For example, if a
|
|
.I setuid
|
|
program is owned by
|
|
.I dave ,
|
|
who has not logged into the machine since it booted,
|
|
then the program will not be able to access any secure network services as
|
|
.I dave .
|
|
The good news is that most
|
|
.I setuid
|
|
programs are owned by root,
|
|
and since root's secret key is always stored at boot time,
|
|
these programs will behave as they always have.
|
|
.#
|
|
.NH 1
|
|
\&Conclusion
|
|
.IX "network security" "summary"
|
|
.LP
|
|
Our goal was to build a system as secure as a time-shared system.
|
|
This goal has been met.
|
|
The way you are authenticated in a time-sharing system
|
|
is by knowing your password.
|
|
With DES authentication, the same is true.
|
|
In time-sharing the person you trust is your system administrator,
|
|
who has an ethical obligation
|
|
not to change your password in order to impersonate you.
|
|
In Sun's system, you trust your network administrator,
|
|
who does not alter your entry in the public key database.
|
|
In one sense, our system is even more secure than time-sharing,
|
|
because it is useless to place a tap on the network
|
|
in hopes of catching a password or encryption key,
|
|
since these are encrypted.
|
|
Most time-sharing environments do not encrypt data emanating from the terminal;
|
|
users must trust that nobody is tapping their terminal lines.
|
|
.LP
|
|
DES authentication is perhaps not the ultimate authentication system.
|
|
In the future it is likely there will be sufficient advances
|
|
in algorithms and hardware to render the public key system
|
|
as we have defined it useless.
|
|
But at least DES authentication offers a smooth migration path for the future.
|
|
Syntactically speaking,
|
|
nothing in the protocol requires the encryption of the conversation
|
|
key to be Diffie-Hellman, or even public key encryption in general.
|
|
To make the authentication stronger in the future,
|
|
all that needs to be done is to strengthen the way
|
|
the conversation key is encrypted.
|
|
Semantically, this will be a different protocol,
|
|
but the beauty of RPC is that it can be plugged in
|
|
and live peacefully with any authentication system.
|
|
.LP
|
|
For the present at least, DES authentication satisfies our requirements
|
|
for a secure networking environment.
|
|
From it we built a system secure enough for use in unfriendly networks,
|
|
such as a student-run university workstation environment.
|
|
The price for this security is not high.
|
|
Nobody has to carry around a magnetic card or remember
|
|
any hundred digit numbers.
|
|
You use your login password to authenticate yourself, just as before.
|
|
There is a small impact on performance,
|
|
but if this worries you and you have a friendly net,
|
|
you can turn authentication off.
|
|
.#
|
|
.NH 1
|
|
\&References
|
|
.IX "references on network security"
|
|
.LP
|
|
Diffie and Hellman, ``New Directions in Cryptography,''
|
|
\fIIEEE Transactions on Information Theory IT-22,\fP
|
|
November 1976.
|
|
.LP
|
|
Gusella & Zatti, ``TEMPO: A Network Time Controller
|
|
for a Distributed Berkeley UNIX System,''
|
|
\fIUSENIX 1984 Summer Conference Proceedings,\fP
|
|
June 1984.
|
|
.LP
|
|
National Bureau of Standards, ``Data Encryption Standard,''
|
|
\fIFederal Information Processing Standards Publication 46,\fP
|
|
January 15, 1977.
|
|
.LP
|
|
Needham & Schroeder, ``Using Encryption for Authentication
|
|
in Large Networks of Computers,''
|
|
\fIXerox Corporation CSL-78-4,\fP
|
|
September 1978.
|
|
.EQ
|
|
delim off
|
|
.EN
|
|
.IX "security" "of networks" "" "" PAGE END
|
|
.IX "network security" "" "" "" PAGE END
|
|
.IX "NFS security" "" "" "" PAGE END
|