home *** CD-ROM | disk | FTP | other *** search
Text File | 2003-06-11 | 103.0 KB | 2,697 lines |
-
-
-
-
-
-
- A Practical Exercise in
-
-
- Securing an OpenVMS System
-
-
-
-
-
-
-
-
-
-
-
- Rob McMillan
- Prentice Centre
- The University Of Queensland
-
-
-
-
-
- Now at Griffith University
- E-Mail: R.McMillan@itc.gu.edu.au
- Phone: 07 875 6557
- Postal: Information Technology Services
- Griffith University
- Nathan Qld 4111
-
-
-
-
-
-
-
- A Practical Exercise In Securing An OpenVMS System
-
-
-
-
-
-
- Abstract
-
-
- _________________________________________________________
-
- OpenVMS machines have many features that can be used to
- defend them from attack. To properly defend your
- machine, you need to make use of these features from the
- moment of delivery.
-
- In this paper, I present the series of steps taken by a
- typical systems programmer (namely the author) in tuning
- the defense mechanisms of an OpenVMS machine, and
- outline some non-standard mechanisms employed in the
- defence of this machine.
-
- All too often, emphasis is placed on particular accents,
- such as access prevention, or reactive examination and
- monitoring after attack. This paper attempts a more
- holistic approach to the host-based mechanisms that
- could be employed to defend a machine. Access control
- mechanisms (such as passwords, user authorisation
- parameters, and access control wrappers) and activity
- logging mechanisms (such as audit trails, terminal
- monitors and FAL logging) are considered.
- _________________________________________________________
-
-
-
-
-
-
-
-
- The information contained in this paper is given freely
- as an account of my own experience, and may be used by
- the reader as the reader sees fit.
-
- No responsibility or liability will be accepted by the
- author for any damages caused by direct or indirect use
- of the information or functionality described in this
- paper.
-
-
-
-
-
-
- Introduction
-
-
-
- 1.1 Assumptions
-
- This paper will discuss some of the features that can be
- used to defend an OpenVMS machine from outside attack.
- The ideas presented in this paper are the result of an
- exercise in configuring a machine in a university
- department used for a sensitive research project.
-
- All of the mechanisms I consider in this paper can be
- classed as host based mechanisms. However, the defence
- of an computer system is not limited to these measures
- only.
-
- Measures that should be used, but that I don't discuss
- in this paper are:
-
- * network based security,
- * backups, and
- * physical security.
-
- This paper is not intended to present an "expert's view"
- of securing an OpenVMS machine. The reason for this is
- simple - whilst my knowledge of OpenVMS security is
- quite solid, I would not put myself in the "expert"
- category. Therefore this paper should not be seen as the
- canonical guide to OpenVMS security - rather, it should
- be seen as the series of measures that programmers
- should typically consider in defending their machine.
- There is absolutely no substitute for reading the Guide
- to VAX/VMS System Security manual.
-
- Finally, this paper is concerned with the defence of a
- machine. I do not personally make any attempt to crack
- machines. I will not present any information on how to
- crack an OpenVMS machine.
-
-
-
- 1.2 What This Paper Contains
-
- The following topics are those considered during the
- configuration of the machine referred to above. This
- list is not exhaustive.
-
- * System Mechanisms For Configuring The Machine To
- Control Access :
-
- * SYS$MANAGER Command Files
- * Welcome Messages
- * Accounts To Disable, Passwords To Change, And
- Objects To Modify
- * System Logicals And Logical Definitions
- * System Passwords
- * The UAF File
- * File Protections
- * ACLs
- * Tailoring UCX
- * Proxies
-
- * System Mechanisms For Configuring The Machine To Log
- Activity :
-
- * Accounting
- * Auditing
- * FAL and Poor Man's Routing
-
- * Using Homegrown Or Publicly Available Software :
-
- * Wrappers
- * Single Use PINs
- * Terminal Monitors
-
- * Monitoring The Use of The Machine :
-
- * The SHOW INTRUSION Command
- * Daily Activities
- * Having a Live Console
-
-
-
-
-
-
-
- System Mechanisms For Configuring
- The Machine To Control Access
-
-
-
- 2.1 SYS$MANAGER Command Files
-
- There are three files in SYS$MANAGER: that are of
- importance in terms of this paper. They are
- SYSTARTUP_V5.COM, SYLOGIN.COM and SYLOGICALS.COM. I have
- left comments about SYLOGICALS.COM for Section 2.4,
- System Logicals And Logical Definitions.
-
-
-
- 2.1.1 SYSTARTUP_V5.COM
-
- There are several different things to be done here.
-
- As discussed in Section 2.5, System Passwords, a system
- password should be installed. A system password means
- that the user must enter a password before the login
- prompt appears. The procedure for doing this is
- discussed in Section 2.5. However, this is the change
- you could make in SYSTARTUP_V5.COM to ensure that a
- console user does not need to enter the password. (The
- console should be located in a physically secure area.)
-
- $! No system password required for console.
- $ write sys$output "[Modifying console settings]"
- $ SET TERMINAL OPA0: /PERMANENT /NOSYSPASSWORD
-
- This ensures that should the user log in from the
- console, a system password will not be required. This
- prevents situations where you are locked out from the
- machine should the password be changed or forgotten.
-
- $! The following commands turn off account logging and
- $! delete the account log.
- $! To keep an account log on your system, delete the
- $! following 5 command lines.
- $!
- $! IF (.NOT. MICROVAX) THEN GOTO SKIP_ACCOUNTING
- $! SET ACCOUNTING/DISABLE
- $! IF F$SEARCH("SYS$MANAGER:ACCOUNTNG.DAT") .NES. "" THEN -
- $! DELETE SYS$MANAGER:ACCOUNTNG.DAT;*
- $!SKIP_ACCOUNTING:
-
- When the operating system is installed, this code is not
- commented out. That is, account logging is not enabled
- by default. It is good practice to use all logging
- facilities available to you, and system accounting is
- one of those facilities that is strongly recommended.
-
- You need accounting to provide an extra audit trail on
- the system. To enable accounting, comment out these
- lines, as shown on the following page.
-
- $! The following commands purge the operator and network
- $! logs to two versions.
- $!
- $! IF (.NOT. MICROVAX) THEN GOTO SKIP_PURGING
- $! IF F$SEARCH("SYS$MANAGER:OPERATOR.LOG;-1") .NES. "" THEN -
- $! PURGE SYS$MANAGER:OPERATOR.LOG
- $! IF F$SEARCH("SYS$MANAGER:EVL.LOG;-1") .NES. "" THEN -
- $! PURGE SYS$MANAGER:EVL.LOG
- $!SKIP_PURGING:
-
- Here the machine is trying to make a guess about how
- much information should be saved as current information
- (the tradeoff being information currency and usefulness
- against disk space). A more reasonable figure is 10
- versions (working on the basis of a new file per day).
- To implement this, do the following:
-
- * Comment out the lines above.
-
- * Create artificial OPERATOR.LOG and EVL.LOG files,
- each 1 version higher than the logs currently open
- and in use by the system.
-
- * Issue SET FILE OPERATOR.LOG /VERSION_LIMIT=10 and
- SET FILE EVL.LOG /VERSION_LIMIT=10. This is done
- against the files just created, as the SET FILE
- command will fail against the logs open and in use
- by the system. When new files are opened for use
- by the system, they will be created with a version
- number of one higher than the logs created
- artificially, but will inherit the version limit.
-
- $! This command defines a message to be displayed before
- $! each user logs in.
- $!
- $! DEFINE /SYSTEM SYS$ANNOUNCE " Welcome to VAX/VMS ''F$GETSYI("VERSION")'"
- $ DEFINE /SYSTEM SYS$ANNOUNCE "@SYS$MANAGER:ANNOUNCE.TXT"
- $!
- $! This command defines a message or file to be
- $! displayed after each user logs in.
- $!
- $ DEFINE /SYSTEM SYS$WELCOME "@SYS$MANAGER:WELCOME.TXT"
- $!
-
- For legal reasons, as set out in SERT Advisory SA-93.03
- (See Appendix 1, SERT Advisory SA-93.03, Suggested Login
- Banner) give people fair warning of the consequences of
- misuse. The contents of the files ANNOUNCE.TXT and
- WELCOME.TXT are discussed in Section 2.2, Welcome
- Messages. To make these files appear, the definitions
- above are used.
-
-
-
-
- 2.1.2 SYLOGIN.COM
-
- SYLOGIN.COM is a command file executed when any user
- logs in. This is the ideal place to install mechanisms
- to universally check a user's credentials (such as
- username, source of login, time, terminal or knowledge-
- based authenticators).
-
- The first three lines of SYLOGIN.COM should be as
- follows (but aren't in the supplied file).
-
- $ SET NOON
- $ SET NOCONTROL_Y
- $ SET NOVERIFY
-
-
- This prevents a user (and hence crackers in the first
- instance) from seeing what mechanisms you have
- installed, and also interrupting the execution of this
- file to avoid these mechanisms.
-
- $! Place your site-specific LOGIN commands below
- $!
- $! If they get this far, then there may have been a breakin,
- $! but at least we can stop them at this point.
- $! Call the wrapper.
- $!
- $ @LOCAL$WRAP:INTERACTIVE.COM
- $ IF ($Status .NE. %x10000001)
- $ THEN
- $ STOP/ID=0
- $ ENDIF
-
- As the comments outline, we use a command procedure at
- this point to check credentials. This may or may not
- involve interactive exchanges. If the person logging in
- fails to pass the tests, then they are logged out. (You
- will need to define LOCAL$WRAP, for example, in
- SYLOGICALS.COM.)
-
-
-
-
-
-
- 2.2 Welcome Messages
-
- For legal reasons, as set out in SERT Advisory SA-93.03
- (See Appendix 1, SERT Advisory SA-93.03, Suggested Login
- Banner) give people fair warning of the consequences of
- misuse. By default, there is no SYS$WELCOME issued, and
- SYS$ANNOUNCE welcomes the person logging in. SYS$WELCOME
- needs to be enabled, and point to a file, and
- SYS$ANNOUNCE should also point to a file (as shown in
- Section 2.1.1, SYSTARTUP_V5.COM). These files should
- outline to people conditions of use, and legal
- consequences of misuse.
-
- SYS$ANNOUNCE is the message or banner that appears
- immediately before the login prompt (but after the
- system password has been entered). SYS$WELCOME is the
- message or banner that appears immediately after the
- person has logged in. In this way, users should normally
- see this warning before and after logging in.
-
- This message should appear in SYS$MANAGER:ANNOUNCE.TXT:
-
-
-
- ----- Warning Message -----
-
- ***** This service is for authorised staff only *****
-
- *************************************************************************
- * *
- * WARNING: It is a criminal offence to: *
- * i. Obtain access to data without authority *
- * (Penalty 2 years imprisonment) *
- * ii Damage, delete, alter or insert data without authority *
- * (Penalty 10 years imprisonment) *
- * *
- *************************************************************************
-
-
- The following message should appear in
- SYS$MANAGER:WELCOME.TXT.
-
-
- This is {nodename} (VAX/VMS V5.5-2) - Unauthorised access prohibited!
-
- ***** This service is for authorised staff only *****
-
- *************************************************************************
- * *
- * WARNING: It is a criminal offence to: *
- * i. Obtain access to data without authority *
- * (Penalty 2 years imprisonment) *
- * ii Damage, delete, alter or insert data without authority *
- * (Penalty 10 years imprisonment) *
- * *
- *************************************************************************
-
-
-
-
- 2.3 Accounts To Disable, Passwords To Change, And Objects
- To Modify
-
- 2.3.1 Accounts
-
- VMS is supplied with a number of default accounts. It
- should be assumed that crackers will attempt to
- compromise a machine using default account names and
- passwords. This principle applies to any operating
- system.
-
- The following default accounts should have their
- passwords changed, and the accounts disabled: DEFAULT,
- FIELD, MIRRO$SERVER, SYSTEST, SYSTEST_CLIG.
-
- The accounts can be disabled thus:
-
- $ MCR AUTHORIZE
- UAF> MODIFY DEFAULT /FLAGS=DISUSER
- UAF> MODIFY FIELD /FLAGS=DISUSER
- UAF> MODIFY MIRRO$SERVER /FLAGS=DISUSER
- UAF> MODIFY SYSTEST /FLAGS=DISUSER
- UAF> MODIFY SYSTEST_CLIG /FLAGS=DISUSER
- UAF> EXIT
- $
-
- Depending upon how you wish to execute batch jobs and
- carry out general system administration, you may also
- wish to either similarly treat the SYSTEM account, or
- alternative apply strict access controls on this account
- on the UAF file (See Section 2.6, The UAF File).
-
-
-
- 2.3.2 Objects
-
- There are several objects that needed tailoring. Some of
- the tailoring is to prevent simple security breaches,
- whereas others (like the modifications to PHONE, TASK
- and FAL) are to prevent breaches that could occur in
- whole or in part to Poor Man's Routing (See Section 3.3,
- FAL and Poor Man's Routing).
-
- In the first stage, the PHONE and TASK objects are
- disabled.
-
- In the PHONE application, the directory command can be
- used to obtain a directory listing of users on remote
- DECNet nodes. It is essentially a default "finger".
- Whilst security through obscurity is no security at all,
- any access to system details should be suppressed where
- possible.
-
- The TASK object is used to execute jobs on your node
- from remote nodes. Since this is not a desired feature
- on the machine used in the preparation of this paper,
- this object was disabled. Alternatively, the object
- could have been loaded with false information into the
- permanent database.
-
- These objects are created at boot time using default
- information if there is no information about them in the
- NCP permanent database. Therefore, a job can be run
- immediately after booting to remove these objects.
-
- The objects can be removed thus:
-
- $ MCR NCP CLEAR OBJECT PHONE ALL
- $ MCR NCP PURGE OBJECT PHONE ALL
- $ MCR NCP CLEAR OBJECT TASK ALL
- $ MCR NCP PURGE OBJECT TASK ALL
-
- They could alternatively be modified thus:
-
- $ MCR NCP SET OBJECT TASK USER ILLEGAL PASSWORD DISABLED
- $ MCR NCP SET OBJECT TASK PROXY NONE
- $ MCR NCP SET OBJECT TASK ALIAS INCOMING DISABLED
- $ MCR NCP SET OBJECT TASK ALIAS OUTGOING DISABLED
- $ MCR NCP DEFINE OBJECT TASK USER ILLEGAL PASSWORD DISABLED
- $ MCR NCP DEFINE OBJECT TASK PROXY NONE
- $ MCR NCP DEFINE OBJECT TASK ALIAS INCOMING DISABLED
- $ MCR NCP DEFINE OBJECT TASK ALIAS OUTGOING DISABLED
- $ MCR NCP SET OBJECT PHONE USER ILLEGAL PASSWORD DISABLED
- $ MCR NCP SET OBJECT PHONE PROXY NONE
- $ MCR NCP SET OBJECT PHONE ALIAS INCOMING DISABLED
- $ MCR NCP SET OBJECT PHONE ALIAS OUTGOING DISABLED
- $ MCR NCP DEFINE OBJECT PHONE USER ILLEGAL PASSWORD DISABLED
- $ MCR NCP DEFINE OBJECT PHONE PROXY NONE
- $ MCR NCP DEFINE OBJECT PHONE ALIAS INCOMING DISABLED
- $ MCR NCP DEFINE OBJECT PHONE ALIAS OUTGOING DISABLED
-
- In the second stage below, objects are modified so that
- they are still usable, but subject to tighter controls
- than the default.
-
- The simplest change is made to the MIRROR object by
- disabling the MIRRO$SERVER account in the User
- Authorisation File. The MIRROR object should be kept to
- allow loopback testing should it become necessary. The
- account is disabled since it serves no useful purpose
- (other than for loopback testing), and should be
- disabled unless in use.
-
- The MAIL object should be modified thus according to the
- VMS v5.5-2 release notes, Section 2.8.7, to restrict
- outgoing access on the mail server. In v5.5-2, MAIL
- enables system privileges when it opens a DECnet
- connection to a remote mail server. By restricting
- outgoing access on the mail server object (as below),
- unauthorised users are prevented from placing
- connections on the mail server object.
-
- $ MCR NCP SET OBJECT MAIL OUTGOING CONNECT PRIVILEGE SYSPRV
- $ MCR NCP DEFINE OBJECT MAIL OUTGOING CONNECT PRIVILEGE SYSPRV
-
- This can be undone by executing the same commands with
- "NOSYSPRV". MAIL_SERVER.EXE (the executable associated
- with the MAIL object) is installed as a privileged
- image.
-
- Wrappers should also be installed for the FAL and NML
- objects. The executable images for these are, by
- default, normally FAL.EXE and NML.EXE respectively.
- Modify the object database as shown below.
-
- $ MCR NCP SET OBJECT FAL FILE LOCAL$WRAP:FAL.COM
- $ MCR NCP DEFINE OBJECT FAL FILE LOCAL$WRAP:FAL.COM
- $ MCR NCP SET OBJECT NML FILE LOCAL$WRAP:NML.COM
- $ MCR NCP DEFINE OBJECT NML FILE LOCAL$WRAP:NML.COM
-
- The contents of the wrappers are discussed in Section
- 4.1, Wrappers.
-
-
-
-
- 2.4 System Logicals And Logical Definitions
-
- SYS$MANAGER:SYLOGICALS.COM is used to establish
- important site-specific logical names across the entire
- system. You can put meaningful local definitions in here
- as well as the definitions already supplied with the
- delivered system.
-
- $! Undocumented feature to disable poor man's routing
- $ DEFINE /SYSTEM /EXEC FAL$LOG "03/DISABLE=8"
-
- Poor Man's Routing is explained in Section 3.3, FAL and
- Poor Man's Routing.
-
- That section also explains the significance of this
- definition. It's relevance to this section is merely
- that it is centrally defined in SYLOGICALS.COM.
-
- $! Make network server processes die after 10 seconds
- $! (to give separate NETSERVER.LOG files for
- $! each distinct operation)
- $ DEFINE /SYSTEM /EXEC NETSERVER$TIMEOUT "0000 00:00:10"
-
- This forces network server processes to die after 10
- seconds of lying idle, thus creating separate
- NETSERVER.LOG files for each essentially distinct
- operation. The tradeoff for these distinct files is the
- price that must be paid in terms of process creation on
- each network connection.
-
- $! System databases
- $ DEFINE /SYSTEM /EXEC LMF$LICENSE SYS$SYSTEM:LMF$LICENSE.LDB
- $ DEFINE /SYSTEM /EXEC NETNODE_REMOTE SYS$SYSTEM:NETNODE_REMOTE.DAT
- $ DEFINE /SYSTEM /EXEC NETPROXY SYS$SYSTEM:NETPROXY.DAT
- $ DEFINE /SYSTEM /EXEC NETUAF SYS$SYSTEM:NETUAF.DAT
- $ DEFINE /SYSTEM /EXEC RIGHTSLIST SYS$SYSTEM:RIGHTSLIST.DAT
- $ DEFINE /SYSTEM /EXEC SYSUAF SYS$SYSTEM:SYSUAF.DAT
- $ DEFINE /SYSTEM /EXEC VMSMAIL SYS$SYSTEM:VMSMAIL_PROFILE.DAT
-
- If these aren't defined, and a user attempts operations
- on them, new ones can be created by that user. These
- definitions prevent this. Note file protections for
- these files in Section 2.7, File Protections.
-
- Other system-wide logical symbols (such as LOCAL$WRAP)
- would also be defined in this file.
-
-
-
-
- 2.5 System Passwords
-
- VMS systems can have what is called a "system password".
- This is a password that must be typed BEFORE the host
- prompts you for login information. So when you initially
- connect to a system with a "system password", you don't
- get any prompting on the screen. Once you have typed in
- the password, the normal prompt message appears.
-
- The system password will appear or not depending on the
- value of the sysgen parameter TTY_DEFCHAR2. A value of
- %X80000 (i.e. Hex) enables system password. This
- parameter is not dynamic.
-
- The SYSGEN parameter TTY_DEFCHAR2 (bit represented by
- %X80000) enables system password by default for all
- terminals (including LAT, X.25 and telnet terminals).
-
- The default value for TTY_DEFCHAR2 is 4098 (decimal):
-
- $ RUN SYS$SYSTEM:SYSGEN
- SYSGEN> USE DEFAULT
- SYSGEN> SHO TTY_DEFCHAR2
- Parameter Name Current Default Min. Max. Unit Dynamic
- -------------- ------- ------- ------ ------ ---- -------
- TTY_DEFCHAR2 4098 4098 0 -1 Bit-Encode
-
-
- The correct value can be set by modifying
- SYS$SYSTEM:MODPARAMS.DAT, and AUTOGENing the system. The
- required value in MODPARAMS.DAT is set by adding the
- following lines (amongst other values):
-
- TTY_DEFCHAR2 = %X80000 + %X1000 + %X2 ! = 528386
- ! %X80000 (bit 19) TT2$M_SYSPWD System password
- ! %X1000 (bit 12) TT2$M_EDITING Cmd line editing
- ! %X2 (bit 1) TT2$M_AUTOBAUD Autobaud
-
- The actual system password can be set either by DCL or
- by AUTHORIZE.
-
- $ SET PASSWORD /SYSTEM
-
- or else by
-
- $ RUN SYS$SYSTEM:AUTHORIZE
- UAF> MODIFY /SYSTEM_PASSWORD={password}
-
- Terminals can be set /NOSYSPWD /PERM or /SYSPWD. See
- Section 2.1.1 SYSTARTUP_V5.COM for an example.
-
-
- 2.6 The UAF File
-
- This is an extremely useful file for tuning security on
- an OpenVMS machine. The UAF file (and associated files)
- allow you to control access to the system and allocate
- resources to users.
-
- For the purposes of this paper, there are several fields
- worth considering. Specifically, the ones that can be
- used include (but are not restricted to) access control
- fields, password control fields and the rights list.
-
- On the particular machine used in the preparation of
- this paper, there are several accounts that are used for
- specific purposes, and should be used only within
- specific time frames. For instance, consider an account
- (the "USER1" account for the purposes of this example)
- which should only be used interactively during the hours
- of 8am to 7pm on primary days (Monday to Friday), but
- can run batch jobs at any time on any day. All other
- access is to be denied.
-
- This is achieved by the following commands:
-
- $ RUN SYS$SYSTEM:AUTHORIZE
- UAF> MODIFY USER1 /NONETWORK /NODIALUP -
- /LOCAL=(PRIMARY:8-18) /REMOTE=(PRIMARY:8-18)
-
-
- This results in an access control matrix like the one
- below.
-
- Primary days: Mon Tue Wed Thu Fri
- Secondary days: Sat Sun
- Primary 000000000011111111112222 Secondary 00000000001111111111222
- Day Hours 012345678901234567890123 Day Hours 012345678901234567890123
- Network: ----- No access ------ ----- No access ------
- Batch: ##### Full access ###### ##### Full access######
- Local: --------###########----- ----- No access ------
- Dialup: ----- No access ------ ----- No access ------
- Remote: --------###########----- ----- No access ------
-
-
- Full access can be restored using:
-
- $ RUN SYS$SYSTEM:AUTHORIZE
- UAF> MODIFY USER1 /ACCESS=(PRIMARY:0-24,SECONDARY:0-24)
-
- Passwords are historically a weak point in computer
- systems. A weak password on a single account leaves the
- entire system vulnerable to attack. (See Appendix 2,
- SERT Advisory SA-93.04, Guidelines For Developing A
- Sensible Password Policy.)
-
- You must therefore ensure that all accounts have a
- minimum password length of 8 characters, and that they
- expire at regular intervals. In addition, privileged
- accounts should have password lengths greater than that,
- and passwords should be set using the MODIFY
- {accountname} /GENERATE_PASSWORD command.
-
- The other important use of the AUTHORIZE utility is
- creating rights list identifiers and using these in
- conjunction with ACLs to control access to files and
- devices at individual levels.
-
- For instance, on the machine used while preparing this
- paper, there is a particular device and a directory that
- should only ever be accessed by a small group of people.
- This device is used for a research project, and the
- results are kept in the directory. The entire group of
- people involved with the experiment needed to read the
- results (kept in the DISKE:[EXPERIMENT1] directory),
- whereas only a few people needed write access to this
- directory. Furthermore, because they were all in the
- same project team, they were all allocated the same
- group number. Finally, there was a restricted number of
- people in this group who were authorised to access the
- device used in the experiment in question.
-
- The first step in controlling this is to create various
- rights list identifiers, and granting them to people who
- should access them. The rights list identifiers are
- created as follows:
-
- $ RUN SYS$SYSTEM:AUTHORIZE
- UAF> ADD /IDENTIFIER EXP1_READ
- UAF> ADD /IDENTIFIER EXP1_WRITE
- UAF> ADD /IDENTIFIER EXP1_CONTROL
- UAF> EXIT
-
-
- Users 1..10 are allowed read access to the results;
- users 5, 6 and 7 are allowed write access and users 6
- and 7 are allowed to control the transducer.
-
- $ RUN SYS$SYSTEM:AUTHORIZE
- UAF> GRANT /IDENTIFIER EXP1_READ USER1
- UAF> GRANT /IDENTIFIER EXP1_READ USER2
- UAF> GRANT /IDENTIFIER EXP1_READ USER3
- UAF> GRANT /IDENTIFIER EXP1_READ USER4
- UAF> GRANT /IDENTIFIER EXP1_READ USER8
- UAF> GRANT /IDENTIFIER EXP1_READ USER9
- UAF> GRANT /IDENTIFIER EXP1_READ USER10
- UAF> GRANT /IDENTIFIER EXP1_WRITE USER5
- UAF> GRANT /IDENTIFIER EXP1_WRITE USER6
- UAF> GRANT /IDENTIFIER EXP1_WRITE USER7
- UAF> GRANT /IDENTIFIER EXP1_CONTROL USER6
- UAF> GRANT /IDENTIFIER EXP1_CONTROL USER7
- UAF> EXIT
- $
-
- ACLs and protection are then set on the device and
- directory as set out in Section 2.8, ACLs.
-
- Finally, great care has been taken in the allocation of
- privileges to individual user accounts. In particular,
- the default privileges must be kept to the minimum
- required.
-
-
-
- 2.7 File Protections
-
- File protection is an important aspect in preventative
- security. Checks should be periodically carried out for
- world-writeable files and directories, and appropriate
- action taken.
-
- In addition, various sensitive files should be confirmed
- as having the following protection.
-
- <disk>:[000000]000000.DIR (S:RWE,O:RWE,G:RE,W:E)
- <disk>:[000000]INDEXF.SYS (S:RWE,O:RWE,G:RE,W)
-
- * This prevents unauthorised users from finding
- directory and file names.
-
- SYS$SYSTEM:AUTHORIZE.EXE (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NCP.EXE (S:RWE,O:RWE,G:RWE,W)
-
- * This ensures that unauthorised users cannot change
- the NCP and authorisation databases through the use
- of these programs. Note that merely protecting
- these programs does not prevent modification of the
- data files - it is imperative that the data files
- themselves are protected.
-
- SYS$SYSTEM:NETCIRC.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETCONF.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETLINE.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETLOGING.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETNODE_LOCAL.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETNODE_REMOTE.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETOBJECT.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETPROXY.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETUAF.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETX25.DAT (S:RWE,O:RWE,G:RWE,W)
- SYS$SYSTEM:NETX29.DAT (S:RWE,O:RWE,G:RWE,W)
-
- * This ensures that unauthorised users cannot change
- information in these databases, nor gain
- information about other users or system
- configuration from these files.
-
- SYS$SYSTEM:RIGHTSLIST.DAT (S:RWE,O:RWE,G:RE,W:RE)
-
- SYS$SYSTEM:SYSUAF.DAT (S:RWE,O:RWE,G:RWE,W)
- ACL=(NETWORK,ACCESS=EXECUTE)
-
- SYS$SYSTEM:VMSMAIL.DAT (S:RWE,O:RWE,G:RWE,W)
-
- SYS$SYSTEM:VMSMAIL_PROFILE.DATA (S:RWE,O:RWE,G:RWE,W)
-
- * This ensures that unauthorised users cannot change
- information in these databases, nor gain
- information about other users from these files.
-
- For more details on File Protections, see Managing
- Security in a Multi-Vendor Network by Ron Tencati, and
- also the Guide to VAX/VMS System Security manual.
-
-
-
-
- 2.8 ACLs
-
- This section, is a continuation of the example supplied
- in Section 2.6, The UAF File, about access control using
- rights list identifiers.
-
- In a particular experiment, experimental results are
- being kept in the DISKE:[EXPERIMENT1] directory. The
- results are obtained using a transducer controlled on
- device RCD0:.
-
- Various rights list identifiers to read results
- (EXP1_READ), write a file to the results directory
- (EXP1_WRITE) and control the transducer (EXP1_CONTROL)
- have been created. These rights identifiers are used in
- the the creation of access control lists to enforce
- these access control principles.
-
- The transducer is the first object so modified:
-
- $ SET ACL /OBJECT=DEVICE /ACL=( -
- (IDENTIFIER=SYSTEM,ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL), -
- (IDENTIFIER=EXP1_CONTROL,ACCESS=READ+WRITE+DELETE+CONTROL), -
- (IDENTIFIER=[*,*],ACCESS=NONE)) RCD0:
-
- $ SHOW DEVICE RCD0: /FULL
- :
- {Device details on NODE1$RCD0: deleted}
- :
- device, error logging is enabled.
- Error count 0 Operations completed 26
- Owner process "" Owner UIC [0,0]
- Owner process ID 00000000 Dev Prot S:RWED,O:RWED,G:RWED,W:RWED
- Reference count 0 Default buffer size 2048
- Density unknown Format {deleted}
- Volume status: {deleted}
-
- Device access control list:
- (IDENTIFIER=[SYSTEM],ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL)
- (IDENTIFIER=EXP1_CONTROL,ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL)
- (IDENTIFIER=[*,*],ACCESS=NONE)
-
-
- On the machine used for preparing this paper, the nature
- of the device prevented us from changing the protection
- using the SET PROTECTION/DEVICE command. However, the
- ACL is sufficient to control access to this device.
-
- The next step is to protect the directory (and files
- under it). An ACL is applied to the directory file
- usinfg the commands on the next page.
-
- $ SET ACL /OBJECT=FILE /ACL=( -
- (IDENTIFIER=EXP1_WRITE,ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL), -
- (IDENTIFIER=EXP1_READ, ACCESS=READ+EXECUTE), -
- (IDENTIFIER=SYSTEM, ACCESS=READ+EXECUTE), -
- (IDENTIFIER=[*,*], ACCESS=NONE)) DISKE:[000000]EXPERIMENT1.DIR
- $
- $ SET PROTECTION DISKE:[000000]EXPERIMENT1.DIR /PROTECTION=(S,O,G,W)
- $
-
-
- $ DIR DISKE:[000000]EXPERIMENT1.DIR /SECURITY
- Directory DISKE:[000000]
-
- EXPERIMENT1.DIR;1 4 17-JUN-1992 11:19:27.01 [SYSTEM] (,,,)
- (IDENTIFIER=EXP1_WRITE,ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL)
- (IDENTIFIER=EXP1_READ,ACCESS=READ+EXECUTE)
- (IDENTIFIER=[SYSTEM],ACCESS=READ+EXECUTE)
- (IDENTIFIER=[*,*],ACCESS=NONE)
- Total of 1 file, 4 blocks.
-
-
- This means that only people who specifically possess the
- EXP1_WRITE rights list identifier can write to this
- directory. Users who possess the EXP1_READ identifier
- can read the contents of the directory as can the SYSTEM
- account (but not system privileged accounts or system
- UIC group members). All other access is denied.
-
- Note that action is taken on the first match of the ACL.
- So, for example, if the SYSTEM account is being used to
- access data in DISKE:[EXPERIMENT1], and the system
- account has the EXP1_READ right, then SYSTEM can read
- the data by virtue of this right as opposed to being the
- system account. The reason for this is that the
- EXP1_READ identifier occurs before [SYSTEM] in the ACL.
-
- Any directories created in this directory after the
- creation of this ACL will inherit this ACL.
-
-
-
-
- 2.9 SYSGEN Parameters
-
- There are various SYSGEN parameters that must be
- considered and/or changed during configuration. Many of
- these are related to system performance and are not
- within the scope of this paper. Parameters that must be
- considered from a security point of view are listed
- below, with extracts from the SYSGEN HELP facility on
- their use. (See SYSGEN> HELP PARAMETERS for more
- details.)
-
- TTY_DEFCHAR2: Bit 19 (TT2$M_SYSPWD) is set to allow the
- use of system passwords. The password was set using the
- AUTHORIZE utility (see Section 2.5, System Passwords),
- and the console is modified such that the password is
- not required when logging on from that source (using SET
- TERMINAL OPA0: /PERMANENT /NOSYSPASSWORD). (See Section
- 2.1.1, SYSTARTUP_V5.COM.) All other terminals must enter
- the system password before the login prompt is issued.
-
-
- This parameter (TTY_DEFCHAR2). amongst others, can be
- set in SYS$SYSTEM:MODPARAMS.DAT with a single line:
-
- TTY_DEFCHAR2 = %X80000 + %X1000 + %X2 ! = 528386
- ! %X80000 (bit 19) TT2$M_SYSPWD System password
- ! %X1000 (bit 12) TT2$M_EDITING Cmd line editing
- ! %X2 (bit 1) TT2$M_AUTOBAUD Autobaud
-
-
- LGI_PWD_TMO: Period of time, in seconds, a user has to
- correctly enter the system password on a terminal on
- which the system password is in effect.
-
- LGI_BRK_TMO: Specifies the number of seconds that a
- user, terminal, or node is permitted to attempt a login
- before the system assumes that a breakin attempt is
- occurring and evasive action is required.
-
- LGI_BRK_LIM: Specifies the number of failures that may
- occur at login time before the system will take action
- against a possible breakin.
-
- LGI_RETRY_TMO: Specifies the number of seconds allowed
- between login retry attempts after a login failure.
-
- LGI_RETRY_LIM: Specifies the number of retry attempts
- allowed for users attempting to login over dialup lines.
-
- LGI_HID_TIM: Specifies the number of seconds that
- evasive action will persist following the detection of a
- possible breakin attempt. The evasive action consists of
- refusing to allow any logins during this period,
- regardless of whether a valid user name and password are
- specified.
-
- LGI_BRK_DISUSER: When set, turns on the DISUSER flag in
- the UAF record when an attempted breakin is detected,
- thus permanently locking out that account.
-
- LGI_BRK_TERM: Causes the terminal name to be part of the
- association string for the terminal mode of breakin
- detection.
-
- Note that if parameters are changed using SYSGEN, modify
- both the CURRENT image and the ACTIVE, running system.
- Leave DEFAULT as it is.
-
-
-
-
- 2.10 Tailoring UCX
-
- The machine being configured required only incoming
- telnet access, and outgoing telnet and ftp. SMTP is
- handled by a dedicated mail package (MX). Other services
- like SNMP, NFS and Berkeley "r" commands are not
- required (or, in fact, desirable).
-
- Services not required are shutdown thus:
-
- $! -- Shutdown what we don't need
- $!
- $ @SYS$MANAGER:RPC$UCX_SHUTDOWN.COM
- $ @SYS$MANAGER:UCX$LPD_SHUTDOWN.COM
- $ @SYS$MANAGER:UCX$NFS_SHUTDOWN.COM
- $ @SYS$MANAGER:UCX$SMTP_SHUTDOWN.COM
- $ @SYS$MANAGER:UCX$SNMP_SHUTDOWN.COM
- $!
- $! -- Disable incoming connections on other services
- $!
- $ UCX DISABLE SERVICE FTP
- $ UCX DISABLE SERVICE REXEC
- $ UCX DISABLE SERVICE RLOGIN
- $ UCX DISABLE SERVICE RSH
-
-
- In addition, the relevant UCX accounts are disabled in
- the User Authorization File (using UAF> MODIFY <account>
- /flag=DisUser): UCX$FTP, UCX$NFS, UCX$REXEC, UCX$RSH,
- UCX$SNMP, UCX_LPD, UCX_SMTP. Telnet (interactive) access
- should be monitored using a wrapper (as discussed in
- Section 4.1, Wrappers).
-
-
- 2.11 Proxies
-
- Proxies should not be allowed if they are not required!
- If a net proxy is required for file transfer, the proxy
- must be created on the remote machine, and the required
- command issued on the local machine. The theory here is
- that the local machine is less likely to be compromised
- than an outside machine, and the use of proxies will
- reduce the instances of access information being
- transmitted over a network connection.
-
- Only allow proxy access to a non-privileged account on
- the target system.
-
-
-
-
-
-
-
- System Mechanisms For Configuring
- The Machine To Log Activity
-
-
-
-
- There are several facilities available to the system
- administrator to achieve effective logging. Specifically
- these are accounting and auditing. There is also scope
- for development of local tools. In this section, I will
- outline the use of the standard facilities, while
- homegrown mechanisms will be considered in the next
- section.
-
- Firstly, it will be useful to have a brief look at
- accounting and auditing. System accounting is a facility
- for recording information about the use of the machine
- from a normal system accounting perspective, whereas the
- system audit logger records similar information, but
- from a system security perspective. Both of these can be
- used to construct audit trails of activity. Information
- from the system audit logger can be gleaned not only
- from the audit journal, but also from the operator log,
- as the auditor also sends it's messages to OPCOM.
-
- Consider, for example, a situation in which a user
- (USER1) has made a modification to USER2's entry in the
- User Authorization File.
-
- The audit logger returns the following information:
-
- Security alarm (SECURITY) and security audit (SECURITY) on NODE1,
- system id: 1072 / System UAF record modification
- Event time: 27-JUL-1993 12:15:17.47
- PID: 0000005F
- Username: USER1
- Image name: NODE1$DKA0:[SYS0.SYSCOMMON.][SYSEXE]AUTHORIZE.EXE
- Object name: SYS$COMMON:[SYSEXE]SYSUAF.DAT;1
- Object type: file
- User record modified: USER2
- Fields modified: FLAGS,PRIVILEGES
-
-
- The accounting facility contains this:
-
- AUTHORIZE Image Termination
- ---------------------------
- Username: USER1 UIC: [STAFF,USER1]
- Account: STAFF Finish time: 27-JUL-1993 12:15:27.79
- Process ID: 0000005F Start time: 27-JUL-1993 12:14:51.23
- Owner ID: Elapsed time: 0 00:00:36.56
- Terminal name: RTA1: Processor time: 0 00:00:00.22
- Remote node addr: 1038 Priority: 4
- Remote node name: NODE2 Privilege <31-00>: 10148001
- Remote ID: USER2 Privilege <63-32>: 00000040
- Queue entry: Final status code: 00000001
- Queue name:
- Job name:
- Final status text: %SYSTEM-S-NORMAL, normal successful completion
-
- Page faults: 238 Direct IO: 32
- Page fault reads: 9 Buffered IO: 58
- Peak working set: 631 Volumes mounted: 0
- Peak page file: 1166 Images executed: 244
- Image name: NODE1$DKA0:[SYS0.SYSCOMMON.][SYSEXE]AUTHORIZE.EXE
-
-
- Both facilities tell us that USER1 ran the AUTHORIZE
- utility successfully under PID 5F at 12:15 pm on 27-Jul-
- 1993. From the accounting, we can see at a glance where
- USER1 logged in from. The audit logger tells us exactly
- what USER1 did whilst running this utility.
-
- Consider another example, in which a computer cracker
- has logged in from an X.25 network address in an attempt
- to maintain anonymity. The audit server has recorded the
- following information in the operator log:
-
- %%%%%%%%%%% OPCOM 27-Jul-1993 19:38:23.60 %%%%%%%%%%%
- Message from user AUDIT$SERVER on NODE1
- Security alarm (SECURITY) and security audit (SECURITY) on NODE1,
- system id: 1038
- Auditable event: Dialup interactive login
- Event time: 27-Jul-1993 19:38:23.59
- PID: 20205316
- Username: USER1
- Terminal name: _VTA1514 ({X.25 address deleted})
-
-
- The system accounting record from the same user logging
- out returns the following information:
-
- LOGINOUT Image Termination
- --------------------------
- Username: USER1 UIC: [STAFF,USER1]
- Account: STAFF Finish time: 27-Jul-1993 03:36:17.69
- Process ID: 20205316 Start time: 27-Jul-1993 19:38:07.19
- Owner ID: Elapsed time: 0 07:58:10.50
- Terminal name: VTA1514 Processor time: 0 00:00:46.14
- Remote node addr: Priority: 4
- Remote node name: Privilege <31-00>: 00108000
- Remote ID: Privilege <63-32>: 00000000
- Queue entry: Final status code: 00000001
- Queue name:
- Job name:
- Final status text: %SYSTEM-S-NORMAL, normal successful completion
-
- Page faults: 4716 Direct IO: 20927
- Page fault reads: 208 Buffered IO: 85056
- Peak working set: 970 Volumes mounted: 0
- Peak page file: 4813 Images executed: 28
- Image name: NODE1$DKA0:[SYS0.SYSCOMMON.][SYSEXE]LOGINOUT.EXE
-
-
- The two records act as a useful cross check for each
- other. The audit logger shows the X.25 address from
- which the user logged in from (which is not available in
- this accounting record). The accounting facility shows
- the length of time that the user was on the system. When
- this information is collated with the network accounting
- information, then the cost of the connection can be
- calculated. Furthermore the accounting records and audit
- records can be examined to aid in determining the extent
- of the damage caused by the attacker.
-
- 3.1 Accounting
-
- Confirm that required system accounting is enabled thus:
-
- $ SET ACCOUNTING /ENABLE[=(Keyword...)]
-
- The command above enables logging of all activities on
- the system in the accounting file. Accounting can be
- enabled to log the following activities.
-
- PROCESS any process termination
- IMAGE image execution
- INTERACTIVE interactive job termination
- LOGIN_FAILURE login failures
- SUBPROCESS subprocess termination
- DETACHED detached job termination
- BATCH batch job termination
- NETWORK network job termination
- PRINT all print jobs
- MESSAGE user messages
-
-
- Each day, a new accounting file should be created in
- order to keep the accounting files of a manageable size,
- using the command -
-
- $ SET ACCOUNTING /NEW_FILE
-
-
-
-
- 3.2 Auditing
-
- The auditor can be configured to log the following
- events:
-
- ACL Event requested by an Access Control List Item
- AUTHORIZATION Modification of the system user authorization file
- BREAKIN Occurrence of a breakin attempt
- (from various sources)
- FILE_ACCESS File or global section access
- (by various methods)
- INSTALL Occurrence of any INSTALL operation
- LOGFAILURE Occurrence of a login failure
- (from various sources)
- LOGIN A login attempt (from various sources)
- LOGOUT Occurrence of a logout
- MOUNT Issuance of a mount or dismount request
-
- This is done using SET AUDIT /ENABLE=(keyword[,...]).
- The /ALARM qualifier is also used to raise an alarm to
- all terminals enabled as security operators.
-
- You can examine the configuration of your system audit
- server using SHOW AUDIT /ALL. The categories that should
- be carefully considered are the auditing server
- characteristics, the alarm failure mode, and the enabled
- security alarms.
-
- Note that within the auditing server characteristics,
- the default final resource action is to crash the system
- if the system runs out of virtual memory. This means
- that if the disk containing the audit journal log is
- full, the system will crash, thus exposing the system to
- denial of service attacks. When configuring the audit
- server, you should carefully consider the final resource
- action parameter. It can be set using the SET AUDIT
- command.
-
- $ SET AUDIT /SERVER=FINAL_ACTION=action
-
- (where action can be one of CRASH, IGNORE_NEW or
- PURGE_OLD)
-
- As with system accounting, a new audit journal should be
- created each day:
-
- $ SET AUDIT /SERVER=NEW_LOG
-
-
-
-
- 3.3 FAL and Poor Man's Routing
-
- In order to properly explain the step taken in this
- phase, it is necessary to understand what Poor Man's
- Routing is, and how it is linked with the File Access
- Listener (FAL) object and the logical FAL$LOG.
-
- The FAL object (File Access Listener) is the DECnet
- object that allows a remote user to access files on your
- node. It can be used to browse your node, or perform
- file transfers. For legitimate users, this is extremely
- useful - unfortunately, people with malintent also find
- it useful if your system is not protected.
-
- In the context of DECnet networking operations (and
- specifically FAL), "Poor Man's Routing (PMR) refers to
- the technique of supplying an explicit path to the
- required target, rather than letting assigned DECnet
- routers pick the most optimal path" [Tencati]. When PMR
- is used, a process is created on each node in the path
- to forward the connection to the next node in the path.
- Each of these nodes (including the destination node)
- only sees the connection from it's path predecessor. It
- is therefore very difficult to ascertain from the
- destination node where the connection originated from.
-
- The legitimate use of this is in cases where the source
- node may not know anything about the remote note.
- Unfortunately, people with malintent can use the
- properties described above to create a convoluted path
- to the node they wish to attack (possibly via several
- timezones and countries) to hide themselves effectively.
-
- PMR can also be used to defeat the hiding of DECnet
- subnets. There is a parameter in the NCP database called
- the maximum area (see NCP> HELP SET EXECUTOR MAXIMUM
- AREA). This parameter specifies the largest area number
- known to an executor's routing layer. If used carefully,
- this parameter can be used to hide subnets. PMR can be
- used to circumvent this technique if the attacker has
- appropriate information about your network design. (The
- lesson here is to never trust security through obscurity
- - always rely on robust, proactive methods rather than
- ignorance.) Ron Tencati's Managing Security in a Multi-
- Vendor Network gives a good explanation of PMR, and the
- use of Area Routing.
-
- You can configure FAL by use of the logical symbol
- FAL$LOG. In the machine used in the preparation of this
- paper, this logical was configured to do two things:
-
- * refuse connections made by PMR
- * supply audit trail information in NETSERVER.LOG
- files in the case of successful FAL connections.
-
- The logical name FAL$LOG translates to a string of the
- form xx_yy where:
-
- * xx is a hexadecimal number representing a longword
- string value
- * yy is a hexadecimal number specifying how many bytes
- of each DAP message are to be displayed in the log
- file (SYS$OUTPUT:).
-
- The hexadecimal flags are:
-
- 0001 - log filename/function requests
- 0002 - log throughput statistics
- 0004 - log individual DAP messages
- 0008 - log DAP message packet AST requests (logged at AST level)
- 0010 - log DAP message packet QIO requests
- 0020 - reserved
- 0040 - disable DAP message blocking
- 0080 - disable DAP CRC error checking
-
- In SYS$MANAGER:SYLOGICALS.COM, FAL$LOG should be defined
- to be the character string "03/DISABLE=8" (See Section
- 2.4, System Logicals And Logical Definitions). By
- setting this logical to this value, the following is
- achieved:
-
- * PMR is disabled ("/DISABLE=8")
- * filename/function requests and throughput statistics
- are logged (the setting "03" being the addition of
- "01" and "02"
-
- Consider an example where NODE1::USER1 is executing a
- directory on NODE2::USER2's home directory. In the file
- NETSERVER.LOG in USER2's directory, we would see the
- following results.
-
- With no definition for FAL$LOG:
-
- --------------------------------------------------------
- Connect request received at 28-JUL-1993 15:36:45.78
- from remote process NODE1::"0=USER1"
- for object "SYS$COMMON:[SYSEXE]FAL.EXE"
- --------------------------------------------------------
-
- With FAL$LOG defined to be "03/DISABLE=8", extra
- information is appended:
-
- --------------------------------------------------------
- Connect request received at 28-JUL-1993 15:55:40.28
- from remote process NODE1::"0=USER1"
- for object "SYS$COMMON:[SYSEXE]FAL.EXE"
- --------------------------------------------------------
-
- ========================================================
- FAL V5.1-D3 started execution on 28-JUL-1993 15:55:41.12
- with SYS$NET = NODE1::"0=USER1" and with FAL$LOG = 03
-
- Logical link was established on 28-JUL-1993 15:55:41.13
-
- Requested file access operation: Directory List
- Specified file: DISKE:[USER2]L*.*;*
- Resultant file: DISKE:[USER2]LOGIN.COM;3
- Resultant file: DISKE:[USER2]LWK_PERSONAL.LINKBASE;1
-
- Logical link was terminated on 28-JUL-1993 15:55:41.18
-
- Total connect time for logical link was 0 00:00:00.05
- Total CPU time used for connection was 0 00:00:00.02
-
- File Access Statistics for RECV-Side XMIT-Side Composite
- -------------------------- --------- --------- --------
- # DAP Message QIO Calls 2 2 4
- # DAP Messages Exchanged 2 14 16
- # User Records/Blocks 0 0 0
- NETSERVER.LOG (continued)
-
- # Bytes of User Data 0 0 0
- # Bytes in DAP Layer 49 310 359
- User Data Throughput (bps) 0 0 0
- DAP Layer Throughput (bps) 7840 49600 57440
- Average Record/Block Size 0 0 0
- % User Data in DAP Layer 0.0% 0.0% 0.0%
- -------------------------- --------- --------- ---------
-
- Negotiated DAP buffer size = 1060 bytes
- Buffered I/O count during connection = 13
- Direct I/O count during connection = 0
- Peak working set size for process = 470 pages
-
- Successful Start Transaction Branch = 0
- Start Transaction Branch loops = 0
-
- FAL terminated execution on 28-JUL-1993 15:55:41.21
- ========================================================
-
-
-
-
-
-
-
-
- Using Homegrown Or Publicly Available Software
-
-
- 4.1 Wrappers
-
- A "wrapper" is a piece of software that monitors an
- attempt to use a service, and based on the details about
- the source of the attempt (such as remote host and user,
- time, and connection type), determine whether to allow
- the use of the service or not. This is the feature that
- a wrapper has available to it over and above standard
- system logging software: the use of the wrapper gives
- the system manager freedom to make decisions whether to
- allow the use of the machine from a remote site in
- addition to simply logging that use.
-
- Wrappers should be constructed for the NML and FAL
- objects, and also for interactive logins. Section 2.1.2,
- SYLOGIN.COM and Section 2.3.2, Objects gives the details
- on how to install these wrappers.
-
- Because the NML and FAL wrappers need to handle DECnet
- connections only, they are more simple than the
- interactive login wrapper.
-
- The DECnet object wrappers evaluate the connection by
- comparing the remote node and user combination against a
- set of rules. The set of rules is described in two
- files:
- AllowFile which describes which combinations may make
- the connection, and
- DenyFile which describes which combinations may not
- make the connection.
-
- Wildcards are allowed. The general algorithm is:
-
- Main ()
- {
- RemoteUser = f$trnlnm("SYS$REM_ID")
- RemoteNode = f$trnlnm("SYS$REM_NODE")
- ConnectionOkay = CheckRules(RemoteNode, RemoteUser)
- if (ConnectionOkay = Allow) /* ConnectionOkay = Allow|Deny */
- then
- write successful connection record to wrapper log
- request/to=(network,security) "<Succesful connection details>"
- run SYS$SYSTEM:FAL.EXE
- else
- write failed connection record to wrapper log
- request/to=(network,security) "<Failed connection details>"
- logout
- endif
- } end Main
- CheckRules (RemoteNode, RemoteUser)
- {
- if ((result = CheckCombination(RemoteNode, RemoteUser)) != Unknown)
- then return result
- if ((result = CheckCombination(RemoteNode, "*")) != Unknown)
- then return result
- if ((result = CheckCombination("*", "*")) != Unknown)
- then return result
- return Deny
- } end CheckRules
- CheckCombination (RemoteNode, RemoteUser)
- {
- Search AllowFile for RemoteNode::RemoteUser
- if found then return Allow
- Search DenyFile for RemoteNode::RemoteUser
- if found then return Deny
- return Unknown
- } end CheckCombination
-
- The search commands used above should be such that a
- wildcard search matches the literal "*" in a file, not
- any string (in a similar manner to the VMS "SEARCH"
- command). Hence the wildcard value of "*" is placed in
- the file by the system manager. The general philosophy
- that should be adopted is to use a blanket denial (a
- single line of "*::*" in the deny file) with specific
- allowed node::user combinations in the allow file.
-
- The interactive connection wrapper is similar, with only
- a slightly more complicated top level algorithm:
-
- Main ()
- {
- | Establish RemoteUser
- | Establish RemoteNode
- ConnectionOkay = CheckRules(RemoteNode, RemoteUser)
- if (ConnectionOkay = Allow) /* ConnectionOkay = Allow|Deny */
- then
- write successful connection record to wrapper log
- request/to=(network,security) "<Succesful connection details>"
- | exit(Success)
- else
- write failed connection record to wrapper log
- request/to=(network,security) "<Failed connection details>"
- | exit(Failure)
- endif
- } end Main
-
- The main problem here is to establish remote user and
- node identities. Interactive access may take place using
- DECnet, LAT, TCP/IP and so on. System values used to
- find this information are:
-
- * F$TRNLNM("SYS$REM_ID")
- * F$TRNLNM("SYS$REM_NODE")
- * F$GETDVI("SYS$COMMAND","TT_ACCPORNAM")
- * the DECnet database
- * the local terminal type of the connection
- * information from F$TRNLNM("DECW$DISPLAY")
-
- Connections are then evaluated not only on remote node
- and user (if provided by the protocol), but also by the
- protocol used for the connection and local
- characteristics (such as the time).
-
- It is important to note that any reading from AllowFile
- or DenyFile, and writing to the wrapper log should be
- carried out by installed, protected images, and that the
- command file(s) and executable(s) used are writeable
- only by system privileged accounts. This prevents
- modification of behaviour and recorded results by
- potential attackers.
-
- Example code and configuration files appear in Appendix
- 3, Wrapper Example.
-
-
-
-
- 4.2 Single Use PINs
-
- A Personal Identification Number (PIN) is simply the
- numerical equivalent of a text-based password. Unlike a
- normal password system, though, a single use PIN relies
- on algorithmic knowledge rather than static value
- knowledge.
-
- The system works thus: when a user logs in, system and
- user passwords must be supplied as described in previous
- sections. A numerical challenge is then issued. The user
- must supply the correct reply to this challenge, or the
- login will be denied. The correct reply is some
- permutation of the original challenge. The challenge
- must be randomly generated, so that every time the user
- logs in, a different numerical challenge is supplied,
- requiring a unique reply - only the algorithm used to
- deduce the reply from the challenge is static.
- Furthermore, this algorithm is different for each user.
- The software which issues the challenge and receives the
- reply must be robust, so that an attacker cannot simply
- "crash" the software and hence bypass this mechanism.
-
- Such systems are available commercially. A smart-card is
- usually supplied with such systems. The user keys the
- challenge supplied by the host into the smartcard using
- the keypad. The smartcard then displays the response,
- and the user enters this as the reply to the host.
-
- A cheaper alternative is to write such a system locally,
- fulfilling all of these criteria. A usage policy must be
- in place to effectively manage this system.
-
-
-
- 4.3 Terminal Monitors
-
- Terminal monitors are useful utilities for providing
- help to users who may be working remotely, or may not be
- reachable by telephone and require some type of help in
- real-time (i.e. electronic mail would not suffice).
-
- Where such utilities are available on the system, they
- must be adequately protected to ensure that unauthorised
- users can neither use them nor copy them. Care must be
- taken to ensure that explicit permission is sought by
- the legitimate users concerned or a relevant authority
- when such a utility is used.
-
- Similar principles apply when using system software for
- capturing a process's recall buffer in order to examine
- the commands issued by that process.
-
-
-
-
-
-
-
-
- Monitoring The Use Of The Machine
-
-
- It is essential to carry out monitoring on any machine
- in order to evaluate the health of the system. In
- addition to checks that should be carried out on a
- regular basis, steps should be taken to be allow for
- investigation of unusual security related events as soon
- as possible.
-
-
-
- 5.1 The SHOW INTRUSION Command
-
- Use the command SHOW INTRUSION regularly. This command
- displays the contents of the break-in database,
- providing a quick technique for checking if there have
- been attempts to break into your system in the immediate
- past.
-
- When using the SHOW INTRUSION command, you must first
- get some idea if the host has detected any potential
- breakins:
-
- $ SET PROC/PRIV=(CMKRNL,SYSPRV)
- $ SHOW INTRUSION
- Intrusion Type Count Expiration Source
- NETWORK SUSPECT 6 16:32:23.03 NODE2::USER2
- TERM_USER SUSPECT 3 16:18:14.16 USER1
-
-
- In this case, there are two suspect incidents. The
- records below show that the first was an attempt by
- USER2 on node NODE2 to login as USER1 on the local host
- (NODE1) via DECnet. The second is an attempt to login as
- USER1 on the local host using telnet from NODE3 (which
- in this case was actually the localhost - 127.0.0.1).
-
- The accounting records show the following:
-
- LOGIN FAILURE
- -------------
- Username: USER1 UIC: [SYSTEM]
- Account: <login> Finish time: 3-AUG-1993 16:02:28.80
- Process ID: 2080D073 Start time: 3-AUG-1993 16:02:19.59
- Owner ID: Elapsed time: 0 00:00:09.21
- Terminal name: RTA3: Processor time: 0 00:00:00.23
- Remote node addr: 1038 Priority: 4
- Remote node name: NODE2 Privilege <31-00>: 0010C000
- Remote ID: USER2 Privilege <63-32>: 00000000
- Queue entry: Final status code: 10D380FC
- Queue name:
- Job name:
- Final status text: %LOGIN-F-INVPWD, invalid password
-
- Page faults: 234 Direct IO: 24
- Page fault reads: 5 Buffered IO: 40
- Peak working set: 287 Volumes mounted: 0
- Peak page file: 1474 Images executed: 1
-
-
- LOGIN FAILURE
- -------------
- Username: USER1 UIC: [SYSTEM]
- Account: <login> Finish time: 3-AUG-1993 16:03:20.85
- Process ID: 2080D878 Start time: 3-AUG-1993 16:03:11.77
- Owner ID: Elapsed time: 0 00:00:09.08
- Terminal name: VTA3959 Processor time: 0 00:00:00.21
- Remote node addr: Priority 4
- Remote node name: Privilege <31-00>: FFFFFFFF
- Remote ID: Privilege <63-32>: FFFFFFFF
- Queue entry: Final status code: 10D380FC
- Queue name:
- Job name:
- Final status text: %LOGIN-F-INVPWD, invalid password
-
- Page faults: 235 Direct IO: 18
- Page fault reads: 5 Buffered IO: 41
- Peak working set: 284 Volumes mounted: 0
- Peak page file: 1474 Images executed: 1
-
-
- The audit records show the following:
-
-
- Security alarm (SECURITY) and security audit (SECURITY) on NODE1,
- system id: 1072 / Remote interactive login failure
- Event time: 3-AUG-1993 16:02:19.59
- PID: 00000D33
- Username: USER1
- Terminal name: _RTA1:
- Remote nodename: NODE2 Remote node id: 1184
- Remote username: USER2
- Status: %LOGIN-F-INVPWD, invalid password
-
-
- Security alarm (SECURITY) and security audit (SECURITY) on NODE1,
- system id: 1072 / Remote interactive login failure
- Event time: 3-AUG-1993 16:03:11.77
- PID: 00000CB4
- Username: USER1
- Terminal name: _TNA7:
- Remote nodename: 127.0. Remote node id: 2130706433
- Remote username: TELNET_7F000001
- Status: %LOGIN-F-INVPWD, invalid password
-
-
- Note that the remote nodename is always truncated to six
- characters. The remote node id is a numerical
- representation of the remote address.
-
- Notice from the failed telnet login above that the
- remote username is given as TELNET_7F000001. This
- equates to the IP address 127.0.0.1 thus:
-
- 7 * 16 + F = 127
- 0 * 16 + 0 = 0
- 0 * 16 + 0 = 0
- 0 * 16 + 1 = 1
-
- Hence if this attempt had come from the Network
- Information Centre (nic.ddn.mil, Internet address
- 192.112.36.5), the remote username would have appeared
- TELNET_C0702405.
-
-
-
-
- 5.2 Daily Activities
-
- A batch file must be written in order to carry out
- regular activities on a daily basis. Amongst these
- activities should be various checks on log files. These
- are listed below.
-
- $ SEARCH/OUTPUT=BREAKIN_CHECK.TMP SYS$MANAGER:OPERATOR.LOG;-1 -
- "Security alarm"/WINDOW=(3,8)
- $ ANALYZE/AUDIT/BRIEF/SUMMARY/NOINTERACTIVE/OUTPUT=BREAKIN_CHECK.TMP -
- SYS$MANAGER:SECURITY_AUDIT.AUDIT$JOURNAL;-1
- $ ACCOUNT/LOG/SORT=(TYPE,STARTED)/OUTPUT=BREAKIN_CHECK.TMP ACCOUNTNG;-1
-
-
- Any one of these can be used for obtaining information
- about the life of the system. The amount and type of
- information required should be used to determine which.
- When any record from the output of these files reveals
- an incident that appears unusual, then further checking
- is required. The daily summary returned by any one of
- the commands above should only be used to indicate that
- this action is required - you should not rely on just
- the summary information returned by these commands.
-
- $ SHOW AUDIT/ALL/OUTPUT=AUDIT_CHECK.TMP
-
- Check daily that the security auditing characteristics
- you require are in place, and have not been changed.
-
- $ ANALYZE/ERROR/SINCE="-1 0:0:0.0"/OUTPUT=ERROR_CHECK.TMP
-
- Examine the error log daily as well. This will not
- necessarily alert you to a security incident, but it
- will draw your attention to any system problems that
- could potentially hinder your efforts to recover from
- disaster. (You could also put the "SHOW ERROR" command
- in your LOGIN.COM file.)
-
- $ MAIL/NOSELF/NOEDIT LOCAL$WRAP:INTERACTIVE.LOG -
- "@SYS$SYSROOT:[SYSMGR.MAIL]DAILY_BATCH.DIS" -
- /SUBJECT:"Logged interactive logins"
-
- Wrappers were discussed in Section 4.1, Wrappers. As
- part of your daily checking, you should mail to
- yourself, and other relevant users, the output from
- these wrappers on a daily basis. The example above
- mentions only output from the interactive wrapper log -
- the implication is that all logs should be checked.
-
-
-
-
- 5.3 Having a Live Console
-
- Don't rely simply on on-line sinks (such as
- OPERATOR.LOG) for your security oriented output. In the
- event of a system compromise, it is quite likely that an
- attacker will attempt to delete or modify information in
- system files.
-
- A good idea is to enable a security operator's terminal.
- In addition to (or even instead of) the normal system
- console (usually OPA0:), you should consider using a
- security operator's terminal one that provides hardcopy
- output and is located in a secure location.
-
- (A word of caution: even an unsuccessful attack could
- seriously disrupt your system if the hardcopy printer
- runs out of paper.)
-
- Using the example from the Guide to VMS System Security
- manual, consider an example where such a terminal
- (TTA3:) has been designated, and security messages are
- to be disabled on the console. This can be achieved
- thus:
-
- $ DEFINE/USER SYS$COMMAND OPA0:
- $ REPLY/DISABLE=SECURITY
- $ DEFINE/USER SYS$COMMAND TTA3:
- $ REPLY/ENABLE=SECURITY
-
- You can, of course, enable other message classes to this
- terminal as well.
-
-
-
-
-
-
-
-
- Acknowledgements
-
-
-
- Most of the undocumented material in this paper is a
- mixture of my own work and other material that has been
- passed on to me by various colleagues at The University
- Of Queensland. The original idea for the wrapper was
- inspired by Ron Tencati, and Wietse Venema's public
- domain tcp_wrapper for UNIX systems.
-
-
-
-
-
-
-
-
- References
-
-
- VAX/VMS Documentation manuals:
-
- DEC TCP/IP Services for VMS System Management
- Guide to VAX/VMS System Security
- Access Control List Editor Utility
- Accounting Utility
- Audit Analysis Utility
- Authorize Utility
- Guide to Maintaining a VMS System
- Network Control Program Manual
- Networking Manual
-
-
-
- Ron Tencati, Ken Coar and E Eugene Schultz
-
- Managing Security in a Multi-Vendor Network, 1992
-
-
-
-
-
-
-
-
- Appendix 1
-
-
- SERT Advisory SA-93.03, Suggested Login Banner
-
-
- =============================================================================
- SA-93:03A SERT Advisory
- 31-May-1993
- Suggested Login Banner
- -----------------------------------------------------------------------------
-
- On 7-May-1993, the Security Emergency Response Team released Advisory
- SA-93:03. Since then, it has been brought to our attention that the word
- "permission" could be considered ambiguous as Unix file systems use
- "permission" bits to specify if access is granted to a file or not.
-
- Further advice from the Commonwealth Director of Public Prosecutions
- indicates:
-
- "'Permit' does seem to include a meaning of 'allow or let happen even by
- accident or carelessness'."
-
- "'Authority' or 'authorisation' suggest that someone has deliberately
- turned their mind to an action and formally approved that action."
-
- "In light of the fact that there does appear to be a difference in meaning
- between words 'permit or permission' and 'authority or authorisation' and
- the fact that computer scientists refer to 'permission' bits on Unix files,
- it does appear desirable that the words 'authority' or 'authorisation' be
- used instead of the word 'permission'."
-
- Therefore, the Security Emergency Response Team has reissued SA-93:03 as
- SA-93:03A taking into account the new recommendations. The new Advisory is
- included below.
-
- ----------------------------------------------------------------------------
- The SERT team wishes to thank Kate Lance at the University of Newcastle for
- bringing this problem to our attention.
- ----------------------------------------------------------------------------
-
- ----------------------------------------------------------------------------
- Body of SERT Advisory SA-93:03A
- ----------------------------------------------------------------------------
-
- The Security Emergency Response Team has received information that a
- successful prosecution of a computer cracker has taken place in New South
- Wales. The prosecution was aided by the use of an appropriate login
- banner. The following is an extract from a letter by the Australian
- Federal Police:
-
- "A major factor, commented upon by the magistrate, was the repeated warning
- message displayed at logon to your system. Your agreement to implement this
- feature has certainly started to pay dividends and demonstrates a certain
- willingness to accept [that] tertiary institutions are not fair game."
-
- A recommended login banner is:
-
- ----- Warning Message -----
-
- ***** This service is for authorised clients only *****
-
- ****************************************************************************
- * WARNING: It is a criminal offence to: *
- * i. Obtain access to data without authority *
- * (Penalty 2 years imprisonment) *
- * ii Damage, delete, alter or insert data without authority *
- * (Penalty 10 years imprisonment) *
- ****************************************************************************
-
- This example login banner was supplied to the Australian Federal Police by
- the office of the Commonwealth Director of Public Prosecutions. Legal
- opinion from the Commonwealth Director of Public Prosecutions indicates
- that this warning will assist in prosecutions of computer crackers for two
- reasons:
-
- "The prosecution in a criminal case must show that the computer hacker's
- actions are intentional. It would be extremely difficult for a hacker to
- argue that his actions were by accident or inadvertent when he has to go
- past such a warning on the system."
-
- "A hacker may admit that his actions were intentional. However, upon his
- sentence, he may argue that he was ignorant of the law or that he was
- unaware that his actions were unauthorised, thereby inducing the court to
- mitigate the penalty that it imposes. If the above warning is used, it
- will be extremely difficult for a hacker to present such arguments."
-
- SERT recommends the use of this, or similar banners on ALL systems and
- access points into the network (such as a modem pool and ftp access). This
- not only provides forewarning to any crackers that may intrude your system
- that certain types of activity are illegal, but also advises any legitimate
- users of their obligations relating to acceptable use of the computer
- system.
-
- The warning is deliberately general in nature as it has not yet been
- established what type of (if any) crime has been committed. Subsequent
- prosecution may be performed under Federal or State law, or handled by
- local institution disciplinary procedures.
-
- SERT recommends that any login banner or system initial message should not
- imply consent to use the computer services (E.g., words such as "greeting"
- or "welcome"), unless it is the express intention that any user is free to
- use the system, whether they are authorised or not.
-
- You may wish to include some identification information (such as the
- hostname) so that genuine users know that they have connected to the
- correct system. For example,
- "You have connected to node FRED at The University of Wooloomooloo"
- and follow this with an appropriate warning message.
-
- Examples methods for login messages are:
-
- VMS: Edit the file SYS$MANAGER:SYSTARTUP_V5.COM and include the line:
- $DEFINE/SYSTEM SYS$ANNOUNCE "@SYS$MANAGER:ANNOUNCE.TXT"
- then create the file SYS$MANAGER:ANNOUNCE.TXT with the text that you wish
- displayed when a user connects to your system.
-
- Note that this has implications for LAT as the default service
- identification is the logical SYS$ANNOUNCE (which will translate to
- @SYS$MANAGER:ANNOUNCE.TXT). In this case, you should edit the LAT startup
- procedures to explicitly define a LAT service identification.
-
- Unix: Edit the "message of the day" file, (e.g., /etc/motd) and include
- the text that you wish displayed when a user logs in to your system.
-
- This does not cover all ways to connect to a computer (e.g., rlogin,
- telnet, SET HOST, ftp), but serves as one point of warning in a number of
- cases. Warnings such as this are a positive step towards providing
- adequate notice of the obligations and responsibilities relating to the use
- of the computer equipment. If a person is known to have seen the warning,
- they cannot subsequently claim ignorance of their responsibilities.
-
- ----------------------------------------------------------------------------
- The SERT team wishes to thank The University of Sydney, the University of
- South Australia, the Australian Federal Police, and the Commonwealth
- Director of Public Prosecutions for their advice and cooperation in this
- matter.
- ----------------------------------------------------------------------------
-
- If you believe that your system has been compromised, contact SERT or your
- representative in FIRST (Forum of Incident Response and Security Teams).
-
- Internet Email: sert@sert.edu.au
- Facsimile: (07) 365 4477
- Telephone: (07) 365 4417
- SERT personnel answer during business hours (AEST).
-
- Security Emergency Response Team
- Prentice Centre
- The University Of Queensland
- Qld. 4072.
-
-
-
-
-
- Appendix 2
-
-
- SERT Advisory SA-93.04, Guidelines For Developing A Sensible Password Policy
-
-
-
- =============================================================================
- SA-93:04 SERT Advisory
- 1-Jun-1993
- Guidelines For Developing A Sensible Password Policy
- -----------------------------------------------------------------------------
-
- This advisory contains guidelines for developing a sensible password policy.
- Please feel free to extract the contents of this advisory, modify to suit local
- conditions, and then distribute to end users, as it is end users who are
- responsible in the first instance for individual account security.
-
- Without doubt, one of the most popular methods used by computer crackers to
- compromise a system is password stealing.
-
- By stealing your username and password an intruder can, with reduced
- likelihood of detection, gain access to your system, modify it for his or
- her own purposes and use that system as a launchpad for attacks on other
- systems throughout the world - and all in your name. Password protection is
- one of the most (if not the single most) important principles of system
- security. It is uniformly important for ALL users, regardless of system
- privileges or computer literacy. It is up to each and every individual to
- ensure that their password is safe - a single unsafe password can (and
- probably will) lead to a computer cracker violating YOUR system.
-
- Your best line of defence against attack is a secure password. A password
- is like a key, and any entry point that allows access by default is not
- secure. A bad password is like leaving your front door unlocked.
-
- Do not underestimate the ease with which your password can be stolen. There
- are many techniques available to do this. A simple and amazingly successful
- password theft technique for the cracker is password guessing (i.e. entering
- your username, and simply guessing what your password might be). The aim of
- this advisory is to thwart these attempts.
-
-
-
- How To Select A Safe Password
- -----------------------------
-
- Some systems automatically (and autocratically) allocate passwords to
- users. Many systems, however, give the user the option of selecting his
- or her own password. The following guidelines should help in selecting a
- password which will be sufficiently robust to prevent a cracker from
- guessing your password in the majority of cases.
-
- There are several principles involved in selecting a safe password. These
- are covered below.
-
-
- The DO-NOTs
-
- DO NOT use simple passwords that are easy to remember and are typically
- not safe. Examples of such passwords are:
-
- - your userid (a common, but extremely dangerous practice);
-
- - a word which can be associated with you. For example:
- - your car make, model or registration number
- - your child's name
- - your street name, postcode or other address details
- - your medicare number
- - your tax file number
- - any of your bank account numbers;
-
- - a word which someone watching could easily spot (qwertyuiop);
-
- - any dictionary word (which a cracker with a PC and an on-line
- dictionary could discover by exhaustive trial);
-
- - words from other guessable word sets such as famous names,
- proper names, colloquial terms (in various spheres of
- life) and so on.
-
- It is not sufficient to include a single number in the word, or
- change all O's to 0's and I's or L's to 1's in the word, or to spell
- the word backwards.
-
-
- DO NOT leave your account without a password.
-
- DO NOT use your userid as your password.
-
- DO NOT use any word from a dictionary (of any language) as most forms of
- password attack use dictionaries as a basis for password guessing.
-
- DO NOT use birthdays, car registration numbers, room numbers, department names,
- machine names, locations, wife/husband's names, pet's names,
- children's names and so on. These may be determined as most of this
- information is not confidential.
-
- DO NOT use keyboard patterns, or duplicating characters such as qwerty or
- aabbccdd.
-
- DO NOT use the same password on multiple accounts. If you have many accounts,
- then do not use the same password on each account. If one is broken,
- then all are broken. Also, do not just change one character in the
- password as this may be easily spotted if one of the passwords is
- compromised.
-
- DO NOT allow anyone to watch while you type your password.
-
- DO NOT record your password either on-line. DO NOT write down your
- passwords.
-
- DO NOT tell anyone what your password is. Do not share your password with
- your partner, your children, your friends. Even telling your dog
- should be considered risky! Do not tell a person verbally, by
- electronic mail or by any other means.
-
- Remember: if someone has your password, they can commit criminal acts using
- your account!
-
- SERT staff have been alerted to several security breaches at constituent
- sites which have been attributed (in total or in part) to the sharing of
- passwords between husband and wife, parent and child, and between friends.
-
-
-
- The DOs
-
- DO use a MINIMUM (not maximum!) of 8 or more characters (system permitting).
-
- DO use mixed case wherever possible. DO NOT choose only the first letter as
- uppercase. (e.g. Mich37bo is not as good as MicH37Bo.)
-
- DO include at least two digits or punctuation characters. DO NOT simply replace
- "o" and "O" with "0", and "I", "l" or "L" with 1. (e.g. fl0pp1mp is
- not as good as fL0$p*Mp.)
-
- DO change passwords frequently, and DO NOT reuse old passwords. Password
- cracking algorithms have been around for quite a while now. By using
- computationally intensive processes, a password can be broken in time.
-
- Applying the techniques outlined above make the length of time required to
- break a password prohibitively long. However, the time required to break a
- password drops significantly as each letter is guessed, or other
- information is known about a password. Passwords should be changed
- regularly, so that even if a password is finally guessed, it will be long
- out of date. A password should never be reused.
-
-
-
- General techniques for generating safe passwords include:
-
- - using two or three short words that are unrelated;
- - always including some non-alphabetic, non-numeric (i.e. punctuation)
- characters;
- - deliberately misspelling;
- - taking the first letter from each word of a phrase (a passphrase).
-
- Note that different operating systems have different rules for the
- characters that one is allowed to use in a password. Some operating systems
- will allow any printable characters, whereas others only allow numeric and
- alphabetic (i.e. non-punctuation) characters.
-
-
- After reading all of that, you may ask "well, what is a good password? What
- can I use?". One technique would be to use a two or three word phrase, and
- replace the 1st character of the 1st word with a <shift>-1, the 2nd
- character of the 2nd word with a <shift>-2, etc, and uppercase every second
- character except punctuation. e.g. !Yc@rSm$lLs (my car smells).
-
- Another alternative might be to use the first letter from each word in a
- line from a song, have every third letter in upper case, and replace (aeiou)
- with ({}:"?). For example, 'Tie A Yellow Ribbon Round That Old Oak Tree'
- would convert into 't{YrrT""T'.
-
- (Rationale:
- 'Tie A Yellow Ribbon Round That Old Oak Tree' => 'tayrrtoot'
- Convert every third letter to upper case => 'taYrrTooT'
- Replace lower case vowels => 't{YrrT""T')
-
- Note that these examples should NOT be used as they are now published
- widely!
-
- You should be aware of what characters your system will accept in a
- password, the length required for a password, and what time period is
- allowed before the password will have to be changed again. You also need to
- be aware of the commands used to change passwords.
-
-
-
-
-
- What System Managers Can Do
- ---------------------------
-
- Consider using the following techniques.
-
- - Use Crack, a password cracking tool to audit existing passwords. You supply
- a dictionary, and a list of massaging rules. Crack then tests the
- encrypted password against the dictionary and rules list to see which
- passwords it can guess. This is only available for UNIX systems.
-
- - Consider also the use of password shadowing, which places the encrypted
- passwords in a non-world-readable file, not /etc/passwd (which is
- world-readable). Again, this is only applicable for UNIX systems.
-
- - If your system has a facility to enforce rules on minimum password
- content (e.g. "must include at least 1 upper case and at least 1
- numeric"), then use this facility. For UNIX systems which don't
- have this facility, npasswd or passwd+ are good alternatives.
-
- - If your system has a facility to (a) enforce password ageing, and (b) keep
- a history file of passwords and disallow previous passwords, then
- use this facility also.
-
- - Keep passwords for system accounts distributed amongst the smallest group
- of people possible. Change these passwords more frequently than
- passwords for non-privileged accounts.
-
- - Take care with the use of facilities that are available for logins which
- bypass the use of passwords. For instance, on VMS systems, don't
- allow proxy logins for privileged accounts such as "SYSTEM". On UNIX
- machines, remove any .rhosts files (or /etc/hosts.equiv) with "+"
- signs in them.
-
-
- Login programs (such as /bin/login on UNIX systems) are constructed to
- behave in a certain way. One method used by crackers to obtain passwords is
- to execute a program (a trojan horse) masquerading as the login program.
- The trojan horse will accept your username and password, log it into a
- secret file, and then inform you that the combination entered was
- incorrect, before finally calling the real login program. The user,
- thinking that this was merely a typographical error, will proceed as normal
- unaware that his or her password has been logged for later use. This can be
- avoided in some cases by typing <Return> a few times before entering your
- username/password combination.
-
- Finally, system managers should be aware that X display managers (such as
- xdm) may bypass several login and system facilities such as message of
- the day, password ageing etcetera. Depending upon the sensitivity of your
- site, this may present some problems which will need resolution using more
- lateral methods.
-
-
- If you believe that your system has been compromised, contact SERT or your
- representative in FIRST (Forum of Incident Response and Security Teams).
-
- Internet Email: sert@sert.edu.au
- Facsimile: (07) 365 4477
- Telephone: (07) 365 4417
- SERT personnel answer during business hours (AEST).
-
- Security Emergency Response Team
- Prentice Centre
- The University Of Queensland
- Qld 4072
- AUSTRALIA.
-
-
-
-
-
- Appendix 3
-
-
- Wrapper Example
-
-
- The following material is an example of a wrapper that
- could conceivably used for protecting the FAL object, as
- outlined in Section 4.1, Wrappers.
-
- $ SET NOON
- $ SET NOCONTROL_Y
- $ SaveVerify = F$VERIFY(0)
- $ SET NOVERIFY
- $!
- ================================================================
- $!
- $! Example Wrapper
- $!
- $! *** NOTE: This file is UNTESTED! ***
- $!
- $! Author: Rob McMillan, 1992
- $!
- $! Example wrapper for the FAL object. This command file should
- be
- $! specified as the file to execute for the FAL object in the NCP
- $! database. This file is for example purposes only!
- $!
- $! Create allow and deny lists in AllowFile and DenyFile. The
- $! format of each file is "HOST::USERNAME.". Note the full stop.
- $!
- $! eg
- $! NODE1::USER1.
- $!
- $! To have blanket values, use an asterisk *. For instance, to
- $! have a blanket denial, but allow all people from NODE2::, and
- $! allow NODE1::USER1, have the following configuration:
- $!
- $! DenyFile:
- $! *::*.
- $!
- $! AllowFile:
- $! NODE2::*.
- $! NODE1::USER1.
- $!
- $! In the absence of enough information in the configuration
- $! files, or a clash of information (eg denying and allowing
- $! *::*), the default action is to deny a connection.
- $!
- $!================================================================
- $!
- $! -- What object is this wrapper for?
- $!
- $ Executable = "SYS$SYSTEM:FAL.EXE" ! Object executable to use
- $!
- $! -- Constants
- $!
- $ WAllowed == %x10000001
- $ WDenied == %x10000002
- $ WUnknown == %x10000003
- $!
- $! -- Get connection details
- $!
- $ LocalNodeName = F$GETSYI("NODENAME") + "::"
- $ LocalTime = F$TIME()
- $ LocalUser = F$GETJPI("","USERNAME")
- $ LocalUser = F$EXTRACT(0,F$LOCATE(" ",LocalUser),LocalUser)
- $ RemoteNodeName = F$TRNLNM("SYS$REM_NODE")
- $ RemoteUser = F$TRNLNM("SYS$REM_ID")
- $ WrapperLogInfo = -
- "at ''LocalTime' from ''RemoteNodeName'::''RemoteUser' as ''LocalUser'"
- $!
- $! -- Check wrapper configuration
- $!
- $! At this point, we can use any of the following to check
- $! whether we'll allow the connection:
- $!
- $! - LocalNode
- $! - LocalTime
- $! - LocalUser
- $! - RemoteNodeName
- $! - RemoteUser
- $!
- $ ConnectionOkay = WUnknown
- $ CheckFALRules 'LocalNodeName' 'LocalTime' 'LocalUser' -
- 'RemoteNodeName' 'RemoteUser'
- $ ConnectionOkay = $Status
- $ IF (RemoteNodeName .EQS. LocalNodeName)
- $ THEN
- $ ConnectionOkay = WAllowed ! Failsafe
- $ ENDIF
- $!
- $! -- Log the event and take action
- $!
- $ IF (ConnectionOkay .NE. WAllowed)
- $ THEN
- $ WRITE SYS$OUTPUT "Network connect request failed ''WrapperLogInfo'"
- $ WriteFALLog "Network connect request failed ''WrapperLogInfo'"
- $ LOGOUT
- $ ELSE
- $ WRITE SYS$OUTPUT "Network connect request succeeded ''WrapperLogInfo'"
- $ WriteFALLog "Network connect request succeeded ''WrapperLogInfo'"
- $ RUN 'Executable'
- $ ENDIF
- $!
- $! -- Go home now
- $!
- $ SaveVerify = F$VERIFY(SaveVerify)
- $ EXIT 'ConnectionOkay'
-
-
- For interactive connections, the section in which
- connection details are evaluated would be more
- complicated. Different mechanisms would be required for
- finding out these details based upon the type of
- connection (eg local, DECnet, LAT, telnet). These are
- mentioned in Section 4.1, Wrappers. These command files
- should be world executable, but only readable and
- writeable by system privileged users.
-
- The two executables, CheckFALRules and WriteFALLog,
- should be similarly protected (eg installed, protected
- images). WriteFALLog is a very simple program which
- writes the supplied parameters to the log file for this
- object. CheckFALRules could look something like the
- following example.
-
-
-
- /*
- * CheckFALRules.C
- *
- * Author: Rob McMillan, 1992
- *
- * Use current connection details to compare with local rules and
- * return a value describing whether to allow the connection or
- * not (Allow).
- *
- * The returned value (Allow) can return one of two values:
- * WAllowed: allow the connection
- * WDenied: refuse the connection
- *
- * This wrapper configuration tests only upon the basis of
- * RemoteNodeName and RemoteUser. However, any of the details
- * supplied below can be used, based upon paranoia levels. To
- * do this, the following must be modified:
- *
- * - The CHECK_EXPLICIT_RULE subroutine
- * - The calls in this subroutine to CHECK_EXPLICIT_RULE
- * - The header comments at the top of this wrapper
- * - The allow and deny files.
- *
- */
-
-
- #include <ssdef.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "CheckFALRules.H"
-
- typedef unsigned int BOOLEAN;
- #define FALSE 0
- #define TRUE 1
-
-
- /* -- Prototypes */
- int CheckExplicitRule( char *, char *);
- int ExitHandler(int, char *);
- char * Salloc(unsigned int);
- char * SnarfArgument(char *);
-
- int
- main (argc, argv)
- int argc;
- char * argv[];
- {
- char * localNodeName;
- char * localTime;
- char * localUser;
- char * remoteNodeName;
- char * remoteUser;
- int status = WUnknown;
-
- /* Get and display parameters */
-
- localNodeName= SnarfArgument(argv[1]);
- localTime = SnarfArgument(argv[2]);
- localUser = SnarfArgument(argv[3]);
- remoteNodeName = SnarfArgument(argv[4]);
- remoteUser = SnarfArgument(argv[5]);
- if ((localNodeName == (char *)0) ||
- (localTime == (char *)0) ||
- (localUser == (char *)0) ||
- (remoteNodeName == (char *)0) ||
- (remoteUser == (char *)0)
- ) {
- fprintf( stderr, "Error snarfing check parameters!\n");
- exit( ExitHandler( WDefault, "Error snarfing check
- parameters!"));
- }
-
- /* Now evaluate whether to allow the connection */
-
- /* -- We will only test based on source node and user.
- * We can check other details if required at a later stage.
- *
- * Note that the order in which these rules are checked is
- * important. Below, we check in the order of the most
- * specific rule to the most general. Once a connection
- * is found to be explicitly allowed or denied
- * no further rules are checked.
- */
-
- status = CheckExplicitRule( remoteNodeName, remoteUser);
- if (status != WUnknown)
- exit( ExitHandler( status, "On node::user combination"));
-
- status = CheckExplicitRule( remoteNodeName, "*");
- if (status != WUnknown)
- exit( ExitHandler( status, "On node::* combination"));
-
- status = CheckExplicitRule( "*", "*");
- if (status != WUnknown)
- exit( ExitHandler( status, "On *::* combination"));
-
- /* No applicable rules were found, or there were a clash of
- * rules, so use the default.
- */
- fprintf(stderr, "Warning! Unable to evaluate connection status!\n");
- exit ( ExitHandler( WDefault, "Default action taken"));
- } /* end main */
-
- /*
- * CheckExplicitRule
- *
- * Use the remoteNodeName and remoteUser to return a value
- * describing whether the proposed connection is explicitly allowed
- * or denied. The returned value can be one of three values:
- *
- * WAllowed: explicitly allow the connection
- * WDenied: explicitly deny the connection
- * WUnknown: couldn't evaluate on supplied information
- *
- * Allowed configurations are set out in ALLOW_FILE.
- * Disallowed configurations are set out in DENY_FILE.
- *
- * If the record is found in both files, or the record can't be
- * found in either file, return WUnknown. Otherwise, return
- * the result explicitly described by the files.
- *
- */
- int
- CheckExplicitRule( remoteNodeName, remoteUser)
- char * remoteNodeName;
- char * remoteUser;
- {
- char inbuf[132]; /* Should be heaps */
- char * searchKey;
- BOOLEAN allow = WUnknown;
- BOOLEAN foundAllow = FALSE;
- BOOLEAN foundDeny = FALSE;
- FILE * fp;
-
-
- if ((searchKey = Salloc(strlen(remoteNodeName) + 3 +
- strlen(remoteUser))) == (char *)0)
- return( WUnknown);
- searchKey = strcpy(searchKey, remoteNodeName);
- searchKey = strcat(searchKey, "::");
- searchKey = strcat(searchKey, remoteUser);
-
- /* See if there is a matching record in the allow file */
- if ((fp = fopen( ALLOW_FILE, "r")) == (FILE *)NULL) {
- fprintf(stderr, "Error! Cannot open wrapper AllowFile! \n");
- return( WUnknown);
- }
- else {
- /* Search file for matching record */
- while ((foundAllow == FALSE) && (fgets(inbuf, 132, fp) != (char *)NULL))
- if (strncmp(searchKey, inbuf, strlen(searchKey)) == 0)
- foundAllow = TRUE;
- fclose(fp);
- }
-
- /* Now search deny file as well */
- if ((fp = fopen( DENY_FILE, "r")) == (FILE *)NULL) {
- fprintf(stderr, "Error! Cannot open wrapper DenyFile! \n");
- return( WUnknown);
- }
- else {
- /* Search file for matching record */
- while ((foundDeny == FALSE) && (fgets(inbuf, 132, fp) != (char *)NULL))
- if (strncmp(searchKey, inbuf, strlen(searchKey)) == 0)
- foundDeny = TRUE;
- fclose(fp);
- }
-
- /* If we get a strict decision, then return the result. If we
- * get two FALSEs or two TRUEs, then there is no decision.
- */
- if ((foundAllow == TRUE) && (foundDeny == FALSE))
- allow = WAllowed;
- if ((foundAllow == FALSE) && (foundDeny == TRUE))
- allow = WDenied;
-
- return( allow);
-
- } /* end CheckExplicitRule */
-
- /*
- * ExitHandler
- *
- * Carry out any cleaning up required whilst exiting.
- *
- */
- int
- ExitHandler( exitCode, diagnostic)
- int exitCode;
- char * diagnostic;
- {
-
- #ifdef DEBUG
- switch (exitCode) {
- case WAllowed:
- fprintf( stdout, "\nConnection allowed: ");
- fprintf( stdout, "%s.\n", diagnostic);
- break;
- case WDenied:
- fprintf( stdout, "\nConnection denied: ");
- fprintf( stdout, "%s.\n", diagnostic);
- break;
- case WUnknown:
- fprintf( stdout, "\nCan't figure out to allow connection or not: ");
- fprintf( stdout, "%s.\n", diagnostic);
- break;
- default:
- fprintf( stdout, "\nError. Unknown exit code: ");
- fprintf( stdout, "%s.\n", diagnostic);
- break;
- }
- #endif
-
- return( exitCode);
- } /* end ExitHandler */
-
-
- /*
- * Salloc
- *
- * Safe malloc
- *
- * See P321 "C Programming in a UNIX Environment"
- * by Judy Kay and Bob Kummerfeld,
- * Addison-Wesley, 1989.
- *
- */
- char *
- Salloc(size)
- unsigned int size;
- {
- char * result;
- if ((result = malloc(size)) == (char *)0)
- fprintf(stderr, "Cannot malloc %d bytes.\n", size);
- return result;
- } /* end Salloc */
-
- /*
- * SnarfArgument
- *
- * Make a copy of arg string.
- *
- */
- char *
- SnarfArgument( arg)
- char * arg;
- {
- char * result;
-
- if ((result = Salloc(strlen(arg)+1)) != (char *)0)
- result = strcpy(result, arg);
- return( result);
- } /* end SnarfArgument */
-
-
- The header file for this program would contain the following:
-
- /*
- * CheckFALRules.H
- *
- * Author: Rob McMillan, 1992
- *
- * See comments in CheckFALRules.C.
- *
- * THE CONTENTS OF THIS FILE MUST MATCH THOSE IN THE WRAPPER COMMAND FILE!
- *
- */
-
- /* -- Define file paths */
- #define DEBUG
- #ifdef DEBUG
- #define ALLOW_FILE "{Allow File name here}"
- #define DENY_FILE "{Deny File name here}"
- #else
- #define ALLOW_FILE "local$wrap:{Allow File name here}"
- #define DENY_FILE "local$wrap:{Deny File name here}"
- #endif
-
- /* -- Define exit values */
- #define WAllowed 0x10000001
- #define WDenied 0x10000002
- #define WUnknown 0x10000003
- #define WDefault WDenied
-