Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re-upload: fix ssh ClientAliveCountMax check #461 #467

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 40 additions & 19 deletions core/mondoo-linux-security.mql.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1318,7 +1318,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1321 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
Copy link
Member

Choose a reason for hiding this comment

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

I agree, having a space before a comma reads not well.

return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-w\s+\/etc\/sudoers\.d(\/?)\s+\-p\s+wa\s+\-k\s+scope(\s+)?$/))
Expand Down Expand Up @@ -1358,7 +1358,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1361 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
variants:
- uid: mondoo-linux-security-login-and-logout-events-are-collected-debian
Expand Down Expand Up @@ -1447,7 +1447,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1450 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-w\s+\/var\/run\/utmp\s+\-p\s+wa\s+\-k\s+session(\s+)?$/))
Expand Down Expand Up @@ -1490,7 +1490,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1493 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.flat.unique.any(_ == /settimeofday/)
Expand Down Expand Up @@ -1560,7 +1560,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1563 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
appArmorSys = props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-w\s+\/etc\/apparmor(\/?)\s+\-p\s+wa\s+\-k\s+MAC-policy(\s+)?$/))
Expand Down Expand Up @@ -1611,7 +1611,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1614 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
variants:
- uid: mondoo-linux-security-events-that-modify-the-systems-network-environment-are-collected-debian-rhel
Expand Down Expand Up @@ -1736,7 +1736,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1739 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.flat.unique.any(_ == /chmod/)
Expand Down Expand Up @@ -1824,7 +1824,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1827 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.flat.unique.any(_ == / creat /)
Expand Down Expand Up @@ -1904,7 +1904,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1907 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-w\s+\/etc\/group\s+\-p\s+wa\s+\-k\s+identity(\s+)?$/))
Expand Down Expand Up @@ -1950,7 +1950,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]

Check warning on line 1953 in core/mondoo-linux-security.mql.yaml

View workflow job for this annotation

GitHub Actions / Run spell check

` ,` matches a line_forbidden.patterns entry: `( )+,`. (forbidden-pattern)
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-a\s+always\,exit\s+\-F\s+arch\=b64\s+\-S\s+mount\s+\-F\s+auid\>\=1000\s+\-F\s+auid\!\=(4294967295|unset|-1)\s+\-k\s+mounts(\s+)?$/)) || props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-a\s+always\,exit\s+\-F\s+arch\=b32\s+\-S\s+mount\s+\-F\s+auid\>\=1000\s+\-F\s+auid\!\=(4294967295|unset|-1)\s+\-k\s+mounts(\s+)?$/))
Expand Down Expand Up @@ -1999,7 +1999,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.flat.unique.any(_ == /unlink/)
Expand Down Expand Up @@ -2071,7 +2071,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-w\s+\/sbin\/insmod\s+\-p\s+x\s+\-k\s+modules(\s+)?$/))
Expand Down Expand Up @@ -2128,7 +2128,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/^(\s+)?\-w\s+\/var\/log\/sudo\.log\s+\-p\s+wa\s+\-k\s+actions(\s+)?$/))
Expand Down Expand Up @@ -2170,7 +2170,7 @@
- uid: mondooLinuxSecurityAuditFiles
title: Return the content from all /etc/audit/rules.d and /etc/audit/audit.rules
mql: |
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$', type: "file").list.map(path) + ["/etc/audit/audit.rules"]
mondooLinuxSecurityAuditFiles = files.find(from: "/etc/audit/rules.d",regex:'.*\.rules$' , type: "file").list.map(path) + ["/etc/audit/audit.rules"]
return mondooLinuxSecurityAuditFiles.map(file(_).content.lines.where( _ == /^[^#]/ ))
mql: |
props.mondooLinuxSecurityAuditFiles.any(_.contains(/(\s+)?\-e\s+2(\s+)?$/))
Expand Down Expand Up @@ -2597,7 +2597,7 @@
}
return ["[email protected]","[email protected]","[email protected]","aes256-ctr","aes192-ctr","aes128-ctr"]
mql: |
sshd.config.ciphers != empty

sshd.config.ciphers.containsOnly(props.mondooLinuxSecuritySshdCiphers)
docs:
desc: This variable limits the ciphers that SSH can use during communication.
Expand Down Expand Up @@ -2689,18 +2689,39 @@
- uid: mondoo-linux-security-ssh-idle-timeout-interval-is-configured
title: Ensure SSH Idle Timeout Interval is configured
impact: 60
props:
- uid: excludedMatchBlocks
title: A list of match blocks to exclude from checking, add items such as "User ansible"
mql: |
return [
"placeholder-do-not-delete",
]
- uid: checkDefaultMatchBlock
title: Set to true if you want to check the default "" match block
mql: |
return true
mql: |
sshd.config.params["ClientAliveInterval"] >= 1
sshd.config.params["ClientAliveInterval"] <= 300
sshd.config.params["ClientAliveCountMax"] = 0
defaultBlock = sshd.config.blocks.where(criteria.in([""]) == props.checkDefaultMatchBlock && criteria == "");

userBlocks = sshd.config.blocks.where(criteria.contains(props.excludedMatchBlocks) == false && criteria != "");

userBlocks.all(params.ClientAliveInterval >= 1)
userBlocks.all(params.ClientAliveInterval <= 900)
userBlocks.all(params.ClientAliveCountMax > 0)
userBlocks.all(params.ClientAliveCountMax <= 3)

defaultBlock.all(params.ClientAliveInterval >= 1)
defaultBlock.all(params.ClientAliveInterval <= 900)
defaultBlock.all(params.ClientAliveCountMax > 0)
defaultBlock.all(params.ClientAliveCountMax <= 3)
docs:
desc: The two options `ClientAliveInterval` and `ClientAliveCountMax` control the timeout of ssh sessions. When the `ClientAliveInterval` variable is set, ssh sessions that have no activity for the specified length of time are terminated. When the `ClientAliveCountMax` variable is set, `sshd` will send client alive messages at every `ClientAliveInterval` interval. When the number of consecutive client alive messages are sent with no response from the client, the `ssh` session is terminated. For example, if the `ClientAliveInterval` is set to 15 seconds and the `ClientAliveCountMax` is set to 3, the client `ssh` session will be terminated after 45 seconds of idle time.
remediation: |-
Edit the `/etc/ssh/sshd_config` file to set the `ClientAliveInterval` and `ClientAliveCountMax` parameters according to site policy:

```
ClientAliveInterval 300
ClientAliveCountMax 0
ClientAliveCountMax 3
```
- uid: mondoo-linux-security-ssh-logingracetime-is-set-to-one-minute-or-less
title: Ensure SSH LoginGraceTime is set to one minute or less
Expand Down
Loading