contentctl 4.4.6__py3-none-any.whl → 5.0.0a0__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.
- contentctl/actions/build.py +39 -27
- contentctl/actions/detection_testing/DetectionTestingManager.py +0 -1
- contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py +32 -26
- contentctl/actions/detection_testing/progress_bar.py +6 -6
- contentctl/actions/detection_testing/views/DetectionTestingView.py +4 -4
- contentctl/actions/new_content.py +98 -81
- contentctl/actions/test.py +4 -5
- contentctl/actions/validate.py +2 -1
- contentctl/contentctl.py +114 -79
- contentctl/helper/utils.py +0 -14
- contentctl/input/director.py +5 -5
- contentctl/input/new_content_questions.py +2 -2
- contentctl/input/yml_reader.py +11 -6
- contentctl/objects/abstract_security_content_objects/detection_abstract.py +228 -120
- contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py +5 -7
- contentctl/objects/alert_action.py +2 -1
- contentctl/objects/atomic.py +1 -0
- contentctl/objects/base_test.py +4 -3
- contentctl/objects/base_test_result.py +3 -3
- contentctl/objects/baseline.py +26 -6
- contentctl/objects/baseline_tags.py +2 -3
- contentctl/objects/config.py +26 -45
- contentctl/objects/constants.py +4 -1
- contentctl/objects/correlation_search.py +89 -95
- contentctl/objects/data_source.py +5 -6
- contentctl/objects/deployment.py +2 -10
- contentctl/objects/deployment_email.py +2 -1
- contentctl/objects/deployment_notable.py +2 -1
- contentctl/objects/deployment_phantom.py +2 -1
- contentctl/objects/deployment_rba.py +2 -1
- contentctl/objects/deployment_scheduling.py +2 -1
- contentctl/objects/deployment_slack.py +2 -1
- contentctl/objects/detection_tags.py +7 -42
- contentctl/objects/drilldown.py +1 -0
- contentctl/objects/enums.py +21 -58
- contentctl/objects/investigation.py +6 -5
- contentctl/objects/investigation_tags.py +2 -3
- contentctl/objects/lookup.py +145 -63
- contentctl/objects/macro.py +2 -3
- contentctl/objects/mitre_attack_enrichment.py +2 -2
- contentctl/objects/observable.py +3 -1
- contentctl/objects/playbook_tags.py +5 -1
- contentctl/objects/rba.py +90 -0
- contentctl/objects/risk_event.py +87 -144
- contentctl/objects/story_tags.py +1 -2
- contentctl/objects/test_attack_data.py +2 -1
- contentctl/objects/unit_test_baseline.py +2 -1
- contentctl/output/api_json_output.py +233 -220
- contentctl/output/conf_output.py +51 -44
- contentctl/output/conf_writer.py +201 -125
- contentctl/output/data_source_writer.py +0 -1
- contentctl/output/json_writer.py +2 -4
- contentctl/output/svg_output.py +1 -1
- contentctl/output/templates/analyticstories_detections.j2 +1 -1
- contentctl/output/templates/collections.j2 +1 -1
- contentctl/output/templates/doc_detections.j2 +0 -5
- contentctl/output/templates/savedsearches_detections.j2 +8 -3
- contentctl/output/templates/transforms.j2 +4 -4
- contentctl/output/yml_writer.py +15 -0
- contentctl/templates/detections/endpoint/anomalous_usage_of_7zip.yml +16 -34
- {contentctl-4.4.6.dist-info → contentctl-5.0.0a0.dist-info}/METADATA +6 -5
- {contentctl-4.4.6.dist-info → contentctl-5.0.0a0.dist-info}/RECORD +65 -68
- {contentctl-4.4.6.dist-info → contentctl-5.0.0a0.dist-info}/WHEEL +1 -1
- contentctl/objects/event_source.py +0 -11
- contentctl/output/detection_writer.py +0 -28
- contentctl/output/new_content_yml_output.py +0 -56
- contentctl/output/yml_output.py +0 -66
- {contentctl-4.4.6.dist-info → contentctl-5.0.0a0.dist-info}/LICENSE.md +0 -0
- {contentctl-4.4.6.dist-info → contentctl-5.0.0a0.dist-info}/entry_points.txt +0 -0
|
@@ -38,51 +38,33 @@ drilldown_searches:
|
|
|
38
38
|
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ($user$, $dest$) starthoursago=168 endhoursago=1 | stats count min(_time) as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
|
|
39
39
|
earliest_offset: $info_min_time$
|
|
40
40
|
latest_offset: $info_max_time$
|
|
41
|
+
rba:
|
|
42
|
+
message: An instance of $parent_process_name$ spawning $process_name$ was identified
|
|
43
|
+
on endpoint $dest$ by user $user$. This behavior is indicative of suspicious loading
|
|
44
|
+
of 7zip.
|
|
45
|
+
risk_objects:
|
|
46
|
+
- field: user
|
|
47
|
+
type: user
|
|
48
|
+
score: 56
|
|
49
|
+
- field: dest
|
|
50
|
+
type: system
|
|
51
|
+
score: 60
|
|
52
|
+
threat_objects:
|
|
53
|
+
- field: parent_process_name
|
|
54
|
+
type: parent_process_name
|
|
55
|
+
- field: process_name
|
|
56
|
+
type: process_name
|
|
41
57
|
tags:
|
|
42
58
|
analytic_story:
|
|
43
59
|
- Cobalt Strike
|
|
44
60
|
asset_type: Endpoint
|
|
45
|
-
confidence: 80
|
|
46
|
-
impact: 80
|
|
47
|
-
message: An instance of $parent_process_name$ spawning $process_name$ was identified
|
|
48
|
-
on endpoint $dest$ by user $user$. This behavior is indicative of suspicious loading
|
|
49
|
-
of 7zip.
|
|
50
61
|
mitre_attack_id:
|
|
51
62
|
- T1560.001
|
|
52
63
|
- T1560
|
|
53
|
-
observable:
|
|
54
|
-
- name: user
|
|
55
|
-
type: User
|
|
56
|
-
role:
|
|
57
|
-
- Victim
|
|
58
|
-
- name: dest
|
|
59
|
-
type: Hostname
|
|
60
|
-
role:
|
|
61
|
-
- Victim
|
|
62
|
-
- name: parent_process_name
|
|
63
|
-
type: Process
|
|
64
|
-
role:
|
|
65
|
-
- Attacker
|
|
66
|
-
- name: process_name
|
|
67
|
-
type: Process
|
|
68
|
-
role:
|
|
69
|
-
- Attacker
|
|
70
64
|
product:
|
|
71
65
|
- Splunk Enterprise
|
|
72
66
|
- Splunk Enterprise Security
|
|
73
67
|
- Splunk Cloud
|
|
74
|
-
required_fields:
|
|
75
|
-
- _time
|
|
76
|
-
- Processes.process_name
|
|
77
|
-
- Processes.process
|
|
78
|
-
- Processes.dest
|
|
79
|
-
- Processes.user
|
|
80
|
-
- Processes.parent_process_name
|
|
81
|
-
- Processes.process_name
|
|
82
|
-
- Processes.parent_process
|
|
83
|
-
- Processes.process_id
|
|
84
|
-
- Processes.parent_process_id
|
|
85
|
-
risk_score: 64
|
|
86
68
|
security_domain: endpoint
|
|
87
69
|
tests:
|
|
88
70
|
- name: True Positive Test
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: contentctl
|
|
3
|
-
Version:
|
|
3
|
+
Version: 5.0.0a0
|
|
4
4
|
Summary: Splunk Content Control Tool
|
|
5
5
|
License: Apache 2.0
|
|
6
6
|
Author: STRT
|
|
7
7
|
Author-email: research@splunk.com
|
|
8
|
-
Requires-Python: >=3.11,<3.
|
|
8
|
+
Requires-Python: >=3.11,<3.14
|
|
9
9
|
Classifier: License :: Other/Proprietary License
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
14
|
Requires-Dist: Jinja2 (>=3.1.4,<4.0.0)
|
|
14
15
|
Requires-Dist: PyYAML (>=6.0.2,<7.0.0)
|
|
15
16
|
Requires-Dist: attackcti (>=0.4.0,<0.5.0)
|
|
@@ -17,7 +18,7 @@ Requires-Dist: bottle (>=0.12.25,<0.14.0)
|
|
|
17
18
|
Requires-Dist: docker (>=7.1.0,<8.0.0)
|
|
18
19
|
Requires-Dist: gitpython (>=3.1.43,<4.0.0)
|
|
19
20
|
Requires-Dist: pycvesearch (>=1.2,<2.0)
|
|
20
|
-
Requires-Dist: pydantic (>=2.
|
|
21
|
+
Requires-Dist: pydantic (>=2.9.2,<2.10.0)
|
|
21
22
|
Requires-Dist: pygit2 (>=1.15.1,<2.0.0)
|
|
22
23
|
Requires-Dist: questionary (>=2.0.1,<3.0.0)
|
|
23
24
|
Requires-Dist: requests (>=2.32.3,<2.33.0)
|
|
@@ -25,7 +26,7 @@ Requires-Dist: semantic-version (>=2.10.0,<3.0.0)
|
|
|
25
26
|
Requires-Dist: setuptools (>=69.5.1,<76.0.0)
|
|
26
27
|
Requires-Dist: splunk-sdk (>=2.0.2,<3.0.0)
|
|
27
28
|
Requires-Dist: tqdm (>=4.66.5,<5.0.0)
|
|
28
|
-
Requires-Dist: tyro (>=0.
|
|
29
|
+
Requires-Dist: tyro (>=0.9.2,<0.10.0)
|
|
29
30
|
Requires-Dist: xmltodict (>=0.13,<0.15)
|
|
30
31
|
Description-Content-Type: text/markdown
|
|
31
32
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
contentctl/__init__.py,sha256=IMjkMO3twhQzluVTo8Z6rE7Eg-9U79_LGKMcsWLKBkY,22
|
|
2
|
-
contentctl/actions/build.py,sha256=
|
|
2
|
+
contentctl/actions/build.py,sha256=J-ALH-_IFypOZWarTCLdnTo9g5IpIwEJBON2cnhwKEw,5505
|
|
3
3
|
contentctl/actions/deploy_acs.py,sha256=4mD3wEgudi8UWpTW9mB5n65Bcs1w4g5cG2yflj-uEck,3259
|
|
4
|
-
contentctl/actions/detection_testing/DetectionTestingManager.py,sha256=
|
|
4
|
+
contentctl/actions/detection_testing/DetectionTestingManager.py,sha256=YAEtyAErvDgk4eqIXWLVllZFKe_0ZKliycR9fvWeMjI,8744
|
|
5
5
|
contentctl/actions/detection_testing/GitService.py,sha256=HcyuPrW6zBeCNu2l2JJgB_wTyvdWeK3Ii32pUf3vs08,9698
|
|
6
6
|
contentctl/actions/detection_testing/generate_detection_coverage_badge.py,sha256=N5mznaeErVak3mOBwsd0RDBFJO3bku0EZvpayCyU-uk,2259
|
|
7
|
-
contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py,sha256=
|
|
7
|
+
contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py,sha256=Vy-BWRC_YqctFQOxEluf2cxtA8AHV-aIS1RJx0Fril8,57138
|
|
8
8
|
contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureContainer.py,sha256=WCtyyMKTA17JzPIb10rV8C6vdG-cBzHtFC9T2CuYY2o,7047
|
|
9
9
|
contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureServer.py,sha256=Q1ZfCYOp54O39bgTScZMInkmZiU-bGAM9Hiwr2mq5ms,370
|
|
10
|
-
contentctl/actions/detection_testing/progress_bar.py,sha256=
|
|
11
|
-
contentctl/actions/detection_testing/views/DetectionTestingView.py,sha256=
|
|
10
|
+
contentctl/actions/detection_testing/progress_bar.py,sha256=jiorPxfSAX6jCK1BSQDKNYchTshBnWshWB0XphLp91A,3229
|
|
11
|
+
contentctl/actions/detection_testing/views/DetectionTestingView.py,sha256=ENHVBQxR3Ws4NYZmCfmoKBtAaGX9QW028obMQ6o1YnU,7615
|
|
12
12
|
contentctl/actions/detection_testing/views/DetectionTestingViewCLI.py,sha256=v5F3heZ3ZD0ik_-a_zDYSEz6oc5VdVj3e5rSSZ-tK00,2149
|
|
13
13
|
contentctl/actions/detection_testing/views/DetectionTestingViewFile.py,sha256=3mBCQy3hYuX8bNqh3al0nANlMwq9sxbQjkhwA1V5LOA,1090
|
|
14
14
|
contentctl/actions/detection_testing/views/DetectionTestingViewWeb.py,sha256=Q6p7UqDOYI2VjFl21_1iue76rWVsQmJUzRewtUBF1a8,4755
|
|
@@ -16,103 +16,101 @@ contentctl/actions/doc_gen.py,sha256=YNc1VYA0ikL1hWDHYjfEOmUkfhy8PEIdvTyC4ZLxQRY
|
|
|
16
16
|
contentctl/actions/initialize.py,sha256=wEO3u8vJYP8Xh2OSJ_HxfMV6mqOdkPyWbUzNGEqMTNA,3055
|
|
17
17
|
contentctl/actions/initialize_old.py,sha256=0qXbW_fNDvkcnEeL6Zpte8d-hpTu1REyzHsXOCY-YB8,9333
|
|
18
18
|
contentctl/actions/inspect.py,sha256=dXV020g_GwwspSgiS6jQxW0JEVr_nublJBevwZ79mZo,17424
|
|
19
|
-
contentctl/actions/new_content.py,sha256=
|
|
19
|
+
contentctl/actions/new_content.py,sha256=wefzwJ0uCduLTvkynls1IVJCmcs_3RU9YkDzx7iiWeo,8363
|
|
20
20
|
contentctl/actions/release_notes.py,sha256=0K7zHQyVHVYK_whiv4PvxOKS4_0s1Ya_RDCrrcT3FW4,13319
|
|
21
21
|
contentctl/actions/reporting.py,sha256=MJEmvmoA1WnSFZEU9QM6daL_W94oOX0WXAcX1qAM2As,1583
|
|
22
|
-
contentctl/actions/test.py,sha256=
|
|
23
|
-
contentctl/actions/validate.py,sha256=
|
|
22
|
+
contentctl/actions/test.py,sha256=gS-BIexzzjHUR8RvQADDjyTIeJvilbuufPQq10TINJE,5953
|
|
23
|
+
contentctl/actions/validate.py,sha256=7w5444SiOs0R4c_2Yn0tRaFx9Nf-r7o9aMjSaz3N9Kw,5602
|
|
24
24
|
contentctl/api.py,sha256=O0dNE3-WkWs2zuOeAQnIicgOtBX5s2bGBhRVo3j69-8,6327
|
|
25
|
-
contentctl/contentctl.py,sha256=
|
|
25
|
+
contentctl/contentctl.py,sha256=Z_B7gZ1eWjlwhna9aMhn-rteCArMgLOINI8rfGiHZBc,11190
|
|
26
26
|
contentctl/enrichments/attack_enrichment.py,sha256=i0p5ud7EqA2SMB7Gc8JQdIonUTjAeDN-hxKBV4XV-Rg,6391
|
|
27
27
|
contentctl/enrichments/cve_enrichment.py,sha256=aXpv_kCS0XP6JpC_ZEOeBPgrl38t_vkKZe9Ay35lRi4,2347
|
|
28
28
|
contentctl/enrichments/splunk_app_enrichment.py,sha256=zDNHFLZTi2dJ1gdnh0sHkD6F1VtkblqFnhacFcCMBfc,3418
|
|
29
29
|
contentctl/helper/link_validator.py,sha256=-XorhxfGtjLynEL1X4hcpRMiyemogf2JEnvLwhHq80c,7139
|
|
30
30
|
contentctl/helper/logger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
contentctl/helper/splunk_app.py,sha256=5KoacltgQ2J1BdxqvZYhr6GCXFl2tsy8TEWNc2gXkqw,14187
|
|
32
|
-
contentctl/helper/utils.py,sha256=
|
|
33
|
-
contentctl/input/director.py,sha256=
|
|
34
|
-
contentctl/input/new_content_questions.py,sha256=
|
|
35
|
-
contentctl/input/yml_reader.py,sha256=
|
|
36
|
-
contentctl/objects/abstract_security_content_objects/detection_abstract.py,sha256=
|
|
37
|
-
contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py,sha256=
|
|
38
|
-
contentctl/objects/alert_action.py,sha256=
|
|
32
|
+
contentctl/helper/utils.py,sha256=8UDQWZmPg0hRjLNSf4gowsbdVCC4YFJW-xVxyIXUA_Y,18954
|
|
33
|
+
contentctl/input/director.py,sha256=ieNzGHY7KMdwZZ7Re8-NnfdW3dRnrwh98BLFldDU1wg,10975
|
|
34
|
+
contentctl/input/new_content_questions.py,sha256=7Sfdp-HrlyDN2H88CHrByZIL26iN-gqN17tHSkBg6UA,4196
|
|
35
|
+
contentctl/input/yml_reader.py,sha256=BBO5AiLjwKTrVVMmW3p8BgFMXdTHPwPlEPlNXInmGNo,2015
|
|
36
|
+
contentctl/objects/abstract_security_content_objects/detection_abstract.py,sha256=uc7eadSrL9pDdT0U_QtoYhQeQbx9HUlrJLJaBs5lNxc,50053
|
|
37
|
+
contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py,sha256=6vFf6ZZiUFBclYLg9e_AmZYsPfIq385jgqcFGvzWdmE,10232
|
|
38
|
+
contentctl/objects/alert_action.py,sha256=vH8Yp3Ja4ane_bvOYvQhBwZiicYHJWKoecEsZzXEtKE,1393
|
|
39
39
|
contentctl/objects/annotated_types.py,sha256=jnX02BQT4dHbd_DCIjik0PNN3kgsvb7sxAz_1Jy8TOY,259
|
|
40
|
-
contentctl/objects/atomic.py,sha256=
|
|
41
|
-
contentctl/objects/base_test.py,sha256=
|
|
42
|
-
contentctl/objects/base_test_result.py,sha256=
|
|
43
|
-
contentctl/objects/baseline.py,sha256=
|
|
44
|
-
contentctl/objects/baseline_tags.py,sha256=
|
|
45
|
-
contentctl/objects/config.py,sha256=
|
|
46
|
-
contentctl/objects/constants.py,sha256=
|
|
47
|
-
contentctl/objects/correlation_search.py,sha256=
|
|
40
|
+
contentctl/objects/atomic.py,sha256=l10rrcZ2XItdnpOzSpHSbEwC12jelsPzELmeJZAGv2E,7338
|
|
41
|
+
contentctl/objects/base_test.py,sha256=V5hZK2EjBIdTFmXa8pHmqQVsgFF_yL2iknCOO1KTALo,1103
|
|
42
|
+
contentctl/objects/base_test_result.py,sha256=XxqOQHfOVTx3vvPgTz7ppE4EA_3MJx6Tf8G9bmhrWAI,5209
|
|
43
|
+
contentctl/objects/baseline.py,sha256=EtJZeKfuFRWLCgHdVNDgHaP_8CysD15GYs_hDnPPt0k,3020
|
|
44
|
+
contentctl/objects/baseline_tags.py,sha256=Z5BB0vxXpmbVeCyESs2WYaFgonBZTYY0iLZVAPabdJc,1548
|
|
45
|
+
contentctl/objects/config.py,sha256=GJbZ7M7nKaMir3kPA6_wgFah9ZsvEClnNiplVeoG6Vo,49134
|
|
46
|
+
contentctl/objects/constants.py,sha256=Bn1O3FIcmLd7QYT-pZuhtaZ7k8sUvTWwh8XYXg4A_7M,5760
|
|
47
|
+
contentctl/objects/correlation_search.py,sha256=xNcURW_K8rRG8VKkQ6WGL8a4zBw4CORyr2SvY-3TCVQ,46039
|
|
48
48
|
contentctl/objects/dashboard.py,sha256=GKb_YqZMSP98Y97AlKffJrtVUufZzJag-zdmqRePLZ4,4114
|
|
49
|
-
contentctl/objects/data_source.py,sha256=
|
|
50
|
-
contentctl/objects/deployment.py,sha256=
|
|
51
|
-
contentctl/objects/deployment_email.py,sha256=
|
|
52
|
-
contentctl/objects/deployment_notable.py,sha256=
|
|
53
|
-
contentctl/objects/deployment_phantom.py,sha256=
|
|
54
|
-
contentctl/objects/deployment_rba.py,sha256=
|
|
55
|
-
contentctl/objects/deployment_scheduling.py,sha256=
|
|
56
|
-
contentctl/objects/deployment_slack.py,sha256=
|
|
49
|
+
contentctl/objects/data_source.py,sha256=gst7ut7wdpew0woEDQSRVuyYuVf0fLHc0Z6rXW9Fvbw,1489
|
|
50
|
+
contentctl/objects/deployment.py,sha256=dOPBq-0n1ETdVzhtgX81cIvkarafy4WRkVwEjwCMxaQ,2874
|
|
51
|
+
contentctl/objects/deployment_email.py,sha256=XU7jzEUYCfb71If0eLanz1rNl8PR-3RZtEh6FPqjiSY,205
|
|
52
|
+
contentctl/objects/deployment_notable.py,sha256=ALkddRQCgC2IO3AAl8M823icNvTL-V8pkIfRFj0ZvDk,256
|
|
53
|
+
contentctl/objects/deployment_phantom.py,sha256=MjTNi-B2IX6Xgxr6S20jJjo-4taX_zF-HXrFXl1x7gs,265
|
|
54
|
+
contentctl/objects/deployment_rba.py,sha256=E7z-Vus3m0gn1Zd7qrKiPztkj3C0inJIXh2SMif9bKk,183
|
|
55
|
+
contentctl/objects/deployment_scheduling.py,sha256=qqjBcawyC9oPlOIPTQuP-88wbrdxSOjdudtooWrlTwM,256
|
|
56
|
+
contentctl/objects/deployment_slack.py,sha256=Bg6hgIgc-BaWIv6CSWwE6429c9umFlBY51s-ZPTajtQ,193
|
|
57
57
|
contentctl/objects/detection.py,sha256=3W41cXf3ECjWuPqWrseqSLC3PAA7O5_nENWWM6MPK0Y,620
|
|
58
58
|
contentctl/objects/detection_metadata.py,sha256=eCsru2cymc3VINjt9MpDyGw2zXa2HyVEPv-XiGAcAeQ,2236
|
|
59
59
|
contentctl/objects/detection_stanza.py,sha256=842fHPfGDdddHF5UzgftYr8OlYblWhMWZxPQsTu2wKg,3066
|
|
60
|
-
contentctl/objects/detection_tags.py,sha256=
|
|
61
|
-
contentctl/objects/drilldown.py,sha256=
|
|
62
|
-
contentctl/objects/enums.py,sha256=
|
|
60
|
+
contentctl/objects/detection_tags.py,sha256=2jGUvWSK0-b5M-guzcJQs2v5LfV_5hcfZpeS6HGx3Xo,9903
|
|
61
|
+
contentctl/objects/drilldown.py,sha256=rnhGIjm0uc7BFekzlxBeMbxpLpC1dcjkh8n0rF_SheI,3987
|
|
62
|
+
contentctl/objects/enums.py,sha256=Uy5n7diPs2q7vzhe2dTr2Mzr5ifzuKDmUhD-RujPl4E,13418
|
|
63
63
|
contentctl/objects/errors.py,sha256=WURmJCqhy2CZNXXCypXVtwnjSBx-VIcB6W9oFJmzoFk,5762
|
|
64
|
-
contentctl/objects/event_source.py,sha256=G9P7rtcN5hcBNQx6DG37mR3QyQufx--T6kgQGNqQuKk,415
|
|
65
64
|
contentctl/objects/integration_test.py,sha256=UBBx85f517MpQXOM7-iEasACEQ0-Ia7W4rDChOHZfno,1319
|
|
66
65
|
contentctl/objects/integration_test_result.py,sha256=9oVWka57alIVPiCDbNgy-OmJcBicyYbrr6anL52Wgks,278
|
|
67
|
-
contentctl/objects/investigation.py,sha256=
|
|
68
|
-
contentctl/objects/investigation_tags.py,sha256
|
|
69
|
-
contentctl/objects/lookup.py,sha256=
|
|
70
|
-
contentctl/objects/macro.py,sha256=
|
|
66
|
+
contentctl/objects/investigation.py,sha256=UOTieT033I3wU_-ydTCzT3LC1Is-WfnJKqcoVndW8LE,3244
|
|
67
|
+
contentctl/objects/investigation_tags.py,sha256=-BP9rjtOzYCXsA5f626kO70cHxHBPyxeRYhdNkQDA1Q,1255
|
|
68
|
+
contentctl/objects/lookup.py,sha256=rPMiCemlN3XORMAjuH10sgQhkjMqpSQOVSr-DdyFaN8,10529
|
|
69
|
+
contentctl/objects/macro.py,sha256=DNBecV1kGOudKY0lx7nSjUjRmMi0CNWHYcmvaRZGFPg,3430
|
|
71
70
|
contentctl/objects/manual_test.py,sha256=YNquEQ0UCzZGJ0uvHBgJ3Efho-F80ZG885ABLtqB7TI,1022
|
|
72
71
|
contentctl/objects/manual_test_result.py,sha256=C4AYW3jlMsxVzCPzCA5dpAcbKgCpmDO43JmptFm--Q4,155
|
|
73
|
-
contentctl/objects/mitre_attack_enrichment.py,sha256=
|
|
72
|
+
contentctl/objects/mitre_attack_enrichment.py,sha256=0BvYdWVqFer029S3o_Wve_GQEKgvFZi_rjAb-rHid9c,3325
|
|
74
73
|
contentctl/objects/notable_action.py,sha256=ValkblBaG-60TF19y_vSnNzoNZ3eg48wIfr0qZxyKTA,1605
|
|
75
74
|
contentctl/objects/notable_event.py,sha256=YlmI5CbTeu2hrj1yhmvu6ma4RY_6RFvIuq8aEtrn4z8,703
|
|
76
|
-
contentctl/objects/observable.py,sha256=
|
|
75
|
+
contentctl/objects/observable.py,sha256=1nM2ldkCcicxCX_ibOl2_qewJ5yQDyOIuCUsdithFZk,1421
|
|
77
76
|
contentctl/objects/playbook.py,sha256=hSYYpdMhctgpp7uwaPciFqu1yuFI4M1NHy1WBBLyvzM,2469
|
|
78
|
-
contentctl/objects/playbook_tags.py,sha256=
|
|
77
|
+
contentctl/objects/playbook_tags.py,sha256=jG_zsd8yL3HvSdDwbVJOu5KVA3--YYCBbhFGykoMrf4,1560
|
|
78
|
+
contentctl/objects/rba.py,sha256=AkrbhzKeckxRn_6FEeA0geie2e71UOwpSEm9cqpnCN8,2826
|
|
79
79
|
contentctl/objects/risk_analysis_action.py,sha256=OeatdTFXa6801JZIyvfN7c0B0rTnXpdVh1PXHCmQsz0,4275
|
|
80
|
-
contentctl/objects/risk_event.py,sha256=
|
|
80
|
+
contentctl/objects/risk_event.py,sha256=1PNMlZaNPYKGNPyTvH5FdvQpDxl58t4gexKDSisP7AQ,12520
|
|
81
81
|
contentctl/objects/risk_object.py,sha256=yY4NmEwEKaRl4sLzCRZb1n8kdpV3HzYbQVQ1ClQWYHw,904
|
|
82
82
|
contentctl/objects/savedsearches_conf.py,sha256=tCyZHqAQ9azgwIyySViY2BdM4To5Cb_GeYEEHPwR4Zc,8604
|
|
83
83
|
contentctl/objects/security_content_object.py,sha256=j8KNDwSMfZsSIzJucC3NuZo0SlFVpqHfDc6y3-YHjHI,234
|
|
84
84
|
contentctl/objects/story.py,sha256=9q8_WosIZwq5cWIUbl_0IErV4fWc9VA18YBuJeflXn0,4823
|
|
85
|
-
contentctl/objects/story_tags.py,sha256=
|
|
86
|
-
contentctl/objects/test_attack_data.py,sha256=
|
|
85
|
+
contentctl/objects/story_tags.py,sha256=GEzURFnlloBrBHoTjLHKRmqAein1ylcyFr4VE4jzFPU,2214
|
|
86
|
+
contentctl/objects/test_attack_data.py,sha256=7p-kOJguTZtG9y5th5U3qfPFvpiAWLST_OBw8dwWl_4,488
|
|
87
87
|
contentctl/objects/test_group.py,sha256=DCtm4ChGYksOwZQVHsioaweOvI37CSlTZJzKvBX-jbY,2586
|
|
88
88
|
contentctl/objects/threat_object.py,sha256=S8B7RQFfLxN_g7yKPrDTuYhIy9JvQH3YwJ_T5LUZIa4,711
|
|
89
89
|
contentctl/objects/throttling.py,sha256=om0pGOMStr6sTwm5uZ7rBcSHhRLpaX6TS5x-aaPGsR0,2369
|
|
90
90
|
contentctl/objects/unit_test.py,sha256=eMFehpHhmZA5WYBqhWUNRF_LpxuLM9VooAxjXeNbrxY,1144
|
|
91
|
-
contentctl/objects/unit_test_baseline.py,sha256=
|
|
91
|
+
contentctl/objects/unit_test_baseline.py,sha256=x1pDW028R4xzmz_kIiIerXTHE6kFfHkf28zIVl1wX9c,284
|
|
92
92
|
contentctl/objects/unit_test_result.py,sha256=POQfvvPpSw-jQzINBz1_IszUMJ4Wbopu8HRS1Qe6P2M,2940
|
|
93
|
-
contentctl/output/api_json_output.py,sha256=
|
|
93
|
+
contentctl/output/api_json_output.py,sha256=67mZwYdn5gEl9u24BAopGtPxaKTkPO74S_9zS2XlVIk,8261
|
|
94
94
|
contentctl/output/attack_nav_output.py,sha256=95iKV8U9BMMgqh6cCOw1S89Ln73xmJGgJPHTYR0L7hA,2304
|
|
95
95
|
contentctl/output/attack_nav_writer.py,sha256=64ILZLmNbh2XLmbopgENkeo6t-4SRRG8xZXBmtpNd4g,2219
|
|
96
|
-
contentctl/output/conf_output.py,sha256=
|
|
97
|
-
contentctl/output/conf_writer.py,sha256=
|
|
98
|
-
contentctl/output/data_source_writer.py,sha256=
|
|
99
|
-
contentctl/output/detection_writer.py,sha256=AzxbssNLmsNIOaYKotew5-ONoyq1cQpKSGy3pe191B0,960
|
|
96
|
+
contentctl/output/conf_output.py,sha256=e19RGptVUOatj8c-SuIDd4uqYa7Yg9z9Globv23w1fE,10643
|
|
97
|
+
contentctl/output/conf_writer.py,sha256=9eqt2tm1xjs397pwWLz5oPJcMHbs62ejRG7KghGQQCI,15137
|
|
98
|
+
contentctl/output/data_source_writer.py,sha256=NIn9mVQmYtGjWANeeveRhfXTUescVuWnEEDRXaNb1qg,1579
|
|
100
99
|
contentctl/output/doc_md_output.py,sha256=gf7osH1uSrC6js3D_I72g4uDe9TaB3tsvtqCHi5znp0,3238
|
|
101
100
|
contentctl/output/jinja_writer.py,sha256=bdiqr9FaXYxth4wZ1A52zTMAS5stHNGpezTkaS5pres,1119
|
|
102
|
-
contentctl/output/json_writer.py,sha256=
|
|
103
|
-
contentctl/output/
|
|
104
|
-
contentctl/output/
|
|
105
|
-
contentctl/output/templates/analyticstories_detections.j2,sha256=TZHnWEPWWwMjGgPswMoT9Dcfqs2X2E1lJCVXYwqveHY,970
|
|
101
|
+
contentctl/output/json_writer.py,sha256=xQzARL0eiftVBm9yeBKw6cu2wqc9ughormi2rCFlJ1Q,861
|
|
102
|
+
contentctl/output/svg_output.py,sha256=rDAm6Y5Pc3KktjDh2hXgWFUcONrA8Op22RzSLVMsKBo,2745
|
|
103
|
+
contentctl/output/templates/analyticstories_detections.j2,sha256=_xM5MMC_O5aLTBI04afgrCnYVfojmbb3J1JVq2AkaT8,964
|
|
106
104
|
contentctl/output/templates/analyticstories_investigations.j2,sha256=kqy9lR6W3avqETCM2tSZ8WWOlfiyOtFv6G5N4SZWSaQ,527
|
|
107
105
|
contentctl/output/templates/analyticstories_stories.j2,sha256=4rS-oN6JHAVKF3ToMxzHqK7asytw1R4OQmZGtzdRRBI,663
|
|
108
106
|
contentctl/output/templates/app.conf.j2,sha256=UL80Px4IUGPD-DgcAiUrS4emHBIY7DxleSNyNXCH5tQ,623
|
|
109
107
|
contentctl/output/templates/app.manifest.j2,sha256=Q1803mcfgNvUs8s4e1zD1J3_mxfPYVtLkD8fhCO6d-I,1103
|
|
110
|
-
contentctl/output/templates/collections.j2,sha256=
|
|
108
|
+
contentctl/output/templates/collections.j2,sha256=w2hkY7Yfm7AmY1O_7DP-znLS_whgKX79VbnW7QlvrNU,151
|
|
111
109
|
contentctl/output/templates/content-version.j2,sha256=2-it0TF5BvqUcmUXVFB4DEh0I01igQGDxZNJpdtDFIA,54
|
|
112
110
|
contentctl/output/templates/detection_count.j2,sha256=9U3o-P_ECkMknsooj_L3B9GZqjnsbaEzr59s3-DOK0I,670
|
|
113
111
|
contentctl/output/templates/detection_coverage.j2,sha256=guE4fow9BqGoCCrQ3b6-EZqWJcThb58V9khuIH7nhT0,631
|
|
114
112
|
contentctl/output/templates/doc_detection_page.j2,sha256=kATedDq0Z8tzxKiD3nD0_-7YiOrjssUMYSDenRYTh6A,1012
|
|
115
|
-
contentctl/output/templates/doc_detections.j2,sha256=
|
|
113
|
+
contentctl/output/templates/doc_detections.j2,sha256=tjTQh6R5zMMmBm9hk-8dFG5p0PyhWSGkrYeRxe9gfPU,6500
|
|
116
114
|
contentctl/output/templates/doc_navigation.j2,sha256=h25ITC3xcAM17uZGIyyDFURmEdYtQSPvNeWN3RH7j4Q,1471
|
|
117
115
|
contentctl/output/templates/doc_navigation_pages.j2,sha256=ptfjbD4F0Ob7dze9at2q5gqOslcbL3eteUO1zsblDJo,203
|
|
118
116
|
contentctl/output/templates/doc_playbooks.j2,sha256=CWsnm8F097oYT8anW3CE7JaX1haAJTfylThP1ic0UIw,1681
|
|
@@ -125,13 +123,12 @@ contentctl/output/templates/header.j2,sha256=3usV7jm1q6J-QNnQrZzII9cN0XEGQjg_eVK
|
|
|
125
123
|
contentctl/output/templates/macros.j2,sha256=SLcQQ5X7TZS8j-2qP06BTXqdIcnwoYqTAaBLX2Dge7Y,390
|
|
126
124
|
contentctl/output/templates/panel.j2,sha256=Cw_W6p-14n6UivVfpS75KKJiJ2VpdGsSBceYsUYe9gk,221
|
|
127
125
|
contentctl/output/templates/savedsearches_baselines.j2,sha256=BfpNrApucyByZHYW-Az63NO7hXBRYtlQCZcgBcLDv60,1683
|
|
128
|
-
contentctl/output/templates/savedsearches_detections.j2,sha256=
|
|
126
|
+
contentctl/output/templates/savedsearches_detections.j2,sha256=O6R1FVyHLR8BcfNpajojmeVYQBQefuBNAAPRQp5IRs0,6831
|
|
129
127
|
contentctl/output/templates/savedsearches_investigations.j2,sha256=3jWg3OEwnexZxebpyP9_7lbZI407e5rlx1-epRs1Kpc,1170
|
|
130
128
|
contentctl/output/templates/server.conf.j2,sha256=sPZUkiuJNGm9R8rpjfRKyuAvmmQb0C4w9Q6hpmvmPeU,127
|
|
131
|
-
contentctl/output/templates/transforms.j2,sha256
|
|
129
|
+
contentctl/output/templates/transforms.j2,sha256=EySDJWorLHRSTibMIvbV7PdDb6uDC058gMUk-kiK6g0,1481
|
|
132
130
|
contentctl/output/templates/workflow_actions.j2,sha256=DFoZVnCa8dMRHjW2AdpoydBC0THgiH_W-Nx7WI4-uR4,925
|
|
133
|
-
contentctl/output/
|
|
134
|
-
contentctl/output/yml_writer.py,sha256=zZJ3aK-l0YQXbDweS-XZKejHblyhy2eliSthZZEogUs,1668
|
|
131
|
+
contentctl/output/yml_writer.py,sha256=7-qcJJoF6P6p9nHVO8dtEmuekg5_buSXlE2ITrFNsX8,2137
|
|
135
132
|
contentctl/templates/README.md,sha256=GoRmywUqwnjaehY_GLmGqxsFXCLP9plpDYwB6W6nVPs,428
|
|
136
133
|
contentctl/templates/app_default.yml,sha256=kDeYdJbfMADQPcho8iH1nqgTFrHNt4EXnIJjPHc2unI,6390
|
|
137
134
|
contentctl/templates/app_template/README/essoc_story_detail.txt,sha256=7hFPBfPpRH28TFl7QchKceZLewQqgFjRWDlmxZzwpmo,897
|
|
@@ -160,14 +157,14 @@ contentctl/templates/deployments/escu_default_configuration_hunting.yml,sha256=h
|
|
|
160
157
|
contentctl/templates/deployments/escu_default_configuration_ttp.yml,sha256=1D-pvzaH1v3_yCZXaY6njmdvV4S2_Ak8uzzCOsnj9XY,548
|
|
161
158
|
contentctl/templates/detections/application/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
162
159
|
contentctl/templates/detections/cloud/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
163
|
-
contentctl/templates/detections/endpoint/anomalous_usage_of_7zip.yml,sha256=
|
|
160
|
+
contentctl/templates/detections/endpoint/anomalous_usage_of_7zip.yml,sha256=VQ8mxkOOm7RfnBomtOXF9XGE8fV-j5j-4pFtpocQ17Y,3875
|
|
164
161
|
contentctl/templates/detections/network/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
162
|
contentctl/templates/detections/web/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
166
163
|
contentctl/templates/macros/security_content_ctime.yml,sha256=Gg1YNllHVsX_YB716H1SJLWzxXZEfuJlnsgB2fuyoHU,159
|
|
167
164
|
contentctl/templates/macros/security_content_summariesonly.yml,sha256=9BYUxAl2E4Nwh8K19F3AJS8Ka7ceO6ZDBjFiO3l3LY0,162
|
|
168
165
|
contentctl/templates/stories/cobalt_strike.yml,sha256=rlaXxMN-5k8LnKBLPafBoksyMtlmsPMHPJOjTiMiZ-M,3063
|
|
169
|
-
contentctl-
|
|
170
|
-
contentctl-
|
|
171
|
-
contentctl-
|
|
172
|
-
contentctl-
|
|
173
|
-
contentctl-
|
|
166
|
+
contentctl-5.0.0a0.dist-info/LICENSE.md,sha256=hQWUayRk-pAiOZbZnuy8djmoZkjKBx8MrCFpW-JiOgo,11344
|
|
167
|
+
contentctl-5.0.0a0.dist-info/METADATA,sha256=VJgxzJ76UWoloqr2hv-qD_03L1JAsaoNsbLNeslnpfo,21541
|
|
168
|
+
contentctl-5.0.0a0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
|
169
|
+
contentctl-5.0.0a0.dist-info/entry_points.txt,sha256=5bjZ2NkbQfSwK47uOnA77yCtjgXhvgxnmCQiynRF_-U,57
|
|
170
|
+
contentctl-5.0.0a0.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
from typing import Union, Optional, List
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
4
|
-
|
|
5
|
-
from contentctl.objects.security_content_object import SecurityContentObject
|
|
6
|
-
|
|
7
|
-
class EventSource(SecurityContentObject):
|
|
8
|
-
fields: Optional[list[str]] = None
|
|
9
|
-
field_mappings: Optional[list[dict]] = None
|
|
10
|
-
convert_to_log_source: Optional[list[dict]] = None
|
|
11
|
-
example_log: Optional[str] = None
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import yaml
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class DetectionWriter:
|
|
6
|
-
|
|
7
|
-
@staticmethod
|
|
8
|
-
def writeYmlFile(file_path : str, obj : dict) -> None:
|
|
9
|
-
|
|
10
|
-
new_obj = dict()
|
|
11
|
-
new_obj["name"] = obj["name"]
|
|
12
|
-
new_obj["id"] = obj["id"]
|
|
13
|
-
new_obj["version"] = obj["version"]
|
|
14
|
-
new_obj["date"] = obj["date"]
|
|
15
|
-
new_obj["author"] = obj["author"]
|
|
16
|
-
new_obj["type"] = obj["type"]
|
|
17
|
-
new_obj["status"] = obj["status"]
|
|
18
|
-
new_obj["description"] = obj["description"]
|
|
19
|
-
new_obj["data_source"] = obj["data_source"]
|
|
20
|
-
new_obj["search"] = obj["search"]
|
|
21
|
-
new_obj["how_to_implement"] = obj["how_to_implement"]
|
|
22
|
-
new_obj["known_false_positives"] = obj["known_false_positives"]
|
|
23
|
-
new_obj["references"] = obj["references"]
|
|
24
|
-
new_obj["tags"] = obj["tags"]
|
|
25
|
-
new_obj["tests"] = obj["tests"]
|
|
26
|
-
|
|
27
|
-
with open(file_path, 'w') as outfile:
|
|
28
|
-
yaml.safe_dump(new_obj, outfile, default_flow_style=False, sort_keys=False)
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import pathlib
|
|
3
|
-
from contentctl.objects.enums import SecurityContentType
|
|
4
|
-
from contentctl.output.yml_writer import YmlWriter
|
|
5
|
-
import pathlib
|
|
6
|
-
from contentctl.objects.config import NewContentType
|
|
7
|
-
class NewContentYmlOutput():
|
|
8
|
-
output_path: pathlib.Path
|
|
9
|
-
|
|
10
|
-
def __init__(self, output_path:pathlib.Path):
|
|
11
|
-
self.output_path = output_path
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def writeObjectNewContent(self, object: dict, subdirectory_name: str, type: NewContentType) -> None:
|
|
15
|
-
if type == NewContentType.detection:
|
|
16
|
-
|
|
17
|
-
file_path = os.path.join(self.output_path, 'detections', subdirectory_name, self.convertNameToFileName(object['name'], object['tags']['product']))
|
|
18
|
-
output_folder = pathlib.Path(self.output_path)/'detections'/subdirectory_name
|
|
19
|
-
#make sure the output folder exists for this detection
|
|
20
|
-
output_folder.mkdir(exist_ok=True)
|
|
21
|
-
|
|
22
|
-
YmlWriter.writeYmlFile(file_path, object)
|
|
23
|
-
print("Successfully created detection " + file_path)
|
|
24
|
-
|
|
25
|
-
elif type == NewContentType.story:
|
|
26
|
-
file_path = os.path.join(self.output_path, 'stories', self.convertNameToFileName(object['name'], object['tags']['product']))
|
|
27
|
-
YmlWriter.writeYmlFile(file_path, object)
|
|
28
|
-
print("Successfully created story " + file_path)
|
|
29
|
-
|
|
30
|
-
else:
|
|
31
|
-
raise(Exception(f"Object Must be Story or Detection, but is not: {object}"))
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def convertNameToFileName(self, name: str, product: list):
|
|
36
|
-
file_name = name \
|
|
37
|
-
.replace(' ', '_') \
|
|
38
|
-
.replace('-','_') \
|
|
39
|
-
.replace('.','_') \
|
|
40
|
-
.replace('/','_') \
|
|
41
|
-
.lower()
|
|
42
|
-
|
|
43
|
-
file_name = file_name + '.yml'
|
|
44
|
-
return file_name
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
def convertNameToTestFileName(self, name: str, product: list):
|
|
48
|
-
file_name = name \
|
|
49
|
-
.replace(' ', '_') \
|
|
50
|
-
.replace('-','_') \
|
|
51
|
-
.replace('.','_') \
|
|
52
|
-
.replace('/','_') \
|
|
53
|
-
.lower()
|
|
54
|
-
|
|
55
|
-
file_name = file_name + '.test.yml'
|
|
56
|
-
return file_name
|
contentctl/output/yml_output.py
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
from contentctl.output.detection_writer import DetectionWriter
|
|
4
|
-
from contentctl.objects.detection import Detection
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class YmlOutput():
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def writeDetections(self, objects: list, output_path : str) -> None:
|
|
11
|
-
for obj in objects:
|
|
12
|
-
file_path = obj.file_path
|
|
13
|
-
obj.id = str(obj.id)
|
|
14
|
-
|
|
15
|
-
DetectionWriter.writeYmlFile(os.path.join(output_path, file_path), obj.dict(
|
|
16
|
-
exclude_none=True,
|
|
17
|
-
include =
|
|
18
|
-
{
|
|
19
|
-
"name": True,
|
|
20
|
-
"id": True,
|
|
21
|
-
"version": True,
|
|
22
|
-
"date": True,
|
|
23
|
-
"author": True,
|
|
24
|
-
"type": True,
|
|
25
|
-
"status": True,
|
|
26
|
-
"description": True,
|
|
27
|
-
"data_source": True,
|
|
28
|
-
"search": True,
|
|
29
|
-
"how_to_implement": True,
|
|
30
|
-
"known_false_positives": True,
|
|
31
|
-
"references": True,
|
|
32
|
-
"tags":
|
|
33
|
-
{
|
|
34
|
-
"analytic_story": True,
|
|
35
|
-
"asset_type": True,
|
|
36
|
-
"atomic_guid": True,
|
|
37
|
-
"confidence": True,
|
|
38
|
-
"impact": True,
|
|
39
|
-
"drilldown_search": True,
|
|
40
|
-
"mappings": True,
|
|
41
|
-
"message": True,
|
|
42
|
-
"mitre_attack_id": True,
|
|
43
|
-
"kill_chain_phases:": True,
|
|
44
|
-
"observable": True,
|
|
45
|
-
"product": True,
|
|
46
|
-
"required_fields": True,
|
|
47
|
-
"risk_score": True,
|
|
48
|
-
"security_domain": True
|
|
49
|
-
},
|
|
50
|
-
"tests":
|
|
51
|
-
{
|
|
52
|
-
'__all__':
|
|
53
|
-
{
|
|
54
|
-
"name": True,
|
|
55
|
-
"attack_data": {
|
|
56
|
-
'__all__':
|
|
57
|
-
{
|
|
58
|
-
"data": True,
|
|
59
|
-
"source": True,
|
|
60
|
-
"sourcetype": True
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
))
|
|
File without changes
|
|
File without changes
|