Using VESOFT Products To Implement The Hewlett-Packard Recommendations For Tuning Up Your HP3000 System Security by Michael D. Hensley, VESOFT Dear HP3000 System Manager: The June 1990 issue of InterexPress included an article by Hewlett- Packard information security program manager Jim Schindler entitled "Step by Step: A set of security procedures for system managers". As a vendor of HP3000 system software since 1980 (with over 10,000 packages -- MPEX, SECURITY, and VEAUDIT -- installed worldwide), VESOFT shares HP's concerns and applauds their desire to help System Managers improve system security. However, most of the recommendations made by HP can not be practically followed in a "real-world" environment using only MPE commands and utilities. Enclosed is a copy of HP's recommendations, together with information on how our software can be used to satisfy (and in most cases exceed) them. Please note that there are a number of computer security issues that HP did not address. This letter merely presents the ways that VESOFT can help you implement the procedures they did mention. MPEX, SECURITY, and VEAUDIT all provide many more security features; there just isn't enough space to describe them all here (the combined reference manuals are now over 500 pages long)! PLEASE NOTE: while the enclosed list may seem lengthy, we believe that all of the information contained within it can be of great benefit to you and your company. Computer security is a complex subject, but a few minutes spent now can save you much time later (especially if you have an audit coming up soon) and may help prevent a serious loss of valuable company data (and protect your own resume). If you have any questions about any of these issues, or would like a free demo tape of our products, please let us know. Thank you, Step One: Maintain account passwords: 1. Verify that ALL accounts have passwords. Note that some HP and third-party software is installed without passwords. The system manager should promptly assign passwords to these accounts. 2. Change passwords on all accounts, beginning immediately with accounts which have special capabilities (PM, SM, OP)... 3. Change passwords on accounts that are installed with "default" passwords. Verifying that accounts have passwords, making sure that the passwords are not easily guessable, not too short, etc. -- these ideas all require that the System Manager or Security Manager visually scan a complete list of all account passwords. No one else can do it, because they aren't supposed to know the passwords. The list, which can only be produced by the :LISTACCT command, will be very big. There is no way to select subsets of accounts, like "accounts with special capabilities". Most importantly, doing this task manually is both extremely time-consuming and extremely error-prone. SECURITY/3000 can prevent anyone from logging on to any account that doesn't have an account password, and/or any user id that doesn't have a user password (or a SECURITY/3000 User Profile). Like virtually all SECURITY/3000 options, this can be enabled for all accounts, particular accounts, accounts with special capabilities -- the possibilities are too numerous to list here! VEAUDIT reports will show you: * passwordless users with SM/PM/OP capability; * all passwordless users; * a concise directory listing of all users, groups, and accounts and their capabilities, etc., that indicates which ones don't have passwords. 4. Purge accounts that are not needed for ongoing system operation. MPEX allows you to LISTF, STORE and/or PURGE files based on the last access, modify, restore, or create date. After purging all of the old files you no longer need, a single VEAUDIT command can purge all empty accounts on the system (except the ones you need to keep, even though they are empty). Of course, the VEAUDIT concise directory listing mentioned above is a very good way to make sure that you know what accounts are on your system, what capabilities they have, and more -- in a short, easy-to-use format. 5. Institute procedures for changing all account passwords on a regular basis... Any manual procedure to ensure that passwords are regularly changed will, at least occasionally, fail to do so. SECURITY/3000 can automatically enforce password obsolescence, for both MPE and SECURITY/3000 passwords, guaranteeing that passwords will be changed on a regular basis; and, SECURITY/3000 keeps a "password history" to make sure users don't simply switch back and forth between the same two passwords. SECURITY/3000 can also immediately expire all SM/PM/OP account passwords; you can then change them all, knowing no one can log on using an old, unchanged one in the meantime. VEAUDIT provides a report that shows, among other things, account passwords that haven't been changed in the last 30 (or however many you like) days. 6. Ensure that passwords cannot be guessed easily. With MPE alone, of course, you're left to a manual inspection of a long report again... SECURITY/3000 provides an extremely flexible password edit-checking mechanism. VEAUDIT, as we mentioned earlier, provides a report that shows passwords you currently have that are "easily guessable" (like SECRET, PASS, etc.), or are well-known "vendor defaults" (like HPONLY and RESTOREP, the default when :RESTORE creates an account, group, or user). 7. Change relevant account passwords when employees with knowledge of passwords leave the organization. This is easier to say than to do. You must also change all jobs that contain the account password (and you have to find them first)! If you have multiple systems connected by NS, you must also find and change all jobs on other systems that log on via the :REMOTE HELLO command! STREAMX, part of SECURITY/3000, allows you to stream jobs that don't have embedded passwords or that have invalid embedded passwords -- in the !JOB-card or !REMOTE HELLO commands (STREAMX does a lot more than just insert passwords -- it is a virtual "job stream programming language"; see the SECURITY/3000 reference manual for details)! If you are using SECURITY/3000 User Profiles, simply delete the user's profile from the SECUR database -- he will no longer be able to log on even if he does know the account password! Step Two: Maintain user passwords: Note: All of the features described above for account passwords also apply to user passwords -- obsolescence, flexible password editing, VEAUDIT reports, etc. These features are all designed both to replace very difficult, error-prone, manual methods and to implement things that can't be done manually at all. 1. All users within special capability (PM, SM, OP, NM, NA) accounts should have user passwords. As mentioned above, SECURITY/3000 can prevent any user from logging on to any account (or just to "special capability" accounts) without an MPE user password or, optionally, a SECURITY/3000 User Profile (with its own password). Since a user with AM capability can give himself any capability that his account has, VEAUDIT reports consider an AM user in an account that has SM, PM, or OP to already have SM, PM, or OP; whether his AM-user id currently has it or not. Some of the relevant VEAUDIT reports include: * passwordless users with SM/PM/OP capability; * all passwordless users; * users protected only by account-level passwords * users with AM capability 2. All users within accounts accessible by more than one person should have individual user passwords. With MPE alone, this requires assigning a separate MPE user ID to each user. Although MPE provides session names, there is no way to ensure that a given user will log on with a particular session name. Sometimes you may have to have users share a functional user id, like CLERK, but you still want to provide a unique identifier for each user. SECURITY/3000 User Profiles allow you to put one-way encrypted SECURITY/3000 passwords on individual session names. 3. Purge obsolete and unused users from all accounts. 4. Change relevant user passwords when employees with knowledge of passwords leave the organization. This is a good policy to establish, but... what if you forget? Or what if the user's manager forgets to notify you that someonehas left his department? And which passwords are "relevant", anyway? SECURITY/3000 obsolescence lets you ensure that old MPE user IDs cannot be used indefinitely to log on to your system. If no one is regularly using and changing a password, it will expire and no one can later "discover" (or remember!) it and log on. If someone is using the password, he will be given the chance to change it at logon time shortly before it expires. SECURITY/3000 also lets any user change his own password, any time he wants to (the easier it is for a user to change his password, the more likely he is to do it). Don't forget -- any user with AM capability can add as many MPE user IDs (without passwords) as he likes, whenever he wants to. Not only are there VEAUDIT reports to show directory changes (see below), but if you enable SECURITY/3000 User Profiles, simply adding a new MPE user id will not let anyone log on. You can selectively permit and/or forbid AM (and other) users to maintain User Profiles, account by account (or user by user, or by capability...), and log every add, change, delete, etc. VEAUDIT reports show (among many other things): * MPE passwords unchanged in the last nn (however many) days; * SECURITY/3000 passwords unchanged in the last nn days; * SECURITY/3000 user listing * recent MPE directory changes * recent SECURITY/3000 users changes Step three: Control system access: 1. Configure all modem ports to TYPE 16, SUBTYPE 1 to ensure that sessions will terminate when the associated line is disconnected. This configuration change indeed ensures that anyone who hangs up a dial-in line will be logged off. A much more serious problem, however, is the user who logs on (whether through a dial-in line or not), and then walks away from his terminal. Since, as far as the system knows, anyone who uses that terminal is the same user that was so carefully identified by passwords at logon time, this becomes a major security violation. The LOGOFF feature of SECURITY/3000, simply put, will log off anyone who leaves an unused terminal (dial-in or not) logged on. 2. Investigate whether your PSDN [X.25] vendor can restrict access to your system to specific X.25 addresses. 3. :DOWN modem ports until required. Unfortunately, this won't do you much good unless you have 24-hour operations support so that someone is there to :UP the modem port when you do need it! Even if you do have someone there, there are weaknesses in this method (Do you always remember to :DOWN it again when they're done? Did you :DOWN all of your modem ports again after the last system restart?). See our response to point 5 below for a better solution. 4. Investigate hardware and software technologies for restricting dial-in access to authorized users. SECURITY/3000 provides terminal passwords, requiring anyone who logs on to a specific port or set of ports (like "all dial-in lines") to enter an extra password. This way, even normally authorized users can't dial in unless they know the terminal password. SECURITY/3000 also allows you to prohibit users from logging on to particular user IDs or accounts by: time-of-day, day-of-week, terminal, number of jobs running in a given account, existence of a particular file, etc. -- almost any arbitrary condition (or combination of conditions) you may want to specify! 5. Require positive authentication of any caller requesting access to your system, such as the HP support engineer asking to connect to your system to gather data. One possible use of SECURITY/3000's ability to prohibit users from logging on based on "arbitrary conditions" (mentioned above) would be to set up a logon for MANAGER.TELESUP that requires a console operator to ":REPLY pin,YES" every time someone tries to log on as MANAGER.TELESUP (or, maybe, whenever they log on to a dial-in line)! 6. Assign PSDN [X.25] passwords, if possible, and change them on a regular basis. Step Four: Restrict privileges: 1. When appropriate, use LOGON UDCs (with NOBREAK and :CONTINUE) for users that do not require access to MPE. This one is easy to set up! However, the main problem here is that the user will have to re-log on to change from one application to another. Logging on is one of the slowest activities on an HP3000 (for many good reasons). SECURITY/3000 provides a much more flexible solution via its logon MENUs. If you set up a user with a logon MENU, then when that user logs on he won't get direct access to MPE -- instead, he'll be shown the menu and asked to select the option he desires from it. SECURITY/3000 MENU options can execute MPE commands (or, if you own MPEX, MPEX commands), stream jobs, RUN programs, and more! MENUs can be used to perform virtually any task on the HP3000 that could be performed without them! VEAUDIT reports will show you if your system UDCs can be easily disabled by anybody! 2. Review the need for special capabilities (PM, SM, OP, NM, NA) at the account, group and program levels, and remove any unnecessary capabilities. A group with PM capability should not have SAVE:ANY access. Note: that last sentence is so important, it will be discussed below. Special capabilities are perhaps one of the most frequently misunderstood aspects of system security. Not granting them to users who need them is just as bad as giving them out freely to everyone. A common example: in order for a user to control a printer in his own department, he must be :ALLOWed each of the spooler commands every time he logs on, or every user on the system must be :ALLOWed these commands at all times! We have even seen users given SM capability so that they could execute the :CONSOLE command to do what they want (sort of like opening a lock with a cannon -- it works, but makes it hard to close the door again afterwards...). SECURITY/3000 has a way to automatically grant spooler (and other console) commands to particular users each time they log on. The VEAUDIT concise directory listing, as mentioned earlier, is a much more convenient way to determine what capabilities each account, group, and user has. In addition, VEAUDIT reports: * users with SM/PM/OP capability; * groups with PM capability that don't need it; * users with AM capability -- including all capabilities their account has, which they can easily obtain. 3. Remove all programs from your system which allow unprivileged users to obtain special capabilities. VEAUDIT provides a report of all privileged programs, so that you can identify them, determine what they do, and remove the ones that don't belong on your system. 4. Program files with PM capability should not be RELEASEd. This is a very important recommendation, but -- how are you going to find these files? In fact, the PM program doesn't even have to be RELEASEd; simply having Write:ANY access is bad! (For details, you might consult the book "Thoughts And Discourses On HP3000 Software" by Eugene Volokh). A single MPEX command, "%LISTF @.@.@(ISPROG and PROG.PMCAP and ISRELEASED),SEC", will show you all :RELEASEd PM program files. (Do you notice how closely the command syntax matches the wording of the HP requirement?) Other kinds of :RELEASEd (or globally-writable or even -readable) files can create security loopholes, too. VEAUDIT will reveal: * globally-writable program files in PM groups (of course); * globally-writable job streams that logs on as SM/PM/OP users (or do you read every line of every SM job before you :STREAM it?); * globally-readable job streams that contain SM/PM/OP passwords; * globally-readable job streams that contain any embedded passwords; * globally writable jobs that log on anywhere; * all globally writable files (including :RELEASEd). Of course, simply finding all :RELEASEd files is not enough -- how will you :SECURE them? One at a time? MPEX's fileset-handling capabilities, combined with its many file attribute variables and functions, allow you to very easily :SECURE all :RELEASEd PM programs on your system. 5. User-developed and third-party programs with PM capability should be reviewed for security implications and should be secured by a lockword if appropriate. As we mentioned above, VEAUDIT will find all PM programs on the system for you so that you can make sure you know what they all are. Step five: Restrict access to sensitive information 1. Restrict READ access to UDC files, job streams and other files containing user names, account names, passwords, remote system names, remote logons, phone numbers and other sensitive information. Restricting READ access only applies to the disc file; it won't help much if a copy of an SM job you were working on (or a program with embedded IMAGE passwords...) is later found in a trash can! R:GU access doesn't work on printouts! STREAMX allows you to completely avoid embedded passwords, lockwords, :REMOTE HELLO passwords, and much, much more! This applies to job streams, SECURITY/3000 menus, and MPEX command files, all of which can be executed by users who only have eXecute access! 2. Secure the NETCON database and other files containing system or network configuration information. 3. If possible, remove embedded passwords from job streams. But, of course it isn't possible! MPE requires you to embed passwords in job streams! STREAMX lets you avoid having to embed passwords. It automatically inserts passwords (both "!JOB-card" and "!REMOTE HELLO" passwords) into job streams at job submission time. If the job contains an invalid password, STREAMX will replace it with the correct one; this allows you to change passwords immediately without having to find and edit all of your jobs. STREAMX will also automatically insert file lockwords. (All of this is, of course, subject to normal security restrictions). VEOPEN, another SECURITY/3000 feature, eliminates the need to embed IMAGE passwords in jobs and programs! VEAUDIT report 303 will show you job streams that have embedded, valid, passwords in them. 4. Move sensitive files created by system maintenance processes such as BULDACCT.PRV.TELESUP. 5. Restrict access to documentation relating to sensitive utility programs. Step six: Monitor system activity: 1. Enable System Logging events #2 (Job Initiation), #3 (Job Termination) and #15 (Console Log Event). 2. Review system logs regularly for suspicious activity. Unfortunately, although MPE can log all kinds of interesting information, there is no convenient way to select from and report on these log files. SECURITY/3000 has its own logging facility, with very flexible reporting capabilities. You can log all logons, job stream submissions, password changes, attempted security violations, and more. You can sort and select log records based on any arbitrary conditions; e.g., you can list all access to the PAYROLL from the dialup lines, or all jobs submitted by the user JOE,CLERK.AP, or all attempted (but disallowed) logons between 10 PM and 5 AM. Conclusion: Computer security is a very complex subject. As we have seen, HP is doing their best to make you aware of many of the potential pitfalls and the need to "cover them up". VESOFT provides many tools (shovels?) to help you accomplish this.