Add new STIX2.1 SDOs and additional properties
							parent
							
								
									2b65f7205b
								
							
						
					
					
						commit
						5577686ee8
					
				|  | @ -42,8 +42,9 @@ from .patterns import (AndBooleanExpression, AndObservationExpression, | |||
|                        StartStopQualifier, StringConstant, TimestampConstant, | ||||
|                        WithinQualifier) | ||||
| from .sdo import (AttackPattern, Campaign, CourseOfAction, CustomObject, | ||||
|                   Identity, Indicator, IntrusionSet, Malware, ObservedData, | ||||
|                   Report, ThreatActor, Tool, Vulnerability) | ||||
|                   Identity, Indicator, IntrusionSet, Location, Malware, Note, | ||||
|                   ObservedData, Opinion, Report, ThreatActor, Tool, | ||||
|                   Vulnerability) | ||||
| from .sources import CompositeDataSource | ||||
| from .sources.filesystem import (FileSystemSink, FileSystemSource, | ||||
|                                  FileSystemStore) | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ from .utils import NOW, get_dict | |||
| 
 | ||||
| 
 | ||||
| class ExternalReference(_STIXBase): | ||||
| 
 | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|         ('source_name', StringProperty(required=True)), | ||||
|  | @ -26,6 +27,7 @@ class ExternalReference(_STIXBase): | |||
| 
 | ||||
| 
 | ||||
| class KillChainPhase(_STIXBase): | ||||
| 
 | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|         ('kill_chain_name', StringProperty(required=True)), | ||||
|  | @ -34,6 +36,7 @@ class KillChainPhase(_STIXBase): | |||
| 
 | ||||
| 
 | ||||
| class GranularMarking(_STIXBase): | ||||
| 
 | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|         ('marking_ref', ReferenceProperty(required=True, type="marking-definition")), | ||||
|  | @ -42,7 +45,7 @@ class GranularMarking(_STIXBase): | |||
| 
 | ||||
| 
 | ||||
| class TLPMarking(_STIXBase): | ||||
|     # TODO: don't allow the creation of any other TLPMarkings than the ones below | ||||
| 
 | ||||
|     _type = 'tlp' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|  | @ -51,6 +54,7 @@ class TLPMarking(_STIXBase): | |||
| 
 | ||||
| 
 | ||||
| class StatementMarking(_STIXBase): | ||||
| 
 | ||||
|     _type = 'statement' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|  | @ -78,6 +82,7 @@ class MarkingProperty(Property): | |||
| 
 | ||||
| 
 | ||||
| class MarkingDefinition(_STIXBase, MarkingsMixin): | ||||
| 
 | ||||
|     _type = 'marking-definition' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|  | @ -137,6 +142,7 @@ def CustomMarking(type='x-custom-marking', properties=None): | |||
|     def custom_builder(cls): | ||||
| 
 | ||||
|         class _Custom(cls, _STIXBase): | ||||
| 
 | ||||
|             _type = type | ||||
|             _properties = OrderedDict() | ||||
| 
 | ||||
|  | @ -155,6 +161,8 @@ def CustomMarking(type='x-custom-marking', properties=None): | |||
|     return custom_builder | ||||
| 
 | ||||
| 
 | ||||
| # TODO: don't allow the creation of any other TLPMarkings than the ones below | ||||
| 
 | ||||
| TLP_WHITE = MarkingDefinition( | ||||
|     id="marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9", | ||||
|     created="2017-01-20T00:00:00.000Z", | ||||
|  |  | |||
|  | @ -7,8 +7,8 @@ from .base import _STIXBase | |||
| from .common import MarkingDefinition | ||||
| from .properties import IDProperty, ListProperty, Property, TypeProperty | ||||
| from .sdo import (AttackPattern, Campaign, CourseOfAction, Identity, Indicator, | ||||
|                   IntrusionSet, Malware, ObservedData, Report, ThreatActor, | ||||
|                   Tool, Vulnerability) | ||||
|                   IntrusionSet, Location, Malware, Note, ObservedData, Opinion, | ||||
|                   Report, ThreatActor, Tool, Vulnerability) | ||||
| from .sro import Relationship, Sighting | ||||
| from .utils import get_dict | ||||
| 
 | ||||
