contentctl 4.4.7__py3-none-any.whl → 5.0.0a2__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.
Files changed (70) hide show
  1. contentctl/actions/build.py +39 -27
  2. contentctl/actions/detection_testing/DetectionTestingManager.py +0 -1
  3. contentctl/actions/detection_testing/GitService.py +132 -72
  4. contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py +32 -26
  5. contentctl/actions/detection_testing/progress_bar.py +6 -6
  6. contentctl/actions/detection_testing/views/DetectionTestingView.py +4 -4
  7. contentctl/actions/new_content.py +98 -81
  8. contentctl/actions/test.py +4 -5
  9. contentctl/actions/validate.py +2 -1
  10. contentctl/contentctl.py +114 -80
  11. contentctl/helper/utils.py +0 -14
  12. contentctl/input/director.py +5 -5
  13. contentctl/input/new_content_questions.py +2 -2
  14. contentctl/input/yml_reader.py +11 -6
  15. contentctl/objects/abstract_security_content_objects/detection_abstract.py +228 -120
  16. contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py +5 -7
  17. contentctl/objects/alert_action.py +2 -1
  18. contentctl/objects/atomic.py +1 -0
  19. contentctl/objects/base_test.py +4 -3
  20. contentctl/objects/base_test_result.py +3 -3
  21. contentctl/objects/baseline.py +26 -6
  22. contentctl/objects/baseline_tags.py +2 -3
  23. contentctl/objects/config.py +789 -596
  24. contentctl/objects/constants.py +4 -1
  25. contentctl/objects/correlation_search.py +89 -95
  26. contentctl/objects/data_source.py +5 -6
  27. contentctl/objects/deployment.py +2 -10
  28. contentctl/objects/deployment_email.py +2 -1
  29. contentctl/objects/deployment_notable.py +2 -1
  30. contentctl/objects/deployment_phantom.py +2 -1
  31. contentctl/objects/deployment_rba.py +2 -1
  32. contentctl/objects/deployment_scheduling.py +2 -1
  33. contentctl/objects/deployment_slack.py +2 -1
  34. contentctl/objects/detection_tags.py +7 -42
  35. contentctl/objects/drilldown.py +1 -0
  36. contentctl/objects/enums.py +21 -58
  37. contentctl/objects/investigation.py +6 -5
  38. contentctl/objects/investigation_tags.py +2 -3
  39. contentctl/objects/lookup.py +145 -63
  40. contentctl/objects/macro.py +2 -3
  41. contentctl/objects/mitre_attack_enrichment.py +2 -2
  42. contentctl/objects/observable.py +3 -1
  43. contentctl/objects/playbook_tags.py +5 -1
  44. contentctl/objects/rba.py +90 -0
  45. contentctl/objects/risk_event.py +87 -144
  46. contentctl/objects/story_tags.py +1 -2
  47. contentctl/objects/test_attack_data.py +2 -1
  48. contentctl/objects/unit_test_baseline.py +2 -1
  49. contentctl/output/api_json_output.py +233 -220
  50. contentctl/output/conf_output.py +51 -44
  51. contentctl/output/conf_writer.py +201 -125
  52. contentctl/output/data_source_writer.py +0 -1
  53. contentctl/output/json_writer.py +2 -4
  54. contentctl/output/svg_output.py +1 -1
  55. contentctl/output/templates/analyticstories_detections.j2 +1 -1
  56. contentctl/output/templates/collections.j2 +1 -1
  57. contentctl/output/templates/doc_detections.j2 +0 -5
  58. contentctl/output/templates/savedsearches_detections.j2 +8 -3
  59. contentctl/output/templates/transforms.j2 +4 -4
  60. contentctl/output/yml_writer.py +15 -0
  61. contentctl/templates/detections/endpoint/anomalous_usage_of_7zip.yml +16 -34
  62. {contentctl-4.4.7.dist-info → contentctl-5.0.0a2.dist-info}/METADATA +5 -4
  63. {contentctl-4.4.7.dist-info → contentctl-5.0.0a2.dist-info}/RECORD +66 -69
  64. {contentctl-4.4.7.dist-info → contentctl-5.0.0a2.dist-info}/WHEEL +1 -1
  65. contentctl/objects/event_source.py +0 -11
  66. contentctl/output/detection_writer.py +0 -28
  67. contentctl/output/new_content_yml_output.py +0 -56
  68. contentctl/output/yml_output.py +0 -66
  69. {contentctl-4.4.7.dist-info → contentctl-5.0.0a2.dist-info}/LICENSE.md +0 -0
  70. {contentctl-4.4.7.dist-info → contentctl-5.0.0a2.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
1
+ Metadata-Version: 2.3
2
2
  Name: contentctl
3
- Version: 4.4.7
3
+ Version: 5.0.0a2
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.13
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)
@@ -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.8.3,<0.9.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=T1shTnBqJ2OfAL5RRDLBw1CdeV-Oqqp3uJ8ObEEKTIM,5201
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=zg8JasDjCpSC-yhseEyUwO8qbDJIUJbhlus9Li9ZAnA,8818
5
- contentctl/actions/detection_testing/GitService.py,sha256=HcyuPrW6zBeCNu2l2JJgB_wTyvdWeK3Ii32pUf3vs08,9698
4
+ contentctl/actions/detection_testing/DetectionTestingManager.py,sha256=YAEtyAErvDgk4eqIXWLVllZFKe_0ZKliycR9fvWeMjI,8744
5
+ contentctl/actions/detection_testing/GitService.py,sha256=eXrppyWPXyL3MsN5iKKUsEM1orYSDxpBraBnM17LOLs,11137
6
6
  contentctl/actions/detection_testing/generate_detection_coverage_badge.py,sha256=N5mznaeErVak3mOBwsd0RDBFJO3bku0EZvpayCyU-uk,2259
