Сегодня мы расскажем, как можно получить права локального администратора на сервере MS Windows Server 2016 через незащищенную базу 1С: Предприятие 8. Мы уверены в том, что данный кейс будет интересен, как специалистам по информационной безопасности, так и системным администраторам. В конце Вас ждет бонус.
Во время выполнения внутреннего тестирования на проникновение мы столкнулись с крайне редкой ситуацией, в сети Заказчика не было обнаружено ни одной уязвимости с помощью автоматизированных сканеров уязвимостей. ДИБ (Департамент информационной безопасности) Заказчика тщательно «пропылесосил» все свои активы и этим закрыл большинство стандартных векторов атак. Мы смогли реализовать несколько сценариев и о самом интересном рассказываем.
Получение учетных данных для MS SQL Server
Сканируя ресурсы в сети, мы обнаружили кластер серверов 1С: Предприятия 8:
Данный кластер не был защищен паролем и к нему удалось подключиться с помощью стандартной консоли для администрирования серверов 1С Предприятия.
Функционал консоли администрирования серверов 1С позволяет настраивать 1С сервер и работать с информационными базами, в том числе просматривать все созданные базы на сервере. Таким образом, был получен список информационных баз, расположенных на данном сервере:
Проанализировав все базы, мы обнаружили, что база perf не защищена паролем.
Вход в базу perf можно выполнить без пароля, пользователь по умолчанию обладает правами администратора. После входа в базу выясняется, что она содержит конфигурацию «Нагрузочный тест TPC-1C», предназначенную для тестирования производительности сервера 1С. Подробная информация о конфигурации доступна по ссылке:
www.gilev.ru/tpc1cgilv.
В конфигурации для тестирования производительности требуется указать учетные данные для подключения к серверу баз данных. Учетные данные сохраняются в информационной базе. В нашем случае так и произошло, системный администратор не удалил учетные данные после выполнения тестов производительности:
Мы столкнулись с проблемой, пароль скрыт. Не придумав решения лучше, было решено просто отключить свойство «РежимПароля» для поля «SQL пароль». Для этого открыли информационную базу в режиме конфигуратора. С помощью следующей схемы «Конфигурация -> Поддержка -> Настройка поддержки» сняли конфигурацию с поддержки, чтобы появилась возможность изменить форму в конфигурации:
Далее нашли форму с отображением учетных данных и отключили свойство «РежимПароля» для поля «SQL пароль»:
Сохранив изменения и запустив отладку, нажали клавишу F5. После запуска конфигурации, открыв форму с учетными данными, увидели долгожданный пароль:
Прекрасно, половина дела сделана.
Получение доступа к выполнению команд на сервере
Для проверки валидности учетных данных мы использовали модуль «auxiliary/scanner/mssql/mssql_login» из Metasploit Framework, логин и пароль успешно подошли к MS SQL Server, расположенному на том же сервере:
Пользователь sa по умолчанию имеет максимально возможные права, это позволяет выполнить команды операционной системы через функцию xp_cmdshell. Для проверки этой возможности мы воспользуемся модулем «mssql _exec» из Metasploit Framework:
Как видно на снимке экрана у нас есть возможность выполнять команды на сервере в контексте пользователя «nt service\mssqlserver».
Повышение привилегий в системе
Осталось повысить привилегии на сервере. Для этого откроем сессию meterpreter, используя модуль «exploit/windows/mssql/mssql_payload» из Metasploit Framework:
После того как консоль meterpreter открылась, загрузим модуль incognito:
Модуль incognito позволяет красть токены пользователей, тем самым можно выдать себя за другого пользователя и повысить привилегии в системе.
Как видно на снимке экрана выше интересующие нас токены недоступны.
Нам потребуется применить эксплойт RottenPotato, чтобы привилегированный токен стал доступен. Токен становится доступен на непродолжительное время, нужно действовать очень быстро, чтобы не упустить шанс.
Скачаем эксплойт RottenPotato по ссылке:
github.com/foxglovesec/RottenPotato/blob/master/rottenpotato.exe и загрузим его через meterpreter.
Запустим эксплойт командой: execute -cH -f ./rottenpotato.exe. Видим, что в списке доступных токенов появился новый – «NT AUTHORITY\СИСТЕМА» Переключимся на него командой: impersonate_token «NT AUTHORITY\\СИСТЕМА» и нам, наконец, удается получить максимальные права на сервере.
На снимке экрана продемонстрирован процесс повышения привилегий:
Отлично, система успешно скомпрометирована.
Бонус
Предположим, что учетные данные для подключения к серверу баз данных не сохранены в информационной базе или была обнаружена вовсе пустая база без конфигурации. Что тогда, спросите Вы?
Специально для этой ситуации мы создали конфигурацию 1C-Shell, которая позволяет выполнять команды на сервере 1С в контексте пользователя USR1CV8, от имени которого работает сервер 1С.
Скачиваем конфигурацию 1C-Shell c
github.com/KraudSecurity/1C-Shell. Открываем найденную информационную базу в Конфигураторе.
Выбираем Администрирование — Загрузить информационную базу и указываем файл 1C-Shell.dt.
Внимание! Все данные в этой информационной базе будут удалены!
После загрузки новой конфигурации открываем базу 1C. Вводим пароль
MArS6M для пользователя
Kraud и получаем возможность выполнять команды на сервере 1С.
Таким образом, если мы найдем незащищенную информационную базу, то сразу переходим к этапу повышения привилегий в системе.
Рекомендации
- устанавливайте пароль для администратора кластера сервера 1С;
- используйте сильные пароли для привилегированных пользователей в информационных базах 1С;
- отключите пользователя sa в сервере БД, для выполнения административных задач создайте другую учетную запись с ролью sysadmin;
- регламентируйте процесс создания новых информационных баз 1С.
Резюме
Этот случай наглядно показал, что не стоит полагаться только на отчеты сканеров. Привлекайте экспертов для независимой оценки защищенности вашей инфраструктуры.
комментарии (62)
SyavaSyava, * (был изменён) (был удалён)SyavaSyava, (был удалён)SyavaSyava, (был удалён)SyavaSyava, (был удалён)SyavaSyava, (был удалён)SyavaSyava, * (был изменён) (был удалён)SyavaSyava, (был удалён)SyavaSyava, (был удалён)