feat(sqlserver): extract SQL Server resource metadata automated (#6562)

This commit is contained in:
Rubén De la Torre Vico
2025-01-16 16:47:21 +01:00
committed by Pepe Fagoaga
parent 074b7c1ff5
commit 23b584f4bf
13 changed files with 36 additions and 49 deletions
@@ -7,13 +7,12 @@ class sqlserver_auditing_enabled(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.status = "PASS"
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has a auditing policy configured."
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.location = sql_server.location
for auditing_policy in sql_server.auditing_policies:
if auditing_policy.state == "Disabled":
report.status = "FAIL"
@@ -7,11 +7,10 @@ class sqlserver_auditing_retention_90_days(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.location = sql_server.location
has_failed = False
has_policy = False
for policy in sql_server.auditing_policies:
@@ -7,13 +7,12 @@ class sqlserver_azuread_administrator_enabled(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.status = "PASS"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has an Active Directory administrator."
report.resource_name = sql_server.name
report.resource_id = sql_server.id
if (
sql_server.administrators is None
@@ -8,12 +8,11 @@ class sqlserver_microsoft_defender_enabled(Check):
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
if sql_server.security_alert_policies:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.status = "FAIL"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has microsoft defender disabled."
if sql_server.security_alert_policies.state == "Enabled":
report.status = "PASS"
@@ -12,12 +12,11 @@ class sqlserver_recommended_minimal_tls_version(Check):
)
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.status = "FAIL"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} is using TLS version {sql_server.minimal_tls_version} as minimal accepted which is not recommended. Please use one of the recommended versions: {', '.join(recommended_minimal_tls_versions)}."
if sql_server.minimal_tls_version in recommended_minimal_tls_versions:
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} is using version {sql_server.minimal_tls_version} as minimal accepted which is recommended."
@@ -16,7 +16,6 @@ from prowler.providers.azure.azure_provider import AzureProvider
from prowler.providers.azure.lib.service.service import AzureService
########################## SQLServer
class SQLServer(AzureService):
def __init__(self, provider: AzureProvider):
super().__init__(SqlManagementClient, provider)
@@ -11,11 +11,10 @@ class sqlserver_tde_encrypted_with_cmk(Check):
sql_server.databases if sql_server.databases is not None else []
)
if len(databases) > 0:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.location = sql_server.location
found_disabled = False
if (
sql_server.encryption_protector.server_key_type
@@ -14,11 +14,10 @@ class sqlserver_tde_encryption_enabled(Check):
for database in databases:
if database.name.lower() == "master":
continue
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=database
)
report.subscription = subscription
report.resource_name = database.name
report.resource_id = database.id
report.location = sql_server.location
if database.tde_encryption.status == "Enabled":
report.status = "PASS"
report.status_extended = f"Database {database.name} from SQL Server {sql_server.name} from subscription {subscription} has TDE enabled"
@@ -7,13 +7,12 @@ class sqlserver_unrestricted_inbound_access(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.status = "PASS"
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} does not have firewall rules allowing 0.0.0.0-255.255.255.255."
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.location = sql_server.location
for firewall_rule in sql_server.firewall_rules:
if (
firewall_rule.start_ip_address == "0.0.0.0"
@@ -7,12 +7,11 @@ class sqlserver_va_emails_notifications_admins_enabled(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.status = "FAIL"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
if (
sql_server.vulnerability_assessment
@@ -7,12 +7,11 @@ class sqlserver_va_periodic_recurring_scans_enabled(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.status = "FAIL"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
if (
sql_server.vulnerability_assessment
@@ -7,12 +7,11 @@ class sqlserver_va_scan_reports_configured(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.status = "FAIL"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
if (
sql_server.vulnerability_assessment
@@ -7,12 +7,11 @@ class sqlserver_vulnerability_assessment_enabled(Check):
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
for sql_server in sql_servers:
report = Check_Report_Azure(self.metadata())
report = Check_Report_Azure(
metadata=self.metadata(), resource_metadata=sql_server
)
report.subscription = subscription
report.resource_name = sql_server.name
report.resource_id = sql_server.id
report.status = "FAIL"
report.location = sql_server.location
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
if (
sql_server.vulnerability_assessment