|  | @ -59,9 +59,12 @@ OBJ_MAP = { | |||
|     'identity': Identity, | ||||
|     'indicator': Indicator, | ||||
|     'intrusion-set': IntrusionSet, | ||||
|     'location': Location, | ||||
|     'malware': Malware, | ||||
|     'note': Note, | ||||
|     'marking-definition': MarkingDefinition, | ||||
|     'observed-data': ObservedData, | ||||
|     'opinion': Opinion, | ||||
|     'report': Report, | ||||
|     'relationship': Relationship, | ||||
|     'threat-actor': ThreatActor, | ||||
|  |  | |||
							
								
								
									
										118
									
								
								stix2/sdo.py
								
								
								
								
							
							
						
						
									
										118
									
								
								stix2/sdo.py
								
								
								
								
							|  | @ -8,9 +8,10 @@ from .base import _STIXBase | |||
| from .common import ExternalReference, GranularMarking, KillChainPhase | ||||
| from .markings import MarkingsMixin | ||||
| from .observables import ObservableProperty | ||||
| from .properties import (BooleanProperty, IDProperty, IntegerProperty, | ||||
|                          ListProperty, PatternProperty, ReferenceProperty, | ||||
|                          StringProperty, TimestampProperty, TypeProperty) | ||||
| from .properties import (BooleanProperty, EnumProperty, FloatProperty, | ||||
|                          IDProperty, IntegerProperty, ListProperty, | ||||
|                          PatternProperty, ReferenceProperty, StringProperty, | ||||
|                          TimestampProperty, TypeProperty) | ||||
| from .utils import NOW | ||||
| 
 | ||||
| 
 | ||||
|  | @ -33,6 +34,8 @@ class AttackPattern(STIXDomainObject): | |||
|         ('kill_chain_phases', ListProperty(KillChainPhase)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -57,6 +60,8 @@ class Campaign(STIXDomainObject): | |||
|         ('objective', StringProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -77,6 +82,8 @@ class CourseOfAction(STIXDomainObject): | |||
|         ('description', StringProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -100,6 +107,8 @@ class Identity(STIXDomainObject): | |||
|         ('contact_information', StringProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -124,6 +133,8 @@ class Indicator(STIXDomainObject): | |||
|         ('kill_chain_phases', ListProperty(KillChainPhase)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty, required=True)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -151,6 +162,38 @@ class IntrusionSet(STIXDomainObject): | |||
|         ('secondary_motivations', ListProperty(StringProperty)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|     ]) | ||||
| 
 | ||||
| 
 | ||||
| class Location(STIXDomainObject): | ||||
| 
 | ||||
|     _type = 'location' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|         ('type', TypeProperty(_type)), | ||||
|         ('id', IDProperty(_type)), | ||||
|         ('created_by_ref', ReferenceProperty(type="identity")), | ||||
|         ('created', TimestampProperty(default=lambda: NOW, precision='millisecond')), | ||||
|         ('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')), | ||||
|         ('description', StringProperty()), | ||||
|         ('latitude', FloatProperty()), | ||||
|         ('longitude', FloatProperty()), | ||||
|         ('precision', FloatProperty()), | ||||
|         ('region', StringProperty()), | ||||
|         ('country', StringProperty()), | ||||
|         ('administrative_area', StringProperty()), | ||||
|         ('city', StringProperty()), | ||||
|         ('street_address', StringProperty()), | ||||
|         ('postal_code', StringProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -172,6 +215,32 @@ class Malware(STIXDomainObject): | |||
|         ('kill_chain_phases', ListProperty(KillChainPhase)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty, required=True)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|     ]) | ||||
| 
 | ||||
| 
 | ||||
| class Note(STIXDomainObject): | ||||
| 
 | ||||
|     _type = 'note' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|         ('type', TypeProperty(_type)), | ||||
|         ('id', IDProperty(_type)), | ||||
|         ('created_by_ref', ReferenceProperty(type="identity")), | ||||
|         ('created', TimestampProperty(default=lambda: NOW, precision='millisecond')), | ||||
|         ('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')), | ||||
|         ('summary', StringProperty()), | ||||
|         ('description', StringProperty(required=True)), | ||||
|         ('authors', ListProperty(StringProperty)), | ||||
|         ('object_refs', ListProperty(ReferenceProperty, required=True)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -194,6 +263,38 @@ class ObservedData(STIXDomainObject): | |||
|         ('objects', ObservableProperty(required=True)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|     ]) | ||||
| 
 | ||||
| 
 | ||||
| class Opinion(STIXDomainObject): | ||||
| 
 | ||||
|     _type = 'opinion' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|         ('type', TypeProperty(_type)), | ||||
|         ('id', IDProperty(_type)), | ||||
|         ('created_by_ref', ReferenceProperty(type="identity")), | ||||
|         ('created', TimestampProperty(default=lambda: NOW, precision='millisecond')), | ||||
|         ('modified', TimestampProperty(default=lambda: NOW, precision='millisecond')), | ||||
|         ('description', StringProperty), | ||||
|         ('authors', ListProperty(StringProperty)), | ||||
|         ('object_refs', ListProperty(ReferenceProperty, required=True)), | ||||
|         ('opinion', EnumProperty(allowed=[ | ||||
|             'strongly-disagree', | ||||
|             'disagree', | ||||
|             'neutral', | ||||
|             'agree', | ||||
|             'strongly-agree' | ||||
|         ], required=True)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -216,6 +317,8 @@ class Report(STIXDomainObject): | |||
|         ('object_refs', ListProperty(ReferenceProperty, required=True)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty, required=True)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -244,6 +347,8 @@ class ThreatActor(STIXDomainObject): | |||
|         ('personal_motivations', ListProperty(StringProperty)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty, required=True)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -266,6 +371,8 @@ class Tool(STIXDomainObject): | |||
|         ('tool_version', StringProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty, required=True)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -286,6 +393,8 @@ class Vulnerability(STIXDomainObject): | |||
|         ('description', StringProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -322,6 +431,7 @@ def CustomObject(type='x-custom-type', properties=None): | |||
|     def custom_builder(cls): | ||||
| 
 | ||||
|         class _Custom(cls, STIXDomainObject): | ||||
| 
 | ||||
|             _type = type | ||||
|             _properties = OrderedDict() | ||||
|             _properties.update([ | ||||
|  | @ -341,6 +451,8 @@ def CustomObject(type='x-custom-type', properties=None): | |||
|             _properties.update([ | ||||
|                 ('revoked', BooleanProperty()), | ||||
|                 ('labels', ListProperty(StringProperty)), | ||||
|                 ('confidence', IntegerProperty()), | ||||
|                 ('lang', StringProperty()), | ||||
|                 ('external_references', ListProperty(ExternalReference)), | ||||
|                 ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|                 ('granular_markings', ListProperty(GranularMarking)), | ||||
|  |  | |||
|  | @ -31,6 +31,8 @@ class Relationship(STIXRelationshipObject): | |||
|         ('target_ref', ReferenceProperty(required=True)), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  | @ -51,6 +53,7 @@ class Relationship(STIXRelationshipObject): | |||
| 
 | ||||
| 
 | ||||
| class Sighting(STIXRelationshipObject): | ||||
| 
 | ||||
|     _type = 'sighting' | ||||
|     _properties = OrderedDict() | ||||
|     _properties.update([ | ||||
|  | @ -68,6 +71,8 @@ class Sighting(STIXRelationshipObject): | |||
|         ('summary', BooleanProperty()), | ||||
|         ('revoked', BooleanProperty()), | ||||
|         ('labels', ListProperty(StringProperty)), | ||||
|         ('confidence', IntegerProperty()), | ||||
|         ('lang', StringProperty()), | ||||
|         ('external_references', ListProperty(ExternalReference)), | ||||
|         ('object_marking_refs', ListProperty(ReferenceProperty(type="marking-definition"))), | ||||
|         ('granular_markings', ListProperty(GranularMarking)), | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Emmanuelle Vargas-Gonzalez
						Emmanuelle Vargas-Gonzalez