Replies: 4 comments 3 replies
-
@rstillio if I understand your comment that "And to be clear and avoid confusion, this post is NOT talking about how to construct an array of objects. It's about cases involving multiples of attribute values in any OCSF attribute that is not an array." Rather than adding something like Or do you not want to use an indexed array at all, but introduce a new construct, like an unordered set? |
Beta Was this translation helpful? Give feedback.
-
Thanks for writing this up, Ryan. The problem I have seen arises when trying to describe a Network Activity which is summarized (involving dozens, hundreds, or even thousands of network flows). One Network Activity today can capture at most one flow (one 5-tuple - 2 IPs, 2 Ports, 1 Protocol). This is because each Network Activity holds one Network Endpoint per end of the flow. And a Network Endpoint describes only one Endpoint (not a Subnet) But when describing a suspicious Network Activity involving a subnet (such as a scanner - one IP scanning hundreds of thousands of IPs in one subnet), it would be nearly impossible to describe this behavior using the current Network Activity object. One would need hundreds or thousands of objects, when a single object could have (mostly) described the lot. Open to suggestions on how to handle this. One simple way would be to invent a Network Endpoints (plural) object, and allow a Network Activity to describe multiple Network Endpoints (i.e. a subnet, or other) Does this help? |
Beta Was this translation helpful? Give feedback.
-
I had this topic on the agenda last week for the weekly call, but this additional discussion will help especially the examples, so I will add it again to this week's agenda, higher in the list - hopefully @rstillio you can join to make the case better than I can. I have some thoughts, but our only aggregate construct today is the array, which while ordered, can be considered unordered by description of a particular array attribute (frankly, many of them today are inherently unordered). We have another convention, which was introduced in 1.1 as |
Beta Was this translation helpful? Give feedback.
-
This is really interesting problem. Maybe we can solve it algebraically. Imagine we have separate event space that consists of aggregated events. For example: This is fully composable: by standardizing the set of aggregation functions, we implicitly define this "lifted" space in a way that people can write detections against it. This would require that OCSF puts in the sweat to define the groupings and aggregations for every event class. |
Beta Was this translation helpful? Give feedback.
-
Ok Mappers and Maintainers, seeking your expertise on this one.
In our efforts to map multiple security controls to OCSF we're running into a couple of cases where a field in the origin event contains multiples, an array of 2 or more values, and the best/most logical OCSF mapping object has an attribute that does not allow for arrays.
Does the OCSF community have a formal opinion or informal guidance on how to handle:
1. Representing sets of things (IP addresses, email addresses, or other like strings) within or across the categories of classes?
2. Doing so while retaining directionality context if/when present (e.g., src/dst in network context, to/from in email context, etc.)?
One recommendation has been to map only the first value in the array. This is undesirable for a number of reasons.
Another recommendation has been to break each value out and produce it's own "finding" object, in a one-to-many fashion. This is also problematic and undesirable for a lot of reasons.
Additionally, this issue could arise across any OCSF class of objects, and is not limited to just email or network, though I present those as present-day issues we need to solve for ASAP. It seems we need a more universal way to preserve these values when the origin provides sets of things for a reason. Which has me wondering if a "Multiples" profile might be an approach to consider.
In the short run, we will more than likely have to solve for this in our private schema extension (for now) unless and until the project can find a way to solve for this.
And to be clear and avoid confusion, this post is NOT talking about how to construct an array of objects. It's about cases involving multiples of attribute values in any OCSF attribute that is not an array.
Thanks in advance,
Ryan
An Email Oriented Example
Per RFC-5322, both the Reply-To and From fields can contain multiples (e.g., when an email is sent to/from a mailist, or on behalf someone, like an admin). Currently OCSF attributes reply_to and from are not arrays.
A Network Oriented Example
We have analytics tools that ingest time-series network-centric data (think netflow, firewall, certain cloud data sets) and produce outputs (called observations) based on aggregations and analytics done over time. A resulting observation can contain a set of network entities involved the observation (i.e., an array of IP addresses, or hostnames, or countries) as well as relevant orientation and directional context that must be preserved (internal/external, source/destination, etc.).
Sample 1
Name: External Country Set Deviation
Purpose: Notify when a tracked device has a deviation in the countries it communicates with.
In the above example, we can't take just the first value of each array without diluting the value and purpose of the entire event. You also can't split the arrays up and produce individual OCSF findings out of this because of value association / relationship requirements.
Sample 2
Name: Excessive Connections to Network Printers
Purpose: Notify when a tracked device exhibits an excessive number of connections to one or more network printers.
Sample 3
Name: Geographic Watchlist Observation
Purpose: Notify when a tracked device exhibits connections to one or more IP address destinations associated with a geographic area on watchlist observation.
I could go on, but you get the idea. Recently I saw a 3rd flavor of example log involving a network scanning and discovery device that produced an output containing an array of IPv4 CIDR blocks representing all networks it had discovered in that most recent discovery job. I don't have an example of it to add to this post, but it further supports the point that this "how to handle mapping multiples into attributes" could exist across nearly all OCSF classes and object types.
Beta Was this translation helpful? Give feedback.
All reactions