| Previous | Contents | Index |
The following command procedure presumes:
$ !
$ ! LJK$SECURITY_EXAMPLES:LJK$SECURITY_TCPIP_MASTER.COM
$ !
$ ! To use this command procedure, copy it to another directory
$ ! before changing the sections surrounded by rows of asterisks.
$ ! That way local modifications will not be wiped out when you
$ ! upgrade to the next version of LJK/Security.
$ !
$ ! This command procedure will copy any LJK/Security request files
$ ! it finds on the master node out to the appropriate tributary node.
$ !
$ ! Then it will invoke LJK/Security to process any result files
$ ! it finds on the master node to create the final result file.
$ !
$ ! The process under which this command procedure executes must
$ ! have whatever rights are required to transfer files between
$ ! nodes and must have one of the identifiers:
$ !
$ ! LJK$SECURITY_REMOTE
$ ! LJK$SECURITY_ROLE_STARTUP
$ ! LJK$SECURITY_ALL
$ !
$ ON WARNING THEN GOTO RESUBMIT
$ !
$ ! When run interactively, this command procedure just submits itself.
$ ! The sole parameter is the optional name of a batch queue to use.
$ !
$ IF F$MODE() .NES. "BATCH" THEN GOTO RESUBMIT
$ !
$ ! A list of the logical names pointing to the directories
$ ! in which requests are stored
$ !
$ ! *********************************************************
$ ! *********************************************************
$ !
$ REQUEST_LIST ="IA_BOSTON,IA_DENVER"
$ !
$ ! *********************************************************
$ ! *********************************************************
$ !
$ ! ---------------------------------------------------------
$ !
$ ! Ship any any REQUEST file pending for tributary nodes.
$ ! This example relies upon a textual relationship between
$ ! the logical name and the DECnet node name. Your command
$ ! procedure might use a different technique.
$ !
$ TRIBUTARY_INDEX = -1
$ TRIBUTARY_LOOP:
$ TRIBUTARY_INDEX = TRIBUTARY_INDEX + 1
$ NEXT_TRIBUTARY = F$ELEMENT(TRIBUTARY_INDEX,",",REQUEST_LIST)
$ IF NEXT_TRIBUTARY .EQS. "," THEN GOTO TRIBUTARY_DONE
$ !
$ ! Look for request files in this area
$ !
$ NEXT_REQUEST = F$SEARCH("",321)
$ REQUEST_LOOP:
$ NEXT_REQUEST = F$SEARCH(NEXT_TRIBUTARY+":LJK_SECURITY.DAT;-0",321)
$ IF NEXT_REQUEST .EQS. "" THEN GOTO REQUEST_DONE
$ !
$ ! Ensure it is complete by getting exclusive access. If the
$ ! oldest version is still being written, wait for the next run.
$ !
$ OPEN EXCLUSIVE_CHAN/APPEND/ERROR=REQUEST_DONE 'NEXT_REQUEST'
$ CLOSE EXCLUSIVE_CHAN
$ !
$ ! We have found a complete request file -- copy it to the Tributary Node
$ !
$ ! *********************************************************
$ ! *********************************************************
$ ! *** This command uses a DECnet copy utilizing DECnet ***
$ ! *** proxy logins. Replace it with a COPY/TCP or ***
$ ! *** other command suitable to your environment. ***
$ ! *********************************************************
$ ! *********************************************************
$ !
$ DEFINE/USER TRIBUTARY 'F$ELEMENT(1,"_",NEXT_TRIBUTARY)'::
$ COPY/LOG 'NEXT_REQUEST' TRIBUTARY::IA_REQUEST:;
$ DELETE 'NEXT_REQUEST'
$ !
$ ! *********************************************************
$ ! *********************************************************
$ !
$ GOTO REQUEST_LOOP
$ REQUEST_DONE:
$ !
$ GOTO TRIBUTARY_LOOP
$ TRIBUTARY_DONE:
$ !
$ ! ---------------------------------------------------------
$ !
$ ! Process any result file copied onto this master node
$ !
$ NEXT_RESULT = F$SEARCH("",321)
$ RESULT_LOOP:
$ NEXT_RESULT = F$SEARCH("IA_RESULT:LJK_SECURITY.DAT;-0",321)
$ IF NEXT_RESULT .EQS. "" THEN GOTO RESULT_DONE
$ !
$ ! Ensure it is complete by getting exclusive access. If the
$ ! oldest version is still being written, wait for the next run.
$ !
$ OPEN EXCLUSIVE_CHAN/APPEND/ERROR=RESULT_DONE 'NEXT_RESULT'
$ CLOSE EXCLUSIVE_CHAN
$ !
$ ! We have found a complete Result file -- process the request
$ !
$ ! *********************************************************
$ ! *********************************************************
$ !
$ DEFINE/USER NEXT_RESULT 'NEXT_RESULT' ! 15 or fewer characters
$ MCR LJK$SECURITY REMOTE NEXT_RESULT
$ DELETE 'NEXT_RESULT'
$ !
$ ! *********************************************************
$ ! *********************************************************
$ !
$ GOTO RESULT_LOOP
$ RESULT_DONE:
$ !
$ ! ---------------------------------------------------------
$ !
$ RESUBMIT:
$ !
$ ! When run interactively, this command procedure just submits itself.
$ ! The sole parameter is the optional name of a batch queue to use.
$ !
$ PROC = F$ENVIRONMENT("PROCEDURE") ! Our command procedure
$ PROC = PROC - F$PARSE(PROC,,,"VERSION") ! but the latest version
$ !
$ ! Use any queue specified in P1
$ !
$ QUEUE = F$GETQUI("DISPLAY_JOB","QUEUE_NAME",,"THIS_JOB")
$ IF P1 .NES. "" THEN QUEUE = P1
$ IF QUEUE .NES. "" THEN QUEUE = "/QUEUE=" + QUEUE
$ show symbol queue
$ !
$ submit 'PROC' -
/AFTER="+00:05:00.00" - ! Every 5 minutes
/NONOTIFY - ! do not bother the humans
/PARAMETERS="''P1'" - !! Preserve any queue name specified
/NOPRINTER - ! Do not print log file
'QUEUE' - ! Specified or existing queue
/RESTART - ! Restart-enabled
/RETAIN=ERROR ! Track failures
$ !
$ EXIT $STATUS ! From LJK$SECURITY_TCPIP_MASTER.COM
$ !
|
This appendix offers guidance for use of LJK/Security in complying with the US National Institute of Standards and Technology (NIST) Special Publication 800-53a.
Within this appendix, specialized terms defined in 800-53 are presented in italic text, while specialized terms defined in the Glossary of the LJK/Security Reference Manual are presented in boldface text. The distinction is important because some words like "policy" are defined (differently) in both places. |
If you are new to LJK/Security the vast array of capabilities can
seem daunting. To get some quick results, use the
following steps.
M.1.1 Setting Up the Environment
$ SET DEFAULT SYS$SYSTEM $ MCR AUTHORIZE GRANT/IDENTIFIER LJK$SECURITY_ALL <your-user-name> |
$ LJK/SECURITY CREATE POLICY MY_NIST_POLICY $ @LJK$SECURITY_EXAMPLES:POLICY_NIST_SP_800_53A_HIGH.COM MY_NIST_POLICY |
If you are not a touch typist, you can open this document on screen and copy and paste many of the commands as you need them. |
$ DIRECTORY LJK$SECURITY_EXAMPLES:POLICY_VMS_SHA1_*.COM; $ DIRECTORY LJK$SECURITY_EXAMPLES:POLICY_VMS_SIMPLE_*.COM; |
$ @LJK$SECURITY_EXAMPLES:POLICY_VMS_SIMPLE_AXP_07_3_2.COM MY_NIST_POLICY |
$ LJK/SECURITY/NOSMG/INTERFACE=CHARACTER_CELL |
LJKS> CREATE ASSESSMENT MY_NIST_ASSESSMENT LJKS> MODIFY ASSESSMENT MY_NIST_ASSESSMENT/NODE=<this-node>/POLICY=MY_NIST_POLICY |
LJKS> RUN MY_NIST_ASSESSMENT /METHODS=QUICK |
LJKS> REPORT MY_NIST_ASSESSMENT/STATUS_ONLY |
LJKS> REPORT MY_NIST_ASSESSMENT/SUMMARY=COMMENTS/OUTPUT=NIST_SUMMARY.TXT LJKS> REPORT MY_NIST_ASSESSMENT/OUTPUT=NIST_DETAILS.TXT |
LJKS> RUN MY_NIST_ASSESSMENT |
LJKS> [Ctrl/Z] |
You can specify which conditions are actually acceptable by customizing
your policy. Then subsequent
assessment runs will produce a proper "management
by exception" report.
M.1.3 Choosing a User Interface
To customize your policy will take more interaction and be an ongoing activity as personnel and requirements change. You might want to use a different user interface. You have your choice of three
Use your choice of interface to add exemptions to your policy as follows
1 The person who grants privileges to usernames will be a separate person from the VMS system manager in any organization which implements "Separation of Duties" control specified in NIST 800-53 AC-5 for FIPS 199 high-impact or moderate-impact systems. It might be the person who sets up new user accounts, or someone else specially designated to deal with privileged accounts. |
M.2 Saving Time on Annual NIST Security Assessments
Organizations subject to NIST Special Publication 800-53 can save considerable effort if annual NIST Security Assessments required for control CA-2 make use of data collected for Continuous Monitoring required for control CA-7. This is easily done when one can determine that assessments for CA-7 cover all 800-53 controls, since subsetting is allowed for CA-7 Continuous Monitoring but not for CA-2 Security Assessment.
In other cases it will be necessary to create a separate policy for CA-2 Security Assessment, but effort that has gone into CA-7 Continuous Monitoring can still be leveraged as shown below to minimize the work required for annual CA-2 Security Assessment. The technique described involves creating a LJK/Security policy for CA-2 Security Assessment using two different techniques:
Use of LJK/Security varies according to each assessment method chosen in the MODIFY ASSESSMENT or RUN command:
For the INTERVIEW, INVASIVE_TESTING and MANUAL_EXAMINATION methods an organization with multiple VMS systems will typically designate many of the groups within each method as "Common Controls". For each such groups the organization will conduct the assessment on one node and then use the commands:
$ LJK/Security ASSIGN <target-assessment> <source-assessment-1> /INTERVIEW /GROUP=PA17 $ LJK/Security ASSIGN <target-assessment> <source-assessment-2> /INTERVIEW /GROUP=QUIZ* $ LJK/Security ASSIGN <target-assessment> <source-assessment-3> /INVASIVE_TESTING /GROUP=* |
Examples of groups where common controls are appropriate would be:
The ALL and QUICK methods are derivatives of the other methods.
M.2.2 The Multi-faceted Nature of NIST Assessment
Two of the NIST Special Publication 800-53 CA-* controls have
a recursive relationship to the overall document because they actually
pertain to occasions when compliance with other 800-53
controls should be verified:
NIST 800-53 Control CA-2 says in part "The organization conducts
an assessment of the security controls in the information system
[Assignment: organization-defined frequency, at least annually]".
This appendix will use the term "annual" for what in some
cases might actually be "quarterly" or some other period, but
the interaction issues below are the same.
M.2.2.2 800-53 CA-7 Continuous Monitoring
NIST 800-53 Control CA-7 says in part "The organization monitors the security controls in the information system on an ongoing basis", and also "selects a subset of the security controls employed within the information system for purposes of continuous monitoring". It says continuous monitoring activities include "ongoing assessment of security controls".
As one considers the question of which controls should be
subjected to that ongoing assessment, an ancillary question will arise
about what effort is required for this continuous monitoring. There is
no good reason to avoid continuous monitoring of a control if
the effort required is minimal. By definition using the LJK/Security
Automatic Testing method to test controls
takes minimal effort, because the testing is automated. So for most VMS
systems, testing controls related to the protection of every
file on every disk once a week and other controls daily or
hourly is quite reasonable. For special situations like process control
it might be preferable to run that continuous monitoring only during a
designated maintenance period, particularly if a realtime device must
be manipulated by the VMS system with millisecond response times.
M.2.2.3 Are CA-7 Assessments Adequate For CA-2 ?
In some cases agency Inspector General staff or independent outsiders will be charged with conducting the annual CA-2 Security Assessment as specified by control enhancement CA-2 (1), while regular Information Security personnel will handle the CA-7 Continuous Monitoring. In such cases, one question that immediately arises is whether a separate CA-2 Security Assessment must be conducted or whether results from the ongoing CA-7 Continuous Monitoring will suffice.
In the context of LJK/Security assessment of NIST 800-53 controls, the answer to that question involves several issues:
| Previous | Next | Contents | Index |