Введение

Настоящий материал по большей части состоит из общедоступных наработок других людей. Целью было проверить указанные наработки на практике и собрать получившиеся результаты в одном месте. Именно этим объясняется название статьи.

Продолжу рассуждение в терминах, обозначенных ранее.

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

Тем не менее, чтобы улучшить качество мероприятий по тестированию на проникновение есть смысл рассмотреть другие ключевые системы и подходы к построению сценариев применительно к ним. Хорошим примером ключевой системы, отличной от контроллеров домена, является 1С:Предприятие.

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

  • потеря (хищение) денежных средств
  • нарушение конфиденциальности (утечка) персональных данных

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

  • получение административного доступа к серверу, обеспечивающему функционирование системы 1С:Предприятие;
  • получение доступа к действующей административной учетной записи к системе 1С:Предприятие.

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

Краткие сведения об 1C:Предприятие

1C:Предприятие предназначено для автоматизации, управления и учета в Организации различных видов деятельности и типов финансирования. 1С:Предприятие состоит из технологической платформы (ядра) и разработанных на ее основе прикладных решений (конфигураций), например:

  • 1С:Бухгалтерия 8
  • 1С:Документооборот 8
  • 1С:Зарплата и управление персоналом 8
  • 1C:ERP Управление предприятием 2.0

Все прикладные решения 1С имеют однотипный интерфейс и подчиняются общим принципам работы. Более того, решения могут работать совместно, а также производить обмен данными.

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

1C_40.png

Стоит отметить, что за 30 лет существования было выпущено множество версий платформы 1С. Более подробно ознакомиться c хронологией выхода и различиями между версиями платформы 1С можно в материалах “Какие бывают версии 1С” или “Обзор версий 1С:Предприятие”.

В настоящей момент наиболее актуальные версии платформы начинаются с идентификатора 8.3, поэтому всюду далее полагается, что используются именно они.

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

1c_cluster_scheme.png

Иллюстрация архитектуры 1С

В первом приближении отметим, что с использованием различных клиентов можно подключиться к кластеру серверов, в свою очередь обеспечивающему взаимодействие с различными СУБД. Таким образом, именно кластер серверов 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'

1C_2.png

Также следует не забывать обращать внимание на 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С и получить ошибку с информацией об используемой версии.

1C_3.png

Пример выявления версии клиента по ошибке соединения

Далее необходимо найти и установить клиент соответствующей версии. По-хорошему для этого необходимо обладать платным доступом к порталу 1С, но также можно посмотреть здесь.

Кроме того, целесообразно посмотреть файлы, распространяемые с помощью групповых политик, например в PingCastle. В этом случае можно найти общедоступные сетевые папки, откуда сразу взять необходимые клиенты, в том числе и для других кластеров 1С, если их в Организации несколько.

1C_4.png

Пример обнаружения установщика клиента 1С из групповых политик

Допустим установщик клиента с необходимой версией был получен. Дальше при установке надо дополнительно добавить модуль администрирования (см. ниже).

1C_5.jpg

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

1С_8.jpg

Далее в интерфейсе утилиты следует указать кластер серверов 1С. Для этого потребуются IP-адрес и порт, выясненные ранее в ходе разведки:

1С_9.jpg

1С_10.jpg

При отсутствии пароля при подключении к указанному кластеру серверов 1С будет получена подобная картина:

1С_7.png

При наличии требования пароля будет открыто следующее окно:

1С_6.png

Далее продолжим рассматривать случай, когда пароль отсутствует. Подключившись к кластеру серверов 1С с использованием утилиты администрирования можно:

  • узнать названия информационных баз, а также в ряде случаев при попытке подключения к ним получить список идентификаторов учетных записей (полезно при подборе паролей)
  • выявить тестовые информационные базы в которые можно зайти без пароля и залить “полезную” внешнюю обработку
  • создать новую информационную базу с конфигурацией эмулирующей командную строку и таким образом получить возможность удаленного выполнения кода на кластере 1С с правами пользователя от которого запущена соответствующая служба

Наиболее предпочтительным вариантом постэксплуатации является создание новой информационной базы, так как тогда не происходит перезаписи ранее имеющихся данных. В этом случае общий порядок действий следующий:

  1. Подготовить базу данных PostgresSQL на подконтрольном сервере, в частности можно использовать свою виртуальную машину
  2. Создать на кластере 1С новую информационную базу с использованием установленной базы данных PostgresSQL
  3. Загрузить конфигурацию с “полезной” нагрузкой

Далее подробно рассмотрим каждый из указанных шагов.

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

Ранее в кратких сведениях была рассмотрена архитектура платформы 1С. Для создания информационной базы необходимо наличие подконтрольной СУБД. 1С может работать с различными базами данных, в частности с MSSQL. Тем не менее в виду свободной модели распространения удобнее использовать PostgresSQL.

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

После установки версии PostgresSQL для Windows, взятой с официального сайта, возникли ошибки связанные с кодировкой. Возможно в Linux было бы по-другому, но в итоге было решено установить дистрибутив PostgresSQL специально предназначенный для работы с 1С.

1С_13.png

Согласно одному из руководств перед установкой был отключен протокол IPv6

1С_16.png

и включена служба “Вторичный вход в систему”

1С_14.png

1С_15.png

После успешной установки можно приступать к непосредственному созданию информационной базы:

1С_11.jpg

В параметрах следует указать данные созданной СУБД:

1C_12.png

Теперь в клиенте можно настроить подключение к созданной информационной базе:

1С_17.png

1С_18.png

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

1С_19.png

Для дальнейшей эксплуатации остается загрузить специальную информационную базу, содержащую полезную нагрузку. В качестве примера можно использовать следующую конфигурацию за авторством компании “Крауд”.

