Введение
Сегодня базы данных - основа любой крупной информационной системы,
хранящей и обрабатывающей разнообразные данные. Это системы
электронного документооборота и бухгалтерского учета, биллинговые
системы и системы управления контентом web-сайтов, системы управления
технологическими процессами на производстве. Поскольку в базах данных
хранится критичная для ведения бизнеса информация, то первоочередная
задача администраторов баз данных - поддержание конфиденциальности,
целостности и доступности этих данных. Помимо того, что в случае
успешной атаки потенциальный нарушитель может получить доступ к
хранимой в базе данных информации, существует возможность исполнения
произвольных команд на сервере с привилегиями процесса СУБД, что в свою
очередь, может привести к получению нарушителем полного доступа
непосредственно к серверу, на котором установлена СУБД.
Цель данной статьи - обратить внимание администраторов баз данных и
специалистов по информационной безопасности на данную проблему и
показать один из вариантов реализации атаки на СУБД MS SQL, в
результате которой потенциальный нарушитель получит доступ не только к
хранимой в базе данных информации, но и полный контроль над сервером
СУБД.
Краткий обзор СУБД MS SQL 2000
Рассмотрим более подробно
конфигурацию MS SQL по умолчанию. В данной СУБД есть несколько
служебных баз данных, создаваемых в процессе его установки (master,
tempdb, model, msdb, pubs) и тестовая база данных (Northwind).
Наиболее важная из них - master. Она обеспечивает поддержку
основных функций сервера, в ней хранятся все системные настройки
сервера, учетные записи пользователей, роли, сведения о базах данных и
- самое важное для нас - хранимые процедуры.
Хранимая процедура - это набор скомпилированных команд
T-SQL, доступных напрямую SQL-серверу. Команды размещаются в хранимой
процедуре и выполняются как одно целое или подпрограмма по аналогии с
другими языками программирования. Хранимые процедуры находятся на
сервере СУБД и используются, когда необходимо часто выполнять
повторяющиеся в определенном порядке запросы к серверу MS SQL.
Расширенные хранимые процедуры - это разновидность
обычных хранимых процедур, но в них можно использовать обращения к
подпрограммам, написанным на языке С или С++, что позволяет расширить
возможности T-SQL. Обычно расширеннные хранимые процедуры
представляются в виде динамических библиотек. Имена этих процедур как
правило начинаются с префикса xp (eXtended Procedure). Вместе с MS SQL
поставляется большой набор расширенных хранимых процедур. Наиболее
интересная из них - xp_cmdshell. Она предоставляет доступ к командной
строке операционной системы. Так как данная хранимая процедура обладает
широкими возможностями, то по умолчанию доступ к ней разрешен только
владельцу базы данных master, то есть пользователю, наделенному ролью
"Администратор базы данных".
Теперь рассмотрим способы аутентификации в MS SQL. Первый
вариант - аутентификация средствами Windows, второй - аутентификация
средствами самой СУБД (в том случае если при установке MS SQL был
выбран смешанный режим аутентификации).
В первом варианте аутентификация пользователя проводится
средствами операционной системы, и вход осуществляется с использованием
учетных данных пользователя ОС Windows. Стоит отметить, что в этом
случае при установке MS SQL всем пользователям операционной системы,
входящим в группу "Администраторы", автоматически назначается роль
"Администратор базы данных".
Во втором случае аутентификацию проводит СУБД, используя
собственную базу учетных записей пользователей. При установке MS SQL
будет создана учетная запись "sa" с ролью "Администратор базы данных".
Проникновение
Рассмотрим сценарий атаки на сервер с установленным MS SQL Server 2000.
Потенциальному нарушителю необходимо получить доступ к MS SQL с ролью
"Администратор базы данных", а это может легко произойти если:
- пароль учетной записи "sa" пустой или может быть легко
подобран, что часто встречается, когда СУБД используется в тестовой
эксплуатации, либо как платформа для разработчиков;
- неправильно назначены роли пользователей в самой СУБД:
учетная запись обычного пользователя СУБД обладает ролью "Владелец базы
данных" master, либо ролью "Администратор базы данных".
- пароль некоторой учетной записи, входящей в группу
"Администраторы", пустой или может быть легко подобран или определен
(задача получения доступа к серверу, зная пароль администратора, на
первый взгляд может показаться странной, но, например, если к серверу
разрешено подключение только к портам MS SQL, описываемый в статье
способ позволяет выполнять команды ОС).
Затем потенциальный нарушитель может выполнить расширенную хранимую
процедуру xp_cmdshell, указав ей в качестве параметра команду
операционной системы, создающую пользователя и включающую его в группу
"Администраторы", чтобы получить полный доступ к серверу, на котором
установлена СУБД.
Для этого необходимо запустить SQL Server Enterprise Manager,
входящий в состав MS SQL Server (ссылка на данную оснастку находится в
Пуск->Программы->Microsoft SQL Server). Далее в Enterprise
Manager требуется создать новое поключение к SQL-серверу, и, после
установления связи с сервером, создать новое представление (view) для
базы данных master.
В появившемся окне, предназначенном для ввода SQL-запросов,
можно ввести и выполнить следующие команды для создания нового
пользователя операционной системы с правами администратора:
- EXEC xp_cmdshell 'net user test_user test_passW0rd /add'
- вызывает хранимую процедуру xp_cmdshell и передает ей в качестве
параметра команду операционной системы, создающую в системе нового
пользователя test_user с паролем test_passW0rd.
- EXEC xp_cmdshell 'net localgroup Administrators test_user /add' - данная команда добавляет пользователя test_user в локальную группу "Администраторы".
Вызов расширенной хранимой процедуры "xp_cmdshell".
Рисунок. В системе появилась новая учетная запись "test_user" с правами администратора.
На скриншотах представлены основные этапы осуществления атаки с
использованием штатных средств ОС Windows и СУБД MS SQL. Если сервер,
на котором установлена СУБД MS SQL, выполняет также и другие функции
(контроллер домена, услуги корпоративной почты, хранение архива
документов), потенциальный ущерб от проникновения на данный сервер при
помощи атаки на MS SQL существенно увеличивается.
Рекомендации
Для устранения описанной уязвимости и
снижения риска от проникновения нарушителя на сервер с установленной
СУБД MS SQL рекомендуется:
- Четко разграничить производственную и тестовую среду (среду
разработки). Производственные сервера не должны содержать тестовых баз
данных или инструментария разработчиков.
- Исключить возможность совмещения различных корпоративных сервисов на сервере с установленной СУБД MS SQL.
- Использовать
сложные пароли для административных учетных записей как операционной
системы, так и СУБД - не менее 15 символов, содержащих буквы в разных
регистрах, цифры и специальные символамы.
- Удалить из пользователей MS SQL группу "Администраторы"
операционной системы и четко прописать, какие учетные записи
операционной системы имеют доступ к базам данных.
- Избегать предоставления доступа к расширенным хранимым процедурам для пользователей СУБД.
- Использовать привилегированные учетные записи СУБД только для выполнения административных задач.
- Запускать
процесс MS SQL Server с правами учетной записи непривилегированного
пользователя. Это серьезно усложнит проникновение в систему, так как
потенциальный нарушитель в лучшем случае сможет выполнять команды
только как пользователь с ограниченными привилегиями.
- Протоколировать системные события MS SQL Server, что
позволит упростить процесс слежения за действиями потенциального
нарушителя.
- Регулярно устанавливать обновления операционной системы Windows и СУБД MS SQL.
- Ограничить с помощью межсетевого экрана доступ к портам MS SQL для пользователей, не использующих этот сервис.