The SERVAUTH Resource Class

sponsored by the Henderson Group Computer Security Consulting and Training

(This article describes the SERVAUTH resource class, used with IBM mainframe computers as a feature of the RACF computer security software to secure TCP/IP access. This article was updated in August, 2004 to provide minor corrections, to add background information, to describe new functions, to clarify situations where SERVAUTH might be used, and to add comments for auditors. Special thanks to Rob Weemhoff of IBM in the Netherlands for gently pointing out needed corrections.)

The SERVAUTH resource class supports TCP/IP (Transmission Control Protocol / Internet Protocol) security by controlling these functions:

  1. Access to the TCP stack (that is, to use TCP/IP itself)

  2. Net access (specifying who can access a specified network or network segment)

  3. Port access (specifying who can use which TCP and UDP [User Datagram Protocol] ports) [UDP is another protocol, similar to TCP in that it rides on top of IP, but different in that it is connectionless.] [A port is a number which corresponds to one application, for example, port 25 is often dedicated to email.]

  4. TN3270 Secure Telnet Port Access

  5. Netstat Access Control

  6. Webserver page caching

  7. MODDVIPA command

  8. Socket Option

  9. Network Management

You will probably not want to use all of these functions. However, if your shop is using TCP/IP on MVS, then you will certainly want to discuss at least the first four functions with your network staff and your security staff.

You may want to start by defining SERVAUTH rules in WARNING mode to collect information without disrupting operations.

Please note that the SERVAUTH resource class will also be taking over some of the responsibilities of the TERMINAL class as we shift to the new, extended set of IP addresses. (IPv6 provides many more possible addresses than IPv4.)

As you can see, the SERVAUTH class fills in some important, previously-missing controls for TCP/IP.

Remember that with TCP/IP, each message has an IP address which is used for routing the message,to deliver it to a specific computer or site on the Internet. Each TCP/IP message also specifies a TCP port, that is a number which specifies the application (or server) which is to process the message.

SERVAUTH is easier to understand if you keep in mind the distinction between in-bound access and out-bound access. Think of your MVS mainframe as a platform which supports several servers, such as Websphere. Think of a user named George at his desk running Windows XP with Internet Explorer as a client trying to access the servers on your mainframe over the Internet, or over your internal intranet. When George tries to access your servers, the request is in-bound.

On the other hand, when a program on your mainframe wants to be a server (to talk to clients like George), the request is out-bound. For example, when Websphere or CICS on the mainframe requests a connection to TCP/IP, it is trying to access the Internet (or internet) from within your computer, out-bound.

This may not seem like a request that needs to controlled, until you imagine a system programmer who is about to resign, and who wants to leave a backdoor into your system. If he can install a USS (UNIX System Services) program that makes an out-bound request using some unused port, then he will succeed.

In short, you want to be sure that only authorized ports have been opened in TCP/IP, the same way you want to be sure that only authorized user SVCs have been added to your system. Auditors will start paying attention to this, especially after the first publicized break-in to a mainframe system over the Internet.

Please note that while the examples below use RACF, the other two security software packages (ACF2 and TopSecret) handle SERVAUTH just as well. Computer Associates provides two cookbooks on their website (www.cai.com) for securing mainframes over the Internet. (One cookbook is for ACF2, the other for TopSecret.)

The SERVAUTH class must be RACLISTed, so you might set it up with this command:

SETR CLASSACT(SERVAUTH) RACLIST(SERVAUTH) AUDIT(SERVAUTH) GENERIC(SERVAUTH)

and after changing any SERVAUTH rules, you might want to refresh it like this:

SETR RACLIST(SERVAUTH) REFRESH

Rules in this class all have names beginning: EZB.xxx. where xxx indicates which of the functions is being controlled. (Note that EZB is IBM's abbreviation for TCP/IP.)

The TCP/IP started task uses a control file, often named PROFILE.TCPIP, where the system programmer specifies what options are to be used. Several keywords in this file are used as parts of names of RACF rules, as you will see in the examples below.

1) Access to the TCP stack (that is, to use TCP/IP itself)

