Введение
Настоящий материал по большей части состоит из общедоступных наработок других людей. Целью было проверить указанные наработки на практике и собрать получившиеся результаты в одном месте. Именно этим объясняется название статьи.
Продолжу рассуждение в терминах, обозначенных ранее.
По имеющемуся опыту для типовой Организации в качестве ключевой системы можно выделить контроллеры домена, а в качестве критерия подтверждения возможности реализации компьютерных атак, приводящих к негативным для Организации последствиям - получение несанкционированного доступа к учетной записи администратора домена.
Тем не менее, чтобы улучшить качество мероприятий по тестированию на проникновение есть смысл рассмотреть другие ключевые системы и подходы к построению сценариев применительно к ним. Хорошим примером ключевой системы, отличной от контроллеров домена, является 1С:Предприятие.
Применительно к указанной ключевой системе можно выделить следующие негативные для Организации последствия компьютерных атак:
- потеря (хищение) денежных средств
- нарушение конфиденциальности (утечка) персональных данных
Критериями подтверждения возможности реализации компьютерных атак, приводящих к негативным для Организации последствиям в рассматриваемом случае могут быть:
- получение административного доступа к серверу, обеспечивающему функционирование системы 1С:Предприятие;
- получение доступа к действующей административной учетной записи к системе 1С:Предприятие.
Далее будут рассмотрены ряд сценариев компьютерных атак в отношении 1С:Предприятие, а также приведены примеры подтверждения возможности реализации указанных атак на практике.
Краткие сведения об 1C:Предприятие
1C:Предприятие предназначено для автоматизации, управления и учета в Организации различных видов деятельности и типов финансирования. 1С:Предприятие состоит из технологической платформы (ядра) и разработанных на ее основе прикладных решений (конфигураций), например:
- 1С:Бухгалтерия 8
- 1С:Документооборот 8
- 1С:Зарплата и управление персоналом 8
- 1C:ERP Управление предприятием 2.0
Все прикладные решения 1С имеют однотипный интерфейс и подчиняются общим принципам работы. Более того, решения могут работать совместно, а также производить обмен данными.
Также технологическая платформа содержит специальную среду для создания и доработки прикладных решений. Эта часть платформы называется конфигуратор. Конфигуратор используется программистами для настройки и обновления программ.
Стоит отметить, что за 30 лет существования было выпущено множество версий платформы 1С. Более подробно ознакомиться c хронологией выхода и различиями между версиями платформы 1С можно в материалах “Какие бывают версии 1С” или “Обзор версий 1С:Предприятие”.
В настоящей момент наиболее актуальные версии платформы начинаются с идентификатора 8.3, поэтому всюду далее полагается, что используются именно они.
С платформой 1С:Предприятие 8.3 одновременно могут работать тысячи пользователей. С целью обеспечения масштабируемости, баланса нагрузки и отказоустойчивости используется кластерная архитектура.
В первом приближении отметим, что с использованием различных клиентов можно подключиться к кластеру серверов, в свою очередь обеспечивающему взаимодействие с различными СУБД. Таким образом, именно кластер серверов 1С является ключевой системой при построении сценариев атак в отношение системы 1С:Предприятие.
Больше об архитектуре платформы 1С рассказывается в статье “Про кластер серверов 1С”.
Сценарии компьютерных атак на 1С
Поиск кластера 1C
Найти кластеры серверов 1С:Предприятие возможно в результате поиска по следующим портам:
- 1540/tcp (rds) - порт рабочего сервера
- 1541/tcp (rds2) - порт кластера 1C
- 1545
- 80/tcp (http) - порт для подключения через веб-сервис (может быть закрыт, если веб-клиенты 1С не используются)
Общая команда для поиска кластеров серверов 1С:
nmap -p1540,1541,1545 'subnet/mask'
Также следует не забывать обращать внимание на DNS-имена, содержащие в названии “1С”. Если же речь идет о домене, то можно поискать сведения о 1С в комментариях учетных записей (смотри Сypher запросы к BloodHoud ниже).
MATCH (c:Computer) WHERE ANY (x IN c.description WHERE toUpper(x) CONTAINS '1С') RETURN c
MATCH (c) WHERE toUpper(c.name) CONTAINS '1C' RETURN c.name
Получение первоначального доступа
Эксплуатация отсутствия пароля
Один из главных и часто встречающихся недостатков заключаются в том, что по умолчанию пароль для доступа к консоли администрирования кластера серверов 1С отсутствует. Рассмотрим варианты эксплуатации указанного недостатка на практике.
Допустим кластер серверов обнаружен. Проверить отсутствие пароля можно просто попробовав подключиться к выявленному кластеру. Для подключения необходима утилиту Администрирование серверов 1С: Предприятия
с версией соответствующей версии кластера 1С.
Если открыт порт 1545
(встречается редко), то определить версию клиента 1С можно с помощью утилиты rasoff, в противном случае всегда можно попробовать подключиться произвольным клиентом 1С и получить ошибку с информацией об используемой версии.
Далее необходимо найти и установить клиент соответствующей версии. По-хорошему для этого необходимо обладать платным доступом к порталу 1С, но также можно посмотреть здесь.
Кроме того, целесообразно посмотреть файлы, распространяемые с помощью групповых политик, например в PingCastle. В этом случае можно найти общедоступные сетевые папки, откуда сразу взять необходимые клиенты, в том числе и для других кластеров 1С, если их в Организации несколько.
Допустим установщик клиента с необходимой версией был получен. Дальше при установке надо дополнительно добавить модуль администрирования (см. ниже).
Перед первым запуском консоли, её необходимо зарегистрировать с использованием скрипта «Регистрация утилиты администрирования». По завершению можно запускать указанную утилиту:
Далее в интерфейсе утилиты следует указать кластер серверов 1С. Для этого потребуются IP-адрес и порт, выясненные ранее в ходе разведки:
При отсутствии пароля при подключении к указанному кластеру серверов 1С будет получена подобная картина:
При наличии требования пароля будет открыто следующее окно:
Далее продолжим рассматривать случай, когда пароль отсутствует. Подключившись к кластеру серверов 1С с использованием утилиты администрирования можно:
- узнать названия информационных баз, а также в ряде случаев при попытке подключения к ним получить список идентификаторов учетных записей (полезно при подборе паролей)
- выявить тестовые информационные базы в которые можно зайти без пароля и залить “полезную” внешнюю обработку
- создать новую информационную базу с конфигурацией эмулирующей командную строку и таким образом получить возможность удаленного выполнения кода на кластере 1С с правами пользователя от которого запущена соответствующая служба
Наиболее предпочтительным вариантом постэксплуатации является создание новой информационной базы, так как тогда не происходит перезаписи ранее имеющихся данных. В этом случае общий порядок действий следующий:
- Подготовить базу данных PostgresSQL на подконтрольном сервере, в частности можно использовать свою виртуальную машину
- Создать на кластере 1С новую информационную базу с использованием установленной базы данных PostgresSQL
- Загрузить конфигурацию с “полезной” нагрузкой
Далее подробно рассмотрим каждый из указанных шагов.
Примечание: если все же желания создавать новую базу нет и хочется воспользоваться имеющейся информационной базой, то важно помнить, что любая загрузка новой конфигурации подразумевает перезапись старых данных. По этой причине загрузку новой конфигурации в тестовую устаревшую ненужную информационную базу лучше предварительно согласовывать с администратором. Кроме того, следует сделать резервную копию базы, а также убедиться, что активные пользовательские сессии отсутствуют.
Ранее в кратких сведениях была рассмотрена архитектура платформы 1С. Для создания информационной базы необходимо наличие подконтрольной СУБД. 1С может работать с различными базами данных, в частности с MSSQL. Тем не менее в виду свободной модели распространения удобнее использовать PostgresSQL.
По-хорошему можно взять любой дистрибутив PostgresSQL и просто его установить, но даже в этом незамысловатом процессе могут появиться небольшие проблемы.
После установки версии PostgresSQL для Windows, взятой с официального сайта, возникли ошибки связанные с кодировкой. Возможно в Linux было бы по-другому, но в итоге было решено установить дистрибутив PostgresSQL специально предназначенный для работы с 1С.
Согласно одному из руководств перед установкой был отключен протокол IPv6
и включена служба “Вторичный вход в систему”
После успешной установки можно приступать к непосредственному созданию информационной базы:
В параметрах следует указать данные созданной СУБД:
Теперь в клиенте можно настроить подключение к созданной информационной базе:
В результате созданные настройки подключения будут сохранены и добавлены в общий список:
Для дальнейшей эксплуатации остается загрузить специальную информационную базу, содержащую полезную нагрузку. В качестве примера можно использовать следующую конфигурацию за авторством компании “Крауд”.
Таким образом будет получена возможность удаленного выполнения кода кластере 1С с правами пользователя от которого запущена соответствующая служба:
Далее возможны различные варианты. В первую очередь следует определиться какими правами и привилегиями обладает учетная запись из-под которой выполняются команды. На практике подобные учетные записи в ряде случаев даже обладали правами уровня администратора домена. Проверить это возможно с помощью BloodHound.
Чаще все же на подобную удачу рассчитывать не стоит. Более рабочий вариант - посмотреть наличие привилегии SeImpersonatePrivilege
, которой достаточно для локального повышения (смотри PrintSpoofer). Далее, локально повысив права, можно поискать сессии административных учетных записей и попробовать их имперсоанизировать.
Также, иногда учетная запись из-под которой запущена служба 1С, может обладать привилегией на неограниченное делегирование.
На этот счет рекомендую ознакомиться с этим материалом.
В качестве альтернативного варианта постэксплуатации можно загрузить новую внешнюю обработку, например за авторством Levatein. К слову очень рекомендую к ознакомлению доклад на SOC форуме 2023 года “1С глазами пентестера”.
Подобная обработка пригодится, если кластер запущен в операционной системе на базе Linux.
Отдельный интерес при постэкплуатации кластера 1С представляет содержимое файла 1СV8Clst.lst
, как правило расположенного по пути
C:\Program Files\1cv8\srvinfo\reg_xxxx\
:
В этом файле хранятся идентификаторы и шифрованные пароли административных учетных записей СУБД, использующихся кластером 1С.
Важная особенность заключается в том, что ключ шифрования и инициализационный вектор являются общеизвестными и постоянными. Тем самым получить пароли в открытом виде не составляет особого труда.
Для расшифровки паролей можно воспользоваться следующей ссылкой:
https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)AES_Decrypt(%7B'option':'Hex','string':'7D5A39D625A10A476FAD6AB519C4E092'%7D,%7B'option':'Hex','string':'6D4A7FD2C4A791B48E4296A6B3CF765D'%7D,'CBC','Raw','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)&input=TlMvUnlSOW1rU0daUUw1SElhUUdod2VoaHNKUkZrZ0Y5SDlWbjVXRW04VT0
Добытые учетные записи можно использовать для дальнейшего продвижения и удаленного выполнения кода на серверах, обеспечивающих функционирование СУБД:
Рекомендация: создать администратора кластера 1С и ограничить доступ к консоли администрирования кластера 1С с использованием пароля.
Подбор учетных записей
Как было показано в кратких сведениях, Организация может использовать WEB-сервер для доступа к кластеру серверов 1С. Указанный WEB-сервер также может быть доступен со стороны сети Интернет. Это бывает удобно, в случаях когда требуется предоставить удаленный доступ ряду сотрудников или есть потребность в использовании мобильных клиентов. Иногда подобные WEB-сервера могут быть доступны только “изнутри”. В любом случае наличие WEB-сервера 1С позволяет осуществлять атаки методом перебора паролей к действующим учетным записям.
Обнаружить WEB-сервера 1C можно с помощью утилиты gowitness.
Для успешной аутентификации необходимо знать:
- название информационной базы
- идентификатор учетной записи
- пароль
Сперва, если наименование информационной базы неизвестно, то его необходимо подобрать, например с использованием словарей 1C-Finder от Kraud.
Далее, если у пользователя включена настройка “показывать в списке выбора”, то при попытке подключения к выявленной базе будет отображаться его идентификатор. Таким образом, можно получить некоторый не обязательно полный перечень названий учетных записей:
Выгрузить весь список доступных идентификаторов можно по следующему URL:
http://<server-IP-or-DNS>:<port>/<db_name>/en_US/e1cib/users
Учетные данные передаются на WEB-сервер 1С POST-запросом на URL следующего вида:
http://<server-IP-or-DNS>:<port>/<db_name>/en_US/e1cib/login?version=8.3.XX.XXXX&cred=base64(идентификатор)08base64(пароль)
08
- выступает в качестве разделителя между идентификатором и паролем
Таким образом, с помощью обычных фаззеров методом POST по приведенному URL можно подбирать действующие учетные записи. Автоматизировать подбор можно с помощью Burp Suite, patator, ffuf и других инструментов.
В 1С пароли не чувствительны к регистру, то есть “Пароль” и “пАрОль” являются эквивалентами. Кроме того, нередко в 1С применяется недостаточно строгая парольная политика. Часто администраторы не включают проверку сложности паролей пользователей, а также не устанавливают длительность блокировки при превышении количества неуспешных попыток аутентификации или максимальное количество неуспешных попыток аутентификации.
Вдобавок ко всему, зная некоторый типовой для Организации пароль, можно наоборот попробовать подбирать к нему идентификатор, например взяв за основу перечень почтовых адресов, полученных с помощью данного сайта.
Иногда при успешном подборе пароля выясняется, что он устарел и требуется ввести новый пароль:
Также следует не забывать, что пароль к некоторым учетным записям может и вовсе быть пустым.
Рекомендация: использовать строгую парольную политику.
Анализ резервных копий
Часто подтвердить возможность захвата кластера 1С можно в результате подтверждения захвата домена, в состав которого входит указанный кластер, но это тривиально, поэтому рассмотрим случай, когда кластер 1С не состоит в домене.
Допустим каким-то способом был получен доступ к резервным копиям информационных баз. Например, представим что при наличие прав администратора домена подобные копии были обнаружены в открытом виде в системе резервного копирования, входящей в состав указанного домена.
Базы 1С могут хранится в двух следующих форматах: 1cd
и dt
.
В первом случае с помощью утилиты Tool_1CD можно сразу открыть файл 1Cv8.1CD. Далее следует слева выбрать таблицу v8users и выделить ячейку из столбца DATA в строке интересующей учетной записи. В окне данных будут закодированные с помощью base64 SHA-1 хеши от регистр зависимых и независимых версий паролей.
После декодирования по SHA-1 хешам можно провести офлайн подбор паролей. Более того для SHA-1 также существуют радужные таблицы.
Ниже для наглядности приведен пример подбора ряда паролей с помощью сайта Crackstation.
Для офлайн перебора по словарю в Hashcat
SHA-1 соответствует -m 100
.
Примечание: Также можно попробовать скачать обучающую версию 1С (требуется регистрация на официальном сайте по номеру телефона) и локально импортировать туда выгруженную базу. В последних версиях 1С для входа в базу может потребоваться ввод пароля. Не проверял на практике, поэтому не берусь однозначно утверждать, но в этом случае вроде бы можно переписать хеш пароля администратора и получить доступ к хранящимся в 1С сведениям, в том числе к хешам остальных учетных записей (также см. PasswordChanger1C).
Если данные хранятся в формате dt
, то для их конвертации в формат 1cd можно использовать утилиту. После конвертации задача сводится к рассмотренной ранее.
Примечание: Версия pfDTTools, расположенная в открытом доступе, не позволяет выполнить конвертацию на текущий момент. Автор утилиты собирался в ближайшее время опубликовать закрытый релиз содержащий указанную возможность.
Рекомендации: провести инвентаризацию подконтрольных информационных ресурсов на предмет хранения резервных копий 1С в открытом виде в доступных для рядовых пользователей местах (сетевые папки, хранилища, файловые сервера). Хранить резервные копии 1С в защищенном виде, например с помощью криптоконтейнеров, изолированно от основной сети.
Вместо заключения
Полезные ссылки
- 1С глазами пентестера - Анастасия Прядко + pdf
- 1С глазами злоумышленника - Алексей Старев
- 1C-Exploit-Kit
- Взламываем Windows Server через 1С
- История одного взлома 1С или проверьте вашу систему на безопасность видео
- Технология восстановления пароля 1С v8
- Формат файлов выгрузки DT
- Консоль кода для управляемых форм (пост + git)
- Практический опыт построения защищенного контура для 1С-приложений - Олег Филиппов
- Мастер класс по инструментам кластера 1С для повышения уровня защищённости системы - Антон Дорошкевич
- Взломать сервер 1С за 15 минут - Антон Дорошкевич
- Найти и уничтожить Популярные уязвимости в проектах 1С - Олег Тымко
- НеБезопасный прикладной программный интерфейс сервера - Владимир Бондаревский статья
- Взломать за 60 секунд! - Антон Дорошкевич