This question came in from a customer who was reviewing the subsystem security on z/OS. For example CICS reports its own violations.
MQ security violations are reported by the security manager, RACF, and are displayed on the job log.
MQ delegates the security checks to RACF, so auditing is mostly done by RACF. The only exception is the RESLEVEL profile, which MQ writes its own audit records to RACF.
See a section in the IBM documentation.
For example, userid COLIN is not authorised to issue MQ commands, so there are messages on the job log.
%CSQ9 START CHINIT
ICH408I USER(COLIN ) GROUP(SYS1 ) NAME(COLIN PAICE )
CSQ9.START.CHINIT CL(MQCMDS )
INSUFFICIENT ACCESS AUTHORITY
FROM CSQ9.** (G)
ACCESS INTENT(CONTROL) ACCESS ALLOWED(NONE )%CSQ9 DEF QL(AAAA)
ICH408I USER(COLIN ) GROUP(SYS1 ) NAME(COLIN PAICE )
CSQ9.DEFINE.QLOCAL CL(MQCMDS )
INSUFFICIENT ACCESS AUTHORITY
FROM CSQ9.** (G)
ACCESS INTENT(ALTER ) ACCESS ALLOWED(NONE )
Trying to use a queue
ICH408I USER(COLIN ) GROUP(SYS1 ) NAME(COLIN PAICE )
CSQ9.ZZZZ CL(MQQUEUE )
INSUFFICIENT ACCESS AUTHORITY
ACCESS INTENT(UPDATE ) ACCESS ALLOWED(NONE )
The queue had been define with AUDITING FAILURES(READ)
Another queue had been defined with NOTIFY(COLIN). This means that whenever there was a violation, userid COLIN got a message sent to its TSO session.
RACF reports violations and audit information to SMF. You can use standard RACF facilities, such as RACF report writer, to process the SMF data.
Using RACF report writer
This RACFRW command is documented in the Z/OS Security Server RACF Auditors Guide. (Note this is deprecated, but the replacement seems to leave it to the user to do all the summarising etc.)
//SMFDUMP EXEC PGM=IFASMFDP,REGION=0M //SYSPRINT DD SYSOUT=A //ADUPRINT DD SYSOUT=A //OUTDD DD DISP=(MOD,CATLG),DSN=IBMUSER.SMF, // SPACE=(CYL,(5,5)), // DCB=(BLKSIZE=13000,RECFM=VB) //SMFDATA DD DISP=SHR,DSN=SYS1.S0W1.MAN1 //SMFDATB DD DISP=SHR,DSN=SYS1.S0W1.MAN2 //SMFOUT DD DISP=(NEW,PASS,DELETE),SPACE=(CYL,(10,1)), // DSN=&&SMFOUT //SYSIN DD * INDD(SMFDATA,OPTIONS(DUMP)) INDD(SMFDATB,OPTIONS(DUMP)) OUTDD(SMFOUT,TYPE(020,030,080,081,083)) DATE(2020221,2022221) START(0000) ABEND(NORETRY) USER2(IRRADU00) USER3(IRRADU86) /* //S1 EXEC PGM=IKJEFT01,REGION=0M //SYSPRINT DD SYSOUT=* //SORTWK01 DD DISP=(NEW,PASS,DELETE),SPACE=(CYL,(10,1)), // DSN=&&SORT1 //SYSTSPRT DD SYSOUT=* //RSMFIN DD DISP=(SHR,DELETE),DSN=*.SMFDUMP.SMFOUT //SYSTSIN DD * RACFRW TITLE('RACF REPORTS') GENSUM SELECT VIOLATIONS SUMMARY RESOURCE BY(USER) END /*
The report gave
USER/ -------- I N T E N T S-------- *JOB SUCCESS WARNING VIOLATION ALTER CONTROL UPDATE READ TOTAL MQCMDS =+CSQ9.REFRESH.SECURITY COLIN COLIN PAICE 0 0 1 1 0 0 0 1 MQQUEUE=CSQ9.ZZZZ ADCDC ADCDC 0 0 1 0 0 1 0 1 COLIN COLIN PAICE 0 0 6 0 0 6 0 6
From this we can see userid COLIN (with owner’s name COLIN PAICE) had 6 violations trying to get UPDATE access to the queue(MQQUEUE) ZZZZ in queue manager CSQ9.
The userid COLIN also tried to use the REFRESH SECURITY command. The + in +CSQ9, means that a generic profile was used. There was one violation, needing ALTER access.
Auditing successes
When the queue had AUDITING ALL(READ) it wrote a record for all accesses to the queue – success or failure.
using
//SYSTSIN DD *
RACFRW TITLE('RACF REPORTS') GENSUM
SUMMARY RESOURCE BY(USER)
END
/*
and no Select statement, it reported all records. I had an application which opened a queue for output, put a message to it, opened the queue for input, got the message. The output of RACFRW had
USER/ -------- I N T E N T S-------- *JOB SUCCESS WARNING VIOLATION ALTER CONTROL UPDATE READ TOTAL MQADMIN = COLIN COLIN PAICE 8 0 0 0 0 0 0 8 MQQUEUE = CSQ9.ZZZZ COLIN COLIN PAICE 14 0 1 0 0 15 0 15 IBMUSER 2 0 0 2 0 0 0 2
For every open/close of the ZZZZ queue, there were two opens for update, and and open of the MQADMIN class – with no object.
With AUDITING FAILURES(READ), so only failures of READ access or above are logged, the output was
USER/ -------- I N T E N T S-------- *JOB SUCCESS WARNING VIOLATION ALTER CONTROL UPDATE READ TOTAL MQADMIN = COLIN COLIN PAICE 2 0 0 0 0 0 0 2
With an entry once for each job.
SMF is far too low level and complex for users to process themselves. The MQ SMF records for example are far beyond the ability of most end users to interpret and little help is given by the product.
z/Secure provides a more useable interface to RACF including RACF SMF records.
However I would prefer to see event messages generated, to match MQ on other platforms, for security events on z/OS as well as any SMF.
LikeLike