This prevents a user who has no business using TCP/IP from making calls to TCP and from collecting information about the network, its names, and what servers and users are active. The call to RACF is made from the socket() call, a standard call in the C programming language to request a connection to TCP/IP. (Remember that a socket is the combination of an IP address and a port number.) This is an out-bound request.

This call to RACF is not made for socket() calls issued in the TCP/IP address space, the USS address space, or the VTAM address space. When RACF is called for this check, if there is no matching rule, then all access requests are permitted. At least READ access is sufficient. The userids permitted to this rule should be the userids of servers like FTPD and the HTTPD.

SERVAUTH rules for this function have names like:

EZB.STACKACCESS.sysname.tcpname

where sysname is the name of the MVS system
(&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task

2) Net access (specifying who can access a specified network)

This prevents a user from accessing a given network, subnetwork, or host. RACF is called for this check when a TCP/IP packet is sent. You could use this to restrict which users are permitted to access the Internet or your intranet. READ access is sufficient. This use of SERVAUTH is for both inbound and outbound messages, but it is the userids of the servers (not the clients) that should be permitted to it.

SERVAUTH rules for this function have names like:

EZB.NETACCESS.sysname.tcpname.netname

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task and
netname is the name of the network, subnetwork, or host as identified in the NETACCESS statement in PROFILE.TCPIP.

3) Port access (specifying who can use which TCP and UDP ports)

You would use this to prevent a programmer from writing his own programs which use a given port, then executing those programs to "hijack" the port. (For example, such a program might otherwise take over the e- mail port, browse all e-mail, and then pass it on to the real e-mail server.) READ access is sufficient. The userids of servers (not clients) should be permitted for this outbound use of SERVAUTH.

SERVAUTH rules for this function have names like:

EZB.PORTACCESS.sysname.tcpname.portname

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task and portname is the RACF name for the port, as specified in the SAF operand of the PORT or PORTRANGE statement in PROFILE.TCPIP.

4) TN3270 Secure Telnet Port Access

This is used to restrict users from using a secure port (where the previous function restricted access to any port). When a port is secured with SSL (Secure Sockets Layer), this use of SERVAUTH prevents unauthorized users from accessing the port. This extra control is used in conjunction with the CLIENTAUTH statement in PROFILE.TCPIP. RACF is called only if the CLIENTAUTH statement specifies SAFCERT. READ access is sufficient.

SERVAUTH rules for this function have names like:

EZB.TN3270.sysname.tcpname.PORTnnnnn

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task and
nnnnn is the port number (zero-filled on the left if necessary)

5) Netstat Access Control

This is used to control who can issue the NETSTAT command to collect information about TCP/IP in your installation. READ access is sufficient. If there is no matching rule, then access is allowed. The userids of whoever is authorized to issue the NETSTAT command should be permitted to these rules.

SERVAUTH rules for this function have names like:

EZB.NETSTAT.sysname.tcpname.netstatoption

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task and
netstatoption is the netstat command option to be controlled

6) Webserver Page Caching Services

This is used to restrict users from using the Fast Response Cache Accelerator, a performance feature used to speed up servers such as the http server in Websphere. READ access is sufficient. If there is no matching rule, then access is allowed. The userid of the authorized web server, for example the http server, should be permitted to this rule.

SERVAUTH rules for this function have names like:

EZB.FRCAACCESS.sysname.tcpname

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task

7) The MODDVIPA Command

This is used to restrict users from issuing the MODDVIPA utility program. The MODDVIPA program is used to activate or de-activate a dynamic VIPA (Virtual IP Address, a feature of TCP/IP on MVS that reduces single points of failure). READ access is sufficient. If there is no matching rule, then access is allowed only to superusers. The userid of whoever is authorized to execute MODDVIPA should be permitted to this rule.

SERVAUTH rules for this function have names like:

