На
главную страницу
Снижение риска возможной компрометации 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, существует реальная
возможность повышения собственных привелегий, практически легальным образом.
На главную страницу