contentctl 4.0.3__tar.gz → 4.0.5__tar.gz
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-4.0.3 → contentctl-4.0.5}/PKG-INFO +1 -1
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/new_content.py +12 -4
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/input/new_content_questions.py +0 -5
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/story_tags.py +2 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/finding_report_writer.py +3 -3
- contentctl-4.0.5/contentctl/templates/detections/application/.gitkeep +0 -0
- contentctl-4.0.5/contentctl/templates/detections/cloud/.gitkeep +0 -0
- contentctl-4.0.5/contentctl/templates/detections/network/.gitkeep +0 -0
- contentctl-4.0.5/contentctl/templates/detections/web/.gitkeep +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/pyproject.toml +1 -1
- {contentctl-4.0.3 → contentctl-4.0.5}/LICENSE.md +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/README.md +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/__init__.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/acs_deploy.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/apav_deploy.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/api_deploy.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/build.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/convert.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/DetectionTestingManager.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/GitService.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/generate_detection_coverage_badge.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureContainer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureServer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/progress_bar.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/views/DetectionTestingView.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/views/DetectionTestingViewCLI.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/views/DetectionTestingViewFile.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/detection_testing/views/DetectionTestingViewWeb.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/doc_gen.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/initialize.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/initialize_old.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/inspect.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/release_notes.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/reporting.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/test.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/actions/validate.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/contentctl.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/enrichments/attack_enrichment.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/enrichments/cve_enrichment.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/enrichments/splunk_app_enrichment.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/helper/link_validator.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/helper/logger.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/helper/utils.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/input/backend_splunk_ba.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/input/director.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/input/sigma_converter.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/input/ssa_detection_builder.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/input/yml_reader.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/abstract_security_content_objects/detection_abstract.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/alert_action.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/atomic.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/base_test.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/base_test_result.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/baseline.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/baseline_tags.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/config.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/constants.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/correlation_search.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/data_source.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment_email.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment_notable.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment_phantom.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment_rba.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment_scheduling.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/deployment_slack.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/detection.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/detection_tags.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/enums.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/integration_test.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/integration_test_result.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/investigation.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/investigation_tags.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/lookup.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/macro.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/mitre_attack_enrichment.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/notable_action.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/observable.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/playbook.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/playbook_tags.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/risk_analysis_action.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/risk_object.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/security_content_object.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/ssa_detection.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/ssa_detection_tags.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/story.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/test_group.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/threat_object.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/unit_test.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/unit_test_attack_data.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/unit_test_baseline.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/unit_test_old.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/unit_test_result.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/objects/unit_test_ssa.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/api_json_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/attack_nav_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/attack_nav_writer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/ba_yml_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/conf_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/conf_writer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/detection_writer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/doc_md_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/jinja_writer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/json_writer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/new_content_yml_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/svg_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/analyticstories_detections.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/analyticstories_investigations.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/analyticstories_stories.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/app.conf.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/app.manifest.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/collections.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/content-version.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/detection_count.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/detection_coverage.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_detection_page.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_detections.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_navigation.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_navigation_pages.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_playbooks.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_playbooks_page.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_stories.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/doc_story_page.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/es_investigations_investigations.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/es_investigations_stories.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/finding_report.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/header.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/macros.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/panel.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/savedsearches_baselines.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/savedsearches_detections.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/savedsearches_investigations.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/transforms.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/workflow_actions.j2 +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/yml_output.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/yml_writer.py +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/README +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_default.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/README/essoc_story_detail.txt +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/README/essoc_summary.txt +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/README/essoc_usage_dashboard.txt +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/README.md +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/analytic_stories.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/app.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/commands.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/content-version.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/data/ui/nav/default.xml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/data/ui/views/escu_summary.xml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/data/ui/views/feedback.xml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/distsearch.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/usage_searches.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/use_case_library.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/lookups/mitre_enrichment.csv +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/metadata/default.meta +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIcon.png +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIconAlt.png +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIconAlt_2x.png +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIcon_2x.png +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/datamodels_cim.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/datamodels_custom.conf +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/deployments/escu_default_configuration_anomaly.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/deployments/escu_default_configuration_baseline.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/deployments/escu_default_configuration_correlation.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/deployments/escu_default_configuration_hunting.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/deployments/escu_default_configuration_ttp.yml +0 -0
- {contentctl-4.0.3/contentctl/templates/detections → contentctl-4.0.5/contentctl/templates/detections/endpoint}/anomalous_usage_of_7zip.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/macros/security_content_ctime.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/macros/security_content_summariesonly.yml +0 -0
- {contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/stories/cobalt_strike.yml +0 -0
|
@@ -19,16 +19,21 @@ class NewContent:
|
|
|
19
19
|
answers = questionary.prompt(questions)
|
|
20
20
|
answers.update(answers)
|
|
21
21
|
answers['name'] = answers['detection_name']
|
|
22
|
+
del answers['detection_name']
|
|
22
23
|
answers['id'] = str(uuid.uuid4())
|
|
23
24
|
answers['version'] = 1
|
|
24
25
|
answers['date'] = datetime.today().strftime('%Y-%m-%d')
|
|
25
26
|
answers['author'] = answers['detection_author']
|
|
27
|
+
del answers['detection_author']
|
|
26
28
|
answers['data_source'] = answers['data_source']
|
|
27
29
|
answers['type'] = answers['detection_type']
|
|
30
|
+
del answers['detection_type']
|
|
28
31
|
answers['status'] = "production" #start everything as production since that's what we INTEND the content to become
|
|
29
32
|
answers['description'] = 'UPDATE_DESCRIPTION'
|
|
30
33
|
file_name = answers['name'].replace(' ', '_').replace('-','_').replace('.','_').replace('/','_').lower()
|
|
34
|
+
answers['kind'] = answers['detection_kind']
|
|
31
35
|
answers['search'] = answers['detection_search'] + ' | `' + file_name + '_filter`'
|
|
36
|
+
del answers['detection_search']
|
|
32
37
|
answers['how_to_implement'] = 'UPDATE_HOW_TO_IMPLEMENT'
|
|
33
38
|
answers['known_false_positives'] = 'UPDATE_KNOWN_FALSE_POSITIVES'
|
|
34
39
|
answers['references'] = ['REFERENCE']
|
|
@@ -52,7 +57,7 @@ class NewContent:
|
|
|
52
57
|
'name': "True Positive Test",
|
|
53
58
|
'attack_data': [
|
|
54
59
|
{
|
|
55
|
-
'data': "
|
|
60
|
+
'data': "https://github.com/splunk/contentctl/wiki",
|
|
56
61
|
"sourcetype": "UPDATE SOURCETYPE",
|
|
57
62
|
"source": "UPDATE SOURCE"
|
|
58
63
|
}
|
|
@@ -65,18 +70,21 @@ class NewContent:
|
|
|
65
70
|
questions = NewContentQuestions.get_questions_story()
|
|
66
71
|
answers = questionary.prompt(questions)
|
|
67
72
|
answers['name'] = answers['story_name']
|
|
73
|
+
del answers['story_name']
|
|
68
74
|
answers['id'] = str(uuid.uuid4())
|
|
69
75
|
answers['version'] = 1
|
|
70
76
|
answers['date'] = datetime.today().strftime('%Y-%m-%d')
|
|
71
77
|
answers['author'] = answers['story_author']
|
|
78
|
+
del answers['story_author']
|
|
72
79
|
answers['description'] = 'UPDATE_DESCRIPTION'
|
|
73
80
|
answers['narrative'] = 'UPDATE_NARRATIVE'
|
|
74
81
|
answers['references'] = []
|
|
75
82
|
answers['tags'] = dict()
|
|
76
|
-
answers['tags']['analytic_story'] = answers['name']
|
|
77
83
|
answers['tags']['category'] = answers['category']
|
|
84
|
+
del answers['category']
|
|
78
85
|
answers['tags']['product'] = ['Splunk Enterprise','Splunk Enterprise Security','Splunk Cloud']
|
|
79
86
|
answers['tags']['usecase'] = answers['usecase']
|
|
87
|
+
del answers['usecase']
|
|
80
88
|
answers['tags']['cve'] = ['UPDATE WITH CVE(S) IF APPLICABLE']
|
|
81
89
|
return answers
|
|
82
90
|
|
|
@@ -84,13 +92,13 @@ class NewContent:
|
|
|
84
92
|
def execute(self, input_dto: new) -> None:
|
|
85
93
|
if input_dto.type == NewContentType.detection:
|
|
86
94
|
content_dict = self.buildDetection()
|
|
87
|
-
subdirectory = pathlib.Path('detections') / content_dict.
|
|
95
|
+
subdirectory = pathlib.Path('detections') / content_dict.pop('detection_kind')
|
|
88
96
|
elif input_dto.type == NewContentType.story:
|
|
89
97
|
content_dict = self.buildStory()
|
|
90
98
|
subdirectory = pathlib.Path('stories')
|
|
91
99
|
else:
|
|
92
100
|
raise Exception(f"Unsupported new content type: [{input_dto.type}]")
|
|
93
|
-
|
|
101
|
+
|
|
94
102
|
full_output_path = input_dto.path / subdirectory / SecurityContentObject_Abstract.contentNameToFileName(content_dict.get('name'))
|
|
95
103
|
YmlWriter.writeYmlFile(str(full_output_path), content_dict)
|
|
96
104
|
|
|
@@ -27,11 +27,6 @@ class NewContentQuestions:
|
|
|
27
27
|
'message': 'enter author name',
|
|
28
28
|
'name': 'detection_author',
|
|
29
29
|
},
|
|
30
|
-
{
|
|
31
|
-
"type": "text",
|
|
32
|
-
"message": "enter author name",
|
|
33
|
-
"name": "detection_author",
|
|
34
|
-
},
|
|
35
30
|
{
|
|
36
31
|
"type": "select",
|
|
37
32
|
"message": "select a detection type",
|
|
@@ -14,6 +14,8 @@ class StoryUseCase(str,Enum):
|
|
|
14
14
|
APPLICATION_SECURITY = "Application Security"
|
|
15
15
|
SECURITY_MONITORING = "Security Monitoring"
|
|
16
16
|
ADVANCED_THREAD_DETECTION = "Advanced Threat Detection"
|
|
17
|
+
INSIDER_THREAT = "Insider Threat"
|
|
18
|
+
OTHER = "Other"
|
|
17
19
|
|
|
18
20
|
class StoryTags(BaseModel):
|
|
19
21
|
model_config = ConfigDict(extra='forbid', use_enum_values=True)
|
|
@@ -59,9 +59,9 @@ class FindingReportObject():
|
|
|
59
59
|
detection.tags.risk_level = "Critical"
|
|
60
60
|
|
|
61
61
|
evidence_str = "{"
|
|
62
|
-
for i in range(len(detection.tags.
|
|
63
|
-
evidence_str = evidence_str + '"' + detection.tags.
|
|
64
|
-
if not i == (len(detection.tags.
|
|
62
|
+
for i in range(len(detection.tags.required_fields)):
|
|
63
|
+
evidence_str = evidence_str + '"' + detection.tags.required_fields[i] + '": ' + detection.tags.required_fields[i].replace(".", "_")
|
|
64
|
+
if not i == (len(detection.tags.required_fields) - 1):
|
|
65
65
|
evidence_str = evidence_str + ', '
|
|
66
66
|
|
|
67
67
|
evidence_str = evidence_str + ', "sourceType": metadata.source_type, "source": metadata.source}'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/analyticstories_detections.j2
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/analyticstories_investigations.j2
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/analyticstories_stories.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/es_investigations_stories.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/savedsearches_baselines.j2
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/savedsearches_detections.j2
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/output/templates/savedsearches_investigations.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/README/essoc_summary.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/commands.conf
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/content-version.conf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/distsearch.conf
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/default/usage_searches.conf
RENAMED
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/lookups/mitre_enrichment.csv
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/metadata/default.meta
RENAMED
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIconAlt.png
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIconAlt_2x.png
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/app_template/static/appIcon_2x.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/macros/security_content_ctime.yml
RENAMED
|
File without changes
|
{contentctl-4.0.3 → contentctl-4.0.5}/contentctl/templates/macros/security_content_summariesonly.yml
RENAMED
|
File without changes
|
|
File without changes
|