EZB.MODDVIPA.sysname.tcpname

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task

8) Socket Option

This is used to restrict users from setting a TCP option called SO_BROADCAST which would allow them to broadcast messages to everyone on the network or subnetwork. READ access is sufficient. If there is no matching rule, then access is allowed. The authorized userid of whatever program is doing the broadcasting should be permitted to this rule.

SERVAUTH rules for this function have names like:

EZB.SOCKOPT.sysname.tcpname.SO_BROADCAST

This rule may have RACF permissions specifying WHEN(PROGRAM( )).

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task

9) Network Management

This is used to restrict users from accessing network management information from: packet traces, connection activity, and SMF data, respectively. READ access is sufficient. If there is no matching rule, then access is allowed only to superusers and to users who are permitted to become superusers. The authorized userid of whoever is accessing this data should be permitted to the appropriate rule.

SERVAUTH rules for this function have names like:

where sysname is the name of the MVS system (&SYSNAME as specified by the MVS system programmer) and
tcpname is the name of the TCP/IP started task

Note to Auditors (and Others Who Want to Prepare for an Audit)

To audit TCP/IP on an MVS system, you will want to get a copy of the TCP/IP control file (often named PROFILE.TCPIP) for your work papers. You should also get a list of what TCP/IP ports have been authorized and what software uses each port. Use the NETSTAT command in TSO to learn what ports are active.

You should also get a list of all the SERVAUTH security software rules. (In RACF, you would issue the command RL SERVAUTH * ALL.)

Get the name of the TCP/IP started task and a list of the system symbols (such as &SYSNAME) since they will be part of the rule names in the SERVAUTH class. You can use the operator command DISPLAY SYMBOLS to do this.

Of course you would not want to produce a finding for a mainframe TCP/IP audit without assessing the relevant risk, as well as compensating controls. Assessing the risk is best done by considering risks for out-bound requests separately from in-bound requests. Such assessment should also consider what data and applications exist on the mainframe.

Compensating controls for such risk would include: firewalls; intrusion detection software (now included for free with mainframe TCP/IP); controls specified in the file PROFILE.TCPIP; physical access controls; encryption by means of Secure Sockets Layer, Transport Layer Secrurity, or Virtual Private Networks; and controls specified in the control files for server software such as Websphere.


Return to HG Home Page (www.stuhenderson.com)

About the Author

Stuart Henderson is a consultant and trainer who specializes in effective IT (Information Technology) audits and computer security. He has helped hundreds of organizations make better use of security software such as RACF, ACF2, and TopSecret. He has also helped these organizations address the technical and organizational issues surrounding cross-platform security. As President of the Henderson Group, he directs a variety of activities in support of the information security and IT audit communities. These include: seminars, consulting services, articles, and speeches. He is an experienced system programmer who has earned the Certified Internal Auditor, Certified Management Accountant, and Certified Data Processor designations. His seminars on computer security and audit of: MVS, DB2, RACF, networks, UNIX, WIndows, and other subjects are taught nationwide. He teaches Certified Information Systems Auditor review courses for the National Capital Area Chapter of the ISACA.

He speaks to groups such as SHARE, the Vanguard conferences, the Computer Security Institute, the DPMA, the ISSA, and the ISACA. Some of his topics have been: "How to Break Into z/OS Systems", "How to Break Into z/OS Systems Through the Internet", "What System Programmers Know that DSOs and EDP Auditors Should (or How I Would Break into Your System and What You Should be Doing to Stop Me)", What Non-Data Processing Executives Should Know and Do About Computer Security", "Combining VAX/VMS Security with IBM Mainframe Security", and "Tools for Maintaining Single Point of Control for Security". He is founder of the New York RACF Users Group and Editor of its newsletter. He also edits the email newsletter "the Mainframe Audit News". His website is at http://stuhenderson.com. He can be reached at (301) 229-7187 or stu@stuhenderson.com. Return to HG Home Page (www.stuhenderson.com)