-
Notifications
You must be signed in to change notification settings - Fork 418
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
[RFC] Cyber Threat Intelligence Fields Stage 1 #1037
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for opening the follow-up PR, @shimonmodi.
Let's start with a simple request, before diving into the big picture stuff: Please change your handle in the "People" section to your Github handle @shimonmodi
:-)
From stage 1 going forward, we will want this RFC document to be the main reference for the proposal. We can keep the link to the Google Doc as a historical reference to your working document. But since it's not version controlled, we'll want this information captured here as well.
You can look at the raw Markdown to see HTML comments (<!-- ... -->
) on what to focus on at stage 1, in each of the section of this document. These are general comments applicable to any RFC.
But since you've already done a lot of work in your working doc, here's a few more specific suggestions, per section of the RFC template.
Fields
We could split this one in two logical parts:
- In one part you can list all of the new fields you think would be necessary for this proposal.
- In the other part, you can list the mapping of typical threat ioc fields to pre-existing ECS fields.
Both of these can be bullet lists with a short explanation. No need to worry about formatting and nitty gritty details, yet. Let's discuss the concepts first :-)
Usage
This section can be used to give details how this is meant to be used. Is this a way to append IOC details to existing events, or is this documenting how an index that stores databases of IOCs should be structured?
This can eventually serve as the basis for how we document the usage of this part of the schema.
Source data
You're welcome to start listing a few examples of indicators along a few axes:
- List the different kinds of IOCs, as you already do in your working doc for type: ip_address, ip_range, domain, domain_with_ip, file_hash, email_address, URL, file_extension.
- List different schemas/standards that exist, to define these IOCs (I think STIX is such a standard, correct?) but also other de-facto standards, for example if some prominent data sources don't follow a third party standard.
Note that stage 1 is still an early draft, and it's fine if things are still a little rough, or not fully explained yet.
Final note, today we closed #1023 in favor of this RFC, so that the discussion would happen in one place. But I like the proposal from issue #1023 to nest the IOC fields under ioc.*
instead of under threat.*
. The threat fields in ECS are meant to capture a mapping to a threat taxonomy like Mitre ATT&CK. If we add a second purpose to that same group of fields, I think that will be confusing to people.
Do you think nesting the new fields under ioc.*
would work for what you had in mind, or am I misunderstanding the intent of your proposal?
Co-authored-by: Mathieu Martin <[email protected]>
Co-authored-by: Mathieu Martin <[email protected]>
@webmat - thanks for your patience and guidance :-) . I have followed through on your recommended changes. The discussion about nesting under To answer your question - the proposal of nesting under |
Looks like some additional changes possibly meant for this PR got placed into another: https://github.com/elastic/ecs/pull/1043/files @shimonmodi - you should be able to make any adjustments in your forked repo's |
That is true, but this limit was not by design - we had intended to have
I'm not sure about that, let's try to get more feedback on this PR. I think it's appropriate to use the |
What I was specifically trying to do was capture information for an IOC and have the Technique and Tactic information present. The second stage of my thinking evolved around the "range of threat intelligence" possible. Without complicating it extremely I wanted to scope down onto one specific threat intelligence "type". However Options forward i can see
With the discussion I would now go for option 1, this method allows for future expansion by adding Why hold on to the |
@SHolzhauer - thanks for the feedback. We are also aligned with your point about holding onto the |
I think there are some concepts that we can harvest from #1023 and nest under |
@shimonmodi sure, the
|
Starting to setup for the ECS fields for intelligence as discussed in [the RFC](elastic/ecs#1037)
Nesting 'ioc' under threat.* works but has potential for some real nesting rabbit holes. It would be nice to aim for alignment with existing threat taxonomy frameworks such as STIX and CIF as examples. Personally I think STIX is a little heavy/verbose and CIF has a much smaller common field set to look at which means it will be easier to align in ECS. Compatibility/mapping here would also help for bidirectional data flow down the road(APIs). Currently I'm much more interested in CIF and we have started to put fields in the format of threat.cif.*. Nesting it in threat.ioc.* isn't bad, and I don't think it would be advantageous to nest it in threat.ioc.cif when there is likely to be much more overlap in a more common threat.ioc.* field. Here's the basics of our CIF mappings:
We do map several of these up to threat.*, such as Many fields can be arrays as there may be multiple CIF entries for a single IOC. The IOC is the unique key which builds arrays of values for the multiple different sources. The idea of nesting it under cif is also that we might have different threat sources with overlapping data. Ideally, we can normalize this inside ECS to be mostly all under threat.* and threat.ioc.* The MISP project has also already done a lot of work here we might be able to benefit from: MISP Data Models. MISP and The-Hive are popular security projects where mutual compatibility with would be extremely useful for all parties. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So looping back on where we should add these fields, I'm fine if we don't add them at the root in ioc.*
, and we add them inside threat.*
.
However I do think it would make things clearer if the new IOC fields were nested at threat.ioc.*
.
This way we would continue to have a clean separation (with the exception of threat.framework
), where threat.tactic.*
and threat.technique.*
are where we map on the taxonomy. And all IOC fields would be under threat.ioc.*
.
Does this suggestion make sense? If it does, we should adjust the proposal to make it so.
By the way this is looking really good already for a stage 1. We could merge and finish hashing out the details in a stage 2 PR.
For now let's see if there's already agreement on making the adjustment for threat.ioc.*
. If so, let's make the adjustment and I think we can merge stage 1. If there's no agreement yet, let's instead capture the idea in the "Concerns" section, merge stage 1 and finish hammering this out in stage 2.
Co-authored-by: Mathieu Martin <[email protected]>
@webmat - I will capture the proposal of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm good to merge this stage 1 PR, the proposal looks good. We can finish hashing out the field details in the stage 2 PR.
The date wasn't updated prior to merging. I opened up #1100 to correct. |
make test
?make
and committed those changes?RFC Preview