Books and articles about SQL Rambler's Top100 Сменить язык на: Русский 09 July 2020 20:29:39


www.sql-ex.ru
Skip Navigation Links  

 

Print  Версия для печати

На главную страницу

Снижение риска возможной компрометации MS SQL Server 2000

по материалам www.securitylab.ru

Внимание, данные уязвимости присутствуют в последнем сервис паке для MS SQL Server 2000, так как их устранение может нарушить работы сторонних программ, расчитанных на стандартную настройку СУБД

Надеюсь, что данная информация может кому-нибудь пригодиться.

Возможность повышения привилегий локального пользователя за счет агента SQL;
Последствия эксплуатации:
Выполнение произвольных команд, повышение привилегий

Описание:
В СУБД MS SQL Server поддерживаются возможности репликации данных и выполнение заданий по расписанию. Данные возможности выполняются с помощью сервиса, называемого SQL Server Agent. Этот сервис выполняется с повышенными привилегиями – привилегиями сервиса СУБД.

Для того, чтобы сделать новую запись в расписании Агента SQL, необходимо обратиться к таблице msdb. Для работы с этой таблицей существует несколько хранимых процедур, доступ к которым разрешен всем пользователям по умолчанию. Это означает, что любой пользователь способен создать задание, которое будет выполнено от имени Агента.

При обращении Агента к базе данных, агент пытается понизить свои привилегии с целью уменьшения риска компрометации системы. Понижение привилегий осуществляется вызовом следующей команды:

SETUSER N'guest' WITH NORESET

Злоумышленник способен обойти данное ограничение при помощи вызова следующих хранимых процедур:

  • xp_execresultset,
  • xp_printstatements
  • xp_displayparamstmt.

Данные хранимые процедуры заставляют Агента работать с теми привилегиями, с которыми он был запущен.

Ниже представлен пример создания произвольного системного файла непривилегированным пользователем:

use msdb
go
execute sp_add_job @job_name = 'Test', @enabled = 1, @description = 'test', @delete_level = 1
go
execute sp_add_jobstep @job_name = 'Test', @step_name = 'test_step', @subsystem = 'TSQL', @command = 'select ''test ouput'' ', @output_file_name = 'c:\autoexec.bat'
go
execute sp_add_jobserver @job_name = 'Test', @server_name = 'SERVER_NAME'
go
execute sp_start_job @job_name = 'Test'
go

Рекомендации:
Для того чтобы защитить СУБД от компрометации посредством эксплуатации данной уязвимости, рекомендуется изменить права доступа к следующим хранимым процедурам:

REVOKE EXECUTE ON sp_add_job FROM [user or group]
REVOKE EXECUTE ON sp_add_jobstep FROM [user or group]
REVOKE EXECUTE ON sp_add_jobserver FROM [user or group]
REVOKE EXECUTE ON sp_start_job FROM [user or group]
REVOKE EXECUTE ON xp_execresultset FROM [user or group]
REVOKE EXECUTE ON xp_printstatements FROM [user or group]
REVOKE EXECUTE ON xp_displayparamstmt FROM [user or group]

Возможность внесения изменений в системную таблицу mswebtasks;
Последствия эксплуатации:
Нарушение целостности системных файлов

Описание:
Системная таблица mswebtasks находится в системной базе данных msdb. Данная таблица содержит информацию о задачах WEB приложений и о том времени, когда они будут запущенны. Задачи WEB приложений – это задания, которые экспортируют данные в WEB страницы. Эти задания могут быть отконфигурированы таким образом, что данные буду заносится в WEB страницы при изменении информации или при наступлении соответствующего времени.

По умолчанию, в системной базе данных msdb для группы public разрешены транзакции Select, Insert, Execute и Delete для таблицы mswebtasks, что влечет за собою возможность изменения задач WEB приложений неавторизованным пользователем. Также, данная возможность позволяет неавторизированному пользователю изменять системные файлы операционной системы.

Рекомендации:
Рекомендуется изменить права доступа к данной таблице для группы public. Данная операция может быть осуществлена путем выполнения следующей команды:

REVOKE ALL ON msdb.dbo.mswebtasks FROM public

Возможность получения доступа к реестру операционной системы;
Последствия эксплуатации:
Управление системным реестром

Описание:
MS SQL Server имеет ряд расширенных хранимых процедур, позволяющих пользователям СУБД обращаться к системному реестру операционной системы windows. В случае неправильной настройки, использование данных процедур может повлечь за собою несанкционированное чтение и запись информации в системный реестр.

Так как в системном реестре хранится чувствительная информация, такая как:

  • Хеши паролей;
  • Пароли в открытом виде;
  • Информация о запущенных сервисах;
  • Информация о конфигурации системе;

доступ к данным функциям должен быть жестко регулируем.

Необходимо заметить, что в случае запуска сервиса СУБД из-под встроенной учетной записи windows Local System, злоумышленник получает неограниченный доступ к системному реестру.