7
- contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py,sha256=mcdLt3tZr-xF5xaYnD0q7JQx9qrbRIzPNl6D9MeeB5k,56999
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=OK9oRnPlzPAswt9KZNYID-YLHxqaYPY821kIE4-rCeA,3244
11
- contentctl/actions/detection_testing/views/DetectionTestingView.py,sha256=nh9-gBSy-7FFBU71v4K5rwJmPzX2swFivbNfzDOpH-U,7674
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=3ZKSQ_O7GUTflEg2bqo2iGK65EaL96c4MEqGJPanXWg,6445
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=jv12UO_PTjZwvo4G-Dr8fE2gsuWvuvAmO2QQM4q7TL0,5917
23
- contentctl/actions/validate.py,sha256=eVxXf67b65ywe4yXYqaTXJShvqbzG9vd6jlkq-YVzy8,5538
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=H2tst7G9JSpfvPqR_-Vmt78ngwaRg6FmndNByWf-3tM,10517
25
+ contentctl/contentctl.py,sha256=rVqo4MaDFWljw9_ZwgTcSjtIEC9jcVRibJ7I--YyDm0,11185
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=8ICRvE7DUiNL9BK4Hw71hCLFbd3R2u86OwKeDOdaBTY,19454
33
- contentctl/input/director.py,sha256=U7jrhqP7IbfaSLXGIVtKrVvGTwIrmI1roW2X1jmZZ8Q,10841
34
- contentctl/input/new_content_questions.py,sha256=p-rop4YpCjyg0RYKQ7Cvk9-7uaa5GDELNVeeUlxk6ks,4191
35
- contentctl/input/yml_reader.py,sha256=hyVUYhx4Ka8C618kP2D_E3sDUKEQGC6ty_QZQArHKd4,1489
36
- contentctl/objects/abstract_security_content_objects/detection_abstract.py,sha256=QnLfNK4fa-Y-LmdPVfEJMa8WDzDsKz-bwpixbCLJKNo,45766
37
- contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py,sha256=VUTNG6LvYf5D1L8UA5uciBBI0VfB432-6TCe2hP-_YE,10324
38
- contentctl/objects/alert_action.py,sha256=E9gjCn5C31h0sN7k90KNe4agRxFFSnMW_Z-Ri_3YQss,1335
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=L9QSmwmmSFFfvUykPk_nXwz9XDz-Gn6e0rrDxxRO8uY,7292
41
- contentctl/objects/base_test.py,sha256=qUtKQJrqCto_fwCBdiH68_tXqokhcv9ceu2fQlBxsjA,1045
42
- contentctl/objects/base_test_result.py,sha256=pr-rwr80bJej8hHNhiVBvw49FZmRuPfOIChLJjY22lY,5205
43
- contentctl/objects/baseline.py,sha256=cnJQt1z-PQDH6mbDU-eqo-l41LSWsaKmqU0IxuJWnGk,2139
44
- contentctl/objects/baseline_tags.py,sha256=fyfH2KZqUhPGCwfverYw2_ZGXQIjgkT3P7hiYDPnN4Y,1599
45
- contentctl/objects/config.py,sha256=m99_glCCDluLrSDsC8SXJpXt97kIom8ppsp34aG3J5s,50475
46
- contentctl/objects/constants.py,sha256=scKaQlubfjkW5n2AztY5zneAgjVLXbnyK0ZBALxPUV8,5529
47
- contentctl/objects/correlation_search.py,sha256=N83HiS-IUcFFPPw2F7wyTn0GrrKsq9YbtWuE5iqhAKs,46271
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=JtctSRIXvU292ujFL9b6YX0mse04ZqliArwAEyM3oH8,48598
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=aRr6lHu-EtGmi6J2nXKD7i2ozUPtp7X-vDkQiutvD3I,1545
50
- contentctl/objects/deployment.py,sha256=9iFo3iwvBVmBMlW-VhwX4ikbh2shl5cumSPOFMdqT2Q,3044
51
- contentctl/objects/deployment_email.py,sha256=Zu9cXZdfOP6noa_mZpiK1GrYCTgi3Mim94iLGjE674c,147
52
- contentctl/objects/deployment_notable.py,sha256=QhOI7HEkUuuqk0fum9SD8IpYBlbwIsJUff8s3kCKKj4,198
53
- contentctl/objects/deployment_phantom.py,sha256=EmRlPKpEij4vqUJgACqK_zcGBmHV8xXczkJi-FxMDio,207
54
- contentctl/objects/deployment_rba.py,sha256=YFLSKzLU7s8Bt1cJkSBWlfCsc_2MfgiwyaDijQOVlFE,125
55
- contentctl/objects/deployment_scheduling.py,sha256=bQjbJHNaUGdU1VAGV8-nFOHzHutbIlt7FZpUvR1CV4Y,198
56
- contentctl/objects/deployment_slack.py,sha256=P6z8OLHDKcDWx7nbKWasqBc3dFRatGcpO2GtmxzVV8I,135
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=iozG-McM6VRYuqWHhQXvKD_iVyug2rdofuTf4jeUaG4,11208
61
- contentctl/objects/drilldown.py,sha256=k_U0-vXKBCKeoUKszQ_0FdYQMq9c9mJ3PsHe6rM2lAA,3914
62
- contentctl/objects/enums.py,sha256=teR7tf5mUc60B5DjIhDsczbsOUJRkkOu--oh_id9JQk,14221
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=UCiKvTW3SQrjbbVAdYxmtJb_DT3-wuVgxZvT9nudvnw,3236
68
- contentctl/objects/investigation_tags.py,sha256=mwjIyWtQflF_sjzKOmfcXj-DkPsgwX0jSN7_weearM4,1304
69
- contentctl/objects/lookup.py,sha256=vy-4JVswguJGIniIwkPG_WAeo5JlCrHUTV9FOyksRII,7516
70
- contentctl/objects/macro.py,sha256=nEIWRVCMQiTfSD5ajg-39laf-JH85zKE9uIFnljQTyE,3293
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=4_9hvrxCXnGfyWqoj7C-0pCfGXEBJXfhrcSfb1cmPjs,3387
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=pw0Ehi_KMb7nXzw2kuw1FnCknpD8zDkCAqBTa-M_F28,1313
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=NrhTGcgoYSGEZggrfebko0GBOXN9x05IadRUUL_CVfQ,1436
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=wPVQPwvA3u_2CTeZwy7xLHrIH98mWpvBunEsQLGlb-Y,14106
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=cOL8PUzdlFdLPQHc54_-9sdI8nCE1D04oKY7KriOssI,2293
86
- contentctl/objects/test_attack_data.py,sha256=9OgErjdPR4S-SJpQePt0uwBLPYHYPtqKDd-auhjz7Uc,430
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=XHvOm7qLYfqrP6uC5U_pfgw_pf8-S2RojuNmbo6lXlM,227
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=n3OTd5z-Vkmsn7ny6QCAar_jSMNuuJfzAQa7xq_9if4,9085
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=tJRFWSswl-XAkcggstkR-tiQUL9en4Z4x-KBZTQCQYg,10170
97
- contentctl/output/conf_writer.py,sha256=LgkVrJuG1PAnilTyh3DhraNJiG2o-h19_1JU2M_7zB0,13115
98
- contentctl/output/data_source_writer.py,sha256=ubFjm6XJ4T2d3oqfKwDFasITHeDj3HFmegqVN--5_ME,1635
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=Z-iVLnZb8tzYATxbQtXax0dz572lVPFMNVTx-vWbnog,1007
103
- contentctl/output/new_content_yml_output.py,sha256=KvP0FffQBPznSKqJyRQMtehf4XYEVK5jiPlUwnkekUc,2061
104
- contentctl/output/svg_output.py,sha256=T2p4S085MKj5VPZKvo4tWBVOmYme32J9L7kMEBm3SwQ,2751
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=rDpAcqM6hRiyCQPgfRh8KcL41Mrqsc97krQ-JPFhSBQ,181
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=QKP2u22bFQFSG6I_Iw1_wR7uza-OXI70roSCbEijLiE,6596
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=WEpY9C81cifCM0ZC_pubn9pNIXcnPPhQGSrmr79j1aI,6672
126
+ contentctl/output/templates/savedsearches_detections.j2,sha256=FzOCszfJjAWTE4Z40JMK6umOPxz5NjcRt3-agwmvFn0,6830
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=-cSoie0LgJwibtW-GMhc9BQlmS6h1s1Vykm9O2M0f9Y,1456
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/yml_output.py,sha256=xtTD3f_WWy8O6Joi4S8gG9paot8JpQFRlwt17_ek5B4,2682
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=AwAjsSuNAEux-_P4Co_Rf73IzSQF6XNhVcCzgU_bGT0,4189
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-4.4.7.dist-info/LICENSE.md,sha256=hQWUayRk-pAiOZbZnuy8djmoZkjKBx8MrCFpW-JiOgo,11344
170
- contentctl-4.4.7.dist-info/METADATA,sha256=QgPMJnmg7QKj804-V-7IriWu0qVmPTxLQockC5K7mag,21487
171
- contentctl-4.4.7.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
172
- contentctl-4.4.7.dist-info/entry_points.txt,sha256=5bjZ2NkbQfSwK47uOnA77yCtjgXhvgxnmCQiynRF_-U,57
173
- contentctl-4.4.7.dist-info/RECORD,,
166
+ contentctl-5.0.0a2.dist-info/LICENSE.md,sha256=hQWUayRk-pAiOZbZnuy8djmoZkjKBx8MrCFpW-JiOgo,11344
167
+ contentctl-5.0.0a2.dist-info/METADATA,sha256=trZZB3p6gbjZZ4RfG_kh9cniJaV1cbaocdwlJqOZU4w,21541
168
+ contentctl-5.0.0a2.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
169
+ contentctl-5.0.0a2.dist-info/entry_points.txt,sha256=5bjZ2NkbQfSwK47uOnA77yCtjgXhvgxnmCQiynRF_-U,57
170
+ contentctl-5.0.0a2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 2.0.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -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
@@ -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
- ))