prowler-cloud 5.14.1__py3-none-any.whl → 5.15.0__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 (326) hide show
  1. dashboard/assets/images/providers/alibabacloud_provider.png +0 -0
  2. dashboard/compliance/cis_2_0_alibabacloud.py +24 -0
  3. dashboard/lib/layouts.py +1 -0
  4. dashboard/pages/compliance.py +8 -2
  5. dashboard/pages/overview.py +52 -1
  6. prowler/CHANGELOG.md +59 -20
  7. prowler/__main__.py +40 -0
  8. prowler/compliance/alibabacloud/__init__.py +0 -0
  9. prowler/compliance/alibabacloud/cis_2.0_alibabacloud.json +1833 -0
  10. prowler/compliance/aws/iso27001_2013_aws.json +158 -158
  11. prowler/compliance/aws/soc2_aws.json +100 -0
  12. prowler/compliance/azure/rbi_cyber_security_framework_azure.json +248 -0
  13. prowler/compliance/azure/soc2_azure.json +87 -1
  14. prowler/compliance/gcp/soc2_gcp.json +82 -1
  15. prowler/config/config.py +2 -1
  16. prowler/lib/check/check.py +47 -1
  17. prowler/lib/check/models.py +23 -0
  18. prowler/lib/check/utils.py +1 -1
  19. prowler/lib/cli/parser.py +3 -2
  20. prowler/lib/outputs/compliance/cis/cis_alibabacloud.py +106 -0
  21. prowler/lib/outputs/compliance/cis/models.py +35 -0
  22. prowler/lib/outputs/finding.py +16 -0
  23. prowler/lib/outputs/html/html.py +67 -0
  24. prowler/lib/outputs/outputs.py +2 -0
  25. prowler/lib/outputs/summary_table.py +3 -0
  26. prowler/providers/alibabacloud/__init__.py +0 -0
  27. prowler/providers/alibabacloud/alibabacloud_provider.py +872 -0
  28. prowler/providers/alibabacloud/config.py +41 -0
  29. prowler/providers/alibabacloud/exceptions/__init__.py +0 -0
  30. prowler/providers/alibabacloud/exceptions/exceptions.py +116 -0
  31. prowler/providers/alibabacloud/lib/__init__.py +0 -0
  32. prowler/providers/alibabacloud/lib/arguments/__init__.py +0 -0
  33. prowler/providers/alibabacloud/lib/arguments/arguments.py +58 -0
  34. prowler/providers/alibabacloud/lib/mutelist/__init__.py +0 -0
  35. prowler/providers/alibabacloud/lib/mutelist/mutelist.py +175 -0
  36. prowler/providers/alibabacloud/lib/service/__init__.py +0 -0
  37. prowler/providers/alibabacloud/lib/service/service.py +113 -0
  38. prowler/providers/alibabacloud/models.py +266 -0
  39. prowler/providers/alibabacloud/services/__init__.py +0 -0
  40. prowler/providers/alibabacloud/services/actiontrail/__init__.py +0 -0
  41. prowler/providers/alibabacloud/services/actiontrail/actiontrail_client.py +6 -0
  42. prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/__init__.py +0 -0
  43. prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/actiontrail_multi_region_enabled.metadata.json +39 -0
  44. prowler/providers/alibabacloud/services/actiontrail/actiontrail_multi_region_enabled/actiontrail_multi_region_enabled.py +81 -0
  45. prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/__init__.py +0 -0
  46. prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/actiontrail_oss_bucket_not_publicly_accessible.metadata.json +40 -0
  47. prowler/providers/alibabacloud/services/actiontrail/actiontrail_oss_bucket_not_publicly_accessible/actiontrail_oss_bucket_not_publicly_accessible.py +119 -0
  48. prowler/providers/alibabacloud/services/actiontrail/actiontrail_service.py +110 -0
  49. prowler/providers/alibabacloud/services/cs/__init__.py +0 -0
  50. prowler/providers/alibabacloud/services/cs/cs_client.py +4 -0
  51. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/__init__.py +0 -0
  52. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/cs_kubernetes_cloudmonitor_enabled.metadata.json +38 -0
  53. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cloudmonitor_enabled/cs_kubernetes_cloudmonitor_enabled.py +26 -0
  54. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/__init__.py +0 -0
  55. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/cs_kubernetes_cluster_check_recent.metadata.json +38 -0
  56. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_recent/cs_kubernetes_cluster_check_recent.py +62 -0
  57. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_weekly/cs_kubernetes_cluster_check_weekly.metadata.json +38 -0
  58. prowler/providers/alibabacloud/services/cs/cs_kubernetes_cluster_check_weekly/cs_kubernetes_cluster_check_weekly.py +62 -0
  59. prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/__init__.py +0 -0
  60. prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/cs_kubernetes_dashboard_disabled.metadata.json +39 -0
  61. prowler/providers/alibabacloud/services/cs/cs_kubernetes_dashboard_disabled/cs_kubernetes_dashboard_disabled.py +26 -0
  62. prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/__init__.py +0 -0
  63. prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/cs_kubernetes_eni_multiple_ip_enabled.metadata.json +39 -0
  64. prowler/providers/alibabacloud/services/cs/cs_kubernetes_eni_multiple_ip_enabled/cs_kubernetes_eni_multiple_ip_enabled.py +26 -0
  65. prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/__init__.py +0 -0
  66. prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/cs_kubernetes_log_service_enabled.metadata.json +40 -0
  67. prowler/providers/alibabacloud/services/cs/cs_kubernetes_log_service_enabled/cs_kubernetes_log_service_enabled.py +26 -0
  68. prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/__init__.py +0 -0
  69. prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/cs_kubernetes_network_policy_enabled.metadata.json +39 -0
  70. prowler/providers/alibabacloud/services/cs/cs_kubernetes_network_policy_enabled/cs_kubernetes_network_policy_enabled.py +26 -0
  71. prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/__init__.py +0 -0
  72. prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/cs_kubernetes_private_cluster_enabled.metadata.json +39 -0
  73. prowler/providers/alibabacloud/services/cs/cs_kubernetes_private_cluster_enabled/cs_kubernetes_private_cluster_enabled.py +26 -0
  74. prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/__init__.py +0 -0
  75. prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/cs_kubernetes_rbac_enabled.metadata.json +40 -0
  76. prowler/providers/alibabacloud/services/cs/cs_kubernetes_rbac_enabled/cs_kubernetes_rbac_enabled.py +28 -0
  77. prowler/providers/alibabacloud/services/cs/cs_service.py +354 -0
  78. prowler/providers/alibabacloud/services/ecs/__init__.py +0 -0
  79. prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/__init__.py +0 -0
  80. prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/ecs_attached_disk_encrypted.metadata.json +38 -0
  81. prowler/providers/alibabacloud/services/ecs/ecs_attached_disk_encrypted/ecs_attached_disk_encrypted.py +38 -0
  82. prowler/providers/alibabacloud/services/ecs/ecs_client.py +4 -0
  83. prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/__init__.py +0 -0
  84. prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/ecs_instance_endpoint_protection_installed.metadata.json +41 -0
  85. prowler/providers/alibabacloud/services/ecs/ecs_instance_endpoint_protection_installed/ecs_instance_endpoint_protection_installed.py +47 -0
  86. prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/__init__.py +0 -0
  87. prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/ecs_instance_latest_os_patches_applied.metadata.json +38 -0
  88. prowler/providers/alibabacloud/services/ecs/ecs_instance_latest_os_patches_applied/ecs_instance_latest_os_patches_applied.py +50 -0
  89. prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/__init__.py +0 -0
  90. prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/ecs_instance_no_legacy_network.metadata.json +38 -0
  91. prowler/providers/alibabacloud/services/ecs/ecs_instance_no_legacy_network/ecs_instance_no_legacy_network.py +34 -0
  92. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/__init__.py +0 -0
  93. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/ecs_securitygroup_restrict_rdp_internet.metadata.json +39 -0
  94. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_rdp_internet/ecs_securitygroup_restrict_rdp_internet.py +68 -0
  95. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/__init__.py +0 -0
  96. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/ecs_securitygroup_restrict_ssh_internet.metadata.json +39 -0
  97. prowler/providers/alibabacloud/services/ecs/ecs_securitygroup_restrict_ssh_internet/ecs_securitygroup_restrict_ssh_internet.py +68 -0
  98. prowler/providers/alibabacloud/services/ecs/ecs_service.py +380 -0
  99. prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/__init__.py +0 -0
  100. prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/ecs_unattached_disk_encrypted.metadata.json +38 -0
  101. prowler/providers/alibabacloud/services/ecs/ecs_unattached_disk_encrypted/ecs_unattached_disk_encrypted.py +38 -0
  102. prowler/providers/alibabacloud/services/ecs/lib/security_groups.py +23 -0
  103. prowler/providers/alibabacloud/services/oss/__init__.py +0 -0
  104. prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/__init__.py +0 -0
  105. prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.metadata.json +39 -0
  106. prowler/providers/alibabacloud/services/oss/oss_bucket_logging_enabled/oss_bucket_logging_enabled.py +37 -0
  107. prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/__init__.py +0 -0
  108. prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/oss_bucket_not_publicly_accessible.metadata.json +39 -0
  109. prowler/providers/alibabacloud/services/oss/oss_bucket_not_publicly_accessible/oss_bucket_not_publicly_accessible.py +89 -0
  110. prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/__init__.py +0 -0
  111. prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/oss_bucket_secure_transport_enabled.metadata.json +38 -0
  112. prowler/providers/alibabacloud/services/oss/oss_bucket_secure_transport_enabled/oss_bucket_secure_transport_enabled.py +87 -0
  113. prowler/providers/alibabacloud/services/oss/oss_client.py +4 -0
  114. prowler/providers/alibabacloud/services/oss/oss_service.py +317 -0
  115. prowler/providers/alibabacloud/services/ram/__init__.py +0 -0
  116. prowler/providers/alibabacloud/services/ram/ram_client.py +4 -0
  117. prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/__init__.py +0 -0
  118. prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/ram_no_root_access_key.metadata.json +39 -0
  119. prowler/providers/alibabacloud/services/ram/ram_no_root_access_key/ram_no_root_access_key.py +33 -0
  120. prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/__init__.py +0 -0
  121. prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/ram_password_policy_lowercase.metadata.json +39 -0
  122. prowler/providers/alibabacloud/services/ram/ram_password_policy_lowercase/ram_password_policy_lowercase.py +32 -0
  123. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/__init__.py +0 -0
  124. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/ram_password_policy_max_login_attempts.metadata.json +39 -0
  125. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_login_attempts/ram_password_policy_max_login_attempts.py +32 -0
  126. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/__init__.py +0 -0
  127. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/ram_password_policy_max_password_age.metadata.json +39 -0
  128. prowler/providers/alibabacloud/services/ram/ram_password_policy_max_password_age/ram_password_policy_max_password_age.py +35 -0
  129. prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/__init__.py +0 -0
  130. prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/ram_password_policy_minimum_length.metadata.json +39 -0
  131. prowler/providers/alibabacloud/services/ram/ram_password_policy_minimum_length/ram_password_policy_minimum_length.py +30 -0
  132. prowler/providers/alibabacloud/services/ram/ram_password_policy_number/__init__.py +0 -0
  133. prowler/providers/alibabacloud/services/ram/ram_password_policy_number/ram_password_policy_number.metadata.json +39 -0
  134. prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/__init__.py +0 -0
  135. prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/ram_password_policy_password_reuse_prevention.metadata.json +39 -0
  136. prowler/providers/alibabacloud/services/ram/ram_password_policy_password_reuse_prevention/ram_password_policy_password_reuse_prevention.py +35 -0
  137. prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/__init__.py +0 -0
  138. prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/ram_password_policy_symbol.metadata.json +39 -0
  139. prowler/providers/alibabacloud/services/ram/ram_password_policy_symbol/ram_password_policy_symbol.py +34 -0
  140. prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/__init__.py +0 -0
  141. prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/ram_password_policy_uppercase.metadata.json +39 -0
  142. prowler/providers/alibabacloud/services/ram/ram_password_policy_uppercase/ram_password_policy_uppercase.py +32 -0
  143. prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/__init__.py +0 -0
  144. prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/ram_policy_attached_only_to_group_or_roles.metadata.json +39 -0
  145. prowler/providers/alibabacloud/services/ram/ram_policy_attached_only_to_group_or_roles/ram_policy_attached_only_to_group_or_roles.py +35 -0
  146. prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/__init__.py +0 -0
  147. prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/ram_policy_no_administrative_privileges.metadata.json +39 -0
  148. prowler/providers/alibabacloud/services/ram/ram_policy_no_administrative_privileges/ram_policy_no_administrative_privileges.py +73 -0
  149. prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/__init__.py +0 -0
  150. prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/ram_rotate_access_key_90_days.metadata.json +39 -0
  151. prowler/providers/alibabacloud/services/ram/ram_rotate_access_key_90_days/ram_rotate_access_key_90_days.py +58 -0
  152. prowler/providers/alibabacloud/services/ram/ram_service.py +478 -0
  153. prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/__init__.py +0 -0
  154. prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/ram_user_console_access_unused.metadata.json +39 -0
  155. prowler/providers/alibabacloud/services/ram/ram_user_console_access_unused/ram_user_console_access_unused.py +56 -0
  156. prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/__init__.py +0 -0
  157. prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/ram_user_mfa_enabled_console_access.metadata.json +39 -0
  158. prowler/providers/alibabacloud/services/ram/ram_user_mfa_enabled_console_access/ram_user_mfa_enabled_console_access.py +36 -0
  159. prowler/providers/alibabacloud/services/rds/__init__.py +0 -0
  160. prowler/providers/alibabacloud/services/rds/rds_client.py +4 -0
  161. prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/__init__.py +0 -0
  162. prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/rds_instance_no_public_access_whitelist.metadata.json +39 -0
  163. prowler/providers/alibabacloud/services/rds/rds_instance_no_public_access_whitelist/rds_instance_no_public_access_whitelist.py +36 -0
  164. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/__init__.py +0 -0
  165. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/rds_instance_postgresql_log_connections_enabled.metadata.json +39 -0
  166. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_connections_enabled/rds_instance_postgresql_log_connections_enabled.py +29 -0
  167. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/__init__.py +0 -0
  168. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/rds_instance_postgresql_log_disconnections_enabled.metadata.json +39 -0
  169. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_disconnections_enabled/rds_instance_postgresql_log_disconnections_enabled.py +29 -0
  170. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/__init__.py +0 -0
  171. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/rds_instance_postgresql_log_duration_enabled.metadata.json +38 -0
  172. prowler/providers/alibabacloud/services/rds/rds_instance_postgresql_log_duration_enabled/rds_instance_postgresql_log_duration_enabled.py +29 -0
  173. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/__init__.py +0 -0
  174. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/rds_instance_sql_audit_enabled.metadata.json +39 -0
  175. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_enabled/rds_instance_sql_audit_enabled.py +32 -0
  176. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/__init__.py +0 -0
  177. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/rds_instance_sql_audit_retention.metadata.json +39 -0
  178. prowler/providers/alibabacloud/services/rds/rds_instance_sql_audit_retention/rds_instance_sql_audit_retention.py +41 -0
  179. prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/__init__.py +0 -0
  180. prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/rds_instance_ssl_enabled.metadata.json +39 -0
  181. prowler/providers/alibabacloud/services/rds/rds_instance_ssl_enabled/rds_instance_ssl_enabled.py +30 -0
  182. prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/__init__.py +0 -0
  183. prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/rds_instance_tde_enabled.metadata.json +39 -0
  184. prowler/providers/alibabacloud/services/rds/rds_instance_tde_enabled/rds_instance_tde_enabled.py +32 -0
  185. prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/__init__.py +0 -0
  186. prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/rds_instance_tde_key_custom.metadata.json +39 -0
  187. prowler/providers/alibabacloud/services/rds/rds_instance_tde_key_custom/rds_instance_tde_key_custom.py +38 -0
  188. prowler/providers/alibabacloud/services/rds/rds_service.py +274 -0
  189. prowler/providers/alibabacloud/services/securitycenter/__init__.py +0 -0
  190. prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/__init__.py +0 -0
  191. prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/securitycenter_advanced_or_enterprise_edition.metadata.json +43 -0
  192. prowler/providers/alibabacloud/services/securitycenter/securitycenter_advanced_or_enterprise_edition/securitycenter_advanced_or_enterprise_edition.py +48 -0
  193. prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/__init__.py +0 -0
  194. prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/securitycenter_all_assets_agent_installed.metadata.json +42 -0
  195. prowler/providers/alibabacloud/services/securitycenter/securitycenter_all_assets_agent_installed/securitycenter_all_assets_agent_installed.py +48 -0
  196. prowler/providers/alibabacloud/services/securitycenter/securitycenter_client.py +6 -0
  197. prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/__init__.py +0 -0
  198. prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/securitycenter_notification_enabled_high_risk.metadata.json +42 -0
  199. prowler/providers/alibabacloud/services/securitycenter/securitycenter_notification_enabled_high_risk/securitycenter_notification_enabled_high_risk.py +65 -0
  200. prowler/providers/alibabacloud/services/securitycenter/securitycenter_service.py +394 -0
  201. prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/__init__.py +0 -0
  202. prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/securitycenter_vulnerability_scan_enabled.metadata.json +39 -0
  203. prowler/providers/alibabacloud/services/securitycenter/securitycenter_vulnerability_scan_enabled/securitycenter_vulnerability_scan_enabled.py +68 -0
  204. prowler/providers/alibabacloud/services/sls/__init__.py +0 -0
  205. prowler/providers/alibabacloud/services/sls/sls_client.py +4 -0
  206. prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/__init__.py +0 -0
  207. prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/sls_cloud_firewall_changes_alert_enabled.metadata.json +39 -0
  208. prowler/providers/alibabacloud/services/sls/sls_cloud_firewall_changes_alert_enabled/sls_cloud_firewall_changes_alert_enabled.py +50 -0
  209. prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/__init__.py +0 -0
  210. prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/sls_customer_created_cmk_changes_alert_enabled.metadata.json +39 -0
  211. prowler/providers/alibabacloud/services/sls/sls_customer_created_cmk_changes_alert_enabled/sls_customer_created_cmk_changes_alert_enabled.py +48 -0
  212. prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/__init__.py +0 -0
  213. prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/sls_logstore_retention_period.metadata.json +38 -0
  214. prowler/providers/alibabacloud/services/sls/sls_logstore_retention_period/sls_logstore_retention_period.py +32 -0
  215. prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/__init__.py +0 -0
  216. prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/sls_management_console_authentication_failures_alert_enabled.metadata.json +39 -0
  217. prowler/providers/alibabacloud/services/sls/sls_management_console_authentication_failures_alert_enabled/sls_management_console_authentication_failures_alert_enabled.py +44 -0
  218. prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/__init__.py +0 -0
  219. prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/sls_management_console_signin_without_mfa_alert_enabled.metadata.json +39 -0
  220. prowler/providers/alibabacloud/services/sls/sls_management_console_signin_without_mfa_alert_enabled/sls_management_console_signin_without_mfa_alert_enabled.py +49 -0
  221. prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/__init__.py +0 -0
  222. prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/sls_oss_bucket_policy_changes_alert_enabled.metadata.json +39 -0
  223. prowler/providers/alibabacloud/services/sls/sls_oss_bucket_policy_changes_alert_enabled/sls_oss_bucket_policy_changes_alert_enabled.py +57 -0
  224. prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/__init__.py +0 -0
  225. prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/sls_oss_permission_changes_alert_enabled.metadata.json +39 -0
  226. prowler/providers/alibabacloud/services/sls/sls_oss_permission_changes_alert_enabled/sls_oss_permission_changes_alert_enabled.py +48 -0
  227. prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/__init__.py +0 -0
  228. prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/sls_ram_role_changes_alert_enabled.metadata.json +39 -0
  229. prowler/providers/alibabacloud/services/sls/sls_ram_role_changes_alert_enabled/sls_ram_role_changes_alert_enabled.py +54 -0
  230. prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/__init__.py +0 -0
  231. prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/sls_rds_instance_configuration_changes_alert_enabled.metadata.json +39 -0
  232. prowler/providers/alibabacloud/services/sls/sls_rds_instance_configuration_changes_alert_enabled/sls_rds_instance_configuration_changes_alert_enabled.py +72 -0
  233. prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/__init__.py +0 -0
  234. prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/sls_root_account_usage_alert_enabled.metadata.json +39 -0
  235. prowler/providers/alibabacloud/services/sls/sls_root_account_usage_alert_enabled/sls_root_account_usage_alert_enabled.py +50 -0
  236. prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/__init__.py +0 -0
  237. prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/sls_security_group_changes_alert_enabled.metadata.json +39 -0
  238. prowler/providers/alibabacloud/services/sls/sls_security_group_changes_alert_enabled/sls_security_group_changes_alert_enabled.py +56 -0
  239. prowler/providers/alibabacloud/services/sls/sls_service.py +137 -0
  240. prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/__init__.py +0 -0
  241. prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/sls_unauthorized_api_calls_alert_enabled.metadata.json +39 -0
  242. prowler/providers/alibabacloud/services/sls/sls_unauthorized_api_calls_alert_enabled/sls_unauthorized_api_calls_alert_enabled.py +56 -0
  243. prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/__init__.py +0 -0
  244. prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/sls_vpc_changes_alert_enabled.metadata.json +39 -0
  245. prowler/providers/alibabacloud/services/sls/sls_vpc_changes_alert_enabled/sls_vpc_changes_alert_enabled.py +57 -0
  246. prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/__init__.py +0 -0
  247. prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/sls_vpc_network_route_changes_alert_enabled.metadata.json +39 -0
  248. prowler/providers/alibabacloud/services/sls/sls_vpc_network_route_changes_alert_enabled/sls_vpc_network_route_changes_alert_enabled.py +52 -0
  249. prowler/providers/alibabacloud/services/vpc/__init__.py +0 -0
  250. prowler/providers/alibabacloud/services/vpc/vpc_client.py +4 -0
  251. prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/__init__.py +0 -0
  252. prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.metadata.json +39 -0
  253. prowler/providers/alibabacloud/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py +30 -0
  254. prowler/providers/alibabacloud/services/vpc/vpc_service.py +102 -0
  255. prowler/providers/aws/aws_regions_by_service.json +20 -0
  256. prowler/providers/aws/services/apigateway/apigateway_restapi_waf_acl_attached/apigateway_restapi_waf_acl_attached.metadata.json +1 -3
  257. prowler/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist.metadata.json +1 -1
  258. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.metadata.json +1 -2
  259. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.metadata.json +1 -2
  260. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json +1 -2
  261. prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.metadata.json +1 -2
  262. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled.metadata.json +1 -2
  263. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled.metadata.json +1 -2
  264. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.metadata.json +1 -2
  265. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.metadata.json +1 -2
  266. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes.metadata.json +1 -2
  267. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.metadata.json +1 -2
  268. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.metadata.json +1 -2
  269. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.metadata.json +1 -2
  270. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.metadata.json +1 -2
  271. prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.metadata.json +0 -1
  272. prowler/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed.metadata.json +16 -10
  273. prowler/providers/aws/services/guardduty/guardduty_ec2_malware_protection_enabled/guardduty_ec2_malware_protection_enabled.metadata.json +23 -14
  274. prowler/providers/aws/services/guardduty/guardduty_eks_audit_log_enabled/guardduty_eks_audit_log_enabled.metadata.json +19 -13
  275. prowler/providers/aws/services/guardduty/guardduty_eks_runtime_monitoring_enabled/guardduty_eks_runtime_monitoring_enabled.metadata.json +18 -12
  276. prowler/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled.metadata.json +24 -13
  277. prowler/providers/aws/services/guardduty/guardduty_lambda_protection_enabled/guardduty_lambda_protection_enabled.metadata.json +20 -14
  278. prowler/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings.metadata.json +18 -9
  279. prowler/providers/aws/services/guardduty/guardduty_rds_protection_enabled/guardduty_rds_protection_enabled.metadata.json +18 -11
  280. prowler/providers/aws/services/guardduty/guardduty_s3_protection_enabled/guardduty_s3_protection_enabled.metadata.json +21 -12
  281. prowler/providers/aws/services/lightsail/lightsail_database_public/lightsail_database_public.metadata.json +21 -13
  282. prowler/providers/aws/services/lightsail/lightsail_instance_automated_snapshots/lightsail_instance_automated_snapshots.metadata.json +24 -13
  283. prowler/providers/aws/services/lightsail/lightsail_instance_public/lightsail_instance_public.metadata.json +21 -13
  284. prowler/providers/aws/services/lightsail/lightsail_static_ip_unused/lightsail_static_ip_unused.metadata.json +23 -14
  285. prowler/providers/aws/services/macie/macie_automated_sensitive_data_discovery_enabled/macie_automated_sensitive_data_discovery_enabled.metadata.json +20 -12
  286. prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.metadata.json +17 -12
  287. prowler/providers/aws/services/mq/mq_broker_active_deployment_mode/mq_broker_active_deployment_mode.metadata.json +22 -13
  288. prowler/providers/aws/services/mq/mq_broker_auto_minor_version_upgrades/mq_broker_auto_minor_version_upgrades.metadata.json +21 -12
  289. prowler/providers/aws/services/mq/mq_broker_cluster_deployment_mode/mq_broker_cluster_deployment_mode.metadata.json +23 -14
  290. prowler/providers/aws/services/mq/mq_broker_logging_enabled/mq_broker_logging_enabled.metadata.json +22 -13
  291. prowler/providers/aws/services/mq/mq_broker_not_publicly_accessible/mq_broker_not_publicly_accessible.metadata.json +20 -12
  292. prowler/providers/aws/services/networkfirewall/networkfirewall_deletion_protection/networkfirewall_deletion_protection.metadata.json +21 -13
  293. prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.metadata.json +23 -13
  294. prowler/providers/aws/services/networkfirewall/networkfirewall_logging_enabled/networkfirewall_logging_enabled.metadata.json +20 -13
  295. prowler/providers/aws/services/networkfirewall/networkfirewall_multi_az/networkfirewall_multi_az.metadata.json +22 -14
  296. prowler/providers/aws/services/networkfirewall/networkfirewall_policy_default_action_fragmented_packets/networkfirewall_policy_default_action_fragmented_packets.metadata.json +26 -14
  297. prowler/providers/aws/services/networkfirewall/networkfirewall_policy_default_action_full_packets/networkfirewall_policy_default_action_full_packets.metadata.json +22 -13
  298. prowler/providers/aws/services/networkfirewall/networkfirewall_policy_rule_group_associated/networkfirewall_policy_rule_group_associated.metadata.json +25 -14
  299. prowler/providers/common/provider.py +12 -0
  300. prowler/providers/gcp/services/accesscontextmanager/__init__.py +0 -0
  301. prowler/providers/gcp/services/accesscontextmanager/accesscontextmanager_client.py +6 -0
  302. prowler/providers/gcp/services/accesscontextmanager/accesscontextmanager_service.py +101 -0
  303. prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py +10 -0
  304. prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +13 -0
  305. prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/__init__.py +0 -0
  306. prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/cloudstorage_uses_vpc_service_controls.metadata.json +36 -0
  307. prowler/providers/gcp/services/cloudstorage/cloudstorage_uses_vpc_service_controls/cloudstorage_uses_vpc_service_controls.py +67 -0
  308. prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/__init__.py +0 -0
  309. prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/compute_instance_automatic_restart_enabled.metadata.json +36 -0
  310. prowler/providers/gcp/services/compute/compute_instance_automatic_restart_enabled/compute_instance_automatic_restart_enabled.py +35 -0
  311. prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/__init__.py +0 -0
  312. prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/compute_instance_deletion_protection_enabled.metadata.json +36 -0
  313. prowler/providers/gcp/services/compute/compute_instance_deletion_protection_enabled/compute_instance_deletion_protection_enabled.py +29 -0
  314. prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/__init__.py +0 -0
  315. prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/compute_instance_preemptible_vm_disabled.metadata.json +37 -0
  316. prowler/providers/gcp/services/compute/compute_instance_preemptible_vm_disabled/compute_instance_preemptible_vm_disabled.py +32 -0
  317. prowler/providers/gcp/services/compute/compute_service.py +16 -0
  318. prowler/providers/github/services/repository/repository_immutable_releases_enabled/__init__.py +0 -0
  319. prowler/providers/github/services/repository/repository_immutable_releases_enabled/repository_immutable_releases_enabled.metadata.json +33 -0
  320. prowler/providers/github/services/repository/repository_immutable_releases_enabled/repository_immutable_releases_enabled.py +41 -0
  321. prowler/providers/github/services/repository/repository_service.py +52 -0
  322. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/METADATA +40 -22
  323. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/RECORD +326 -73
  324. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/LICENSE +0 -0
  325. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/WHEEL +0 -0
  326. {prowler_cloud-5.14.1.dist-info → prowler_cloud-5.15.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,39 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "rds_instance_tde_key_custom",
4
+ "CheckTitle": "RDS instance TDE protector is encrypted with BYOK (Use your own key)",
5
+ "CheckType": [
6
+ "Sensitive file tampering",
7
+ "Intrusion into applications"
8
+ ],
9
+ "ServiceName": "rds",
10
+ "SubServiceName": "",
11
+ "ResourceIdTemplate": "acs:rds:region:account-id:dbinstance/{dbinstance-id}",
12
+ "Severity": "medium",
13
+ "ResourceType": "AlibabaCloudRDSDBInstance",
14
+ "Description": "**TDE with BYOK** support provides increased transparency and control, increased security with an HSM-backed KMS service, and promotion of separation of duties.\n\nBased on business needs or criticality of data, it is recommended that the TDE protector is encrypted by a key that is managed by the data owner (**BYOK**).",
15
+ "Risk": "Using **service-managed keys** means the cloud provider manages the encryption keys. **BYOK (Bring Your Own Key)** gives you full control over the key lifecycle and permissions.\n\nThis ensures that even the cloud provider cannot access your data without your explicit permission.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://www.alibabacloud.com/help/doc-detail/96121.html",
19
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-RDS/enable-tde-with-cmk.html"
20
+ ],
21
+ "Remediation": {
22
+ "Code": {
23
+ "CLI": "aliyun rds ModifyDBInstanceTDE --DBInstanceId <instance_id> --TDEStatus Enabled --EncryptionKey <kms_key_id>",
24
+ "NativeIaC": "",
25
+ "Other": "",
26
+ "Terraform": "resource \"alicloud_db_instance\" \"example\" {\n engine = \"MySQL\"\n engine_version = \"8.0\"\n instance_type = \"rds.mysql.s1.small\"\n instance_storage = 20\n tde_status = \"Enabled\"\n encryption_key = alicloud_kms_key.example.id\n}"
27
+ },
28
+ "Recommendation": {
29
+ "Text": "1. Log on to the **RDS Console**\n2. Go to **Data Security** > **TDE** tab\n3. Click the switch next to **Disabled**\n4. In the displayed dialog box, choose **custom key**\n5. Click **Confirm**",
30
+ "Url": "https://hub.prowler.com/check/rds_instance_tde_key_custom"
31
+ }
32
+ },
33
+ "Categories": [
34
+ "encryption"
35
+ ],
36
+ "DependsOn": [],
37
+ "RelatedTo": [],
38
+ "Notes": ""
39
+ }
@@ -0,0 +1,38 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.rds.rds_client import rds_client
3
+
4
+
5
+ class rds_instance_tde_key_custom(Check):
6
+ """Check if RDS instance TDE protector is encrypted with BYOK."""
7
+
8
+ def execute(self) -> list[CheckReportAlibabaCloud]:
9
+ findings = []
10
+
11
+ for instance in rds_client.instances:
12
+ report = CheckReportAlibabaCloud(
13
+ metadata=self.metadata(), resource=instance
14
+ )
15
+ report.region = instance.region
16
+ report.resource_id = instance.id
17
+ report.resource_arn = f"acs:rds:{instance.region}:{rds_client.audited_account}:dbinstance/{instance.id}"
18
+
19
+ # TDE must be enabled AND key must be custom (not service managed)
20
+ # Note: The API response for TDEKeyId usually indicates if it's a custom KMS key
21
+ # If it's a UUID-like string, it's likely a KMS key. If it's "ServiceManaged" or similar, it's not.
22
+ # For Alibaba Cloud, typically if you supply a KeyId it's BYOK.
23
+
24
+ if instance.tde_status == "Enabled" and instance.tde_key_id:
25
+ report.status = "PASS"
26
+ report.status_extended = f"RDS Instance {instance.name} has TDE enabled with custom key {instance.tde_key_id}."
27
+ elif instance.tde_status == "Enabled":
28
+ report.status = "FAIL"
29
+ report.status_extended = f"RDS Instance {instance.name} has TDE enabled but uses service-managed key."
30
+ else:
31
+ report.status = "FAIL"
32
+ report.status_extended = (
33
+ f"RDS Instance {instance.name} does not have TDE enabled."
34
+ )
35
+
36
+ findings.append(report)
37
+
38
+ return findings
@@ -0,0 +1,274 @@
1
+ from alibabacloud_rds20140815 import models as rds_models
2
+ from pydantic.v1 import BaseModel
3
+
4
+ from prowler.lib.logger import logger
5
+ from prowler.lib.scan_filters.scan_filters import is_resource_filtered
6
+ from prowler.providers.alibabacloud.lib.service.service import AlibabaCloudService
7
+
8
+
9
+ class RDS(AlibabaCloudService):
10
+ """
11
+ RDS (Relational Database Service) class for Alibaba Cloud.
12
+
13
+ This class provides methods to interact with Alibaba Cloud RDS service
14
+ to retrieve DB instances and their configurations.
15
+ """
16
+
17
+ def __init__(self, provider):
18
+ # Call AlibabaCloudService's __init__
19
+ super().__init__(__class__.__name__, provider, global_service=False)
20
+
21
+ # Fetch RDS resources
22
+ self.instances = []
23
+ self.__threading_call__(self._describe_instances)
24
+
25
+ def _describe_instances(self, regional_client):
26
+ """List all RDS instances and fetch their details in a specific region."""
27
+ region = getattr(regional_client, "region", "unknown")
28
+ logger.info(f"RDS - Describing instances in {region}...")
29
+
30
+ try:
31
+ # DescribeDBInstances returns instance list
32
+ request = rds_models.DescribeDBInstancesRequest()
33
+ response = regional_client.describe_dbinstances(request)
34
+
35
+ if response and response.body and response.body.items:
36
+ for instance_data in response.body.items.dbinstance:
37
+ instance_id = getattr(instance_data, "dbinstance_id", "")
38
+
39
+ if not self.audit_resources or is_resource_filtered(
40
+ instance_id, self.audit_resources
41
+ ):
42
+
43
+ # Get additional information for specific checks
44
+ attribute_info = self._describe_db_instance_attribute(
45
+ regional_client, instance_id
46
+ )
47
+
48
+ # Check if SSL is enabled
49
+ ssl_status = self._describe_db_instance_ssl(
50
+ regional_client, instance_id
51
+ )
52
+
53
+ # Check TDE status
54
+ tde_status = self._describe_db_instance_tde(
55
+ regional_client, instance_id
56
+ )
57
+
58
+ # Check whitelist/security IPs
59
+ security_ips = self._describe_db_instance_ip_array(
60
+ regional_client, instance_id
61
+ )
62
+
63
+ # Check SQL audit status (SQL Explorer)
64
+ audit_status = self._describe_sql_collector_policy(
65
+ regional_client, instance_id
66
+ )
67
+
68
+ # Check parameters (log_connections, log_disconnections, log_duration)
69
+ parameters = self._describe_parameters(
70
+ regional_client, instance_id
71
+ )
72
+
73
+ self.instances.append(
74
+ DBInstance(
75
+ id=instance_id,
76
+ name=getattr(
77
+ instance_data, "dbinstance_description", instance_id
78
+ ),
79
+ region=region,
80
+ engine=getattr(instance_data, "engine", ""),
81
+ engine_version=getattr(
82
+ instance_data, "engine_version", ""
83
+ ),
84
+ status=getattr(instance_data, "dbinstance_status", ""),
85
+ type=getattr(instance_data, "dbinstance_type", ""),
86
+ net_type=getattr(
87
+ instance_data, "dbinstance_net_type", ""
88
+ ),
89
+ connection_mode=getattr(
90
+ instance_data, "connection_mode", ""
91
+ ),
92
+ public_connection_string=attribute_info.get(
93
+ "ConnectionString", ""
94
+ ),
95
+ ssl_enabled=ssl_status.get("SSLEnabled", False),
96
+ tde_status=tde_status.get("TDEStatus", "Disabled"),
97
+ tde_key_id=tde_status.get("TDEKeyId", ""),
98
+ security_ips=security_ips,
99
+ audit_log_enabled=audit_status.get("StoragePeriod")
100
+ is not None,
101
+ audit_log_retention=audit_status.get(
102
+ "StoragePeriod", 0
103
+ ),
104
+ log_connections=parameters.get(
105
+ "log_connections", "off"
106
+ ),
107
+ log_disconnections=parameters.get(
108
+ "log_disconnections", "off"
109
+ ),
110
+ log_duration=parameters.get("log_duration", "off"),
111
+ )
112
+ )
113
+
114
+ except Exception as error:
115
+ logger.error(
116
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
117
+ )
118
+
119
+ def _describe_db_instance_attribute(
120
+ self, regional_client, instance_id: str
121
+ ) -> dict:
122
+ """Get DB instance attributes including connection string."""
123
+ try:
124
+ request = rds_models.DescribeDBInstanceAttributeRequest()
125
+ request.dbinstance_id = instance_id
126
+ response = regional_client.describe_dbinstance_attribute(request)
127
+
128
+ if (
129
+ response
130
+ and response.body
131
+ and response.body.items
132
+ and response.body.items.dbinstance_attribute
133
+ ):
134
+ # The response is a list, usually with one item
135
+ attrs = response.body.items.dbinstance_attribute[0]
136
+ return {"ConnectionString": getattr(attrs, "connection_string", "")}
137
+ return {}
138
+ except Exception as error:
139
+ logger.error(
140
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
141
+ )
142
+ return {}
143
+
144
+ def _describe_db_instance_ssl(self, regional_client, instance_id: str) -> dict:
145
+ """Check if SSL is enabled."""
146
+ try:
147
+ request = rds_models.DescribeDBInstanceSSLRequest()
148
+ request.dbinstance_id = instance_id
149
+ response = regional_client.describe_dbinstance_ssl(request)
150
+
151
+ if response and response.body:
152
+ # response.body is a DescribeDBInstanceSSLResponseBody model object, use getattr
153
+ ssl_enabled = getattr(response.body, "sslenabled", "No")
154
+ force_encryption = getattr(response.body, "force_encryption", "0")
155
+
156
+ # SSL is enabled if SSLEnabled is "Yes" or ForceEncryption is "1"
157
+ ssl_status = ssl_enabled == "Yes" or force_encryption == "1"
158
+ return {"SSLEnabled": ssl_status}
159
+ return {"SSLEnabled": False}
160
+ except Exception as error:
161
+ logger.error(
162
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
163
+ )
164
+ # Some instance types might not support SSL query
165
+ return {"SSLEnabled": False}
166
+
167
+ def _describe_db_instance_tde(self, regional_client, instance_id: str) -> dict:
168
+ """Check TDE status."""
169
+ try:
170
+ request = rds_models.DescribeDBInstanceTDERequest()
171
+ request.dbinstance_id = instance_id
172
+ response = regional_client.describe_dbinstance_tde(request)
173
+
174
+ if response and response.body:
175
+ return {
176
+ "TDEStatus": getattr(response.body, "tdestatus", "Disabled"),
177
+ }
178
+ return {"TDEStatus": "Disabled"}
179
+ except Exception as error:
180
+ logger.error(
181
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
182
+ )
183
+ return {"TDEStatus": "Disabled"}
184
+
185
+ def _describe_db_instance_ip_array(self, regional_client, instance_id: str) -> list:
186
+ """Get whitelist IP arrays."""
187
+ try:
188
+ request = rds_models.DescribeDBInstanceIPArrayListRequest()
189
+ request.dbinstance_id = instance_id
190
+ response = regional_client.describe_dbinstance_iparray_list(request)
191
+
192
+ ips = []
193
+ if response and response.body and response.body.items:
194
+ for item in response.body.items.dbinstance_iparray:
195
+ security_ips = getattr(item, "security_ips", "")
196
+ if security_ips:
197
+ ips.extend(security_ips.split(","))
198
+ return ips
199
+ except Exception as error:
200
+ logger.error(
201
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
202
+ )
203
+ return []
204
+
205
+ def _describe_sql_collector_policy(self, regional_client, instance_id: str) -> dict:
206
+ """Check SQL audit status."""
207
+ try:
208
+ request = rds_models.DescribeSQLLogRecordsRequest()
209
+ request.dbinstance_id = instance_id
210
+
211
+ policy_request = rds_models.DescribeSQLCollectorPolicyRequest()
212
+ policy_request.dbinstance_id = instance_id
213
+ response = regional_client.describe_sqlcollector_policy(policy_request)
214
+
215
+ if response and response.body:
216
+ status = getattr(response.body, "sqlcollector_status", "")
217
+ # storage_period is in days
218
+ storage_period = getattr(response.body, "storage_period", 0)
219
+
220
+ if status == "Enable":
221
+ return {"StoragePeriod": storage_period}
222
+
223
+ return {}
224
+ except Exception as error:
225
+ logger.error(
226
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
227
+ )
228
+ return {}
229
+
230
+ def _describe_parameters(self, regional_client, instance_id: str) -> dict:
231
+ """Get instance parameters."""
232
+ try:
233
+ request = rds_models.DescribeParametersRequest()
234
+ request.dbinstance_id = instance_id
235
+ response = regional_client.describe_parameters(request)
236
+
237
+ params = {}
238
+ if response and response.body and response.body.running_parameters:
239
+ for param in response.body.running_parameters.dbinstance_parameter:
240
+ key = getattr(param, "parameter_name", "")
241
+ value = getattr(param, "parameter_value", "")
242
+ if key in ["log_connections", "log_disconnections", "log_duration"]:
243
+ params[key] = value.lower()
244
+
245
+ return params
246
+ except Exception as error:
247
+ logger.error(
248
+ f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
249
+ )
250
+ return {}
251
+
252
+
253
+ class DBInstance(BaseModel):
254
+ """RDS DB Instance model."""
255
+
256
+ id: str
257
+ name: str
258
+ region: str
259
+ engine: str
260
+ engine_version: str
261
+ status: str
262
+ type: str
263
+ net_type: str
264
+ connection_mode: str
265
+ public_connection_string: str
266
+ ssl_enabled: bool
267
+ tde_status: str
268
+ tde_key_id: str
269
+ security_ips: list
270
+ audit_log_enabled: bool
271
+ audit_log_retention: int # in days
272
+ log_connections: str
273
+ log_disconnections: str
274
+ log_duration: str
@@ -0,0 +1,43 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "securitycenter_advanced_or_enterprise_edition",
4
+ "CheckTitle": "Security Center is Advanced or Enterprise Edition",
5
+ "CheckType": [
6
+ "Suspicious process",
7
+ "Webshell",
8
+ "Unusual logon",
9
+ "Sensitive file tampering",
10
+ "Malicious software",
11
+ "Precision defense"
12
+ ],
13
+ "ServiceName": "securitycenter",
14
+ "SubServiceName": "",
15
+ "ResourceIdTemplate": "acs:sas::account-id:security-center",
16
+ "Severity": "medium",
17
+ "ResourceType": "AlibabaCloudSecurityCenter",
18
+ "Description": "The **Advanced or Enterprise Edition** enables threat detection for network and endpoints, providing **malware detection**, **webshell detection**, and **anomaly detection** in Security Center.",
19
+ "Risk": "Using **Basic or Free Edition** of Security Center may not provide comprehensive protection against cloud threats.\n\n**Advanced or Enterprise Edition** allows for full protection to defend against cloud threats.",
20
+ "RelatedUrl": "",
21
+ "AdditionalURLs": [
22
+ "https://www.alibabacloud.com/help/product/28498.htm",
23
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-SecurityCenter/security-center-plan.html"
24
+ ],
25
+ "Remediation": {
26
+ "Code": {
27
+ "CLI": "Logon to Security Center Console > Select Overview > Click Upgrade > Select Advanced or Enterprise Edition > Finish order placement",
28
+ "NativeIaC": "",
29
+ "Other": "",
30
+ "Terraform": ""
31
+ },
32
+ "Recommendation": {
33
+ "Text": "1. Log on to the **Security Center Console**\n2. Select **Overview**\n3. Click **Upgrade**\n4. Select **Advanced** or **Enterprise Edition**\n5. Finish order placement",
34
+ "Url": "https://hub.prowler.com/check/securitycenter_advanced_or_enterprise_edition"
35
+ }
36
+ },
37
+ "Categories": [
38
+ "forensics-ready"
39
+ ],
40
+ "DependsOn": [],
41
+ "RelatedTo": [],
42
+ "Notes": ""
43
+ }
@@ -0,0 +1,48 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.securitycenter.securitycenter_client import (
3
+ securitycenter_client,
4
+ )
5
+
6
+
7
+ class securitycenter_advanced_or_enterprise_edition(Check):
8
+ """Check if Security Center is Advanced or Enterprise Edition."""
9
+
10
+ def execute(self) -> list[CheckReportAlibabaCloud]:
11
+ findings = []
12
+
13
+ report = CheckReportAlibabaCloud(metadata=self.metadata(), resource={})
14
+ report.region = securitycenter_client.region
15
+ report.resource_id = securitycenter_client.audited_account
16
+ report.resource_arn = (
17
+ f"acs:sas::{securitycenter_client.audited_account}:security-center"
18
+ )
19
+
20
+ version = securitycenter_client.version
21
+ edition = securitycenter_client.edition
22
+
23
+ if version is None or edition == "Unknown":
24
+ report.status = "MANUAL"
25
+ report.status_extended = (
26
+ "Security Center edition could not be determined. "
27
+ "Please check Security Center Console manually."
28
+ )
29
+ else:
30
+ # Check if version is 3 (Enterprise) or 5 (Advanced)
31
+ # Version mapping: 1=Basic, 3=Enterprise, 5=Advanced, 6=Anti-virus, 7=Ultimate, 8=Multi-Version, 10=Value-added Plan
32
+ if version == 3 or version == 5:
33
+ report.status = "PASS"
34
+ report.status_extended = (
35
+ f"Security Center is {edition} edition (Version {version}), which provides "
36
+ "threat detection for network and endpoints, malware detection, "
37
+ "webshell detection and anomaly detection."
38
+ )
39
+ else:
40
+ report.status = "FAIL"
41
+ report.status_extended = (
42
+ f"Security Center is {edition} edition (Version {version}). "
43
+ "It is recommended to use Advanced Edition (Version 5) or Enterprise Edition (Version 3) "
44
+ "for full protection to defend cloud threats."
45
+ )
46
+
47
+ findings.append(report)
48
+ return findings
@@ -0,0 +1,42 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "securitycenter_all_assets_agent_installed",
4
+ "CheckTitle": "All assets are installed with security agent",
5
+ "CheckType": [
6
+ "Suspicious process",
7
+ "Webshell",
8
+ "Unusual logon",
9
+ "Sensitive file tampering",
10
+ "Malicious software"
11
+ ],
12
+ "ServiceName": "securitycenter",
13
+ "SubServiceName": "",
14
+ "ResourceIdTemplate": "acs:sas:region:account-id:machine/{machine-id}",
15
+ "Severity": "high",
16
+ "ResourceType": "AlibabaCloudSecurityCenterMachine",
17
+ "Description": "The endpoint protection of **Security Center** requires an agent to be installed on the endpoint to work. Such an agent-based approach allows the security center to provide comprehensive endpoint intrusion detection and protection capabilities.\n\nThis includes remote logon detection, **webshell detection** and removal, **anomaly detection** (detection of abnormal process behaviors and network connections), and detection of changes in key files and suspicious accounts.",
18
+ "Risk": "Assets without **Security Center agent** installed are not protected by endpoint intrusion detection and protection capabilities, leaving them vulnerable to security threats.\n\nUnprotected assets become blind spots in your security monitoring.",
19
+ "RelatedUrl": "",
20
+ "AdditionalURLs": [
21
+ "https://www.alibabacloud.com/help/doc-detail/111650.htm",
22
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-SecurityCenter/install-security-agent.html"
23
+ ],
24
+ "Remediation": {
25
+ "Code": {
26
+ "CLI": "aliyun sas InstallUninstallAegis --InstanceIds <instance_id_1>,<instance_id_2>",
27
+ "NativeIaC": "",
28
+ "Other": "",
29
+ "Terraform": ""
30
+ },
31
+ "Recommendation": {
32
+ "Text": "1. Log on to the **Security Center Console**\n2. Select **Settings**\n3. Click **Agent**\n4. On the `Client to be installed` tab, select all items on the list\n5. Click **One-click installation** to install the agent on all assets",
33
+ "Url": "https://hub.prowler.com/check/securitycenter_all_assets_agent_installed"
34
+ }
35
+ },
36
+ "Categories": [
37
+ "forensics-ready"
38
+ ],
39
+ "DependsOn": [],
40
+ "RelatedTo": [],
41
+ "Notes": ""
42
+ }
@@ -0,0 +1,48 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.securitycenter.securitycenter_client import (
3
+ securitycenter_client,
4
+ )
5
+
6
+
7
+ class securitycenter_all_assets_agent_installed(Check):
8
+ """Check if all assets are installed with security agent."""
9
+
10
+ def execute(self) -> list[CheckReportAlibabaCloud]:
11
+ findings = []
12
+
13
+ uninstalled_machines = securitycenter_client.uninstalled_machines
14
+
15
+ if not uninstalled_machines:
16
+ # All assets have the agent installed
17
+ report = CheckReportAlibabaCloud(metadata=self.metadata(), resource={})
18
+ report.region = securitycenter_client.region
19
+ report.resource_id = securitycenter_client.audited_account
20
+ report.resource_arn = (
21
+ f"acs:sas::{securitycenter_client.audited_account}:security-center"
22
+ )
23
+ report.status = "PASS"
24
+ report.status_extended = "All assets have Security Center agent installed."
25
+ findings.append(report)
26
+ else:
27
+ # Report each uninstalled machine
28
+ for machine in uninstalled_machines:
29
+ report = CheckReportAlibabaCloud(
30
+ metadata=self.metadata(), resource=machine
31
+ )
32
+ report.region = machine.region
33
+ report.resource_id = machine.instance_id
34
+ report.resource_arn = (
35
+ f"acs:ecs:{machine.region}:{securitycenter_client.audited_account}:instance/{machine.instance_id}"
36
+ if machine.instance_id.startswith("i-")
37
+ or "ecs" in machine.instance_id.lower()
38
+ else f"acs:sas:{machine.region}:{securitycenter_client.audited_account}:machine/{machine.instance_id}"
39
+ )
40
+ report.status = "FAIL"
41
+ report.status_extended = (
42
+ f"Asset {machine.instance_name if machine.instance_name else machine.instance_id} "
43
+ f"({machine.instance_id}) does not have Security Center agent installed. "
44
+ f"Region: {machine.region}, OS: {machine.os if machine.os else 'Unknown'}."
45
+ )
46
+ findings.append(report)
47
+
48
+ return findings
@@ -0,0 +1,6 @@
1
+ from prowler.providers.alibabacloud.services.securitycenter.securitycenter_service import (
2
+ SecurityCenter,
3
+ )
4
+ from prowler.providers.common.provider import Provider
5
+
6
+ securitycenter_client = SecurityCenter(Provider.get_global_provider())
@@ -0,0 +1,42 @@
1
+ {
2
+ "Provider": "alibabacloud",
3
+ "CheckID": "securitycenter_notification_enabled_high_risk",
4
+ "CheckTitle": "Notification is enabled on all high risk items",
5
+ "CheckType": [
6
+ "Suspicious process",
7
+ "Webshell",
8
+ "Unusual logon",
9
+ "Sensitive file tampering",
10
+ "Malicious software"
11
+ ],
12
+ "ServiceName": "securitycenter",
13
+ "SubServiceName": "",
14
+ "ResourceIdTemplate": "acs:sas::account-id:notice-config/{project}",
15
+ "Severity": "medium",
16
+ "ResourceType": "AlibabaCloudSecurityCenterNoticeConfig",
17
+ "Description": "Enable all **risk item notifications** in Vulnerability, Baseline Risks, Alerts, and AccessKey Leak event detection categories.\n\nThis ensures that relevant security operators receive notifications as soon as security events occur.",
18
+ "Risk": "Without **notifications enabled** for high-risk items, security operators may not be aware of critical security events in a timely manner, potentially leading to **delayed response** and **increased security exposure**.",
19
+ "RelatedUrl": "",
20
+ "AdditionalURLs": [
21
+ "https://www.alibabacloud.com/help/doc-detail/111648.htm",
22
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/alibaba-cloud/AlibabaCloud-SecurityCenter/enable-high-risk-item-notifications.html"
23
+ ],
24
+ "Remediation": {
25
+ "Code": {
26
+ "CLI": "aliyun sas ModifyNoticeConfig --Project <project_name> --Route <route_value>",
27
+ "NativeIaC": "",
28
+ "Other": "",
29
+ "Terraform": ""
30
+ },
31
+ "Recommendation": {
32
+ "Text": "1. Log on to the **Security Center Console**\n2. Select **Settings**\n3. Click **Notification**\n4. Enable all high-risk items on Notification setting\n\nRoute values: `1`=text message, `2`=email, `3`=internal message, `4`=text+email, `5`=text+internal, `6`=email+internal, `7`=all methods",
33
+ "Url": "https://hub.prowler.com/check/securitycenter_notification_enabled_high_risk"
34
+ }
35
+ },
36
+ "Categories": [
37
+ "forensics-ready"
38
+ ],
39
+ "DependsOn": [],
40
+ "RelatedTo": [],
41
+ "Notes": ""
42
+ }
@@ -0,0 +1,65 @@
1
+ from prowler.lib.check.models import Check, CheckReportAlibabaCloud
2
+ from prowler.providers.alibabacloud.services.securitycenter.securitycenter_client import (
3
+ securitycenter_client,
4
+ )
5
+
6
+
7
+ class securitycenter_notification_enabled_high_risk(Check):
8
+ """Check if notification is enabled on all high risk items."""
9
+
10
+ def execute(self) -> list[CheckReportAlibabaCloud]:
11
+ findings = []
12
+
13
+ # High-risk categories based on CIS benchmark:
14
+ # - Vulnerability: sas_vulnerability, yundun_sas_vul_Emergency
15
+ # - Baseline Risks: sas_healthcheck
16
+ # - Alerts: sas_suspicious, suspicious, remotelogin, webshell, bruteforcesuccess
17
+ # - Accesskey Leak: yundun_sas_ak_leakage
18
+ high_risk_projects = [
19
+ "sas_vulnerability", # Vulnerability
20
+ "yundun_sas_vul_Emergency", # Emergency vulnerabilities
21
+ "sas_healthcheck", # Baseline Risks
22
+ "sas_suspicious", # Alerts - Suspicious
23
+ "suspicious", # Alerts - Suspicious
24
+ "remotelogin", # Alerts - Remote login
25
+ "webshell", # Alerts - Webshell
26
+ "bruteforcesuccess", # Alerts - Brute force success
27
+ "yundun_sas_ak_leakage", # Accesskey Leak
28
+ ]
29
+
30
+ notice_configs = securitycenter_client.notice_configs
31
+
32
+ # Check each high-risk project
33
+ for project in high_risk_projects:
34
+ config = notice_configs.get(project)
35
+
36
+ report = CheckReportAlibabaCloud(
37
+ metadata=self.metadata(), resource=config if config else {}
38
+ )
39
+ report.region = securitycenter_client.region
40
+ report.resource_id = project
41
+ report.resource_arn = f"acs:sas::{securitycenter_client.audited_account}:notice-config/{project}"
42
+
43
+ if not config:
44
+ # Configuration not found - may not be available or not configured
45
+ report.status = "MANUAL"
46
+ report.status_extended = (
47
+ f"Notification configuration for high-risk item '{project}' "
48
+ "could not be determined. Please check Security Center Console manually."
49
+ )
50
+ elif config.notification_enabled:
51
+ # Route != 0 means notification is enabled
52
+ report.status = "PASS"
53
+ report.status_extended = (
54
+ f"Notification is enabled for high-risk item '{project}'."
55
+ )
56
+ else:
57
+ # Route == 0 means notification is disabled
58
+ report.status = "FAIL"
59
+ report.status_extended = (
60
+ f"Notification is not enabled for high-risk item '{project}'."
61
+ )
62
+
63
+ findings.append(report)
64
+
65
+ return findings