Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
8eb2238
Empty commit
lebogg Jul 23, 2025
4a26948
Add metric PasswordRotationInterval (#91)
anatheka Jul 23, 2025
c12da2d
Update PasswordRotationInterval.yml comment
anatheka Jul 25, 2025
81e2a7f
Merge branch 'main' into 90-new-add-amoe-metrics
anatheka Jul 25, 2025
4a9ab6f
Add Metric AntimalwareScanFrequency (#116)
lebogg Aug 11, 2025
c27e6dc
Remove target value from "comments" field
lebogg Aug 11, 2025
bfbf87c
Add PasswordLength Metric (#113)
lebogg Sep 10, 2025
21fc83d
Merge branch 'main' into 90-new-add-amoe-metrics
anatheka Sep 10, 2025
3dcf8ca
Merge branch 'main' into 90-new-add-amoe-metrics
anatheka Nov 17, 2025
c373c97
Add hardware resource entry to catalog
anatheka Nov 17, 2025
97ae8aa
Add merged ontology file [skip ci]
github-actions[bot] Nov 17, 2025
4824091
Add generated proto file [skip ci]
github-actions[bot] Nov 17, 2025
1ad838e
Merge main and fix conflicts
anatheka Jan 29, 2026
2b23b1c
Rename yml -> yaml
anatheka Jan 29, 2026
d76267e
Adapt implementation guidelines
anatheka Jan 29, 2026
b70457f
Adapt implementation guidelines
anatheka Jan 29, 2026
ebbcbff
Add AMOE keywords
anatheka Jan 29, 2026
2cb2836
Add uload proto as artifact
anatheka Jan 29, 2026
8fca166
Fix ontology prefix for scanInterval
anatheka Jan 29, 2026
0fc8e51
Fix ontology scanInterval IRI
anatheka Jan 29, 2026
3a8258a
Auto-update merged ontology and proto files [skip ci]
github-actions[bot] Jan 29, 2026
fd82405
Update metrics/LoggingMonitoring/AntimalwareScanFrequency/metric.rego
anatheka Jan 29, 2026
6e1a08b
Update ontology/v1/core/security.owx
anatheka Jan 29, 2026
b54bbb9
Update ontology/v1/core/security.owx
anatheka Jan 29, 2026
ed6db57
Auto-update merged ontology and proto files [skip ci]
github-actions[bot] Jan 29, 2026
beb3553
Update ontology/v1/core/security.owx
anatheka Jan 29, 2026
a84d853
Update ontology/v1/core/security.owx
anatheka Jan 29, 2026
a445e3d
Clean up data property length
anatheka Jan 29, 2026
ae0ed0d
Fix prefix in security.owx
anatheka Jan 29, 2026
983c7ab
Auto-update merged ontology and proto files [skip ci]
github-actions[bot] Jan 29, 2026
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
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ontology/1.0/catalog-v001.xml merge=ours
5 changes: 5 additions & 0 deletions .github/workflows/ontology.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ jobs:
--output-path=ontology/v1/ontology.proto \
--full-semantic-mode=false \
--deterministic-field-numbers=true
- name: Upload generated proto as artifact
uses: actions/upload-artifact@v4
with:
name: ontology-proto
path: ontology/v1/ontology.proto
- name: Validate proto file
run: |
mkdir -p buf/validate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ comments: Resources like virtual machines often offer a simple configuration tha
configuration:
p1:
operator: "<="
targetValue: 720 # defined in hours
targetValue: 720 # defined in hours, which are 30 days
16 changes: 16 additions & 0 deletions metrics/IdentityManagement/PasswordLength/PasswordLength.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# ====== Metadata ======
id: PasswordLength
category: IdentityManagement
description: This rule assesses whether a [Resource] that offers the property [SecurityFeature.Authenticity.PasswordBasedAuthentication], has [p1:length] set correctly.
implementationGuidelines:
AMOE:
question: "How long should passwords be?"
keywords:
- "password"
version: "1.0"
comments: This metric evaluates the length of passwords. It ensures that the length is set to a sensible minimum value of characters.
# ====== Configuration ======
configuration:
p1:
operator: ">="
targetValue: 8 # defined in characters
4 changes: 4 additions & 0 deletions metrics/IdentityManagement/PasswordLength/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"operator": ">=",
"target_value": 8
}
19 changes: 19 additions & 0 deletions metrics/IdentityManagement/PasswordLength/metric.rego
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package cch.metrics.password_length

import data.cch.compare
import rego.v1

default applicable := false

default compliant := false

pwd := input.passwordBasedAuthentication

applicable if {
pwd
}

compliant if {
# length is in characters
compare(data.operator, data.target_value, pwd.length)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# ====== Metadata ======
id: PasswordRotationInterval
category: IdentityManagement
description: This rule assesses whether a [Resource] that offers the property [SecurityFeature.Authenticity.PasswordBasedAuthentication], has [p1:rotationInterval] set correctly.
implementationGuidelines:
AMOE:
question: "What is the passwords rotation frequency?"
keywords:
- "password"
version: "1.0"
comments: This metric evaluates the rotation interval of passwords. It ensures that the interval is set to a sensible maximum value.
# ====== Configuration ======
configuration:
p1:
operator: "<="
targetValue: 120 # defined in days
4 changes: 4 additions & 0 deletions metrics/IdentityManagement/PasswordRotationInterval/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"operator": "<=",
"target_value": 120
}
19 changes: 19 additions & 0 deletions metrics/IdentityManagement/PasswordRotationInterval/metric.rego
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package cch.metrics.password_rotation_interval

import data.cch.compare
import rego.v1

default applicable := false

default compliant := false

pwd := input.passwordBasedAuthentication

applicable if {
pwd
}

compliant if {
# rotationInterval is in days
compare(data.operator, data.target_value, pwd.rotationInterval)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# ====== Metadata ======
id: AntimalwareScanFrequency
category: LoggingMonitoring
description: This rule assesses whether a [Resource] that offers the property [SecurityFeature.Auditing.MalwareProtection], has [p1:scan_interval] set correctly.
implementationGuidelines:
AMOE:
question: "How frequent are antimalware scans done?"
keywords:
- "antimalware"
- "malware"
- "scan"
version: "1.0"
comments: "This metric evaluates the frequency of Antimalware scans. It ensures that the interval is set to a sensible maximum value."
# ====== Configuration ======
configuration:
p1:
operator: "<="
targetValue: 10 # in days? (TODO)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

???

4 changes: 4 additions & 0 deletions metrics/LoggingMonitoring/AntimalwareScanFrequency/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"operator": "<=",
"target_value": 10
}
19 changes: 19 additions & 0 deletions metrics/LoggingMonitoring/AntimalwareScanFrequency/metric.rego
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package cch.metrics.antimalware_scan_frequency

import data.cch.compare
import rego.v1

default applicable = false

default compliant = false

mp := input.malwareProtection

applicable if {
mp
}

compliant if {
# scan_interval is in days
compare(data.operator, data.target_value, mp.scanInterval)
}
34 changes: 17 additions & 17 deletions ontology/v1/catalog-v001.xml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalog prefer="public" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<group id="Folder Repository, directory=, recursive=true, Auto-Update=true, version=2" prefer="public" xml:base="">
<uri id="Automatically generated entry, Timestamp=1769511741676" name="duplicate:https://ontology.cybersecuritycertcluster.eu" uri="ontology.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="duplicate:https://ontology.cybersecuritycertcluster.eu" uri="ontology-merged.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core" uri="core.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core/evidence" uri="core/evidence.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core/framework" uri="core/framework.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core/functionality" uri="core/functionality.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core/properties" uri="core/properties.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core/resource" uri="core/resource.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/core/security" uri="core/security.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/data" uri="data.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource" uri="resource.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource/application" uri="resource/application.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource/document" uri="resource/document.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource/hardware" uri="resource/hardware.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource/human_resources" uri="resource/human_resources.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource/infrastructure" uri="resource/infrastructure.owx"/>
<uri id="Automatically generated entry, Timestamp=1769511741676" name="https://ontology.cybersecuritycertcluster.eu/resource/ml" uri="resource/ml.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="duplicate:https://ontology.cybersecuritycertcluster.eu" uri="ontology.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="duplicate:https://ontology.cybersecuritycertcluster.eu" uri="ontology-merged.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core" uri="core.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core/evidence" uri="core/evidence.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core/framework" uri="core/framework.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core/functionality" uri="core/functionality.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core/properties" uri="core/properties.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core/resource" uri="core/resource.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/core/security" uri="core/security.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/data" uri="data.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource" uri="resource.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource/application" uri="resource/application.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource/document" uri="resource/document.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource/hardware" uri="resource/hardware.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource/human_resources" uri="resource/human_resources.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource/infrastructure" uri="resource/infrastructure.owx"/>
<uri id="Automatically generated entry, Timestamp=1769687110406" name="https://ontology.cybersecuritycertcluster.eu/resource/ml" uri="resource/ml.owx"/>
</group>
</catalog>
5 changes: 0 additions & 5 deletions ontology/v1/core/framework.owx
Original file line number Diff line number Diff line change
Expand Up @@ -348,11 +348,6 @@
<AbbreviatedIRI>core:lastActivity</AbbreviatedIRI>
<Literal>lastActivity</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:length</AbbreviatedIRI>
<Literal>length</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:local</AbbreviatedIRI>
Expand Down
5 changes: 0 additions & 5 deletions ontology/v1/core/functionality.owx
Original file line number Diff line number Diff line change
Expand Up @@ -2620,11 +2620,6 @@
<AbbreviatedIRI>core:lastActivity</AbbreviatedIRI>
<Literal>lastActivity</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:length</AbbreviatedIRI>
<Literal>length</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:local</AbbreviatedIRI>
Expand Down
5 changes: 5 additions & 0 deletions ontology/v1/core/properties.owx
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,11 @@
<AbbreviatedIRI>res:lastActivity</AbbreviatedIRI>
<Literal>lastActivity</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:comment"/>
<AbbreviatedIRI>res:length</AbbreviatedIRI>
<Literal>The length refers to the length of the given class, e.g. password length</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>res:length</AbbreviatedIRI>
Expand Down
46 changes: 40 additions & 6 deletions ontology/v1/core/security.owx
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,9 @@
<Declaration>
<DataProperty abbreviatedIRI="core:status"/>
</Declaration>
<Declaration>
<DataProperty abbreviatedIRI="core:scanInterval"/>
</Declaration>
<Declaration>
<DataProperty abbreviatedIRI="prop:activated"/>
</Declaration>
Expand Down Expand Up @@ -274,6 +277,18 @@
<Declaration>
<Datatype abbreviatedIRI="xsd:listString"/>
</Declaration>
<Declaration>
<Class abbreviatedIRI="core:Storage"/>
</Declaration>
<Declaration>
<ObjectProperty abbreviatedIRI="prop:has"/>
</Declaration>
<Declaration>
<Class abbreviatedIRI="core:LoggingService"/>
</Declaration>
<Declaration>
<ObjectProperty abbreviatedIRI="prop:to"/>
</Declaration>
<SubClassOf>
<Class abbreviatedIRI="core:EncryptionInUse"/>
<Class abbreviatedIRI="core:Confidentiality"/>
Expand Down Expand Up @@ -406,6 +421,13 @@
<Datatype abbreviatedIRI="xsd:boolean"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class abbreviatedIRI="core:Authenticity"/>
<DataSomeValuesFrom>
<DataProperty abbreviatedIRI="prop:length"/>
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class abbreviatedIRI="core:Authenticity"/>
<DataSomeValuesFrom>
Expand Down Expand Up @@ -740,6 +762,13 @@
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class abbreviatedIRI="core:MalwareProtection"/>
<DataSomeValuesFrom>
<DataProperty abbreviatedIRI="core:scanInterval"/>
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class abbreviatedIRI="core:MalwareProtection"/>
<DataSomeValuesFrom>
Expand Down Expand Up @@ -1479,11 +1508,6 @@
<AbbreviatedIRI>core:lastActivity</AbbreviatedIRI>
<Literal>lastActivity</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:length</AbbreviatedIRI>
<Literal>length</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:local</AbbreviatedIRI>
Expand Down Expand Up @@ -1642,7 +1666,17 @@
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:comment"/>
<AbbreviatedIRI>core:rotationInterval</AbbreviatedIRI>
<Literal>Maximum password rotation interval in months</Literal>
<Literal>rotationInterval is given in days</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:rotationInterval</AbbreviatedIRI>
<Literal>rotationInterval</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<AbbreviatedIRI>core:rotationInterval</AbbreviatedIRI>
<Literal>rotationInterval</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
Expand Down
27 changes: 26 additions & 1 deletion ontology/v1/ontology-merged.owx
Original file line number Diff line number Diff line change
Expand Up @@ -1064,6 +1064,9 @@
<Declaration>
<DataProperty IRI="/classes/runtimeVersion"/>
</Declaration>
<Declaration>
<DataProperty IRI="/classes/scanInterval"/>
</Declaration>
<Declaration>
<DataProperty IRI="/classes/schemaURL"/>
</Declaration>
Expand Down Expand Up @@ -1394,6 +1397,9 @@
<Declaration>
<DataProperty IRI="/classes/OneQubitErrorRate"/>
</Declaration>
<Declaration>
<DataProperty IRI="/properties/length"/>
</Declaration>
<Declaration>
<DataProperty IRI="/classes/SpamErrorRate"/>
</Declaration>
Expand Down Expand Up @@ -1629,6 +1635,13 @@
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class IRI="/classes/Authenticity"/>
<DataSomeValuesFrom>
<DataProperty IRI="/properties/length"/>
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class IRI="/classes/Authorization"/>
<Class IRI="/classes/SecurityFeature"/>
Expand Down Expand Up @@ -3465,6 +3478,13 @@
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class IRI="/classes/MalwareProtection"/>
<DataSomeValuesFrom>
<DataProperty IRI="/classes/scanInterval"/>
<Datatype abbreviatedIRI="xsd:int"/>
</DataSomeValuesFrom>
</SubClassOf>
<SubClassOf>
<Class IRI="/classes/MalwareProtection"/>
<DataSomeValuesFrom>
Expand Down Expand Up @@ -6922,6 +6942,11 @@ name = metadata.name</Literal>
<IRI>/classes/leftPrincipal</IRI>
<Literal>leftPrincipal</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:comment"/>
<IRI>/classes/length</IRI>
<Literal>The length refers to the length of the given class, e.g. password length</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<IRI>/classes/length</IRI>
Expand Down Expand Up @@ -7140,7 +7165,7 @@ name = metadata.name</Literal>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:comment"/>
<IRI>/classes/rotationInterval</IRI>
<Literal>Maximum password rotation interval in months</Literal>
<Literal>rotationInterval is given in days</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
Expand Down
7 changes: 6 additions & 1 deletion ontology/v1/ontology.owx
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,9 @@
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Import>https://ontology.cybersecuritycertcluster.eu/core</Import>
<Import>https://ontology.cybersecuritycertcluster.eu/resource</Import>
</Ontology>
</Ontology>



<!-- Generated by the OWL API (version 4.5.29.2024-05-13T12:11:03Z) https://github.com/owlcs/owlapi -->

Loading