diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f5070232..2469b2290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,30 +42,36 @@ Thankyou! --> ## [Unreleased] ### Added -* #### Dictionary Attributes - 1. Added `boot_uid` as a `string_t`. [#1335](https://github.com/ocsf/ocsf-schema/pull/1335) - 1. Added `raw_data_size` as a `long_t`. [#1347](https://github.com/ocsf/ocsf-schema/pull/1347) - 1. Added `assessments` as an array of `assessment` objects. #1343 - 1. Added `meets_criteria` as a `boolean_t`. #1343 - 1. Added `display_name` attribute as a `string_t`. [#1341](https://github.com/ocsf/ocsf-schema/pull/1341) +* #### Dictionary Attributes + 1. Added `boot_uid` as a `string_t`. [#1335](https://github.com/ocsf/ocsf-schema/pull/1335) + 1. Added `raw_data_size` as a `long_t`. [#1347](https://github.com/ocsf/ocsf-schema/pull/1347) + 1. Added `assessments` as an array of `assessment` objects. #1343 + 1. Added `meets_criteria` as a `boolean_t`. #1343 + 1. Added `display_name` attribute as a `string_t`. [#1341](https://github.com/ocsf/ocsf-schema/pull/1341) + 1. Added `is_directed` as a `boolean_t`, `relation` as a `string_t`, `query_language` & `query_language_id` a sibling pair. #1343 + 1. Added `resource_relationship` of type `graph`, `nodes` of type `node`, `edges` of type `edge`. #1343 * #### Objects - 1. Added `assessment` object to capture evaluations/assessments of configurations/signals. #1343 - + 1. Added `assessment` object to capture evaluations/assessments of configurations/signals. #1343 + 1. Added `node`, `edge`, `graph` objects. #1343 + ### Improved * #### Event Classes - 1. Added `assessments` to `config_state`. #1343 + 1. Added `assessments` to `config_state`. #1343 + 1. Added `raw_data_size` to `base_event` object. [#1347](https://github.com/ocsf/ocsf-schema/pull/1347) * #### Objects - 1. Added `boot_uid` to `device` object. [#1335](https://github.com/ocsf/ocsf-schema/pull/1335) - 1. Added `meets_criteria` and `policy` to `assessment` object. #1343 - 1. Added `assessments` to `compliance` object. #1343 - 1. Added `data` to `policy` object. #1343 - 1. Added `display_name` attribute to the `user` and `ldap_person` objects. [#1341](https://github.com/ocsf/ocsf-schema/pull/1341) - + 1. Added `boot_uid` to `device` object. [#1335](https://github.com/ocsf/ocsf-schema/pull/1335) + 1. Relaxed constraint to provide `email_addr`, `phone_number`, or `security_questions` on `auth_factor`. [#1339](https://github.com/ocsf/ocsf-schema/pull/1339) + 1. Added `boot_uid` to `device` object. [#1335](https://github.com/ocsf/ocsf-schema/pull/1335) + 1. Added `meets_criteria` and `policy` to `assessment` object. #1343 + 1. Added `assessments` to `compliance` object. #1343 + 1. Added `data` to `policy` object. #1343 + 1. Added `display_name` attribute to the `user` and `ldap_person` objects. [#1341](https://github.com/ocsf/ocsf-schema/pull/1341) + 1. Added `resource_relationship` to `resource_details` object. #1343 + ### Misc - 1. Relaxed constraint to provide `email_addr`, `phone_number`, or `security_questions` on `auth_factor`. [#1339](https://github.com/ocsf/ocsf-schema/pull/1339) - 1. Added `raw_data_size` to `base_event` object. [#1347](https://github.com/ocsf/ocsf-schema/pull/1347) 1. Updated description of `config_state` to reflect the addition of the `assessments` object. #1343 + ## [v1.4.0] - January 31st, 2025 ### Added diff --git a/dictionary.json b/dictionary.json index 11c7c9965..71a046abb 100644 --- a/dictionary.json +++ b/dictionary.json @@ -2003,6 +2003,12 @@ "description": "Represents the duration of the activity in years. See specific usage.", "type": "integer_t" }, + "edges": { + "caption": "Edges", + "description": "The list of edge objects that are part of the graph.", + "type": "edge", + "is_array": true + }, "edition": { "caption": "OS Edition", "description": "The operating system edition. For example: Professional.", @@ -2422,6 +2428,11 @@ "description": "The given or first name of the user.", "type": "string_t" }, + "graph": { + "caption": "Graph", + "description": "A graph data structure representation with nodes and edges.", + "type": "graph" + }, "group": { "caption": "Group", "description": "The group object associated with an entity such as user, policy, or rule.", @@ -2794,6 +2805,11 @@ "description": "Indicates if the entity was deleted. See specific usage.", "type": "boolean_t" }, + "is_directed": { + "caption": "Directed", + "description": "Indicates if the entity has directionality. See specific usage.", + "type": "boolean_t" + }, "is_encrypted": { "caption": "Encrypted", "description": "Indicates if the entity was encrypted. See specific usage.", @@ -3435,6 +3451,12 @@ "type": "string_t", "is_array": true }, + "nodes": { + "caption": "Nodes", + "description": "The list of node objects that are part of the graph.", + "type": "node", + "is_array": true + }, "num_detections": { "caption": "Detections", "description": "The number of detections.", @@ -4051,6 +4073,27 @@ "description": "The query info object holds information related to data access within a datastore. To access, manipulate, delete, or retrieve data from a datastore, a database query must be written using a specific syntax.", "type": "query_info" }, + "query_language": { + "caption": "Query Language", + "description": "The query language, normalized to the caption of the query_language_id value. See specific usage.", + "type": "string_t" + }, + "query_language_id": { + "caption": "Query Language ID", + "description": "The normalized identifier of the query language. See specific usage.", + "sibling": "query_language", + "type": "integer_t", + "enum": { + "0": { + "caption": "Unknown", + "description": "The Query Language is unknown." + }, + "99": { + "caption": "Other", + "description": "The Query Language is not mapped. See the query_language attribute, which contains a data source specific value." + } + } + }, "query_result": { "caption": "Query Result", "description": "The result of the query.", @@ -4224,6 +4267,11 @@ "type": "string_t", "is_array": true }, + "relation": { + "caption": "Relation", + "description": "The relationship between two entities. See specific usage.", + "type": "string_t" + }, "relationship": { "caption": "Relationship", "description": "The relationship between two software components, normalized to the caption of the relationship_id value. In the case of 'Other', it is defined by the source.", @@ -4322,6 +4370,11 @@ "description": "The target resource.", "type": "resource_details" }, + "resource_relationship": { + "caption": "Resource Relationship", + "description": "Describes entities related to the resource, using a graph structure. See specific usage.", + "type": "graph" + }, "resource_type": { "caption": "Resource Type", "description": "The resource type as defined by the event source.", @@ -4867,6 +4920,11 @@ "type": "software_component", "is_array": true }, + "source": { + "caption": "Source", + "description": "The source of the event or object. See specific usage.", + "type": "string_t" + }, "sp_name": { "caption": "OS Service Pack", "description": "The name of the latest Service Pack.", @@ -5187,6 +5245,11 @@ "type": "key_value_object", "is_array": true }, + "target": { + "caption": "Target", + "description": "The target of the event or object. See specific usage.", + "type": "string_t" + }, "tcp_flags": { "caption": "TCP Flags", "description": "The network connection TCP header flags (i.e., control bits).", diff --git a/objects/edge.json b/objects/edge.json new file mode 100644 index 000000000..d1965ff11 --- /dev/null +++ b/objects/edge.json @@ -0,0 +1,42 @@ +{ + "caption": "Edge", + "description": "Represents a connection or relationship between two nodes in a graph.", + "extends": "_entity", + "name": "edge", + "attributes": { + "data": { + "description": "Additional data about the edge such as weight, distance, or custom properties.", + "requirement": "optional" + }, + "is_directed": { + "description": "Indicates whether the edge is (true) or undirected (false).", + "requirement": "optional" + }, + "name": { + "description": "The human-readable name or label for the edge.", + "requirement": "recommended" + }, + "relation": { + "description": "The type of relationship between nodes (e.g. is-attached-to , depends-on, etc).", + "requirement": "recommended" + }, + "source": { + "description": "The unique identifier of the node where the edge originates.", + "requirement": "required" + }, + "target": { + "description": "The unique identifier of the node where the edge terminates.", + "requirement": "required" + }, + "uid": { + "description": "Unique identifier of the edge.", + "requirement": "recommended" + } + }, + "references": [ + { + "description": "JSON graph specification.", + "url": "https://github.com/jsongraph/json-graph-specification/" + } + ] +} \ No newline at end of file diff --git a/objects/graph.json b/objects/graph.json new file mode 100644 index 000000000..88d000d24 --- /dev/null +++ b/objects/graph.json @@ -0,0 +1,78 @@ +{ + "caption": "Graph", + "description": "A graph data structure representation with nodes and edges.", + "extends": "_entity", + "name": "graph", + "attributes": { + "desc": { + "description": "The graph description - provides additional details about the graph's purpose and contents.", + "requirement": "optional" + }, + "edges": { + "description": "The edges/connections between nodes in the graph - contains the collection of edge objects defining relationships between nodes.", + "requirement": "optional" + }, + "is_directed": { + "description": "Indicates if the graph is directed (true) or undirected (false).", + "requirement": "optional" + }, + "name": { + "description": "The graph name - a human readable identifier for the graph." + }, + "nodes": { + "description": "The nodes/vertices of the graph - contains the collection of node objects that make up the graph.", + "requirement": "required" + }, + "query_language": { + "description": "The graph query language, normalized to the caption of the query_language_id value.", + "requirement": "optional" + }, + "query_language_id": { + "description": "The normalized identifier of a graph query language that can be used to interact with the graph.", + "requirement": "recommended", + "enum": { + "1": { + "caption": "Cypher", + "description": "A declarative graph query language developed by Neo4j that allows for expressive and efficient querying of graph databases." + }, + "2": { + "caption": "GraphQL", + "description": "A query language for APIs that enables declarative data fetching and provides a complete description of the data in the API." + }, + "3": { + "caption": "Gremlin", + "description": "A graph traversal language and virtual machine developed by Apache TinkerPop that enables graph computing across different graph databases." + }, + "4": { + "caption": "GQL", + "description": "An ISO standard graph query language designed to provide a unified way to query graph databases." + }, + "5": { + "caption": "G-CORE", + "description": "A graph query language that combines features from existing languages while adding support for paths as first-class citizens." + }, + "6": { + "caption": "PGQL", + "description": "Property Graph Query Language developed by Oracle that provides SQL-like syntax for querying property graphs." + }, + "7": { + "caption": "SPARQL", + "description": "A semantic query language for databases that enables querying and manipulating data stored in RDF format." + } + } + }, + "type": { + "description": "The graph type. Typically useful to represent the specifc type of graph that is used.", + "requirement": "optional" + }, + "uid": { + "description": "Unique identifier of the graph - a unique ID to reference this specific graph." + } + }, + "references": [ + { + "description": "JSON graph specification.", + "url": "https://github.com/jsongraph/json-graph-specification/" + } + ] +} \ No newline at end of file diff --git a/objects/node.json b/objects/node.json new file mode 100644 index 000000000..904be36b8 --- /dev/null +++ b/objects/node.json @@ -0,0 +1,34 @@ +{ + "caption": "Node", + "description": "Represents a node or a vertex in a graph structure.", + "extends": "object", + "name": "node", + "attributes": { + "data": { + "description": "Additional data about the node stored as key-value pairs. Can include custom properties specific to the node.", + "requirement": "optional" + }, + "desc": { + "description": "A human-readable description of the node's purpose or meaning in the graph.", + "requirement": "optional" + }, + "name": { + "description": "A human-readable name or label for the node. Should be descriptive and unique within the graph context.", + "requirement": "recommended" + }, + "type": { + "description": "Categorizes the node into a specific class or type. Useful for grouping and filtering nodes.", + "requirement": "optional" + }, + "uid": { + "description": "A unique string or numeric identifier that distinguishes this node from all others in the graph. Must be unique across all nodes.", + "requirement": "required" + } + }, + "references": [ + { + "description": "JSON graph specification.", + "url": "https://github.com/jsongraph/json-graph-specification/" + } + ] +} \ No newline at end of file diff --git a/objects/resource_details.json b/objects/resource_details.json index f3b1c8ac8..2b672bca6 100644 --- a/objects/resource_details.json +++ b/objects/resource_details.json @@ -44,6 +44,10 @@ "profile": "cloud", "requirement": "optional" }, + "resource_relationship": { + "description": "A graph representation showing how this resource relates to and interacts with other entities in the environment. This can include parent/child relationships, dependencies, or other connections.", + "requirement": "optional" + }, "version": { "description": "The version of the resource. For example 1.2.3.", "requirement": "optional"