Στο SQL Server υπάρχουν αρκετά features που αν δεν χρησιμοποιηθούν σωστά υπάρχει η πιθανότητα να μας δημιουργήσουν προβλήματα ασφάλειας και είναι από τα πρώτα πράγματα που ελέγχω όταν καλούμαι να εκτελέσω ένα SQL Server Security Assessment.
Αρκετά από αυτά, από προεπιλογή, είναι απενεργοποιημένα ώστε να μηδενιστεί η έκθεση σε προβλήματα ασφάλειας.
Φυσικά και μας δίνεται η επιλογή να τα ενεργοποιήσουμε, εφόσον έχουμε διασφαλίσει ότι η ενεργοποίηση τους δεν θα μας εκθέσει σε κινδύνους, όπως για παράδειγμα η προσωρινή ενεργοποίηση τους μέσα σε μια stored procedure και η απενεργοποίηση τους μέσα σε αυτή αφού πρώτα κάνουμε την χρήση τους. Ένα κλασσικό παράδειγμα είναι xp_cmdshell με την οποία μπορούμε να τρέξουμε os commands.
Ένας DBA που έχει τον απόλυτο έλεγχο των SQL Server Instances που διαχειρίζεται, πιθανώς να νιώθει ασφαλής καθώς ελέγχει τα πάντα, αλλά είναι 101% σίγουρος;
Όσοι πάλι είναι "βαφτισμένοι" DBA, και οι συνεργάτες τους αλωνίζουν στα SQL Server instance με ελάχιστο έλεγχο, δεν γνωρίζουν τι κάνει ο καθένας, και αυτό είναι πρόβλημα.
Σε κάθε περίπτωση και οι δύο θα πρέπει να το ελέγχουν τακτικά ώστε να γνωρίζουν και να δράσουν ανάλογα.
Το να μπορέσει κάποιος να μάθει τι είναι και τι δεν είναι ενεργοποιημένο από αυτά, μπορεί να το κάνει με το παρακάτω query που ρωτάει την
sys.system_components_surface_area_configuration. Αυτή υπάρχει από τον SQL Server 2008 και μετά. Όπως θα δείτε έχω κάνει customization στο αποτέλεσμα της ώστε να εστιάσω στο ζητούμενο που δεν είναι άλλο από τον εύκολο έλεγχο.
Query
select component_name,
case database_name
when 'mssqlsystemresource' then 'AllDatabases'
else database_name
end + '.' + schema_name + '.' + object_name as [object_name],
case state
when 1 then 'Yes'
else 'No'
end as is_enabled
from sys.system_components_surface_area_configuration
order by is_enabled desc,
component_name,
[object_name]
Query Results
component_name
| object_name
| is_enabled
|
Agent XPs |
AllDatabases.sys.sp_PostAgentInfo |
Yes |
Agent XPs |
AllDatabases.sys.xp_getnetname |
Yes |
Agent XPs |
AllDatabases.sys.xp_instance_regdeletevalue |
Yes |
Agent XPs |
AllDatabases.sys.xp_instance_regread |
Yes |
Agent XPs |
AllDatabases.sys.xp_instance_regwrite |
Yes |
Agent XPs |
AllDatabases.sys.xp_msver |
Yes |
Agent XPs |
AllDatabases.sys.xp_msx_enlist |
Yes |
Agent XPs |
AllDatabases.sys.xp_passAgentInfo |
Yes |
Agent XPs |
AllDatabases.sys.xp_regread |
Yes |
Agent XPs |
AllDatabases.sys.xp_regwrite |
Yes |
Agent XPs |
AllDatabases.sys.xp_sqlagent_enum_jobs |
Yes |
Agent XPs |
AllDatabases.sys.xp_sqlagent_is_starting |
Yes |
Agent XPs |
AllDatabases.sys.xp_sqlagent_monitor |
Yes |
Agent XPs |
AllDatabases.sys.xp_sqlagent_notify |
Yes |
Agent XPs |
AllDatabases.sys.xp_sqlagent_param |
Yes |
Agent XPs |
msdb.dbo.sp_add_maintenance_plan_job |
Yes |
Agent XPs |
msdb.dbo.sp_downloaded_row_limiter |
Yes |
Agent XPs |
msdb.dbo.sp_enlist_tsx |
Yes |
Agent XPs |
msdb.dbo.sp_generate_server_description |
Yes |
Agent XPs |
msdb.dbo.sp_get_composite_job_info |
Yes |
Agent XPs |
msdb.dbo.sp_get_schedule_description |
Yes |
Agent XPs |
msdb.dbo.sp_get_sqlagent_properties |
Yes |
Agent XPs |
msdb.dbo.sp_is_sqlagent_starting |
Yes |
Agent XPs |
msdb.dbo.sp_jobhistory_row_limiter |
Yes |
Agent XPs |
msdb.dbo.sp_msx_defect |
Yes |
Agent XPs |
msdb.dbo.sp_msx_enlist |
Yes |
Agent XPs |
msdb.dbo.sp_msx_get_account |
Yes |
Agent XPs |
msdb.dbo.sp_msx_set_account |
Yes |
Agent XPs |
msdb.dbo.sp_post_msx_operation |
Yes |
Agent XPs |
msdb.dbo.sp_set_local_time |
Yes |
Agent XPs |
msdb.dbo.sp_set_sqlagent_properties |
Yes |
Agent XPs |
msdb.dbo.sp_sqlagent_get_startup_info |
Yes |
Agent XPs |
msdb.dbo.sp_sqlagent_has_server_access |
Yes |
Agent XPs |
msdb.dbo.sp_sqlagent_notify |
Yes |
Agent XPs |
msdb.dbo.sp_update_operator |
Yes |
Agent XPs |
msdb.dbo.sp_verify_alert |
Yes |
Agent XPs |
msdb.dbo.sp_verify_job |
Yes |
Agent XPs |
msdb.dbo.sp_verify_subsystem |
Yes |
Database Mail XPs |
AllDatabases.sys.xp_sysmail_activate |
Yes |
Database Mail XPs |
AllDatabases.sys.xp_sysmail_attachment_load |
Yes |
Database Mail XPs |
AllDatabases.sys.xp_sysmail_format_query |
Yes |
Database Mail XPs |
msdb.dbo.sp_send_dbmail |
Yes |
Database Mail XPs |
msdb.dbo.sp_validate_user |
Yes |
Database Mail XPs |
msdb.dbo.sysmail_help_status_sp |
Yes |
Database Mail XPs |
msdb.dbo.sysmail_start_sp |
Yes |
Database Mail XPs |
msdb.dbo.sysmail_stop_sp |
Yes |
SMO and DMO XPs |
AllDatabases.sys.sp_getProcessorUsage |
Yes |
SMO and DMO XPs |
AllDatabases.sys.sp_getVolumeFreeSpace |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_availablemedia |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_dirtree |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_enum_oledb_providers |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_enumerrorlogs |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_enumgroups |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_fileexist |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_fixeddrives |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_get_tape_devices |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_getnetname |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_instance_regaddmultistring |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_instance_regdeletevalue |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_instance_regenumvalues |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_instance_regread |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_instance_regremovemultistring |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_instance_regwrite |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_logininfo |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_msver |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_prop_oledb_provider |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_readerrorlog |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_regaddmultistring |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_regdeletekey |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_regdeletevalue |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_regread |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_regremovemultistring |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_regwrite |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_servicecontrol |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_sqlagent_monitor |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_sqlagent_notify |
Yes |
SMO and DMO XPs |
AllDatabases.sys.xp_subdirs |
Yes |
Ole Automation Procedures |
AllDatabases.sys.sp_OACreate |
No |
Ole Automation Procedures |
AllDatabases.sys.sp_OADestroy |
No |
Ole Automation Procedures |
AllDatabases.sys.sp_OAGetErrorInfo |
No |
Ole Automation Procedures |
AllDatabases.sys.sp_OAGetProperty |
No |
Ole Automation Procedures |
AllDatabases.sys.sp_OAMethod |
No |
Ole Automation Procedures |
AllDatabases.sys.sp_OASetProperty |
No |
Ole Automation Procedures |
AllDatabases.sys.sp_OAStop |
No |
xp_cmdshell |
AllDatabases.sys.xp_cmdshell |
No |
Θα δείτε στο αποτέλεσμα ότι υπάρχουν τα components Agent XPs, Database Mail XPs, Ole Automation Procedures, SMO and DMO XPs, xp_cmdshell.
Το καθένα από αυτά περιλαμβάνει μια σειρά από procedures που όταν είναι ενεργοποιημένο μπορούν να εκτελεστούν.
Αν κάποιος θέλει να ενεργοποιήσει ή να απενεργοποιήσει αυτά μπορεί να το κάνει με την χρήση της sp_configure όπως στο παρακάτω παράδειγμα.
Activate / Deactivate Surface Area Congifuration Settings
EXEC sys.sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sys.sp_configure 'Agent XPs', 1; -- 1 is to enable, 0 to disable
RECONFIGURE;
EXEC sys.sp_configure 'Database Mail XPs', 1; -- 1 is to enable, 0 to disable
RECONFIGURE;
EXEC sys.sp_configure 'Ole Automation Procedures', 1; -- 1 is to enable, 0 to disable
RECONFIGURE;
EXEC sys.sp_configure 'SMO and DMO XPs', 1; -- 1 is to enable, 0 to disable
RECONFIGURE;
EXEC sys.sp_configure 'xp_cmdshell', 1; -- 1 is to enable, 0 to disable
RECONFIGURE;
//Antonios Chatzipavlis