1С_20.png

Таким образом будет получена возможность удаленного выполнения кода кластере 1С с правами пользователя от которого запущена соответствующая служба:

1С_21.png

Далее возможны различные варианты. В первую очередь следует определиться какими правами и привилегиями обладает учетная запись из-под которой выполняются команды. На практике подобные учетные записи в ряде случаев даже обладали правами уровня администратора домена. Проверить это возможно с помощью BloodHound.

Чаще все же на подобную удачу рассчитывать не стоит. Более рабочий вариант - посмотреть наличие привилегии SeImpersonatePrivilege, которой достаточно для локального повышения (смотри PrintSpoofer). Далее, локально повысив права, можно поискать сессии административных учетных записей и попробовать их имперсоанизировать.

1С_22.png

Также, иногда учетная запись из-под которой запущена служба 1С, может обладать привилегией на неограниченное делегирование.

1C_43.png

На этот счет рекомендую ознакомиться с этим материалом.

В качестве альтернативного варианта постэксплуатации можно загрузить новую внешнюю обработку, например за авторством Levatein. К слову очень рекомендую к ознакомлению доклад на SOC форуме 2023 года “1С глазами пентестера”.

1С_25.jpg

Подобная обработка пригодится, если кластер запущен в операционной системе на базе Linux.

Отдельный интерес при постэкплуатации кластера 1С представляет содержимое файла 1СV8Clst.lst, как правило расположенного по пути C:\Program Files\1cv8\srvinfo\reg_xxxx\:

1С_24.png

В этом файле хранятся идентификаторы и шифрованные пароли административных учетных записей СУБД, использующихся кластером 1С.

1С_27.png

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

Для расшифровки паролей можно воспользоваться следующей ссылкой:

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С_28.png

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

1С_29.jpg

Рекомендация: создать администратора кластера 1С и ограничить доступ к консоли администрирования кластера 1С с использованием пароля.

Подбор учетных записей

Как было показано в кратких сведениях, Организация может использовать WEB-сервер для доступа к кластеру серверов 1С. Указанный WEB-сервер также может быть доступен со стороны сети Интернет. Это бывает удобно, в случаях когда требуется предоставить удаленный доступ ряду сотрудников или есть потребность в использовании мобильных клиентов. Иногда подобные WEB-сервера могут быть доступны только “изнутри”. В любом случае наличие WEB-сервера 1С позволяет осуществлять атаки методом перебора паролей к действующим учетным записям.

Обнаружить WEB-сервера 1C можно с помощью утилиты gowitness.

Для успешной аутентификации необходимо знать:

  • название информационной базы
  • идентификатор учетной записи
  • пароль

Сперва, если наименование информационной базы неизвестно, то его необходимо подобрать, например с использованием словарей 1C-Finder от Kraud.

Далее, если у пользователя включена настройка “показывать в списке выбора”, то при попытке подключения к выявленной базе будет отображаться его идентификатор. Таким образом, можно получить некоторый не обязательно полный перечень названий учетных записей:

1С_41.png

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

1C_37.png

Пример парольной политики с отключенной проверкой сложности

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

Иногда при успешном подборе пароля выясняется, что он устарел и требуется ввести новый пароль:

1С_23.png

Также следует не забывать, что пароль к некоторым учетным записям может и вовсе быть пустым.

Рекомендация: использовать строгую парольную политику.

Анализ резервных копий

Часто подтвердить возможность захвата кластера 1С можно в результате подтверждения захвата домена, в состав которого входит указанный кластер, но это тривиально, поэтому рассмотрим случай, когда кластер 1С не состоит в домене.

Допустим каким-то способом был получен доступ к резервным копиям информационных баз. Например, представим что при наличие прав администратора домена подобные копии были обнаружены в открытом виде в системе резервного копирования, входящей в состав указанного домена.

1С_42.png

Базы 1С могут хранится в двух следующих форматах: 1cd и dt.

В первом случае с помощью утилиты Tool_1CD можно сразу открыть файл 1Cv8.1CD. Далее следует слева выбрать таблицу v8users и выделить ячейку из столбца DATA в строке интересующей учетной записи. В окне данных будут закодированные с помощью base64 SHA-1 хеши от регистр зависимых и независимых версий паролей.

1C_35.png

После декодирования по SHA-1 хешам можно провести офлайн подбор паролей. Более того для SHA-1 также существуют радужные таблицы.

Ниже для наглядности приведен пример подбора ряда паролей с помощью сайта Crackstation.

Для офлайн перебора по словарю в Hashcat SHA-1 соответствует -m 100.

1C_36.png

Примечание: Также можно попробовать скачать обучающую версию 1С (требуется регистрация на официальном сайте по номеру телефона) и локально импортировать туда выгруженную базу. В последних версиях 1С для входа в базу может потребоваться ввод пароля. Не проверял на практике, поэтому не берусь однозначно утверждать, но в этом случае вроде бы можно переписать хеш пароля администратора и получить доступ к хранящимся в 1С сведениям, в том числе к хешам остальных учетных записей (также см. PasswordChanger1C).

Если данные хранятся в формате dt, то для их конвертации в формат 1cd можно использовать утилиту. После конвертации задача сводится к рассмотренной ранее.

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

Рекомендации: провести инвентаризацию подконтрольных информационных ресурсов на предмет хранения резервных копий 1С в открытом виде в доступных для рядовых пользователей местах (сетевые папки, хранилища, файловые сервера). Хранить резервные копии 1С в защищенном виде, например с помощью криптоконтейнеров, изолированно от основной сети.

Вместо заключения

vectors.png

Mindmap по возможным атакам на 1С

Полезные ссылки