Ниже приведен список расширенных хранимых процедур, которые могут быть использованы для компрометации системы:

  • xp_regaddmultistring
  • xp_regdeletekey
  • xp_regdeletevalue
  • xp_regenumvalues
  • xp_regenumkeys
  • xp_regread
  • xp_regremovemultistring
  • xp_regwrite
  • xp_instance_regaddmultistring
  • xp_instance_regdeletekey
  • xp_instance_regdeletevalue
  • xp_instance_regenumkeys
  • xp_instance_regenumvalues
  • xp_instance_regread
  • xp_instance_regremovemultistring
  • xp_instance_regwrite

В случае, если сервис СУБД запущен из-под пользователя Local System? Пользователя с неограниченными правами, злоумышленник способен прочитать хэш пароля при помощи следующей команды:

EXEC xp_regread 'HKEY_LOCAL_MACHINE', 'SECURITY\SAM\Domains\Account', 'F'

Рекомендации:
Рекомендуется ограничить доступ к данным хранимым процедурам, выполнив следующие команды:

REVOKE EXECUTE ON xp_regaddmultistring FROM [user or group]
REVOKE EXECUTE ON xp_regdeletekey FROM [user or group]
REVOKE EXECUTE ON xp_regdeletevalue FROM [user or group]
REVOKE EXECUTE ON xp_regenumvalues FROM [user or group]
REVOKE EXECUTE ON xp_regenumkeys FROM [user or group]
REVOKE EXECUTE ON xp_regread FROM [user or group]
REVOKE EXECUTE ON xp_regremovemultistring FROM [user or group]
REVOKE EXECUTE ON xp_regwrite FROM [user or group]
REVOKE EXECUTE ON xp_instance_regaddmultistring FROM [user or group]
REVOKE EXECUTE ON xp_instance_regdeletekey FROM [user or group]
REVOKE EXECUTE ON xp_instance_regdeletevalue FROM [user or group]
REVOKE EXECUTE ON xp_instance_regenumkeys FROM [user or group]
REVOKE EXECUTE ON xp_instance_regenumvalues FROM [user or group]
REVOKE EXECUTE ON xp_instance_regread FROM [user or group]
REVOKE EXECUTE ON xp_instance_regremovemultistring FROM [user or group]
REVOKE EXECUTE ON xp_instance_regwrite FROM [user or group]

Возможность выполнения хранимой системной процедуры master.dbo.sp_runwebtask;
Последствия эксплуатации:
Нарушение целостности системных файлов

Описание:
Системная таблица mswebtasks отвечает за создание WEB страниц в зависимости от текущей конфигурации используемого сервиса. Генерация WEB страниц происходит при обновлении информации, либо с учетом текущего времени. Хранимая процедура master.dbo.sp_runwebtask позволяет принудительно запустить службу webtasks, не дожидаясь изменений данных.

Синтаксис данной функции следующий:

sp_runwebtask @procname = 'procname', @outputfile = 'outputfile'

По умолчанию, любой пользователь способен вносить изменения в таблицу mswebtasks, что может скомпрометировать систему посредством нарушения целостности системных файлов.

Рекомендации:
Группа public не должна иметь возможности выполнения данной процедуры. Рекомендуется изменить соответственно права доступа к данной хранимой процедуре путем выполнения следующей команды:

REVOKE EXECUTE ON master.dbo.sp_runwebtask FROM public

Возможность просмотра пароля агента SQL;
Последствия эксплуатации:
Выполнение произвольных, повышение привилегий

Описание:
По-умолчанию, существует возможность выполнения хранимой процедуры sp_get_sqlagent_properties, раскрывающей пароль агента SQL. Данная хранимая процедура может быть полезна атакующему только в том случае, если для запуска заданий агента SQL необходима учетная запись.

Рекомендации:
Microsoft рекомендует использовать windows-based аутентификацию, вместо той, что используется стандартными средствами SQL Server, так как в этом случае пароли не хранятся в открытом виде в системном реестре.

Так же рекомендуется исключить пользователя guest из системной базы данных:

use msdb sp_dropuser 'guest'

С целью исключения возможности компрометации системы, рекомендуется группе Public запретить возможность выполнения хранимой процедуры sp_get_sqlagent_properties:

use msdb revoke execute on sp_get_sqlagent_properties from public

Следует заметить, что приведеные здесь уязвимости не могут быть закрыты самой Microsoft в силу следующего положения:
"возможность интеграции с продуктами третьих разработчиков"
таким образом, посредством осуществления SQL-injection, существует реальная возможность повышения собственных привелегий, практически легальным образом.

На главную страницу

Print  Версия для печати


Usage of any materials of this site is possible
only under condition of mandatory allocation of the direct link to a site
http://www.sqlbooks.ru
on each page where used materials are placed.

 Main   Articles    Books 
Рейтинг@Mail.ru Rambler's Top100 Alt Упражнения по SQL: обучение, тестирование, сертификация по языку SQL Copyright c 2002-2006. All rights reserved.