-
Notifications
You must be signed in to change notification settings - Fork 21
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
Abstract relationships as top-level constructs rather than embedded within other constructs #291
Comments
This is a duplicate of #70 but given that this write-up is better I'll close that one. |
I agree completely with Terry. This could add so many needed and interesting ways of expressing data. It goes without saying.....
|
oops. wrong button. |
Here's a notional structure: <stix:Relationship
id="example:Relationship-some-uuid-5555"
from_idref="example:Indicator-some-uuid-1234"
to_idref="example:Campaign-some-other-uuid-0987">
<stix:Relationship_Type>indicates</stix:Relationship_Type> <!-- Could be a [1,n] construct to permit multiple relationships -->
<stix:Confidence>...</stix:Confidence>
<stix:Information_Source>...</stix:Information_Source>
<!-- Is other stuff necessary? -->
</stix:Relationship> I think there are some positives here:
I think this idea hits all requirements from @jordan2175. As for @terrymacdonald, you have an interesting problem statement:
What about a "relationship assertion" where you specify the relationship you want to make an assertion about, plus an assertion? Something like <stix:Relationship_Assertion
id="example:assertion-uuid-9999"
idref="example:Relationship-some-uuid-5555">
<stix:Assertion_Type>+1</stix:Assertion_Type>
<stix:Confidence>...</stix:Confidence>
<stix:Information_Source>...</stix:Information_Source>
<!-- Is other stuff necessary? -->
</stix:Relationship_Assertion> I also toyed with the idea that a Relationship Assertion would just be a special type of relationship where the Thoughts? -Mark |
I really like those ideas @MarkDavidson, brilliant. The +1 or -1 also GREATLY simplifies one of the major long term use cases. This would be so easy to implement in a Facebook/Instagram like APP for STIX. I also like the idea of getting rid of all of the other relationship gunk all throughout SITX. This would greatly clean up the data model and speed up processing and code logic. @terrymacdonald thanks for push for this. This is really going to make things better. |
Yeah I like that a lot Mark. We need to do a lot of thinking about having a separate Relationship_Assertion object though. I went with the combined Relationship_Assertion and Relationship object, mainly because it would simplify the concept for new people learning the model. The idea was that there was one object to send relationships, and the rest are the 'data nodes'. That said, on second thoughts there is merit in having a separate Assertion object.... Its not just relationships we want people to be able to assert. Its also the data in an object. We want others to be able to say yes that object is right, but the relationships with this other object is wrong. So how about making the relationship_assertion object into a generic assertion object? e.g. <stix:Assertion
id="example:assertion-uuid-9999"
idref="example:Relationship-some-uuid-5555">
<stix:Assertion_Type>+1</stix:Assertion_Type>
<stix:Confidence>...</stix:Confidence>
<stix:Information_Source>...</stix:Information_Source>
<!-- Is other stuff necessary? -->
</stix:Assertion> That would cover the relationship case, but also the data node case. Comments? |
Very interesting.... And I like where this is going. This would greatly simplify a lot of weirdness we currently have and allow much more interesting use cases to be solved. |
@terrymacdonald, I'd like to discuss one of your paragraphs:
If we operate under the assumption that a relationship is a first class object, then a relationship wouldn't count as data in an object. You could disagree with a relationship using the assertion construct from above. However, I think there is still a need to make assertions about data in objects. I reflected for a bit on what assertions you might want to make about data in an object, and I came to the conclusion that an assertion about data in an object is probably a sighting. (e.g., "I've seen that IP also!") Said another way, a sighting is a type of assertion. Building on the assertion idea, there is certainly overlap across relationship/assertion concepts. I can think of three things that are relevant to this discussion:
I got tired of typing the XML, so I just went with a list of properties to discuss a notional assertion object (it's python color-coded, but don't read too much into that) class Assertion:
id_ # The ID of the assertion itself
from_idref # The ID of the "from" object
to_idref # The ID of the "to" object
assertion_type # The type of assertion: Relationship, Sighting, Assertion
assertion # The assertion being made: Indicates, +1, Disagree
information_source # Info source of this assertion
confidence # A confidence assertion of this assertion_type / assertion
# Is other information needed? Rationale for the assertion might be useful A relationship could look like this: Assertion(
id_ = 'Assertion-1',
from_idref='Indicator-1',
to_idref='Campaign-1',
assertion_type='Relationship'
assertion='Indicates'
information_source='Threat Analyst 1',
confidence='High',
rationale='I saw this during my analysis') A sighting could look like this. Note that sighting specific components of an object would get more complex. A possible tearline here is that you can only "sight" things that have IDs in order to keep the Sighting Assertion simple. Assertion(
id_ = 'Assertion-2',
from_idref='Indicator-1',
# to_idref # Not populated in this scenario
assertion_type='Sighting'
# assertion # May or may not need to be populated.
information_source='Threat Analyst 2',
# confidence # Is confidence irrelevant for a sighting?
rationale='This was seen by our IDS'
) Lastly, an assertion could look like this: Assertion(
id_ = 'Assertion-3',
from_idref='Assertion-1',
# to_idref # Not used for assertion_type == Assertion
assertion_type='Assertion'
assertion='+1'
information_source='Threat Analyst 3',
confidence='High',
rationale='I confirmed the relationship during independent analysis'
) I think there's a potential discussion point for splitting Relationships (which have both 'from' and 'to' properties) and Assertions (which would only have a -Mark |
Lets figure out 10-20 use cases and make sure this solves all the problems. The idea of doing relationships here and not inside of data objects, is very attractive. |
Hi Mark, Thanks for this. I'm not a fan of conflating these together. I believe all When it comes down to it, the entire STIX package we generate is an I prefer to keep them separated (https://www.youtube.com/watch?v=XN32lLUOBzQ I believe the three concepts we are trying to allow STIX to convey from
In order to keep this simple to understand for new players, I still As mentioned on the STIX mailing list I believe the tweaked Sighting Object So to describe each concept individually and how I propose we tackle them... 1. "These two things are related" I believe that this should still be described using the relationship object <stix:Relationship 2. "I agree"/"I do not agree" Assertion might not be the right word for the object we need to use here. After reading your text I have to disagree that the Assertion object (I'll Here's Mark's object with the Attestation name instead (just because I like <stix:Attestation /stix:Attestation 3. "I've seen that too" I think that this could be covered within the tweaked Sighting Object that The "stuff I've seen" idea can be conveyed with something like this. In <stix:Sighting id="example:Sighting-0756a255-6623-4226-8356-015396918b38" The "I've seen that too" can be covered by this SIghting object as well. In <stix:Sighting id="example:Sighting-0756a255-6623-4226-8356-015396918b38" I believe that they three objects as described above cover the scenarios Thoughts? Cheers On 7 April 2015 at 22:32, MarkDavidson [email protected] wrote:
|
For the I have seen this too, I am thinking that it would be best to reference the original ID instead of creating a new ID. |
I agree with Terry (KISS) |
An --example-- of Relationship data model could be found in You could note, again just for example, the 'scope' (inclusive/exclusive) |
An interesting (easy to understand) description of the Relationship construct could be found in the "Entity-Relationship" chapter here |
I suggest to name this new construct RelationshipStatement |
The current way relationships are conveyed (only in objects) has two issues.
Firstly, is that I cannot currently 'agree' with a relationship that someone has asserted between objects they have published. In some cases it is extremely valuable for someone to say they also think that object A and Object B are related. Currently I would need to produce my own object and assert the relationship from my own object to that object. Its for this reason that I would like to propose that Relationships should be able to be sent independently of the objects they refer to. In that case a third-party will be able to send their agreement that a relationship is valid. A subsequent consumer can then easily see that 14 others agree the suggested relationship is valid and only 2 say its not - therefore the relationship is more likely to be valid.
e.g. mycompany agrees completely with the assertion that thirdparty made that there is a relationship between the two objects that thirdparty published.
^ That's effectively a [+1] from mycompany!.
The second use of the Top-level relationship object is to agree with the object that someone else sent. Note this is different from agreeing with the relationship between objects (the edges) that the previous example was describing. This use of the relationship object is agreeing with the object itself (the nodes in knowledge-graph-speak).
e.g. mycompany agrees completely that the assertion that thirdparty made in their info is correct.
I think we need this functionality to crowdsource agreement from communities.
The text was updated successfully, but these errors were encountered: