devsecops-engine-tools 1.6.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of devsecops-engine-tools might be problematic. Click here for more details.
- devsecops_engine_tools/__init__.py +0 -0
- devsecops_engine_tools/engine_core/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py +124 -0
- devsecops_engine_tools/engine_core/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/model/customs_exceptions.py +9 -0
- devsecops_engine_tools/engine_core/src/domain/model/exclusions.py +14 -0
- devsecops_engine_tools/engine_core/src/domain/model/finding.py +20 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py +27 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/metrics_manager_gateway.py +7 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/printer_table_gateway.py +13 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/secrets_manager_gateway.py +7 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_management_gateway.py +17 -0
- devsecops_engine_tools/engine_core/src/domain/model/input_core.py +12 -0
- devsecops_engine_tools/engine_core/src/domain/model/level_compliance.py +3 -0
- devsecops_engine_tools/engine_core/src/domain/model/level_vulnerability.py +7 -0
- devsecops_engine_tools/engine_core/src/domain/model/threshold.py +12 -0
- devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py +20 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py +375 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +148 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py +59 -0
- devsecops_engine_tools/engine_core/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py +52 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py +40 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py +103 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +215 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py +84 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py +71 -0
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py +50 -0
- devsecops_engine_tools/engine_core/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/helpers/aws.py +9 -0
- devsecops_engine_tools/engine_core/src/infrastructure/helpers/util.py +15 -0
- devsecops_engine_tools/engine_dast/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/applications/runner_iac_scan.py +30 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/config_tool.py +24 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py +6 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +130 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_config.py +135 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_deserealizator.py +35 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py +195 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/entry_point_tool.py +6 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/file_generator_tool.py +74 -0
- devsecops_engine_tools/engine_sast/engine_secret/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py +34 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py +11 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py +11 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py +15 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py +16 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +72 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +73 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py +60 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py +39 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +104 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +11 -0
- devsecops_engine_tools/engine_sca/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +45 -0
- devsecops_engine_tools/engine_sca/engine_container/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py +8 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/images_gateway.py +7 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/tool_gateway.py +7 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +82 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py +67 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +76 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +22 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +123 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +62 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +48 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py +114 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +40 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/images_scanned.py +16 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py +32 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/deserializator_gateway.py +8 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/tool_gateway.py +9 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py +44 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/find_artifacts.py +95 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/find_mono_repos.py +29 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/handle_remote_config_patterns.py +90 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py +65 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py +57 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py +154 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +83 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/azuredevops/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py +67 -0
- devsecops_engine_tools/engine_utilities/azuredevops/models/AzureMessageLoggingPipeline.py +21 -0
- devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py +65 -0
- devsecops_engine_tools/engine_utilities/azuredevops/models/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/__init__.py +5 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/connect.py +37 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/defect_dojo.py +40 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/finding.py +40 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/cmdb.py +11 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/engagement.py +55 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/finding.py +96 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product.py +35 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_list.py +12 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type.py +16 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type_list.py +13 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/scan_configuration.py +21 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/finding.py +95 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py +125 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/finding.py +100 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py +223 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/cmdb.py +59 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding.py +38 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py +133 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/hello_world.py +2 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py +55 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py +55 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py +37 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py +115 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product.py +50 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py +59 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/scan_configurations.py +65 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/settings.py +1 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/repository/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/github/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/github/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py +49 -0
- devsecops_engine_tools/engine_utilities/github/models/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/input_validations/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/input_validations/env_utils.py +10 -0
- devsecops_engine_tools/engine_utilities/input_validations/validate_input_with_regex_letters_number_and_only.py +8 -0
- devsecops_engine_tools/engine_utilities/settings.py +38 -0
- devsecops_engine_tools/engine_utilities/ssh/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py +67 -0
- devsecops_engine_tools/engine_utilities/utils/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/utils/api_error.py +14 -0
- devsecops_engine_tools/engine_utilities/utils/dataclass_classmethod.py +84 -0
- devsecops_engine_tools/engine_utilities/utils/datetime_parsing.py +10 -0
- devsecops_engine_tools/engine_utilities/utils/logger_info.py +109 -0
- devsecops_engine_tools/engine_utilities/utils/name_conversion.py +12 -0
- devsecops_engine_tools/engine_utilities/utils/printers.py +21 -0
- devsecops_engine_tools/engine_utilities/utils/session_manager.py +14 -0
- devsecops_engine_tools/version.py +1 -0
- devsecops_engine_tools-1.6.7.dist-info/METADATA +156 -0
- devsecops_engine_tools-1.6.7.dist-info/RECORD +231 -0
- devsecops_engine_tools-1.6.7.dist-info/WHEEL +5 -0
- devsecops_engine_tools-1.6.7.dist-info/entry_points.txt +2 -0
- devsecops_engine_tools-1.6.7.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ConfigTool:
|
|
5
|
+
def __init__(self, json_data, tool):
|
|
6
|
+
self.version = json_data[tool]["VERSION"]
|
|
7
|
+
self.search_pattern = json_data["SEARCH_PATTERN"]
|
|
8
|
+
self.ignore_search_pattern = json_data["IGNORE_SEARCH_PATTERN"]
|
|
9
|
+
self.exclusions_path = json_data["EXCLUSIONS_PATH"]
|
|
10
|
+
self.use_external_checks_git = json_data[tool]["USE_EXTERNAL_CHECKS_GIT"]
|
|
11
|
+
self.external_checks_git = json_data[tool]["EXTERNAL_CHECKS_GIT"]
|
|
12
|
+
self.repository_ssh_host = json_data[tool]["EXTERNAL_GIT_SSH_HOST"]
|
|
13
|
+
self.repository_public_key_fp = json_data[tool]["EXTERNAL_GIT_PUBLIC_KEY_FINGERPRINT"]
|
|
14
|
+
self.use_external_checks_dir = json_data[tool]["USE_EXTERNAL_CHECKS_DIR"]
|
|
15
|
+
self.external_dir_owner = json_data[tool]["EXTERNAL_DIR_OWNER"]
|
|
16
|
+
self.external_dir_repository = json_data[tool]["EXTERNAL_DIR_REPOSITORY"]
|
|
17
|
+
self.message_info_engine_iac = json_data["MESSAGE_INFO_ENGINE_IAC"]
|
|
18
|
+
self.threshold = Threshold(json_data["THRESHOLD"])
|
|
19
|
+
self.rules_data_type = json_data[tool]["RULES"]
|
|
20
|
+
self.scope_pipeline = ""
|
|
21
|
+
self.exclusions = None
|
|
22
|
+
self.exclusions_all = None
|
|
23
|
+
self.exclusions_scope = None
|
|
24
|
+
self.rules_all = {}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.domain.model.gateways.tool_gateway import (
|
|
4
|
+
ToolGateway,
|
|
5
|
+
)
|
|
6
|
+
from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
|
|
7
|
+
DevopsPlatformGateway,
|
|
8
|
+
)
|
|
9
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.domain.model.config_tool import (
|
|
10
|
+
ConfigTool,
|
|
11
|
+
)
|
|
12
|
+
from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
|
|
13
|
+
from devsecops_engine_tools.engine_core.src.domain.model.input_core import (
|
|
14
|
+
InputCore
|
|
15
|
+
)
|
|
16
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
17
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
18
|
+
|
|
19
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class IacScan:
|
|
23
|
+
def __init__(
|
|
24
|
+
self, tool_gateway: ToolGateway, devops_platform_gateway: DevopsPlatformGateway
|
|
25
|
+
):
|
|
26
|
+
self.tool_gateway = tool_gateway
|
|
27
|
+
self.devops_platform_gateway = devops_platform_gateway
|
|
28
|
+
|
|
29
|
+
def process(self, dict_args, secret_tool, tool, env):
|
|
30
|
+
init_config_tool = self.devops_platform_gateway.get_remote_config(
|
|
31
|
+
dict_args["remote_config_repo"], "engine_sast/engine_iac/ConfigTool.json"
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
exclusions = self.devops_platform_gateway.get_remote_config(
|
|
35
|
+
dict_args["remote_config_repo"], "engine_sast/engine_iac/Exclusions.json"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
config_tool, folders_to_scan, skip_tool = self.complete_config_tool(
|
|
39
|
+
init_config_tool, exclusions, tool, dict_args
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
findings_list, path_file_results = [], None
|
|
44
|
+
if skip_tool == "false":
|
|
45
|
+
findings_list, path_file_results = self.tool_gateway.run_tool(
|
|
46
|
+
config_tool,
|
|
47
|
+
folders_to_scan,
|
|
48
|
+
"pdn" if env not in ["dev","qa","pdn"] else env,
|
|
49
|
+
dict_args["platform"],
|
|
50
|
+
secret_tool,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
totalized_exclusions = []
|
|
54
|
+
(
|
|
55
|
+
totalized_exclusions.extend(
|
|
56
|
+
map(lambda elem: Exclusions(**elem), config_tool.exclusions_all)
|
|
57
|
+
)
|
|
58
|
+
if config_tool.exclusions_all is not None
|
|
59
|
+
else None
|
|
60
|
+
)
|
|
61
|
+
(
|
|
62
|
+
totalized_exclusions.extend(
|
|
63
|
+
map(lambda elem: Exclusions(**elem), config_tool.exclusions_scope)
|
|
64
|
+
)
|
|
65
|
+
if config_tool.exclusions_scope is not None
|
|
66
|
+
else None
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
input_core = InputCore(
|
|
70
|
+
totalized_exclusions=totalized_exclusions,
|
|
71
|
+
threshold_defined=config_tool.threshold,
|
|
72
|
+
path_file_results=path_file_results,
|
|
73
|
+
custom_message_break_build=config_tool.message_info_engine_iac,
|
|
74
|
+
scope_pipeline=config_tool.scope_pipeline,
|
|
75
|
+
stage_pipeline=self.devops_platform_gateway.get_variable("stage").capitalize(),
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return findings_list, input_core
|
|
79
|
+
|
|
80
|
+
def complete_config_tool(self, data_file_tool, exclusions, tool, dict_args):
|
|
81
|
+
config_tool = ConfigTool(json_data=data_file_tool, tool=tool)
|
|
82
|
+
skip_tool = "false"
|
|
83
|
+
|
|
84
|
+
config_tool.exclusions = exclusions
|
|
85
|
+
config_tool.scope_pipeline = self.devops_platform_gateway.get_variable(
|
|
86
|
+
"pipeline_name"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
if config_tool.exclusions.get("All") is not None:
|
|
90
|
+
config_tool.exclusions_all = config_tool.exclusions.get("All").get(tool)
|
|
91
|
+
if config_tool.exclusions.get(config_tool.scope_pipeline) is not None:
|
|
92
|
+
config_tool.exclusions_scope = config_tool.exclusions.get(
|
|
93
|
+
config_tool.scope_pipeline
|
|
94
|
+
).get(tool)
|
|
95
|
+
skip_tool = "true" if config_tool.exclusions.get(config_tool.scope_pipeline).get("SKIP_TOOL") else "false"
|
|
96
|
+
if(dict_args["folder_path"]):
|
|
97
|
+
folders_to_scan = [dict_args["folder_path"]]
|
|
98
|
+
else:
|
|
99
|
+
folders_to_scan = self.search_folders(
|
|
100
|
+
config_tool.search_pattern, config_tool.ignore_search_pattern
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
if len(folders_to_scan) == 0:
|
|
104
|
+
logger.warning(
|
|
105
|
+
"No folders found with the search pattern: %s",
|
|
106
|
+
config_tool.search_pattern,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
return config_tool, folders_to_scan, skip_tool
|
|
110
|
+
|
|
111
|
+
def search_folders(self, search_pattern, ignore_pattern):
|
|
112
|
+
current_directory = os.getcwd()
|
|
113
|
+
patron = (
|
|
114
|
+
"(?i)(?!.*(?:"
|
|
115
|
+
+ "|".join(ignore_pattern)
|
|
116
|
+
+ ")).*?("
|
|
117
|
+
+ "|".join(search_pattern)
|
|
118
|
+
+ ").*$"
|
|
119
|
+
)
|
|
120
|
+
folders = [
|
|
121
|
+
folder
|
|
122
|
+
for folder in os.listdir(current_directory)
|
|
123
|
+
if os.path.isdir(os.path.join(current_directory, folder))
|
|
124
|
+
]
|
|
125
|
+
matching_folders = [
|
|
126
|
+
os.path.normpath(os.path.join(current_directory, folder))
|
|
127
|
+
for folder in folders
|
|
128
|
+
if re.match(patron, folder)
|
|
129
|
+
]
|
|
130
|
+
return matching_folders
|
|
File without changes
|
|
File without changes
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
MESSAGE_VALUE = "El valor"
|
|
5
|
+
MESSAGE_NIL = "no puede ser nulo"
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class CheckovConfigEnum(Enum):
|
|
9
|
+
"https://www.checkov.io/2.Basics/CLI%20Command%20Reference.html"
|
|
10
|
+
BRANCH = "branch"
|
|
11
|
+
FRAMEWORK = "framework"
|
|
12
|
+
CHECKS = "check"
|
|
13
|
+
COMPACT = "compact"
|
|
14
|
+
DIRECTORIES = "directory"
|
|
15
|
+
QUIET = "quiet"
|
|
16
|
+
OUTPUT = "output"
|
|
17
|
+
SOFT_FAIL = "soft-fail"
|
|
18
|
+
EVALUATE_VARIABLES = "evaluate-variables"
|
|
19
|
+
EXTERNAL_CHECKS_DIR = "external-checks-dir"
|
|
20
|
+
SKIP_CHECKS = "skip-check"
|
|
21
|
+
DOCKER_IMAGE = "docker-image"
|
|
22
|
+
DOCKERFILEPATH = "dockerfile-path"
|
|
23
|
+
EXTERNAL_CHECKS_GIT = "external-checks-git"
|
|
24
|
+
SKIP_DOWNLOAD = "skip-download"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CheckovConfig:
|
|
28
|
+
dict_confg_file = {}
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
path_config_file,
|
|
33
|
+
config_file_name,
|
|
34
|
+
directories,
|
|
35
|
+
env,
|
|
36
|
+
branch=None,
|
|
37
|
+
framework=None,
|
|
38
|
+
checks=None,
|
|
39
|
+
compact=True,
|
|
40
|
+
quiet=True,
|
|
41
|
+
output="json",
|
|
42
|
+
soft_fail=True,
|
|
43
|
+
evaluate_variables=True,
|
|
44
|
+
external_checks_dir=None,
|
|
45
|
+
external_checks_git=None,
|
|
46
|
+
skip_checks=None,
|
|
47
|
+
skip_download=True,
|
|
48
|
+
):
|
|
49
|
+
self.path_config_file = path_config_file
|
|
50
|
+
self.config_file_name = config_file_name
|
|
51
|
+
self.branch = branch
|
|
52
|
+
self.checks = checks
|
|
53
|
+
self.framework = framework
|
|
54
|
+
self.compact = compact
|
|
55
|
+
self.directories = directories
|
|
56
|
+
self.quiet = quiet
|
|
57
|
+
self.output = output
|
|
58
|
+
self.soft_fail = soft_fail
|
|
59
|
+
self.evaluate_variables = evaluate_variables
|
|
60
|
+
self.external_checks_dir = external_checks_dir
|
|
61
|
+
self.external_checks_git = external_checks_git
|
|
62
|
+
self.skip_checks = skip_checks
|
|
63
|
+
self.skip_download = skip_download
|
|
64
|
+
self.env = env
|
|
65
|
+
|
|
66
|
+
def create_config_dict(self):
|
|
67
|
+
if self.framework is not None:
|
|
68
|
+
self.dict_confg_file[CheckovConfigEnum.FRAMEWORK.value] = self.framework
|
|
69
|
+
else:
|
|
70
|
+
raise ValueError(
|
|
71
|
+
MESSAGE_VALUE + CheckovConfigEnum.FRAMEWORK.value + MESSAGE_NIL
|
|
72
|
+
)
|
|
73
|
+
if self.compact is not None:
|
|
74
|
+
self.dict_confg_file[CheckovConfigEnum.COMPACT.value] = self.compact
|
|
75
|
+
else:
|
|
76
|
+
raise ValueError(
|
|
77
|
+
MESSAGE_VALUE + CheckovConfigEnum.COMPACT.value + MESSAGE_NIL
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
if self.quiet is not None:
|
|
81
|
+
self.dict_confg_file[CheckovConfigEnum.QUIET.value] = self.quiet
|
|
82
|
+
else:
|
|
83
|
+
raise ValueError(
|
|
84
|
+
MESSAGE_VALUE + CheckovConfigEnum.QUIET.value + MESSAGE_NIL
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
if self.checks is not None:
|
|
88
|
+
self.dict_confg_file[CheckovConfigEnum.CHECKS.value] = self.checks
|
|
89
|
+
else:
|
|
90
|
+
raise ValueError(
|
|
91
|
+
MESSAGE_VALUE + CheckovConfigEnum.CHECKS.value + MESSAGE_NIL
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
if self.output is not None:
|
|
95
|
+
self.dict_confg_file[CheckovConfigEnum.OUTPUT.value] = self.output
|
|
96
|
+
else:
|
|
97
|
+
raise ValueError(
|
|
98
|
+
MESSAGE_VALUE + CheckovConfigEnum.OUTPUT.value + MESSAGE_NIL
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if self.soft_fail is not None:
|
|
102
|
+
self.dict_confg_file[CheckovConfigEnum.SOFT_FAIL.value] = self.soft_fail
|
|
103
|
+
else:
|
|
104
|
+
raise ValueError(
|
|
105
|
+
MESSAGE_VALUE + CheckovConfigEnum.CHECKS.value + MESSAGE_NIL
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
if self.directories is not None:
|
|
109
|
+
self.dict_confg_file[CheckovConfigEnum.DIRECTORIES.value] = self.directories
|
|
110
|
+
else:
|
|
111
|
+
raise ValueError(
|
|
112
|
+
MESSAGE_VALUE + CheckovConfigEnum.DIRECTORIES.value + MESSAGE_NIL
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
if self.evaluate_variables is not None:
|
|
116
|
+
self.dict_confg_file[
|
|
117
|
+
CheckovConfigEnum.EVALUATE_VARIABLES.value
|
|
118
|
+
] = self.evaluate_variables
|
|
119
|
+
|
|
120
|
+
if self.external_checks_git is not None:
|
|
121
|
+
self.dict_confg_file[
|
|
122
|
+
CheckovConfigEnum.EXTERNAL_CHECKS_GIT.value
|
|
123
|
+
] = self.external_checks_git
|
|
124
|
+
|
|
125
|
+
if self.external_checks_dir is not None:
|
|
126
|
+
self.dict_confg_file[
|
|
127
|
+
CheckovConfigEnum.EXTERNAL_CHECKS_DIR.value
|
|
128
|
+
] = self.external_checks_dir
|
|
129
|
+
|
|
130
|
+
if self.skip_download is not None:
|
|
131
|
+
self.dict_confg_file[
|
|
132
|
+
CheckovConfigEnum.SKIP_DOWNLOAD.value
|
|
133
|
+
] = self.skip_download
|
|
134
|
+
|
|
135
|
+
return self.dict_confg_file
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_core.src.domain.model.finding import (
|
|
2
|
+
Category,
|
|
3
|
+
Finding,
|
|
4
|
+
)
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class CheckovDeserealizator:
|
|
11
|
+
@classmethod
|
|
12
|
+
def get_list_finding(
|
|
13
|
+
cls, results_scan_list: list, rules
|
|
14
|
+
) -> "list[Finding]":
|
|
15
|
+
list_open_findings = []
|
|
16
|
+
|
|
17
|
+
for result in results_scan_list:
|
|
18
|
+
if "failed_checks" in str(result):
|
|
19
|
+
for scan in result["results"]["failed_checks"]:
|
|
20
|
+
finding_open = Finding(
|
|
21
|
+
id=scan.get("check_id"),
|
|
22
|
+
cvss=None,
|
|
23
|
+
where=scan.get("repo_file_path"),
|
|
24
|
+
description=rules[scan.get("check_id")].get("checkID", scan.get("check_name")),
|
|
25
|
+
severity=rules[scan.get("check_id")].get("severity").lower(),
|
|
26
|
+
identification_date=datetime.now().strftime("%d%m%Y"),
|
|
27
|
+
published_date_cve=None,
|
|
28
|
+
module="engine_iac",
|
|
29
|
+
category=Category(rules[scan.get("check_id")].get("category").lower()),
|
|
30
|
+
requirements=scan.get("guideline"),
|
|
31
|
+
tool="Checkov"
|
|
32
|
+
)
|
|
33
|
+
list_open_findings.append(finding_open)
|
|
34
|
+
|
|
35
|
+
return list_open_findings
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import yaml
|
|
2
|
+
import subprocess
|
|
3
|
+
import os
|
|
4
|
+
import platform
|
|
5
|
+
import queue
|
|
6
|
+
import threading
|
|
7
|
+
import json
|
|
8
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.domain.model.gateways.tool_gateway import (
|
|
9
|
+
ToolGateway,
|
|
10
|
+
)
|
|
11
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.domain.model.config_tool import (
|
|
12
|
+
ConfigTool,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.infrastructure.driven_adapters.checkov.checkov_deserealizator import (
|
|
16
|
+
CheckovDeserealizator,
|
|
17
|
+
)
|
|
18
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.infrastructure.driven_adapters.checkov.checkov_config import (
|
|
19
|
+
CheckovConfig
|
|
20
|
+
)
|
|
21
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.infrastructure.helpers.file_generator_tool import (
|
|
22
|
+
generate_file_from_tool,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from devsecops_engine_tools.engine_utilities.github.infrastructure.github_api import GithubApi
|
|
26
|
+
from devsecops_engine_tools.engine_utilities.ssh.managment_private_key import (
|
|
27
|
+
create_ssh_private_file,
|
|
28
|
+
add_ssh_private_key,
|
|
29
|
+
decode_base64,
|
|
30
|
+
config_knowns_hosts,
|
|
31
|
+
)
|
|
32
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
33
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
34
|
+
|
|
35
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
36
|
+
|
|
37
|
+
class CheckovTool(ToolGateway):
|
|
38
|
+
CHECKOV_CONFIG_FILE = "checkov_config.yaml"
|
|
39
|
+
TOOL = "CHECKOV"
|
|
40
|
+
framework_mapping = {"RULES_DOCKER": "dockerfile", "RULES_K8S": "kubernetes", "RULES_CLOUDFORMATION": "cloudformation"}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def create_config_file(self, checkov_config: CheckovConfig):
|
|
44
|
+
with open(
|
|
45
|
+
checkov_config.path_config_file
|
|
46
|
+
+ checkov_config.config_file_name
|
|
47
|
+
+ self.CHECKOV_CONFIG_FILE,
|
|
48
|
+
"w",
|
|
49
|
+
) as file:
|
|
50
|
+
yaml.dump(checkov_config.dict_confg_file, file)
|
|
51
|
+
file.close()
|
|
52
|
+
|
|
53
|
+
def configurate_external_checks(self, config_tool: ConfigTool, secret_tool):
|
|
54
|
+
agent_env = None
|
|
55
|
+
try:
|
|
56
|
+
if secret_tool is None:
|
|
57
|
+
logger.warning("Secrets manager is not enabled to configure external checks")
|
|
58
|
+
else:
|
|
59
|
+
if (
|
|
60
|
+
config_tool.use_external_checks_git == "True"
|
|
61
|
+
and platform.system()
|
|
62
|
+
in (
|
|
63
|
+
"Linux",
|
|
64
|
+
"Darwin",
|
|
65
|
+
)
|
|
66
|
+
):
|
|
67
|
+
config_knowns_hosts(
|
|
68
|
+
config_tool.repository_ssh_host,
|
|
69
|
+
config_tool.repository_public_key_fp,
|
|
70
|
+
)
|
|
71
|
+
ssh_key_content = decode_base64(
|
|
72
|
+
secret_tool, "repository_ssh_private_key"
|
|
73
|
+
)
|
|
74
|
+
ssh_key_file_path = "/tmp/ssh_key_file"
|
|
75
|
+
create_ssh_private_file(ssh_key_file_path, ssh_key_content)
|
|
76
|
+
ssh_key_password = decode_base64(
|
|
77
|
+
secret_tool, "repository_ssh_password"
|
|
78
|
+
)
|
|
79
|
+
agent_env = add_ssh_private_key(ssh_key_file_path, ssh_key_password)
|
|
80
|
+
|
|
81
|
+
# Create configuration dir external checks
|
|
82
|
+
if config_tool.use_external_checks_dir == "True":
|
|
83
|
+
github_api = GithubApi(secret_tool["github_token"])
|
|
84
|
+
github_api.download_latest_release_assets(
|
|
85
|
+
config_tool.external_dir_owner,
|
|
86
|
+
config_tool.external_dir_repository,
|
|
87
|
+
"/tmp",
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
except Exception as ex:
|
|
91
|
+
logger.error(f"An error ocurred configuring external checks {ex}")
|
|
92
|
+
return agent_env
|
|
93
|
+
|
|
94
|
+
def execute(self, checkov_config: CheckovConfig):
|
|
95
|
+
command = (
|
|
96
|
+
"checkov --config-file "
|
|
97
|
+
+ checkov_config.path_config_file
|
|
98
|
+
+ checkov_config.config_file_name
|
|
99
|
+
+ self.CHECKOV_CONFIG_FILE
|
|
100
|
+
)
|
|
101
|
+
env_modified = dict(os.environ)
|
|
102
|
+
if checkov_config.env is not None:
|
|
103
|
+
env_modified = {**dict(os.environ), **checkov_config.env}
|
|
104
|
+
result = subprocess.run(
|
|
105
|
+
command, capture_output=True, text=True, shell=True, env=env_modified
|
|
106
|
+
)
|
|
107
|
+
output = result.stdout.strip()
|
|
108
|
+
error = result.stderr.strip()
|
|
109
|
+
return output
|
|
110
|
+
|
|
111
|
+
def async_scan(self, queue, checkov_config: CheckovConfig):
|
|
112
|
+
result = []
|
|
113
|
+
output = self.execute(checkov_config)
|
|
114
|
+
result.append(json.loads(output))
|
|
115
|
+
queue.put(result)
|
|
116
|
+
|
|
117
|
+
def if_platform(self,value,container_platform):
|
|
118
|
+
if value.get("platform_not_apply"):
|
|
119
|
+
if value.get("platform_not_apply") != container_platform:
|
|
120
|
+
return True
|
|
121
|
+
else:
|
|
122
|
+
return False
|
|
123
|
+
else:
|
|
124
|
+
return True
|
|
125
|
+
|
|
126
|
+
def scan_folders(
|
|
127
|
+
self, folders_to_scan, config_tool: ConfigTool, agent_env, environment, container_platform
|
|
128
|
+
):
|
|
129
|
+
output_queue = queue.Queue()
|
|
130
|
+
# Crea una lista para almacenar los hilos
|
|
131
|
+
threads = []
|
|
132
|
+
for folder in folders_to_scan:
|
|
133
|
+
for rule in config_tool.rules_data_type:
|
|
134
|
+
checkov_config = CheckovConfig(
|
|
135
|
+
path_config_file="",
|
|
136
|
+
config_file_name=rule,
|
|
137
|
+
framework=self.framework_mapping[rule],
|
|
138
|
+
checks=[
|
|
139
|
+
key
|
|
140
|
+
for key, value in config_tool.rules_data_type[rule].items()
|
|
141
|
+
if value["environment"].get(environment) and self.if_platform(value,container_platform)
|
|
142
|
+
],
|
|
143
|
+
soft_fail=False,
|
|
144
|
+
directories=folder,
|
|
145
|
+
external_checks_git=[
|
|
146
|
+
f"{config_tool.external_checks_git}/{self.framework_mapping[rule]}"
|
|
147
|
+
]
|
|
148
|
+
if config_tool.use_external_checks_git == "True"
|
|
149
|
+
and agent_env is not None
|
|
150
|
+
and rule in ["RULES_K8S", "RULES_CLOUDFORMATION","RULES_DOCKER"]
|
|
151
|
+
else [],
|
|
152
|
+
env=agent_env,
|
|
153
|
+
external_checks_dir=f"/tmp/rules/{self.framework_mapping[rule]}"
|
|
154
|
+
if config_tool.use_external_checks_dir == "True"
|
|
155
|
+
and rule in ["RULES_K8S", "RULES_CLOUDFORMATION","RULES_DOCKER"]
|
|
156
|
+
else [],
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
checkov_config.create_config_dict()
|
|
160
|
+
self.create_config_file(checkov_config)
|
|
161
|
+
config_tool.rules_all.update(config_tool.rules_data_type[rule])
|
|
162
|
+
t = threading.Thread(
|
|
163
|
+
target=self.async_scan,
|
|
164
|
+
args=(output_queue, checkov_config),
|
|
165
|
+
)
|
|
166
|
+
t.start()
|
|
167
|
+
threads.append(t)
|
|
168
|
+
# Espera a que todos los hilos terminen
|
|
169
|
+
for t in threads:
|
|
170
|
+
t.join()
|
|
171
|
+
# Recopila las salidas de las tareas
|
|
172
|
+
result_scans = []
|
|
173
|
+
while not output_queue.empty():
|
|
174
|
+
result = output_queue.get()
|
|
175
|
+
result_scans.extend(result)
|
|
176
|
+
return result_scans
|
|
177
|
+
|
|
178
|
+
def run_tool(
|
|
179
|
+
self, config_tool: ConfigTool, folders_to_scan, environment, container_platform, secret_tool
|
|
180
|
+
):
|
|
181
|
+
agent_env = self.configurate_external_checks(config_tool, secret_tool)
|
|
182
|
+
|
|
183
|
+
result_scans = self.scan_folders(
|
|
184
|
+
folders_to_scan, config_tool, agent_env, environment, container_platform
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
checkov_deserealizator = CheckovDeserealizator()
|
|
188
|
+
findings_list = checkov_deserealizator.get_list_finding(
|
|
189
|
+
result_scans, config_tool.rules_all
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
return (
|
|
193
|
+
findings_list,
|
|
194
|
+
generate_file_from_tool(self.TOOL, result_scans, config_tool.rules_all)
|
|
195
|
+
)
|
|
File without changes
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/entry_point_tool.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_sast.engine_iac.src.domain.usecases.iac_scan import (
|
|
2
|
+
IacScan,
|
|
3
|
+
)
|
|
4
|
+
|
|
5
|
+
def init_engine_sast_rm(devops_platform_gateway, tool_gateway, dict_args, secret_tool, tool, env):
|
|
6
|
+
return IacScan(tool_gateway, devops_platform_gateway).process(dict_args, secret_tool, tool, env)
|
|
File without changes
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/file_generator_tool.py
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
4
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
5
|
+
|
|
6
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def generate_file_from_tool(tool, result_list, rules_doc):
|
|
10
|
+
if tool == "CHECKOV":
|
|
11
|
+
try:
|
|
12
|
+
if len(result_list) > 0:
|
|
13
|
+
all_failed_checks = []
|
|
14
|
+
summary_passed = 0
|
|
15
|
+
summary_failed = 0
|
|
16
|
+
summary_skipped = 0
|
|
17
|
+
summary_parsing_errors = 0
|
|
18
|
+
summary_resource_count = 0
|
|
19
|
+
checkov_version = None
|
|
20
|
+
for result in result_list:
|
|
21
|
+
failed_checks = result.get("results", {}).get("failed_checks", [])
|
|
22
|
+
all_failed_checks.extend(
|
|
23
|
+
map(lambda x: update_fields(x, rules_doc), failed_checks)
|
|
24
|
+
)
|
|
25
|
+
summary_passed += result.get("summary", {}).get("passed", 0)
|
|
26
|
+
summary_failed += result.get("summary", {}).get("failed", 0)
|
|
27
|
+
summary_skipped += result.get("summary", {}).get("skipped", 0)
|
|
28
|
+
summary_parsing_errors += result.get("summary", {}).get(
|
|
29
|
+
"parsing_errors", 0
|
|
30
|
+
)
|
|
31
|
+
summary_resource_count += result.get("summary", {}).get(
|
|
32
|
+
"resource_count", 0
|
|
33
|
+
)
|
|
34
|
+
checkov_version = result.get("summary", {}).get(
|
|
35
|
+
"checkov_version", None
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
file_name = "results.json"
|
|
39
|
+
results_data = {
|
|
40
|
+
"check_type": "Dockerfile, Kubernetes and CloudFormation",
|
|
41
|
+
"results": {
|
|
42
|
+
"failed_checks": all_failed_checks,
|
|
43
|
+
},
|
|
44
|
+
"summary": {
|
|
45
|
+
"passed": summary_passed,
|
|
46
|
+
"failed": summary_failed,
|
|
47
|
+
"skipped": summary_skipped,
|
|
48
|
+
"parsing_errors": summary_parsing_errors,
|
|
49
|
+
"resource_count": summary_resource_count,
|
|
50
|
+
"checkov_version": checkov_version,
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
with open(file_name, "w") as json_file:
|
|
55
|
+
json.dump(results_data, json_file, indent=4)
|
|
56
|
+
|
|
57
|
+
absolute_path = os.path.abspath(file_name)
|
|
58
|
+
return absolute_path
|
|
59
|
+
except Exception as ex:
|
|
60
|
+
logger.error(f"Error during handling checkov json integrator {ex}")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def update_fields(check_result, rules_doc):
|
|
64
|
+
rule_info = rules_doc.get(check_result.get("check_id"), {})
|
|
65
|
+
|
|
66
|
+
check_result["severity"] = rule_info["severity"].lower()
|
|
67
|
+
if "customID" in rule_info:
|
|
68
|
+
check_result["custom_vuln_id"] = rule_info["customID"]
|
|
69
|
+
if "guideline" in rule_info:
|
|
70
|
+
check_result["guideline"] = rule_info["guideline"]
|
|
71
|
+
if "category" in rule_info:
|
|
72
|
+
check_result["bc_category"] = rule_info["category"]
|
|
73
|
+
|
|
74
|
+
return check_result
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.infrastructure.entry_points.entry_point_tool import (
|
|
2
|
+
engine_secret_scan
|
|
3
|
+
)
|
|
4
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.infrastructure.driven_adapters.trufflehog.trufflehog_run import (
|
|
5
|
+
TrufflehogRun
|
|
6
|
+
)
|
|
7
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.infrastructure.driven_adapters.trufflehog.trufflehog_deserealizator import (
|
|
8
|
+
SecretScanDeserealizator
|
|
9
|
+
)
|
|
10
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.infrastructure.driven_adapters.git_cli.git_run import (
|
|
11
|
+
GitRun
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
def runner_secret_scan(dict_args, tool, devops_platform_gateway):
|
|
15
|
+
try:
|
|
16
|
+
tool_deserealizator = None
|
|
17
|
+
tool_gateway = None
|
|
18
|
+
git_gateway = GitRun()
|
|
19
|
+
if (tool == "TRUFFLEHOG"):
|
|
20
|
+
tool_gateway = TrufflehogRun()
|
|
21
|
+
tool_deserealizator = SecretScanDeserealizator()
|
|
22
|
+
return engine_secret_scan(
|
|
23
|
+
devops_platform_gateway = devops_platform_gateway,
|
|
24
|
+
tool_gateway = tool_gateway,
|
|
25
|
+
dict_args = dict_args,
|
|
26
|
+
tool=tool,
|
|
27
|
+
tool_deserealizator = tool_deserealizator,
|
|
28
|
+
git_gateway = git_gateway
|
|
29
|
+
)
|
|
30
|
+
except Exception as e:
|
|
31
|
+
raise Exception(f"Error engine_secret : {str(e)}")
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
runner_secret_scan()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|