Skip to content

Add initial IEC 62443-4-2 controls and security-level profiles for RHEL 9 - #15205

Draft
Arden97 wants to merge 1 commit into
ComplianceAsCode:masterfrom
Arden97:iec_62443
Draft

Arden97 wants to merge 1 commit into
ComplianceAsCode:masterfrom
Arden97:iec_62443

Conversation

@Arden97

@Arden97 Arden97 commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Description:

  • Add the IEC 62443-4-2 control framework for RHEL 9.
  • Define SL1–SL4 levels with cumulative inheritance.
  • Represent base requirements and applicable requirement enhancements as separate controls.
  • Add RHEL 9 profiles for SL1, SL2, SL3, and SL4.

Rationale:

  • This is a first part of ISA/IEC 62443 security profile development for RHEL 9
  • Fixes OPENSCAP-7229

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Used by openshift-ci bot. label Oct 15, 2026
@openshift-ci

openshift-ci Bot commented Oct 15, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@Arden97 Arden97 added this to the 0.1.83 milestone Oct 15, 2026
@Arden97 Arden97 assigned Arden97 and unassigned Arden97 Oct 15, 2026
@Arden97
Arden97 requested review from ggbecker and jan-cerny October 15, 2026 14:23
Comment on lines +54 to +56
- sl2
- sl3
- sl4

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that if you have the inheritance defined, you only need to set the lowest level, otherwise the inheritance becomes redundant.

In this case, defining only sl2 would be enough, since sl3 inherits from sl2 and sl3 inherits from sl4, so every three levels will select this control by inheritance

Suggested change
- sl2
- sl3
- sl4
- sl2

I think this can be applied to the whole control file

@ggbecker

Copy link
Copy Markdown
Member

In general, I believe control files with well defined sections can be broken down into multiple files for better maintenance and legibility, see how nist 800 53 is defined: https://github.com/ComplianceAsCode/content/blob/master/products/rhel8/controls/nist_800_53 and https://github.com/ComplianceAsCode/content/blob/master/products/rhel8/controls/nist_800_53.yml

Comment on lines +34 to +49
- id: CR 1.1 RE(1)
title: Unique identification and authentication
levels:
- sl2
- sl3
- sl4
status: pending
rules: []

- id: CR 1.1 RE(2)
title: Multifactor authentication for all interfaces
levels:
- sl3
- sl4
status: pending
rules: []

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If these requirements are extensions of CR 1.1, I would group them under the main control for better legibility the same as done for the nist 800 53 here:

- id: ac-2
title: Account Management
levels:
- low
rules: []
status: pending
controls:
- id: ac-2.1
title: Automated System Account Management
levels:
- moderate
rules: []
status: pending
- id: ac-2.2
title: Automated Temporary and Emergency Account Management
levels:
- moderate
rules: []
status: pending
- id: ac-2.3
title: Disable Accounts
levels:
- moderate
rules: []
status: pending
- id: ac-2.4
title: Automated Audit Actions
levels:
- moderate
rules: []
status: pending
- id: ac-2.5
title: Inactivity Logout
levels:
- moderate
rules:
- accounts_tmout
- inactivity_timeout_value=15_minutes
- no_invalid_shell_accounts_unlocked
- no_password_auth_for_systemaccounts
- no_shelllogin_for_systemaccounts
- var_accounts_tmout=15_min
status: automated
- id: ac-2.6
title: Dynamic Privilege Management
rules: []
status: pending
levels:
- low
- id: ac-2.7
title: Privileged User Accounts
rules: []
status: pending
levels:
- low
- id: ac-2.8
title: Dynamic Account Management
rules: []
status: pending
levels:
- low
- id: ac-2.9
title: Restrictions on Use of Shared and Group Accounts
rules: []
status: pending
levels:
- low
- id: ac-2.10
title: Shared and Group Account Credential Change
rules: []
status: pending
levels:
- low
- id: ac-2.11
title: Usage Conditions
levels:
- high
rules: []
status: pending
- id: ac-2.12
title: Account Monitoring for Atypical Usage
levels:
- high
rules: []
status: pending
- id: ac-2.13
title: Disable Accounts for High-risk Individuals
levels:
- moderate
rules: []
status: pending

So you basically create a controls key under a controls:

I won't automatically inherit/select in the profiles, you still have to manually select the extended controls. But it helps with the control legibility. This is optional though.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CR 1.1 RE(1) and CR 1.1 RE(2) aren't Component Requirements (CR) but they are Requirement Enhancements (RE) of the Component requirement. Now, different security levels (SL) might contain different combination of CR and RE. In this example, the document specifies the SLs this way:

5.3.4 Security levels
The requirements for the four security levels that relate to CR 1.1 are:
• SL-C(IAC,component) 1: CR 1.1
• SL-C(IAC,component) 2: CR 1.1 (1)
• SL-C(IAC,component) 3: CR 1.1 (1) (2)
• SL-C(IAC,component) 4: CR 1.1 (1) (2)

Now the question is how we we will map these two concepts (CR and RE) to our "controls" concept and how we will assign them to the security levels.

In this example, to be able to create a profile that corresponds to the security level SL 1, we need to have a control in our control file that:

  • corresponds to the Component requirement CR 1.1,
  • contain rules needed for implementing the CR 1.1, but at the same time
  • doesn't contain rules needed for the requirement enhancements.

IIUC, if we do the nested controls in our control file as Becker proposes, we can specify different levels on the parent and child controls. That will bring more clarity to the control file. This important context from the policy document will be preserved also in our control file.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge/work-in-progress Used by openshift-ci bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants