Annotation of 43BSDReno/share/doc/smm/17.security/security.ms, revision 1.1.1.1

1.1       root        1: .\"    @(#)security.ms 5.2 (Berkeley) 5/14/86
                      2: .\"
                      3: .EH 'SMM:17-%''On the Security of \s-2UNIX\s+2'
                      4: .OH 'On the Security of \s-2UNIX\s+2''SMM:17-%'
                      5: .ND June 10, 1977
                      6: .TL
                      7: On the Security of UNIX
                      8: .AU
                      9: Dennis M. Ritchie
                     10: .AI
                     11: .MH
                     12: .PP
                     13: Recently there has been much interest in the security
                     14: aspects of operating systems and software.
                     15: At issue is the ability
                     16: to prevent undesired
                     17: disclosure of information, destruction of information,
                     18: and harm to the functioning of the system.
                     19: This paper discusses the degree of security which can be provided
                     20: under the
                     21: .UX
                     22: system and offers a number of hints
                     23: on how to improve security.
                     24: .PP
                     25: The first fact to face is that
                     26: .UX
                     27: was not developed with
                     28: security, in any realistic sense, in mind;
                     29: this fact alone guarantees a vast number of holes.
                     30: (Actually the same statement can be made with respect
                     31: to most systems.)
                     32: The area of security in which
                     33: .UX
                     34: is theoretically weakest is
                     35: in protecting against crashing or at least crippling
                     36: the operation of the system.
                     37: The problem here is not mainly in uncritical
                     38: acceptance of bad parameters to system calls\(em
                     39: there may be bugs in this area, but none are known\(em
                     40: but rather in lack of checks for excessive
                     41: consumption of resources.
                     42: Most notably, there is no limit on the amount of disk
                     43: storage used, either in total space allocated or in
                     44: the number of files or directories.
                     45: Here is a particularly ghastly shell sequence guaranteed
                     46: to stop the system:
                     47: .DS
                     48: while : ; do
                     49:        mkdir x
                     50:        cd x
                     51: done
                     52: .DE
                     53: Either a panic will occur because all the i-nodes
                     54: on the device are used up, or all the disk blocks will
                     55: be consumed, thus preventing anyone from writing files
                     56: on the device.
                     57: .PP
                     58: In this version of the system,
                     59: users are prevented from creating more than
                     60: a set number of processes simultaneously,
                     61: so unless users are in collusion it is unlikely that any one
                     62: can stop the system altogether.
                     63: However, creation of 20 or so CPU or disk-bound jobs
                     64: leaves few resources available for others.
                     65: Also, if many large jobs are run simultaneously,
                     66: swap space may run out, causing a panic.
                     67: .PP
                     68: It should be evident that excessive consumption of disk
                     69: space, files, swap space, and processes can easily occur
                     70: accidentally in malfunctioning programs
                     71: as well as at command level.
                     72: In fact
                     73: .UX
                     74: is essentially defenseless against this kind of
                     75: abuse,
                     76: nor is there any easy fix.
                     77: The best that can be said is that it is generally
                     78: fairly
                     79: easy to detect what has happened when disaster
                     80: strikes,
                     81: to identify the user responsible,
                     82: and take appropriate action.
                     83: In practice,
                     84: we have found that difficulties
                     85: in this area are rather rare,
                     86: but we have not been faced with malicious users,
                     87: and enjoy a fairly generous supply of
                     88: resources which have served to cushion us against
                     89: accidental overconsumption.
                     90: .PP
                     91: The picture is considerably brighter
                     92: in the area of protection of information
                     93: from unauthorized perusal and destruction.
                     94: Here the degree of security seems (almost)
                     95: adequate theoretically, and the problems lie
                     96: more in the necessity for care in the actual use of
                     97: the system.
                     98: .PP
                     99: Each
                    100: .UX
                    101: file has associated with it
                    102: eleven bits of protection information
                    103: together with a user identification number and a user-group
                    104: identification number
                    105: (UID and GID).
                    106: Nine of the protection bits
                    107: are used to specify independently
                    108: permission to read, to write, and to execute the file
                    109: to the user himself, to members of the user's
                    110: group, and to all other users.
                    111: Each process generated
                    112: by or for a user has associated with
                    113: it an effective UID and a real UID, and an effective and real GID.
                    114: When an attempt is made
                    115: to access the file for reading, writing, or execution,
                    116: the user process's effective UID is compared
                    117: against the file's UID; if a match is obtained,
                    118: access is granted provided the read, write, or execute
                    119: bit respectively for the user himself is
                    120: present.
                    121: If the UID for the file and for the process fail to match,
                    122: but the GID's do match, the group bits are used; if the GID's
                    123: do not match, the bits for other users are tested.
                    124: The last two bits of each file's protection information,
                    125: called the set-UID and set-GID bits,
                    126: are used only when the
                    127: file is executed as a program.
                    128: If, in this case, the set-UID bit is on for the file,
                    129: the effective UID for the process is changed to the UID
                    130: associated with the file; the change persists
                    131: until the process terminates or until the UID
                    132: changed again by another execution of a set-UID file.
                    133: Similarly the effective group ID of a process is changed
                    134: to the GID associated with a file
                    135: when that file is executed and has the set-GID bit set.
                    136: The real UID and GID of a process do not change
                    137: when any file is executed,
                    138: but only as the result of a privileged system
                    139: call.
                    140: .PP
                    141: The basic notion of the set-UID and set-GID
                    142: bits is that one may write a program which is executable
                    143: by others and which maintains files accessible to others only
                    144: by that program.
                    145: The classical example is the game-playing program which
                    146: maintains records of the scores of its players.
                    147: The program itself has to read and write the score file,
                    148: but
                    149: no one but the game's sponsor can be allowed
                    150: unrestricted access to the file lest they manipulate
                    151: the game to their own advantage.
                    152: The solution is to
                    153: turn on the set-UID bit of the
                    154: game
                    155: program.
                    156: When, and only when, it is invoked
                    157: by players of the game, it may update the score file
                    158: but ordinary programs executed by others cannot
                    159: access the score.
                    160: .PP
                    161: There are a number of special cases involved
                    162: in determining access permissions.
                    163: Since executing a directory as a program is a meaningless
                    164: operation, the execute-permission
                    165: bit, for directories, is taken instead to mean
                    166: permission to search the directory for a given file
                    167: during the scanning of a path name;
                    168: thus if a directory has execute permission but no read
                    169: permission for a given user, he may access files
                    170: with known names in the directory,
                    171: but may not read (list) the entire contents of the
                    172: directory.
                    173: Write permission on a directory is interpreted to
                    174: mean that the user may create and delete
                    175: files in that directory;
                    176: it is impossible
                    177: for any user to write directly into any directory.
                    178: .PP
                    179: Another, and from the point of view of security, much
                    180: more serious special case is that there is a ``super user''
                    181: who is able to read any file and write any non-directory.
                    182: The super-user is also able to change the protection
                    183: mode and the owner UID and GID of any file
                    184: and to invoke privileged system calls.
                    185: It must be recognized that the mere notion of
                    186: a super-user is a theoretical, and usually
                    187: practical, blemish on any protection scheme.
                    188: .PP
                    189: The first necessity for a secure system
                    190: is of course arranging that all files and directories
                    191: have the proper protection modes.
                    192: Traditionally,
                    193: .UX
                    194: software has been exceedingly
                    195: permissive in this regard;
                    196: essentially all commands create files
                    197: readable and writable by everyone.
                    198: In the current version,
                    199: this policy may be easily adjusted to suit the needs of
                    200: the installation or the individual user.
                    201: Associated with each process and its descendants
                    202: is a mask, which is in effect
                    203: .I and\fR\|-ed
                    204: with the mode of every file and directory created by
                    205: that process.
                    206: In this way, users can arrange that, by default,
                    207: all their files are no more accessible than they wish.
                    208: The standard mask, set by
                    209: .I login,
                    210: allows all permissions to the user himself and to his group,
                    211: but disallows writing by others.
                    212: .PP
                    213: To maintain both data privacy and
                    214: data integrity,
                    215: it is necessary, and largely sufficient,
                    216: to make one's files inaccessible to others.
                    217: The lack of sufficiency could follow
                    218: from the existence of set-UID programs
                    219: created by the user
                    220: and the possibility of total
                    221: breach of system security
                    222: in one of the ways discussed below
                    223: (or one of the ways not discussed below).
                    224: For greater protection,
                    225: an encryption scheme is available.
                    226: Since the editor is able to create encrypted
                    227: documents, and the
                    228: .I crypt
                    229: command can be used to pipe such documents into
                    230: the other text-processing programs,
                    231: the length of time during which cleartext versions
                    232: need be available is strictly limited.
                    233: The encryption scheme used is not one of the strongest
                    234: known, but it is judged adequate, in the sense that
                    235: cryptanalysis
                    236: is likely to require considerably more effort than more direct
                    237: methods of reading the encrypted files.
                    238: For example, a user who stores data that he regards as truly secret
                    239: should be aware that he is implicitly trusting the system
                    240: administrator not to install a version of the crypt command
                    241: that stores every typed password in a file.
                    242: .PP
                    243: Needless to say, the system administrators
                    244: must be at least as careful as their most
                    245: demanding user to place the correct
                    246: protection mode on the files under their
                    247: control.
                    248: In particular,
                    249: it is necessary that special files be protected
                    250: from writing, and probably reading, by ordinary
                    251: users when
                    252: they store sensitive files belonging to other
                    253: users.
                    254: It is easy to write programs that examine and change
                    255: files by accessing the device
                    256: on which the files live.
                    257: .PP
                    258: On the issue of password security,
                    259: .UX
                    260: is probably better than most systems.
                    261: Passwords are stored in an encrypted form
                    262: which, in the absence of serious attention
                    263: from specialists in the field,
                    264: appears reasonably secure,
                    265: provided its limitations are understood.
                    266: In the current version, it is based on a slightly
                    267: defective version of the Federal DES;
                    268: it is purposely defective so that
                    269: easily-available hardware is useless for attempts at exhaustive
                    270: key-search.
                    271: Since both the encryption algorithm and the encrypted passwords
                    272: are available,
                    273: exhaustive enumeration of potential passwords
                    274: is still feasible up to a point.
                    275: We have observed that users choose passwords that are easy to guess:
                    276: they are short, or from a limited alphabet, or
                    277: in a dictionary.
                    278: Passwords should be
                    279: at least six characters long and randomly chosen from an alphabet
                    280: which includes digits and special characters.
                    281: .PP
                    282: Of course there also exist
                    283: feasible non-cryptanalytic
                    284: ways of finding out passwords.
                    285: For example: write a program which types out ``login:\|''
                    286: on the typewriter and copies whatever is typed
                    287: to a file of your own.
                    288: Then invoke the command and go away until the victim arrives.
                    289: .PP
                    290: The set-UID (set-GID)
                    291: notion must be used carefully if any security is to be maintained.
                    292: The first thing to keep in mind is that
                    293: a writable set-UID file can have another program copied onto it.
                    294: For example, if the super-user
                    295: .I (su)
                    296: command is writable,
                    297: anyone can copy the shell
                    298: onto it and get a password-free version
                    299: of
                    300: .I su.
                    301: A more subtle problem
                    302: can come from
                    303: set-UID programs which are not sufficiently
                    304: careful of what is fed into them.
                    305: To take an obsolete example,
                    306: the previous version of the
                    307: .I mail
                    308: command was set-UID and owned by the super-user.
                    309: This version sent mail to the recipient's own directory.
                    310: The notion was that one should be able to send
                    311: mail to anyone even if they want to protect
                    312: their directories from writing.
                    313: The trouble was that
                    314: .I mail
                    315: was rather dumb:
                    316: anyone could mail someone else's private file to himself.
                    317: Much more serious
                    318: is the following scenario:
                    319: make a file with a line like one in the password file
                    320: which allows one to log in as the super-user.
                    321: Then make a link named ``.mail'' to the password file
                    322: in some writable
                    323: directory on the same device as the password file (say /tmp).
                    324: Finally mail the bogus login line to /tmp/.mail;
                    325: You can then login as the super-user,
                    326: clean up the incriminating evidence,
                    327: and have your will.
                    328: .PP
                    329: The fact that users can mount their own disks and tapes
                    330: as file systems
                    331: can be another way of gaining super-user status.
                    332: Once a disk pack is mounted, the system believes
                    333: what is on it.
                    334: Thus one can take a blank disk pack,
                    335: put on it anything desired,
                    336: and mount it.
                    337: There are obvious and unfortunate consequences.
                    338: For example:
                    339: a mounted disk with garbage on it will crash the
                    340: system;
                    341: one of the files on the mounted disk can easily be
                    342: a password-free version of
                    343: .I su;
                    344: other files can be unprotected entries for special files.
                    345: The only easy fix for this problem is to
                    346: forbid the use of
                    347: .I mount
                    348: to unprivileged users.
                    349: A partial solution, not so restrictive,
                    350: would be to have the
                    351: .I mount
                    352: command examine the special file for bad data,
                    353: set-UID programs owned by others, and accessible
                    354: special files,
                    355: and balk at unprivileged invokers.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.