pymisp 2.5.10__py3-none-any.whl → 2.5.17__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymisp might be problematic. Click here for more details.
- pymisp/__init__.py +1 -1
- pymisp/abstract.py +1 -1
- pymisp/api.py +6 -6
- pymisp/data/misp-objects/objects/{flowintel-cm-case → flowintel-case}/definition.json +3 -3
- pymisp/data/misp-objects/objects/{flowintel-cm-task → flowintel-task}/definition.json +3 -3
- pymisp/data/misp-objects/objects/{flowintel-cm-task-note → flowintel-task-note}/definition.json +3 -3
- pymisp/data/misp-objects/objects/flowintel-task-resource/definition.json +35 -0
- pymisp/data/misp-objects/objects/github-action/definition.json +59 -0
- pymisp/data/misp-objects/objects/google-account/definition.json +116 -0
- pymisp/data/misp-objects/objects/greynoise-ip/definition.json +56 -8
- pymisp/data/misp-objects/objects/network-data/definition.json +167 -0
- pymisp/data/misp-objects/objects/original-imported-file/definition.json +1 -0
- pymisp/data/misp-objects/objects/query/definition.json +4 -2
- pymisp/data/misp-objects/objects/summariser-output/definition.json +90 -0
- pymisp/mispevent.py +29 -27
- pymisp/tools/emailobject.py +3 -5
- pymisp/tools/peobject.py +1 -1
- {pymisp-2.5.10.dist-info → pymisp-2.5.17.dist-info}/METADATA +11 -11
- {pymisp-2.5.10.dist-info → pymisp-2.5.17.dist-info}/RECORD +21 -16
- {pymisp-2.5.10.dist-info → pymisp-2.5.17.dist-info}/WHEEL +1 -1
- {pymisp-2.5.10.dist-info → pymisp-2.5.17.dist-info}/LICENSE +0 -0
pymisp/__init__.py
CHANGED
|
@@ -77,7 +77,7 @@ __all__ = ['PyMISP', 'register_user', 'AbstractMISP', 'MISPTag',
|
|
|
77
77
|
'MISPOrganisationBlocklist', 'MISPEventReport', 'MISPCorrelationExclusion',
|
|
78
78
|
'MISPDecayingModel', 'MISPGalaxy', 'MISPGalaxyCluster', 'MISPGalaxyClusterElement',
|
|
79
79
|
'MISPGalaxyClusterRelation', 'MISPNote', 'MISPOpinion', 'MISPRelationship',
|
|
80
|
-
'PyMISPError', 'NewEventError', 'NewAttributeError',
|
|
80
|
+
'PyMISPError', 'NewEventError', 'NewAttributeError', 'MISPServerError',
|
|
81
81
|
'NoURL', 'NoKey', 'InvalidMISPObject', 'UnknownMISPObjectTemplate', 'PyMISPInvalidFormat',
|
|
82
82
|
'Distribution', 'ThreatLevel', 'Analysis', 'ExpandedPyMISP'
|
|
83
83
|
]
|
pymisp/abstract.py
CHANGED
|
@@ -383,7 +383,7 @@ class MISPTag(AbstractMISP):
|
|
|
383
383
|
|
|
384
384
|
def from_dict(self, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
385
385
|
if kwargs.get('Tag'):
|
|
386
|
-
kwargs = kwargs.get('Tag')
|
|
386
|
+
kwargs = kwargs.get('Tag')
|
|
387
387
|
super().from_dict(**kwargs)
|
|
388
388
|
|
|
389
389
|
def _set_default(self) -> None:
|
pymisp/api.py
CHANGED
|
@@ -129,10 +129,10 @@ def brotli_supported() -> bool:
|
|
|
129
129
|
# urllib >= 1.25.1 includes brotli support
|
|
130
130
|
version_splitted = version('urllib3').split('.') # noqa: F811
|
|
131
131
|
if len(version_splitted) == 2:
|
|
132
|
-
major, minor = version_splitted
|
|
132
|
+
major, minor = version_splitted
|
|
133
133
|
patch = 0
|
|
134
134
|
else:
|
|
135
|
-
major, minor, patch = version_splitted
|
|
135
|
+
major, minor, patch = version_splitted
|
|
136
136
|
major, minor, patch = int(major), int(minor), int(patch)
|
|
137
137
|
urllib3_with_brotli = (major == 1 and ((minor == 25 and patch >= 1) or (minor >= 26))) or major >= 2
|
|
138
138
|
|
|
@@ -1050,7 +1050,7 @@ class PyMISP:
|
|
|
1050
1050
|
# At this point, we assume the user tried to add an attribute on an event they don't own
|
|
1051
1051
|
# Re-try with a proposal
|
|
1052
1052
|
if isinstance(attribute, (MISPAttribute, dict)):
|
|
1053
|
-
return self.add_attribute_proposal(event_id, attribute, pythonify)
|
|
1053
|
+
return self.add_attribute_proposal(event_id, attribute, pythonify)
|
|
1054
1054
|
if not (self.global_pythonify or pythonify) or 'errors' in new_attribute:
|
|
1055
1055
|
return new_attribute
|
|
1056
1056
|
a = MISPAttribute()
|
|
@@ -1563,7 +1563,7 @@ class PyMISP:
|
|
|
1563
1563
|
if isinstance(warninglist_id, list):
|
|
1564
1564
|
query['id'] = warninglist_id
|
|
1565
1565
|
else:
|
|
1566
|
-
query['id'] = [warninglist_id]
|
|
1566
|
+
query['id'] = [warninglist_id]
|
|
1567
1567
|
if warninglist_name is not None:
|
|
1568
1568
|
if isinstance(warninglist_name, list):
|
|
1569
1569
|
query['name'] = warninglist_name
|
|
@@ -3032,7 +3032,7 @@ class PyMISP:
|
|
|
3032
3032
|
if return_format == 'csv':
|
|
3033
3033
|
normalized_response_text = self._check_response(response)
|
|
3034
3034
|
if (self.global_pythonify or pythonify) and not headerless:
|
|
3035
|
-
return self._csv_to_dict(normalized_response_text)
|
|
3035
|
+
return self._csv_to_dict(normalized_response_text)
|
|
3036
3036
|
else:
|
|
3037
3037
|
return normalized_response_text
|
|
3038
3038
|
elif return_format not in ['json', 'yara-json']:
|
|
@@ -3060,7 +3060,7 @@ class PyMISP:
|
|
|
3060
3060
|
to_return.append(me)
|
|
3061
3061
|
elif controller == 'attributes':
|
|
3062
3062
|
# FIXME: obvs, this is hurting my soul. We need something generic.
|
|
3063
|
-
for a in normalized_response['Attribute']:
|
|
3063
|
+
for a in normalized_response['Attribute']:
|
|
3064
3064
|
ma = MISPAttribute()
|
|
3065
3065
|
ma.from_dict(**a)
|
|
3066
3066
|
if 'Event' in ma:
|
|
@@ -88,9 +88,9 @@
|
|
|
88
88
|
"ui-priority": 1
|
|
89
89
|
}
|
|
90
90
|
},
|
|
91
|
-
"description": "A case as defined by flowintel
|
|
91
|
+
"description": "A case as defined by flowintel.",
|
|
92
92
|
"meta-category": "misc",
|
|
93
|
-
"name": "flowintel-
|
|
93
|
+
"name": "flowintel-case",
|
|
94
94
|
"uuid": "19df57c7-b315-4fd2-84e5-d81ab221425e",
|
|
95
|
-
"version":
|
|
95
|
+
"version": 4
|
|
96
96
|
}
|
|
@@ -78,9 +78,9 @@
|
|
|
78
78
|
"ui-priority": 0
|
|
79
79
|
}
|
|
80
80
|
},
|
|
81
|
-
"description": "A task as defined by flowintel
|
|
81
|
+
"description": "A task as defined by flowintel.",
|
|
82
82
|
"meta-category": "misc",
|
|
83
|
-
"name": "flowintel-
|
|
83
|
+
"name": "flowintel-task",
|
|
84
84
|
"uuid": "2f525f6e-d3f2-4cb9-9ca0-f1160d99397d",
|
|
85
|
-
"version":
|
|
85
|
+
"version": 5
|
|
86
86
|
}
|
pymisp/data/misp-objects/objects/{flowintel-cm-task-note → flowintel-task-note}/definition.json
RENAMED
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"ui-priority": 2
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
|
-
"description": "A task's note as defined by flowintel
|
|
30
|
+
"description": "A task's note as defined by flowintel.",
|
|
31
31
|
"meta-category": "misc",
|
|
32
|
-
"name": "flowintel-
|
|
32
|
+
"name": "flowintel-task-note",
|
|
33
33
|
"uuid": "2c6f6aba-48b6-482f-a810-81934d29be9a",
|
|
34
|
-
"version":
|
|
34
|
+
"version": 2
|
|
35
35
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"attributes": {
|
|
3
|
+
"origin-url": {
|
|
4
|
+
"description": "Origin of the task",
|
|
5
|
+
"disable_correlation": true,
|
|
6
|
+
"misp-attribute": "url",
|
|
7
|
+
"to_ids": false,
|
|
8
|
+
"ui-priority": 1
|
|
9
|
+
},
|
|
10
|
+
"resource": {
|
|
11
|
+
"description": "Resources of the task",
|
|
12
|
+
"disable_correlation": true,
|
|
13
|
+
"misp-attribute": "text",
|
|
14
|
+
"to_ids": false,
|
|
15
|
+
"ui-priority": 0
|
|
16
|
+
},
|
|
17
|
+
"resource-uuid": {
|
|
18
|
+
"description": "UUID of the resource",
|
|
19
|
+
"disable_correlation": true,
|
|
20
|
+
"misp-attribute": "text",
|
|
21
|
+
"ui-priority": 2
|
|
22
|
+
},
|
|
23
|
+
"task-uuid": {
|
|
24
|
+
"description": "UUID of the parent task",
|
|
25
|
+
"disable_correlation": true,
|
|
26
|
+
"misp-attribute": "text",
|
|
27
|
+
"ui-priority": 2
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"description": "A task's note as defined by flowintel.",
|
|
31
|
+
"meta-category": "misc",
|
|
32
|
+
"name": "flowintel-task-resource",
|
|
33
|
+
"uuid": "dc1d5bae-3611-499c-bbd6-1ca3ad4048dd",
|
|
34
|
+
"version": 1
|
|
35
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"attributes": {
|
|
3
|
+
"description": {
|
|
4
|
+
"description": "Action description",
|
|
5
|
+
"misp-attribute": "text",
|
|
6
|
+
"ui-priority": 1
|
|
7
|
+
},
|
|
8
|
+
"filters": {
|
|
9
|
+
"description": "Restrictions on the trigger",
|
|
10
|
+
"misp-attribute": "text",
|
|
11
|
+
"multiple": true,
|
|
12
|
+
"ui-priority": 1
|
|
13
|
+
},
|
|
14
|
+
"inputs": {
|
|
15
|
+
"description": "Inputs of the workflow",
|
|
16
|
+
"misp-attribute": "text",
|
|
17
|
+
"multiple": true,
|
|
18
|
+
"ui-priority": 1
|
|
19
|
+
},
|
|
20
|
+
"jobs": {
|
|
21
|
+
"description": "Jobs defined in the workflow",
|
|
22
|
+
"misp-attribute": "text",
|
|
23
|
+
"multiple": true,
|
|
24
|
+
"ui-priority": 1
|
|
25
|
+
},
|
|
26
|
+
"name": {
|
|
27
|
+
"description": "Name of the action.",
|
|
28
|
+
"misp-attribute": "text",
|
|
29
|
+
"ui-priority": 1
|
|
30
|
+
},
|
|
31
|
+
"notes": {
|
|
32
|
+
"description": "Any other informations",
|
|
33
|
+
"misp-attribute": "text",
|
|
34
|
+
"multiple": true,
|
|
35
|
+
"ui-priority": 1
|
|
36
|
+
},
|
|
37
|
+
"outputs": {
|
|
38
|
+
"description": "Outputs generated in the workflow",
|
|
39
|
+
"misp-attribute": "text",
|
|
40
|
+
"multiple": true,
|
|
41
|
+
"ui-priority": 1
|
|
42
|
+
},
|
|
43
|
+
"trigger": {
|
|
44
|
+
"description": "How is the action trigerred.",
|
|
45
|
+
"misp-attribute": "text",
|
|
46
|
+
"multiple": true,
|
|
47
|
+
"ui-priority": 1
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"description": "GitHub Actions",
|
|
51
|
+
"meta-category": "misc",
|
|
52
|
+
"name": "github-action",
|
|
53
|
+
"requiredOneOf": [
|
|
54
|
+
"name",
|
|
55
|
+
"description"
|
|
56
|
+
],
|
|
57
|
+
"uuid": "3331aaf4-1007-454e-ba7b-6f39ad67decb",
|
|
58
|
+
"version": 1
|
|
59
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"attributes": {
|
|
3
|
+
"account-id": {
|
|
4
|
+
"description": "Google Account ID.",
|
|
5
|
+
"misp-attribute": "text",
|
|
6
|
+
"ui-priority": 1
|
|
7
|
+
},
|
|
8
|
+
"alternate-e-mails": {
|
|
9
|
+
"description": "Alternate e-mails associated with the main e-mail.",
|
|
10
|
+
"misp-attribute": "email-src",
|
|
11
|
+
"multiple": true,
|
|
12
|
+
"ui-priority": 1
|
|
13
|
+
},
|
|
14
|
+
"contact-e-mail": {
|
|
15
|
+
"description": "Account recovery contact e-mail.",
|
|
16
|
+
"misp-attribute": "email-src",
|
|
17
|
+
"ui-priority": 1
|
|
18
|
+
},
|
|
19
|
+
"created-on": {
|
|
20
|
+
"description": "The date and time the account was created.",
|
|
21
|
+
"disable_correlation": true,
|
|
22
|
+
"misp-attribute": "datetime",
|
|
23
|
+
"ui-priority": 1
|
|
24
|
+
},
|
|
25
|
+
"creation-ip": {
|
|
26
|
+
"description": "The IP address used to create the account.",
|
|
27
|
+
"disable_correlation": false,
|
|
28
|
+
"misp-attribute": "ip-src",
|
|
29
|
+
"ui-priority": 1
|
|
30
|
+
},
|
|
31
|
+
"deletion-date": {
|
|
32
|
+
"description": "The date and time the account was deleted.",
|
|
33
|
+
"disable_correlation": true,
|
|
34
|
+
"misp-attribute": "datetime",
|
|
35
|
+
"ui-priority": 1
|
|
36
|
+
},
|
|
37
|
+
"e-mail": {
|
|
38
|
+
"description": "The main e-mail associated with the Google ID.",
|
|
39
|
+
"misp-attribute": "email-src",
|
|
40
|
+
"ui-priority": 1
|
|
41
|
+
},
|
|
42
|
+
"end-of-service-date": {
|
|
43
|
+
"description": "The date and time the service was terminated.",
|
|
44
|
+
"disable_correlation": true,
|
|
45
|
+
"misp-attribute": "datetime",
|
|
46
|
+
"ui-priority": 1
|
|
47
|
+
},
|
|
48
|
+
"last-logins-date": {
|
|
49
|
+
"description": "The dates and times of the user's most recent logins.",
|
|
50
|
+
"disable_correlation": true,
|
|
51
|
+
"misp-attribute": "datetime",
|
|
52
|
+
"multiple": true,
|
|
53
|
+
"ui-priority": 1
|
|
54
|
+
},
|
|
55
|
+
"last-updated-date": {
|
|
56
|
+
"description": "The date and time the account was last updated.",
|
|
57
|
+
"disable_correlation": true,
|
|
58
|
+
"misp-attribute": "datetime",
|
|
59
|
+
"ui-priority": 1
|
|
60
|
+
},
|
|
61
|
+
"login-ip": {
|
|
62
|
+
"description": "The IP addresses used to login into the account.",
|
|
63
|
+
"disable_correlation": false,
|
|
64
|
+
"misp-attribute": "ip-src",
|
|
65
|
+
"multiple": true,
|
|
66
|
+
"ui-priority": 1
|
|
67
|
+
},
|
|
68
|
+
"name": {
|
|
69
|
+
"description": "The full name of the person associated with the Google ID.",
|
|
70
|
+
"misp-attribute": "full-name",
|
|
71
|
+
"ui-priority": 1
|
|
72
|
+
},
|
|
73
|
+
"recovery-e-mail": {
|
|
74
|
+
"description": "Account recovery e-mail.",
|
|
75
|
+
"misp-attribute": "email-src",
|
|
76
|
+
"ui-priority": 1
|
|
77
|
+
},
|
|
78
|
+
"recovery-sms": {
|
|
79
|
+
"description": "Account recovery phone number.",
|
|
80
|
+
"misp-attribute": "phone-number",
|
|
81
|
+
"ui-priority": 1
|
|
82
|
+
},
|
|
83
|
+
"related-links": {
|
|
84
|
+
"description": "Any link to a page containing information about this Google user.",
|
|
85
|
+
"misp-attribute": "link",
|
|
86
|
+
"multiple": true,
|
|
87
|
+
"ui-priority": 1
|
|
88
|
+
},
|
|
89
|
+
"services": {
|
|
90
|
+
"description": "Services associated with the Google Account ID.",
|
|
91
|
+
"disable_correlation": true,
|
|
92
|
+
"misp-attribute": "text",
|
|
93
|
+
"ui-priority": 1
|
|
94
|
+
},
|
|
95
|
+
"user-avatar": {
|
|
96
|
+
"description": "A user profile picture or avatar.",
|
|
97
|
+
"misp-attribute": "attachment",
|
|
98
|
+
"multiple": true,
|
|
99
|
+
"ui-priority": 1
|
|
100
|
+
},
|
|
101
|
+
"user-description": {
|
|
102
|
+
"description": "A description of the user.",
|
|
103
|
+
"misp-attribute": "text",
|
|
104
|
+
"ui-priority": 1
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"description": "An object containing subscriber information received from Google.",
|
|
108
|
+
"meta-category": "misc",
|
|
109
|
+
"name": "google-account",
|
|
110
|
+
"requiredOneOf": [
|
|
111
|
+
"account-id",
|
|
112
|
+
"e-mail"
|
|
113
|
+
],
|
|
114
|
+
"uuid": "1d795bfa-29ae-433c-b23a-bb5a1c77e944",
|
|
115
|
+
"version": 1
|
|
116
|
+
}
|
|
@@ -4,59 +4,107 @@
|
|
|
4
4
|
"description": "GreyNoise Actor",
|
|
5
5
|
"disable_correlation": true,
|
|
6
6
|
"misp-attribute": "text",
|
|
7
|
+
"ui-priority": 4
|
|
8
|
+
},
|
|
9
|
+
"asn": {
|
|
10
|
+
"description": "GreyNoise ASN",
|
|
11
|
+
"disable_correlation": true,
|
|
12
|
+
"misp-attribute": "AS",
|
|
13
|
+
"ui-priority": 3
|
|
14
|
+
},
|
|
15
|
+
"bot": {
|
|
16
|
+
"description": "GreyNoise Is Bot Flag",
|
|
17
|
+
"disable_correlation": true,
|
|
18
|
+
"misp-attribute": "boolean",
|
|
7
19
|
"ui-priority": 1
|
|
8
20
|
},
|
|
9
21
|
"classification": {
|
|
10
22
|
"description": "GreyNoise Classification",
|
|
11
23
|
"disable_correlation": true,
|
|
12
24
|
"misp-attribute": "text",
|
|
13
|
-
"ui-priority":
|
|
25
|
+
"ui-priority": 6
|
|
26
|
+
},
|
|
27
|
+
"domain": {
|
|
28
|
+
"description": "GreyNoise Domain",
|
|
29
|
+
"disable_correlation": false,
|
|
30
|
+
"misp-attribute": "domain",
|
|
31
|
+
"ui-priority": 6
|
|
14
32
|
},
|
|
15
33
|
"first-seen": {
|
|
16
34
|
"description": "First Seen",
|
|
17
35
|
"disable_correlation": true,
|
|
18
36
|
"misp-attribute": "datetime",
|
|
19
|
-
"ui-priority":
|
|
37
|
+
"ui-priority": 5
|
|
20
38
|
},
|
|
21
39
|
"ip-src": {
|
|
22
40
|
"description": "Source IP address of the network connection.",
|
|
23
41
|
"misp-attribute": "ip-src",
|
|
24
|
-
"ui-priority":
|
|
42
|
+
"ui-priority": 7
|
|
25
43
|
},
|
|
26
44
|
"last-seen": {
|
|
27
45
|
"description": "Last Seen",
|
|
28
46
|
"disable_correlation": true,
|
|
29
47
|
"misp-attribute": "datetime",
|
|
30
|
-
"ui-priority":
|
|
48
|
+
"ui-priority": 5
|
|
31
49
|
},
|
|
32
50
|
"link": {
|
|
33
51
|
"description": "GreyNoise Visualizer Link",
|
|
34
52
|
"disable_correlation": true,
|
|
35
53
|
"misp-attribute": "link",
|
|
36
|
-
"ui-priority":
|
|
54
|
+
"ui-priority": 4
|
|
37
55
|
},
|
|
38
56
|
"noise": {
|
|
39
57
|
"description": "GreyNoise Internet Scanning Flag",
|
|
40
58
|
"disable_correlation": true,
|
|
41
59
|
"misp-attribute": "text",
|
|
42
|
-
"ui-priority":
|
|
60
|
+
"ui-priority": 4
|
|
43
61
|
},
|
|
44
62
|
"provider": {
|
|
45
63
|
"description": "GreyNoise Service Provider",
|
|
46
64
|
"disable_correlation": true,
|
|
47
65
|
"misp-attribute": "text",
|
|
48
|
-
"ui-priority":
|
|
66
|
+
"ui-priority": 4
|
|
67
|
+
},
|
|
68
|
+
"rdns": {
|
|
69
|
+
"description": "GreyNoise Reverse DNS Hostname",
|
|
70
|
+
"disable_correlation": false,
|
|
71
|
+
"misp-attribute": "hostname",
|
|
72
|
+
"ui-priority": 2
|
|
73
|
+
},
|
|
74
|
+
"rdns_parent": {
|
|
75
|
+
"description": "GreyNoise Reverse DNS Domain",
|
|
76
|
+
"disable_correlation": true,
|
|
77
|
+
"misp-attribute": "domain",
|
|
78
|
+
"ui-priority": 2
|
|
49
79
|
},
|
|
50
80
|
"riot": {
|
|
51
81
|
"description": "GreyNoise Common Business Service Flag",
|
|
52
82
|
"disable_correlation": true,
|
|
53
83
|
"misp-attribute": "text",
|
|
84
|
+
"ui-priority": 4
|
|
85
|
+
},
|
|
86
|
+
"source_country": {
|
|
87
|
+
"description": "GreyNoise Source Country",
|
|
88
|
+
"disable_correlation": true,
|
|
89
|
+
"misp-attribute": "text",
|
|
90
|
+
"ui-priority": 3
|
|
91
|
+
},
|
|
92
|
+
"tor": {
|
|
93
|
+
"description": "GreyNoise Is Tor Flag",
|
|
94
|
+
"disable_correlation": true,
|
|
95
|
+
"misp-attribute": "boolean",
|
|
54
96
|
"ui-priority": 1
|
|
55
97
|
},
|
|
56
98
|
"trust-level": {
|
|
57
99
|
"description": "GreyNoise RIOT Trust Level",
|
|
58
100
|
"disable_correlation": true,
|
|
59
101
|
"misp-attribute": "text",
|
|
102
|
+
"ui-priority": 4
|
|
103
|
+
},
|
|
104
|
+
"vpn": {
|
|
105
|
+
"description": "GreyNoise Is VPN Flag",
|
|
106
|
+
"disable_correlation": true,
|
|
107
|
+
"misp-attribute": "boolean",
|
|
60
108
|
"ui-priority": 1
|
|
61
109
|
}
|
|
62
110
|
},
|
|
@@ -67,5 +115,5 @@
|
|
|
67
115
|
"ip-src"
|
|
68
116
|
],
|
|
69
117
|
"uuid": "6B14A94A-46E4-4B82-B24D-0DBF8E8B3FD9",
|
|
70
|
-
"version":
|
|
118
|
+
"version": 2
|
|
71
119
|
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
{
|
|
2
|
+
"attributes": {
|
|
3
|
+
"counter": {
|
|
4
|
+
"description": "counter (ex.: bytes, packets, flows, events, etc)",
|
|
5
|
+
"disable_correlation": true,
|
|
6
|
+
"misp-attribute": "counter",
|
|
7
|
+
"multiple": true,
|
|
8
|
+
"ui-priority": 3
|
|
9
|
+
},
|
|
10
|
+
"data": {
|
|
11
|
+
"description": "network traffic (ex.: payload, log lines, etc)",
|
|
12
|
+
"disable_correlation": true,
|
|
13
|
+
"misp-attribute": "text",
|
|
14
|
+
"multiple": true,
|
|
15
|
+
"ui-priority": 0
|
|
16
|
+
},
|
|
17
|
+
"description": {
|
|
18
|
+
"categories": [
|
|
19
|
+
"Network activity",
|
|
20
|
+
"External analysis"
|
|
21
|
+
],
|
|
22
|
+
"description": "describe type/content of the network data",
|
|
23
|
+
"disable_correlation": true,
|
|
24
|
+
"misp-attribute": "text",
|
|
25
|
+
"multiple": true,
|
|
26
|
+
"ui-priority": 15
|
|
27
|
+
},
|
|
28
|
+
"dst_ASN": {
|
|
29
|
+
"categories": [
|
|
30
|
+
"Network activity",
|
|
31
|
+
"External analysis"
|
|
32
|
+
],
|
|
33
|
+
"description": "destination autonomous system number",
|
|
34
|
+
"disable_correlation": true,
|
|
35
|
+
"misp-attribute": "AS",
|
|
36
|
+
"multiple": true,
|
|
37
|
+
"ui-priority": 8
|
|
38
|
+
},
|
|
39
|
+
"dst_CC": {
|
|
40
|
+
"categories": [
|
|
41
|
+
"Network activity",
|
|
42
|
+
"External analysis"
|
|
43
|
+
],
|
|
44
|
+
"description": "destination country code",
|
|
45
|
+
"disable_correlation": true,
|
|
46
|
+
"misp-attribute": "text",
|
|
47
|
+
"multiple": true,
|
|
48
|
+
"ui-priority": 9
|
|
49
|
+
},
|
|
50
|
+
"dst_IP": {
|
|
51
|
+
"categories": [
|
|
52
|
+
"Network activity",
|
|
53
|
+
"External analysis"
|
|
54
|
+
],
|
|
55
|
+
"description": "destination IP address",
|
|
56
|
+
"misp-attribute": "ip-dst",
|
|
57
|
+
"multiple": true,
|
|
58
|
+
"ui-priority": 7
|
|
59
|
+
},
|
|
60
|
+
"dst_hostname": {
|
|
61
|
+
"categories": [
|
|
62
|
+
"Network activity",
|
|
63
|
+
"External analysis"
|
|
64
|
+
],
|
|
65
|
+
"description": "destination hostname",
|
|
66
|
+
"misp-attribute": "hostname",
|
|
67
|
+
"multiple": true,
|
|
68
|
+
"ui-priority": 5
|
|
69
|
+
},
|
|
70
|
+
"dst_port": {
|
|
71
|
+
"categories": [
|
|
72
|
+
"Network activity",
|
|
73
|
+
"External analysis"
|
|
74
|
+
],
|
|
75
|
+
"description": "destination port",
|
|
76
|
+
"disable_correlation": true,
|
|
77
|
+
"misp-attribute": "port",
|
|
78
|
+
"multiple": true,
|
|
79
|
+
"ui-priority": 6
|
|
80
|
+
},
|
|
81
|
+
"first_seen": {
|
|
82
|
+
"description": "timestamp of the first data seen",
|
|
83
|
+
"disable_correlation": true,
|
|
84
|
+
"misp-attribute": "datetime",
|
|
85
|
+
"ui-priority": 2
|
|
86
|
+
},
|
|
87
|
+
"last_seen": {
|
|
88
|
+
"description": "timestamp of the last data seen",
|
|
89
|
+
"disable_correlation": true,
|
|
90
|
+
"misp-attribute": "datetime",
|
|
91
|
+
"ui-priority": 1
|
|
92
|
+
},
|
|
93
|
+
"protocol": {
|
|
94
|
+
"categories": [
|
|
95
|
+
"Network activity",
|
|
96
|
+
"External analysis"
|
|
97
|
+
],
|
|
98
|
+
"description": "protocol (ex.: TCP, UDP, ICMP, TLS, HTTP, HTTPS, SIP, etc)",
|
|
99
|
+
"disable_correlation": true,
|
|
100
|
+
"misp-attribute": "text",
|
|
101
|
+
"multiple": true,
|
|
102
|
+
"ui-priority": 4
|
|
103
|
+
},
|
|
104
|
+
"src_ASN": {
|
|
105
|
+
"categories": [
|
|
106
|
+
"Network activity",
|
|
107
|
+
"External analysis"
|
|
108
|
+
],
|
|
109
|
+
"description": "source autonomous system number",
|
|
110
|
+
"disable_correlation": true,
|
|
111
|
+
"misp-attribute": "AS",
|
|
112
|
+
"multiple": true,
|
|
113
|
+
"ui-priority": 13
|
|
114
|
+
},
|
|
115
|
+
"src_CC": {
|
|
116
|
+
"categories": [
|
|
117
|
+
"Network activity",
|
|
118
|
+
"External analysis"
|
|
119
|
+
],
|
|
120
|
+
"description": "source country code",
|
|
121
|
+
"disable_correlation": true,
|
|
122
|
+
"misp-attribute": "text",
|
|
123
|
+
"multiple": true,
|
|
124
|
+
"ui-priority": 14
|
|
125
|
+
},
|
|
126
|
+
"src_IP": {
|
|
127
|
+
"categories": [
|
|
128
|
+
"Network activity",
|
|
129
|
+
"External analysis"
|
|
130
|
+
],
|
|
131
|
+
"description": "source IP address",
|
|
132
|
+
"misp-attribute": "ip-src",
|
|
133
|
+
"multiple": true,
|
|
134
|
+
"ui-priority": 12
|
|
135
|
+
},
|
|
136
|
+
"src_hostname": {
|
|
137
|
+
"categories": [
|
|
138
|
+
"Network activity",
|
|
139
|
+
"External analysis"
|
|
140
|
+
],
|
|
141
|
+
"description": "source hostname",
|
|
142
|
+
"misp-attribute": "hostname",
|
|
143
|
+
"multiple": true,
|
|
144
|
+
"ui-priority": 10
|
|
145
|
+
},
|
|
146
|
+
"src_port": {
|
|
147
|
+
"categories": [
|
|
148
|
+
"Network activity",
|
|
149
|
+
"External analysis"
|
|
150
|
+
],
|
|
151
|
+
"description": "source port",
|
|
152
|
+
"disable_correlation": true,
|
|
153
|
+
"misp-attribute": "port",
|
|
154
|
+
"multiple": true,
|
|
155
|
+
"ui-priority": 11
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"description": "network data, including payloads/logs, relevant timestamps, data volume and enrichment of the TCP/IP 5-tuple connection information.",
|
|
159
|
+
"meta-category": "network",
|
|
160
|
+
"name": "network-data",
|
|
161
|
+
"requiredOneOf": [
|
|
162
|
+
"src_IP",
|
|
163
|
+
"data"
|
|
164
|
+
],
|
|
165
|
+
"uuid": "64d5949b-98ac-459d-83b8-4688f45795de",
|
|
166
|
+
"version": 2
|
|
167
|
+
}
|
|
@@ -27,7 +27,9 @@
|
|
|
27
27
|
"Google search query",
|
|
28
28
|
"Ariel Query Language (qradar)",
|
|
29
29
|
"Grep",
|
|
30
|
-
"Devo LINQ"
|
|
30
|
+
"Devo LINQ",
|
|
31
|
+
"Microsoft Defender XDR",
|
|
32
|
+
"Sentinel Advanced Security Information Model"
|
|
31
33
|
],
|
|
32
34
|
"ui-priority": 0
|
|
33
35
|
},
|
|
@@ -49,5 +51,5 @@
|
|
|
49
51
|
"query"
|
|
50
52
|
],
|
|
51
53
|
"uuid": "006539b3-f68a-4a02-a213-e600762d39b5",
|
|
52
|
-
"version":
|
|
54
|
+
"version": 4
|
|
53
55
|
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"attributes": {
|
|
3
|
+
"description": {
|
|
4
|
+
"description": "Description of the text summarised.",
|
|
5
|
+
"disable_correlation": true,
|
|
6
|
+
"misp-attribute": "text",
|
|
7
|
+
"ui-priority": 1
|
|
8
|
+
},
|
|
9
|
+
"original-text": {
|
|
10
|
+
"description": "Original text before any processing.",
|
|
11
|
+
"disable_correlation": true,
|
|
12
|
+
"misp-attribute": "attachment",
|
|
13
|
+
"ui-priority": 0
|
|
14
|
+
},
|
|
15
|
+
"original-text-timestamp": {
|
|
16
|
+
"description": "Publication date of the original text (not related to the processing).",
|
|
17
|
+
"disable_correlation": true,
|
|
18
|
+
"misp-attribute": "datetime",
|
|
19
|
+
"ui-priority": 1
|
|
20
|
+
},
|
|
21
|
+
"original-url": {
|
|
22
|
+
"description": "URL of the original text.",
|
|
23
|
+
"disable_correlation": true,
|
|
24
|
+
"misp-attribute": "link",
|
|
25
|
+
"ui-priority": 1
|
|
26
|
+
},
|
|
27
|
+
"summariser-model": {
|
|
28
|
+
"description": "Model used for the summariser",
|
|
29
|
+
"misp-attribute": "text",
|
|
30
|
+
"multiple": true,
|
|
31
|
+
"sane_default": [
|
|
32
|
+
"gpt-3.5-turbo",
|
|
33
|
+
"gpt-3.5-turbo-16k",
|
|
34
|
+
"gpt-3.5-turbo-0125 (16k)",
|
|
35
|
+
"gpt-4",
|
|
36
|
+
"gpt-4-turbo",
|
|
37
|
+
"gpt-4-o",
|
|
38
|
+
"gpt-4o-mini",
|
|
39
|
+
"o3-mini"
|
|
40
|
+
],
|
|
41
|
+
"ui-priority": 0
|
|
42
|
+
},
|
|
43
|
+
"summariser-timestamp": {
|
|
44
|
+
"description": "Date when the summary was produced.",
|
|
45
|
+
"disable_correlation": true,
|
|
46
|
+
"misp-attribute": "datetime",
|
|
47
|
+
"ui-priority": 0
|
|
48
|
+
},
|
|
49
|
+
"summariser-version": {
|
|
50
|
+
"description": "Version of the code used for the summariser.",
|
|
51
|
+
"disable_correlation": true,
|
|
52
|
+
"misp-attribute": "text",
|
|
53
|
+
"ui-priority": 0
|
|
54
|
+
},
|
|
55
|
+
"summary": {
|
|
56
|
+
"description": "Summary of the original text by the AI-based or NLP-based summariser.",
|
|
57
|
+
"disable_correlation": true,
|
|
58
|
+
"misp-attribute": "text",
|
|
59
|
+
"ui-priority": 0
|
|
60
|
+
},
|
|
61
|
+
"tcode": {
|
|
62
|
+
"description": "MITRE ATT&CK Technique ID extracted by the AI-based or NLP-based summariser.",
|
|
63
|
+
"disable_correlation": true,
|
|
64
|
+
"misp-attribute": "text",
|
|
65
|
+
"multiple": true,
|
|
66
|
+
"ui-priority": 0
|
|
67
|
+
},
|
|
68
|
+
"title": {
|
|
69
|
+
"description": "Title of the text summarised.",
|
|
70
|
+
"disable_correlation": true,
|
|
71
|
+
"misp-attribute": "text",
|
|
72
|
+
"ui-priority": 0
|
|
73
|
+
},
|
|
74
|
+
"ttp": {
|
|
75
|
+
"description": "TTP of the original text extracted by the AI-based or NLP-based summariser.",
|
|
76
|
+
"disable_correlation": true,
|
|
77
|
+
"misp-attribute": "text",
|
|
78
|
+
"multiple": true,
|
|
79
|
+
"ui-priority": 0
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"description": "Summariser output from an AI-based or NLP summariser.",
|
|
83
|
+
"meta-category": "misc",
|
|
84
|
+
"name": "summariser-output",
|
|
85
|
+
"required": [
|
|
86
|
+
"summary"
|
|
87
|
+
],
|
|
88
|
+
"uuid": "38633d19-123a-4b0f-bc4a-ccb381e58e49",
|
|
89
|
+
"version": 1
|
|
90
|
+
}
|
pymisp/mispevent.py
CHANGED
|
@@ -2,9 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from datetime import timezone, datetime, date
|
|
4
4
|
import copy
|
|
5
|
+
from dateutil.parser import parse
|
|
5
6
|
import os
|
|
6
7
|
import base64
|
|
7
|
-
import sys
|
|
8
8
|
from io import BytesIO, BufferedIOBase, TextIOBase
|
|
9
9
|
from zipfile import ZipFile
|
|
10
10
|
import uuid
|
|
@@ -111,12 +111,6 @@ class AnalystDataBehaviorMixin(AbstractMISP):
|
|
|
111
111
|
self.add_relationship(**relationship)
|
|
112
112
|
|
|
113
113
|
|
|
114
|
-
try:
|
|
115
|
-
from dateutil.parser import parse
|
|
116
|
-
except ImportError:
|
|
117
|
-
logger.exception("Cannot import dateutil")
|
|
118
|
-
|
|
119
|
-
|
|
120
114
|
def _make_datetime(value: int | float | str | datetime | date) -> datetime:
|
|
121
115
|
if isinstance(value, (int, float)):
|
|
122
116
|
# Timestamp
|
|
@@ -126,7 +120,7 @@ def _make_datetime(value: int | float | str | datetime | date) -> datetime:
|
|
|
126
120
|
# faster
|
|
127
121
|
value = datetime.fromisoformat(value)
|
|
128
122
|
except Exception:
|
|
129
|
-
value = parse(value)
|
|
123
|
+
value = parse(value)
|
|
130
124
|
elif isinstance(value, datetime):
|
|
131
125
|
pass
|
|
132
126
|
elif isinstance(value, date): # NOTE: date has to be *after* datetime, or it will be overwritten
|
|
@@ -399,7 +393,7 @@ class MISPAttribute(AnalystDataBehaviorMixin):
|
|
|
399
393
|
if self.type == 'malware-sample':
|
|
400
394
|
try:
|
|
401
395
|
# Ignore type, if data is None -> exception
|
|
402
|
-
with ZipFile(self.data) as f:
|
|
396
|
+
with ZipFile(self.data) as f:
|
|
403
397
|
if not self.__is_misp_encrypted_file(f):
|
|
404
398
|
raise PyMISPError('Not an existing malware sample')
|
|
405
399
|
for name in f.namelist():
|
|
@@ -415,7 +409,12 @@ class MISPAttribute(AnalystDataBehaviorMixin):
|
|
|
415
409
|
|
|
416
410
|
def __setattr__(self, name: str, value: Any) -> None:
|
|
417
411
|
if name in ['first_seen', 'last_seen']:
|
|
418
|
-
|
|
412
|
+
try:
|
|
413
|
+
_datetime = _make_datetime(value)
|
|
414
|
+
except Exception:
|
|
415
|
+
if value is not None:
|
|
416
|
+
logger.warning(f'Invalid value ({value}) for {name}, skipping.')
|
|
417
|
+
return None
|
|
419
418
|
|
|
420
419
|
# NOTE: the two following should be exceptions, but there are existing events in this state,
|
|
421
420
|
# And we cannot dump them if it is there.
|
|
@@ -488,7 +487,7 @@ class MISPAttribute(AnalystDataBehaviorMixin):
|
|
|
488
487
|
return self._malware_binary
|
|
489
488
|
elif hasattr(self, 'malware_filename'):
|
|
490
489
|
# Have a binary, but didn't decrypt it yet
|
|
491
|
-
with ZipFile(self.data) as f:
|
|
490
|
+
with ZipFile(self.data) as f:
|
|
492
491
|
for name in f.namelist():
|
|
493
492
|
if not name.endswith('.filename.txt'):
|
|
494
493
|
with f.open(name, pwd=b'infected') as unpacked:
|
|
@@ -585,18 +584,13 @@ class MISPAttribute(AnalystDataBehaviorMixin):
|
|
|
585
584
|
if self.type == 'datetime' and isinstance(self.value, str):
|
|
586
585
|
try:
|
|
587
586
|
# Faster
|
|
588
|
-
|
|
589
|
-
self.value = datetime.fromisoformat(self.value)
|
|
590
|
-
else:
|
|
591
|
-
if '+' in self.value or '-' in self.value:
|
|
592
|
-
self.value = datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S.%f%z")
|
|
593
|
-
elif '.' in self.value:
|
|
594
|
-
self.value = datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S.%f")
|
|
595
|
-
else:
|
|
596
|
-
self.value = datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S")
|
|
587
|
+
self.value = datetime.fromisoformat(self.value)
|
|
597
588
|
except ValueError:
|
|
598
589
|
# Slower, but if the other ones fail, that's a good fallback
|
|
599
|
-
|
|
590
|
+
try:
|
|
591
|
+
self.value = parse(self.value)
|
|
592
|
+
except Exception:
|
|
593
|
+
raise NewAttributeError(f'{self.value} is not a valid datetime, the attribute is broken.')
|
|
600
594
|
|
|
601
595
|
# Default values
|
|
602
596
|
self.category = kwargs.pop('category', type_defaults['default_category'])
|
|
@@ -862,7 +856,12 @@ class MISPObject(AnalystDataBehaviorMixin):
|
|
|
862
856
|
|
|
863
857
|
def __setattr__(self, name: str, value: Any) -> None:
|
|
864
858
|
if name in ['first_seen', 'last_seen']:
|
|
865
|
-
|
|
859
|
+
try:
|
|
860
|
+
value = _make_datetime(value)
|
|
861
|
+
except Exception:
|
|
862
|
+
if value is not None:
|
|
863
|
+
logger.warning(f'Invalid value ({value}) for {name}, skipping.')
|
|
864
|
+
return None
|
|
866
865
|
|
|
867
866
|
if name == 'last_seen' and hasattr(self, 'first_seen') and self.first_seen > value:
|
|
868
867
|
logger.warning(f'last_seen ({value}) has to be after first_seen ({self.first_seen})')
|
|
@@ -1732,14 +1731,14 @@ class MISPEvent(AnalystDataBehaviorMixin):
|
|
|
1732
1731
|
event_report.pop('distribution', None)
|
|
1733
1732
|
event_report.pop('SharingGroup', None)
|
|
1734
1733
|
event_report.pop('sharing_group_id', None)
|
|
1735
|
-
to_return['EventReport'].append(event_report.
|
|
1734
|
+
to_return['EventReport'].append(event_report._to_feed())
|
|
1736
1735
|
|
|
1737
1736
|
if with_cryptographic_keys and self.cryptographic_keys:
|
|
1738
1737
|
to_return['CryptographicKey'] = []
|
|
1739
1738
|
for cryptographic_key in self.cryptographic_keys:
|
|
1740
1739
|
cryptographic_key.pop('parent_id', None)
|
|
1741
1740
|
cryptographic_key.pop('id', None)
|
|
1742
|
-
to_return['CryptographicKey'].append(cryptographic_key.
|
|
1741
|
+
to_return['CryptographicKey'].append(cryptographic_key._to_feed())
|
|
1743
1742
|
|
|
1744
1743
|
return {'Event': to_return}
|
|
1745
1744
|
|
|
@@ -1855,7 +1854,10 @@ class MISPEvent(AnalystDataBehaviorMixin):
|
|
|
1855
1854
|
# faster
|
|
1856
1855
|
value = date.fromisoformat(value)
|
|
1857
1856
|
except Exception:
|
|
1858
|
-
|
|
1857
|
+
try:
|
|
1858
|
+
value = parse(value).date()
|
|
1859
|
+
except Exception as e:
|
|
1860
|
+
raise NewEventError(f'Invalid format for the date: {e} - {type(value)} - {value}')
|
|
1859
1861
|
elif isinstance(value, (int, float)):
|
|
1860
1862
|
value = date.fromtimestamp(value)
|
|
1861
1863
|
elif isinstance(value, datetime):
|
|
@@ -1871,7 +1873,7 @@ class MISPEvent(AnalystDataBehaviorMixin):
|
|
|
1871
1873
|
:param ignore_invalid: if True, assigns current date if d is not an expected type
|
|
1872
1874
|
"""
|
|
1873
1875
|
if isinstance(d, (str, int, float, datetime, date)):
|
|
1874
|
-
self.date = d
|
|
1876
|
+
self.date = d
|
|
1875
1877
|
elif ignore_invalid:
|
|
1876
1878
|
self.date = date.today()
|
|
1877
1879
|
else:
|
|
@@ -1938,7 +1940,7 @@ class MISPEvent(AnalystDataBehaviorMixin):
|
|
|
1938
1940
|
for rel_event in kwargs.pop('RelatedEvent'):
|
|
1939
1941
|
sub_event = MISPEvent()
|
|
1940
1942
|
sub_event.load(rel_event)
|
|
1941
|
-
self.RelatedEvent.append({'Event': sub_event})
|
|
1943
|
+
self.RelatedEvent.append({'Event': sub_event})
|
|
1942
1944
|
if kwargs.get('Tag'):
|
|
1943
1945
|
[self.add_tag(tag) for tag in kwargs.pop('Tag')]
|
|
1944
1946
|
if kwargs.get('Object'):
|
pymisp/tools/emailobject.py
CHANGED
|
@@ -10,7 +10,7 @@ from email import policy, message_from_bytes
|
|
|
10
10
|
from email.message import EmailMessage
|
|
11
11
|
from io import BytesIO
|
|
12
12
|
from pathlib import Path
|
|
13
|
-
from typing import
|
|
13
|
+
from typing import Any
|
|
14
14
|
|
|
15
15
|
from extract_msg import openMsg
|
|
16
16
|
from extract_msg.msg_classes import MessageBase
|
|
@@ -50,7 +50,6 @@ class EMailObject(AbstractMISPObjectGenerator):
|
|
|
50
50
|
eml = message_from_bytes(content_in_bytes,
|
|
51
51
|
_class=EmailMessage,
|
|
52
52
|
policy=policy.default)
|
|
53
|
-
eml = cast(EmailMessage, eml) # Only needed to quiet mypy
|
|
54
53
|
if len(eml) != 0:
|
|
55
54
|
self.raw_emails['eml'] = self.__pseudofile
|
|
56
55
|
return eml
|
|
@@ -73,7 +72,6 @@ class EMailObject(AbstractMISPObjectGenerator):
|
|
|
73
72
|
eml_bytes = content_in_bytes.decode("utf_8_sig").encode("utf-8")
|
|
74
73
|
eml = email.message_from_bytes(eml_bytes,
|
|
75
74
|
policy=policy.default)
|
|
76
|
-
eml = cast(EmailMessage, eml) # Only needed to quiet mypy
|
|
77
75
|
if len(eml) != 0:
|
|
78
76
|
self.raw_emails['eml'] = BytesIO(eml_bytes)
|
|
79
77
|
return eml
|
|
@@ -99,7 +97,7 @@ class EMailObject(AbstractMISPObjectGenerator):
|
|
|
99
97
|
def _msg_to_eml(self, msg_bytes: bytes) -> EmailMessage:
|
|
100
98
|
"""Converts a msg into an eml."""
|
|
101
99
|
# NOTE: openMsg returns a MessageBase, not a MSGFile
|
|
102
|
-
msg_obj: MessageBase = openMsg(msg_bytes)
|
|
100
|
+
msg_obj: MessageBase = openMsg(msg_bytes)
|
|
103
101
|
# msg obj stores the original raw header here
|
|
104
102
|
message, body, attachments = self._extract_msg_objects(msg_obj)
|
|
105
103
|
eml = self._build_eml(message, body, attachments)
|
|
@@ -107,7 +105,7 @@ class EMailObject(AbstractMISPObjectGenerator):
|
|
|
107
105
|
|
|
108
106
|
def _extract_msg_objects(self, msg_obj: MessageBase) -> tuple[EmailMessage, dict[str, Any], list[AttachmentBase] | list[SignedAttachment]]:
|
|
109
107
|
"""Extracts email objects needed to construct an eml from a msg."""
|
|
110
|
-
message: EmailMessage = email.message_from_string(msg_obj.header.as_string(), policy=policy.default)
|
|
108
|
+
message: EmailMessage = email.message_from_string(msg_obj.header.as_string(), policy=policy.default)
|
|
111
109
|
body = {}
|
|
112
110
|
if msg_obj.body is not None:
|
|
113
111
|
body['text'] = {"obj": msg_obj.body,
|
pymisp/tools/peobject.py
CHANGED
|
@@ -202,7 +202,7 @@ class PESigners(AbstractMISPObjectGenerator):
|
|
|
202
202
|
self.add_attribute('digest_algorithm', value=str(self.__signer.digest_algorithm))
|
|
203
203
|
self.add_attribute('encryption_algorithm', value=str(self.__signer.encryption_algorithm))
|
|
204
204
|
self.add_attribute('digest-base64', value=b64encode(self.__signer.encrypted_digest))
|
|
205
|
-
info: lief.PE.SpcSpOpusInfo = self.__signer.get_attribute(lief.PE.Attribute.TYPE.SPC_SP_OPUS_INFO)
|
|
205
|
+
info: lief.PE.SpcSpOpusInfo = self.__signer.get_attribute(lief.PE.Attribute.TYPE.SPC_SP_OPUS_INFO)
|
|
206
206
|
if info:
|
|
207
207
|
self.add_attribute('program-name', value=info.program_name)
|
|
208
208
|
self.add_attribute('url', value=info.more_info)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pymisp
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.17
|
|
4
4
|
Summary: Python API for MISP.
|
|
5
5
|
License: BSD-2-Clause
|
|
6
6
|
Author: Raphaël Vinot
|
|
@@ -28,24 +28,24 @@ Provides-Extra: openioc
|
|
|
28
28
|
Provides-Extra: pdfexport
|
|
29
29
|
Provides-Extra: url
|
|
30
30
|
Provides-Extra: virustotal
|
|
31
|
-
Requires-Dist: RTFDE (>=0.1.2) ; (python_version <= "3.9") and (extra == "email")
|
|
32
|
-
Requires-Dist: beautifulsoup4 (>=4.13.
|
|
31
|
+
Requires-Dist: RTFDE (>=0.1.2.1) ; (python_version <= "3.9") and (extra == "email")
|
|
32
|
+
Requires-Dist: beautifulsoup4 (>=4.13.4) ; extra == "openioc"
|
|
33
33
|
Requires-Dist: deprecated (>=1.2.18)
|
|
34
|
-
Requires-Dist: docutils (
|
|
35
|
-
Requires-Dist: extract_msg (>=0.54.
|
|
36
|
-
Requires-Dist: lief (>=0.16.
|
|
34
|
+
Requires-Dist: docutils (<0.22) ; (python_version >= "3.11") and (extra == "docs")
|
|
35
|
+
Requires-Dist: extract_msg (>=0.54.1) ; extra == "email"
|
|
36
|
+
Requires-Dist: lief (>=0.16.6) ; extra == "fileobjects"
|
|
37
37
|
Requires-Dist: myst-parser (>=4.0.1) ; (python_version >= "3.11") and (extra == "docs")
|
|
38
38
|
Requires-Dist: oletools (>=0.60.2) ; extra == "email"
|
|
39
39
|
Requires-Dist: pydeep2 (>=0.5.1) ; extra == "fileobjects"
|
|
40
40
|
Requires-Dist: pyfaup (>=1.2) ; extra == "url"
|
|
41
41
|
Requires-Dist: python-dateutil (>=2.9.0.post0)
|
|
42
42
|
Requires-Dist: python-magic (>=0.4.27) ; extra == "fileobjects"
|
|
43
|
-
Requires-Dist: reportlab (>=4.3
|
|
44
|
-
Requires-Dist: requests (>=2.32.
|
|
43
|
+
Requires-Dist: reportlab (>=4.4.3) ; extra == "pdfexport"
|
|
44
|
+
Requires-Dist: requests (>=2.32.4)
|
|
45
45
|
Requires-Dist: sphinx (>=8.2.3) ; (python_version >= "3.11") and (extra == "docs")
|
|
46
|
-
Requires-Dist: sphinx-autodoc-typehints (>=3.
|
|
47
|
-
Requires-Dist: urllib3 (>=2.
|
|
48
|
-
Requires-Dist: validators (>=0.
|
|
46
|
+
Requires-Dist: sphinx-autodoc-typehints (>=3.2.0) ; (python_version >= "3.11") and (extra == "docs")
|
|
47
|
+
Requires-Dist: urllib3 (>=2.5.0) ; extra == "brotli"
|
|
48
|
+
Requires-Dist: validators (>=0.35.0) ; extra == "virustotal"
|
|
49
49
|
Project-URL: Documentation, https://pymisp.readthedocs.io
|
|
50
50
|
Project-URL: Repository, https://github.com/MISP/PyMISP
|
|
51
51
|
Project-URL: issues, https://github.com/MISP/PyMISP/issues
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
pymisp/__init__.py,sha256=
|
|
2
|
-
pymisp/abstract.py,sha256=
|
|
3
|
-
pymisp/api.py,sha256
|
|
1
|
+
pymisp/__init__.py,sha256=0xHLChUKY2NJ6iTd7XTRjZz1ypm5w83dNDiKqmL2n9g,4023
|
|
2
|
+
pymisp/abstract.py,sha256=QQ7qrgAzbNdTdmYBL3lRq_qn-xC-33Ao6O_De4xIr4Q,15717
|
|
3
|
+
pymisp/api.py,sha256=-9E_cnascTsGzLlngC5lf1TAHcmRnn4jSmmeDYv6VJU,209360
|
|
4
4
|
pymisp/data/describeTypes.json,sha256=hoOy6U_FDVmfk9EdaFgGfEe_GMifmRnIrW8FAJ1ylJ4,45889
|
|
5
5
|
pymisp/data/misp-objects/objects/ADS/definition.json,sha256=EtPXOaNcngjtH0ylJ0gw9UfErgkjzUWFOyzvzC6pGfM,3048
|
|
6
6
|
pymisp/data/misp-objects/objects/abuseipdb/definition.json,sha256=xWtZfdAwWWTR5_J76K8chrxFViJeH9T8CQQ6aRhEk3Q,1070
|
|
@@ -91,9 +91,10 @@ pymisp/data/misp-objects/objects/facial-composite/definition.json,sha256=gj4wK-V
|
|
|
91
91
|
pymisp/data/misp-objects/objects/fail2ban/definition.json,sha256=5bAMbq3txZHWQrIX-NDZMQRg6vrpUBTbimJcCyk4Ixw,1601
|
|
92
92
|
pymisp/data/misp-objects/objects/favicon/definition.json,sha256=KL6P9RGHjaLRj41DPzszif0mmEvUsnbEj5I4nOz497g,996
|
|
93
93
|
pymisp/data/misp-objects/objects/file/definition.json,sha256=wPPyh74-tOLlphUHlKfAtjEUYoYY7jNHn8JwzUgF_MA,12900
|
|
94
|
-
pymisp/data/misp-objects/objects/flowintel-
|
|
95
|
-
pymisp/data/misp-objects/objects/flowintel-
|
|
96
|
-
pymisp/data/misp-objects/objects/flowintel-
|
|
94
|
+
pymisp/data/misp-objects/objects/flowintel-case/definition.json,sha256=LCDG0OOJdpY_GbrGkv20edtyYfW6IUNn8rKc9hKiSbw,2488
|
|
95
|
+
pymisp/data/misp-objects/objects/flowintel-task/definition.json,sha256=9ON-1bXHSOB7A07t8fRNQ0_37aY32EuLvBd5bfSDuNQ,2193
|
|
96
|
+
pymisp/data/misp-objects/objects/flowintel-task-note/definition.json,sha256=wU5HLbzediH2Rol-dx45bClRIkXG-k8xxdUjCeTXSs4,889
|
|
97
|
+
pymisp/data/misp-objects/objects/flowintel-task-resource/definition.json,sha256=iO0K2Gj5-TYJ9C0nkmzJDR0Ui8R4z3cYxPpK5CHzozU,908
|
|
97
98
|
pymisp/data/misp-objects/objects/forensic-case/definition.json,sha256=tOaSEp9SAleSBXVVe8ms8G8jjd2q_IpaIDmfqt8NAsY,1281
|
|
98
99
|
pymisp/data/misp-objects/objects/forensic-evidence/definition.json,sha256=d1Sjj0mts5mZ5YiKTXEYrNJXtC-ZJ0lN7Q7ux0-FN9c,2274
|
|
99
100
|
pymisp/data/misp-objects/objects/forged-document/definition.json,sha256=xBpiPFyJjwuBVM0xrmQSHY4wmm0bTOQIg45avB3NgLw,2816
|
|
@@ -152,12 +153,14 @@ pymisp/data/misp-objects/objects/game-cheat/definition.json,sha256=4xqSM9PzOzuWZ
|
|
|
152
153
|
pymisp/data/misp-objects/objects/generalizing-persuasion-framework/definition.json,sha256=6EFw1OW2Qzbp1tip2PgwYhjvqh2koo5Rl75h1TzNE-s,5590
|
|
153
154
|
pymisp/data/misp-objects/objects/geolocation/definition.json,sha256=mvbU1_yi-9m69SJQWn7fh5k1MLUFIagPU2Mfp4GpjP8,3308
|
|
154
155
|
pymisp/data/misp-objects/objects/git-vuln-finder/definition.json,sha256=_b_Ux9biIpYXK0gmCzGxmp0AHi1dGEaW3H_MiftHx3s,3644
|
|
156
|
+
pymisp/data/misp-objects/objects/github-action/definition.json,sha256=UQ7dgVaOKZ_CkVRQ3mt2uPOg8JRZOZ4JxFNKSkAdTRg,1403
|
|
155
157
|
pymisp/data/misp-objects/objects/github-repo/definition.json,sha256=zmGO6g5fRlvp419DKXo3HYQc3-i6_VqCGyIxnb4i4II,3483
|
|
156
158
|
pymisp/data/misp-objects/objects/github-user/definition.json,sha256=CdHNDa0oLpPB25h5S-7ybEb9MSx92KbqAT7DmNckeNM,3463
|
|
157
159
|
pymisp/data/misp-objects/objects/gitlab-user/definition.json,sha256=xCqY6NAG1DhtyHDCGVik6yXCGhPie4AfnXAvCk9z6qg,1188
|
|
160
|
+
pymisp/data/misp-objects/objects/google-account/definition.json,sha256=fsyjqkMU12X0F4NpI1Mx4i09MQHNb1n-1HwJSIVrO0Q,3467
|
|
158
161
|
pymisp/data/misp-objects/objects/google-safe-browsing/definition.json,sha256=Bxo1eu_EbY8Q1mMv0y0lDv9Rn0xDwmPtesuZ8jtk4Xc,739
|
|
159
162
|
pymisp/data/misp-objects/objects/google-threat-intelligence-report/definition.json,sha256=EZgeF_PbgrxLVGaszm_BJPoWbEB8D7O52anB68vkA8s,1879
|
|
160
|
-
pymisp/data/misp-objects/objects/greynoise-ip/definition.json,sha256=
|
|
163
|
+
pymisp/data/misp-objects/objects/greynoise-ip/definition.json,sha256=KQ99REeJsj3v63dMkxVOsVctR0CTV-_WdeMrkf1PXn0,3144
|
|
161
164
|
pymisp/data/misp-objects/objects/gtp-attack/definition.json,sha256=WjQ4t_Iu1oMx74W20FWZ70UFJUJn9ta5hu7MPxXNZ7o,2611
|
|
162
165
|
pymisp/data/misp-objects/objects/hashlookup/definition.json,sha256=rm3xJoDfJKqUuKhfGd8t17XE0xBJ2QMTWg6H7WJvKzI,2888
|
|
163
166
|
pymisp/data/misp-objects/objects/hhhash/definition.json,sha256=HmPa_bN-FBaZQWDdz2_9fzZHqIREh1dkyio7OsWbzyo,1474
|
|
@@ -207,6 +210,7 @@ pymisp/data/misp-objects/objects/mutex/definition.json,sha256=zqun14zDa2seXkX5BG
|
|
|
207
210
|
pymisp/data/misp-objects/objects/narrative/definition.json,sha256=VXEm_lcQgR7uFtMalrdbI73-ivv6HJHQVx6lPU0FYzA,2200
|
|
208
211
|
pymisp/data/misp-objects/objects/netflow/definition.json,sha256=pQ_meRpiPEchaTBNTBUyUT5zPmL7QNIQgLGKdd_KTqE,4103
|
|
209
212
|
pymisp/data/misp-objects/objects/network-connection/definition.json,sha256=6rGG8ZhW3YxgGAV_l91GFpZXk4QpyJ7iuedH5FU38HE,4248
|
|
213
|
+
pymisp/data/misp-objects/objects/network-data/definition.json,sha256=XxC2GxhybnzSfYOXNI6iufmj7EFFj_4by6cLTogreeA,4322
|
|
210
214
|
pymisp/data/misp-objects/objects/network-profile/definition.json,sha256=urPC6ysgZ5kaiB2L2ilL19iGmR2GNUzjO4pcUngQl5E,6175
|
|
211
215
|
pymisp/data/misp-objects/objects/network-socket/definition.json,sha256=qEE1yvRnrpylHut3jFDJnPWWfsz61ZJO0-Lp40WOSjM,6571
|
|
212
216
|
pymisp/data/misp-objects/objects/network-traffic/definition.json,sha256=jZSGhItwP-1Vxm7fv_IqbijXqnAvPFFKhjxolaDXudE,3144
|
|
@@ -215,7 +219,7 @@ pymisp/data/misp-objects/objects/news-media/definition.json,sha256=Mb4TQz-Cj035H
|
|
|
215
219
|
pymisp/data/misp-objects/objects/open-data-security/definition.json,sha256=fNTNdk-Hjd83DkmhbhGst6PJv09ZJzuXC6RitsEinZg,3052
|
|
216
220
|
pymisp/data/misp-objects/objects/opentide/definition.json,sha256=KAhBYWYMp_PF0lTMjanOBKZirdju2120Y9tNOlpMzy8,1496
|
|
217
221
|
pymisp/data/misp-objects/objects/organization/definition.json,sha256=2Dq4Gs4ynlcaP1rnxfvDCU8cCARO39_Z3azkHYJjhh4,3956
|
|
218
|
-
pymisp/data/misp-objects/objects/original-imported-file/definition.json,sha256=
|
|
222
|
+
pymisp/data/misp-objects/objects/original-imported-file/definition.json,sha256=3GwBNwKhwKGjxM4V_mVxH7Za5t0yRgQ1i01ogIcHMvk,941
|
|
219
223
|
pymisp/data/misp-objects/objects/paloalto-threat-event/definition.json,sha256=F1qMo6LN32i3e7ODjv38twX3BEzrgdLIqXN9PqL-3x4,2597
|
|
220
224
|
pymisp/data/misp-objects/objects/parler-account/definition.json,sha256=YRDWupU7kbSGgTKzwnj7iIqNuAAlBCOPmocWBaYqcQw,3431
|
|
221
225
|
pymisp/data/misp-objects/objects/parler-comment/definition.json,sha256=F6dwrsaryCXAmlu-EIjuqJq1ygDRqnfZcoaBsu2CI-8,3900
|
|
@@ -242,7 +246,7 @@ pymisp/data/misp-objects/objects/probabilistic-data-structure/definition.json,sh
|
|
|
242
246
|
pymisp/data/misp-objects/objects/process/definition.json,sha256=JmRNrY6JTu5zw3C7uc8fcT4tgZBmBnfrg32NEKYreIM,5089
|
|
243
247
|
pymisp/data/misp-objects/objects/publication/definition.json,sha256=j_ZEp8Xk0ZRNN-Gt2cGknPEL6fsN4rdFNpZX30CgoCI,3667
|
|
244
248
|
pymisp/data/misp-objects/objects/python-etvx-event-log/definition.json,sha256=pEa37XSenCrGwPkJ3SqRd6umycXVoLWs5r3oZcKqcmc,4863
|
|
245
|
-
pymisp/data/misp-objects/objects/query/definition.json,sha256=
|
|
249
|
+
pymisp/data/misp-objects/objects/query/definition.json,sha256=aInnfBGGVw0gKf2rD0GOMQFzgnCNsvLvE-Z4C3Bi59c,1476
|
|
246
250
|
pymisp/data/misp-objects/objects/r2graphity/definition.json,sha256=ESpT5SLLUnlCpYjB20wd88kXgUMFwTLE9UsKrXZgFpo,4596
|
|
247
251
|
pymisp/data/misp-objects/objects/ransom-negotiation/definition.json,sha256=jvbnAloyXHIHI0rI4XyZ-fAPKzK5baym11PXGQF-9xg,4588
|
|
248
252
|
pymisp/data/misp-objects/objects/ransomware-group-post/definition.json,sha256=dUZsHN7brIVgu1CgZo7rJRlwWmPoy3TZypiiFytnwBc,3132
|
|
@@ -309,6 +313,7 @@ pymisp/data/misp-objects/objects/stairwell/definition.json,sha256=vXK_23lt156F_w
|
|
|
309
313
|
pymisp/data/misp-objects/objects/stix2-pattern/definition.json,sha256=oCVvk1vU__nFQxFChclCgwclzX7wEm0MYWY0HjvuJ94,891
|
|
310
314
|
pymisp/data/misp-objects/objects/stock/definition.json,sha256=ZCV8X9VXRQPXt6_qpNL0kUrJpyc6_COAAUY2desjMcU,5507
|
|
311
315
|
pymisp/data/misp-objects/objects/submarine/definition.json,sha256=1i33QhqVNkQeMbT0Glk7LyOSZkjnfBUrX23jflIX7FE,4223
|
|
316
|
+
pymisp/data/misp-objects/objects/summariser-output/definition.json,sha256=WDdiEKUxVM-dTy4AZO8R_4AxsT_WgRLfdXoMvG0SaHI,2639
|
|
312
317
|
pymisp/data/misp-objects/objects/suricata/definition.json,sha256=FQ5Is0dnVSr7ttDpBWnzI5Th9Sjx5nSh5WGYU9RZ9O0,952
|
|
313
318
|
pymisp/data/misp-objects/objects/target-system/definition.json,sha256=PaM41BdcjXCYzs1oY0N-ALabDJgzQVxHqnjj70zZ_S8,1000
|
|
314
319
|
pymisp/data/misp-objects/objects/task/definition.json,sha256=ugSxQkRnyMd8Jb6kMj5yJCveNyc-mJ-tCh3jiQKXXmA,3029
|
|
@@ -367,7 +372,7 @@ pymisp/data/misp-objects/schema_relationships.json,sha256=MCusp9GAyuHTo3lLyBrsvl
|
|
|
367
372
|
pymisp/data/schema-lax.json,sha256=2QICdCbtfXRJkTVjwb7xjF3ypys2wOtrUyE1ZDz_qes,8561
|
|
368
373
|
pymisp/data/schema.json,sha256=79N2hObemthb_syUHksDqM4djFttsWZQDg1sTYZYxys,9178
|
|
369
374
|
pymisp/exceptions.py,sha256=IgGGadv5lnLAvO7Q6AjF0vEbjoWwwDWLYwMn-8pkU_k,1965
|
|
370
|
-
pymisp/mispevent.py,sha256=
|
|
375
|
+
pymisp/mispevent.py,sha256=2FM7k1EwTSEiyUcyeCc2joUpTCInXbnXKp5DYpLTMYo,121613
|
|
371
376
|
pymisp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
372
377
|
pymisp/tools/__init__.py,sha256=_KCihYo82e8G5cHV321ak2sgbao2GyFjf4sSTMiN_IM,2233
|
|
373
378
|
pymisp/tools/_psl_faup.py,sha256=JyK8RQm8DPWvNuoF4rQpiE0rBm-Az-sr38Kl46dmWcs,7034
|
|
@@ -377,7 +382,7 @@ pymisp/tools/create_misp_object.py,sha256=PP78t4Gc7jiZtjt3MGC-0NuH976vSadSmhbaSk
|
|
|
377
382
|
pymisp/tools/csvloader.py,sha256=d-Ox4KEehuXi9YxPE3hhf62etaj7D0pUHr5Qy4rPoqo,2588
|
|
378
383
|
pymisp/tools/domainipobject.py,sha256=2w1ckOWPZvp9EW6TOAguT1Kwov72K1jJuJLqgU1whoo,847
|
|
379
384
|
pymisp/tools/elfobject.py,sha256=thylyAVcAdF31II8ykVzG75Fe4Fgokc9qR90g1ybI8s,4966
|
|
380
|
-
pymisp/tools/emailobject.py,sha256=
|
|
385
|
+
pymisp/tools/emailobject.py,sha256=GjOj4MJ0IQsdStkfAk0pshxBe40OGn1_g0jTftym_0o,22500
|
|
381
386
|
pymisp/tools/ext_lookups.py,sha256=acRbOVQftw7XpbjDZDrrdYzDmLDU4HmhoW48Og3UfaY,1022
|
|
382
387
|
pymisp/tools/fail2banobject.py,sha256=VWxK8qWVL0AqO_YZSKmsOcaEnG_5j0jOok7OfEXWfMQ,740
|
|
383
388
|
pymisp/tools/feed.py,sha256=eRG1D4fnG-2hZTFFy7SYUhGVozaAMVSiJXwxHoLP5Gg,700
|
|
@@ -390,7 +395,7 @@ pymisp/tools/machoobject.py,sha256=tSyuWz6z_i-ChZ0uFVwxAh8LE2vW30L82SnoPDPuvWs,4
|
|
|
390
395
|
pymisp/tools/microblogobject.py,sha256=8_53_6M79VhfrJzR_itZ8HnPPclQwX9j0JdI9gMB2kg,6899
|
|
391
396
|
pymisp/tools/neo4j.py,sha256=3Jr2QlOTk8D-P5c1DefYDEP6IIgKNswlZA7F5FocHjU,2088
|
|
392
397
|
pymisp/tools/openioc.py,sha256=TwXcbUkWNzkZavmPoVXdZpjM_GcKB9bqLrw7o3xI24E,14458
|
|
393
|
-
pymisp/tools/peobject.py,sha256=
|
|
398
|
+
pymisp/tools/peobject.py,sha256=FAOiJvvYsrmUdjvGLz5Xk2QYT44XvoCx5nsCh2OAWFw,11791
|
|
394
399
|
pymisp/tools/reportlab_generator.py,sha256=njt0sP-WTWywQ2ieF7Qy5h-dk5FLA0P1i_HF9qhz_4I,76994
|
|
395
400
|
pymisp/tools/sbsignatureobject.py,sha256=aq5To8zcBJe7BHBRZzlqC9xG7N31Naem6yp6bGTOwrU,790
|
|
396
401
|
pymisp/tools/sshauthkeyobject.py,sha256=GEByZkdR7QN3KgE4GcDw3LYS_h-DrUw5cWAy6rMvA_Y,1284
|
|
@@ -398,7 +403,7 @@ pymisp/tools/update_objects.py,sha256=sp_XshzgtRjAU0Mqg8FgRTaokjVKLImyQ02xIcPSrH
|
|
|
398
403
|
pymisp/tools/urlobject.py,sha256=PIucy1356zaljUm1NbeKmEpHpAUK9yiK2lAugcMp2t8,2489
|
|
399
404
|
pymisp/tools/vehicleobject.py,sha256=bs7f4d47IBi2-VumssSM3HlqkH0viyHTLmIHQxe8Iz8,3687
|
|
400
405
|
pymisp/tools/vtreportobject.py,sha256=NsdYzgqm47dywYeW8UnWmEDeIsf07xZreD2iJzFm2wg,3217
|
|
401
|
-
pymisp-2.5.
|
|
402
|
-
pymisp-2.5.
|
|
403
|
-
pymisp-2.5.
|
|
404
|
-
pymisp-2.5.
|
|
406
|
+
pymisp-2.5.17.dist-info/LICENSE,sha256=1oPSVvs96qLjbJVi3mPn0yvWs-6aoIF6BNXi6pVlFmY,1615
|
|
407
|
+
pymisp-2.5.17.dist-info/METADATA,sha256=bPg_gLL2CrOxXMgV-UqPtjrw-gWl1DmmxlGrBIuo_8E,8881
|
|
408
|
+
pymisp-2.5.17.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
409
|
+
pymisp-2.5.17.dist-info/RECORD,,
|
|
File without changes
|