Кап-Разбор: Защита кода в 1С

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

  • Какая защита существует?
  • Какой способ защиты самый надежный?
  • Как выбрать защиту 1С конфигурации и при этом не прогадать?

На эти вопросы отвечу в данном обзоре. Речь пойдет в основном об 1С:8.X

Начну же его с другого вопроса:

Зачем защищать код в 1С?

  • Разрешить работу только определенной фирме/компании, купившей ваш продукт.
  • Ограничить количество работающих пользователей в базе.
  • Скрыть “особенные” и уникальные алгоритмы от потребителей или конкурентов.
  • Закрыть модули от заказчика до оплаты им разработанного модуля (конфигурации, подсистемы).
  • Создать демонстрационную конфигурацию с определенными ограничениями в использовании.
  • Скрыть методы обмена с каким-то веб-сервисом, сайтом/CMS.
  • Не допустить полной утечки разрабатываемой совместно конфигурации недобросовестными фрилансерами.

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

Какие способы защиты предоставляет 1С:Предприятие стандартно?

  • Пароль пользователя к базе и хранилищу конфигурации.
  • Роли конфигурации.
  • Веб-клиент ограничивает доступ к “Конфигуратору”.
  • Пароли на текст модуля.
  • Поставка без текста модулей (скомпилированный код).

Надежность пароля пользователя

В целом пароль пользователя к базе данных одним из слабых звеньев в защите 1С, поскольку отсутствует обработчик события ошибки ввода. В случае использования простого пароля существует опасность его подбора полным перебора (методом brute force/”грубой силы”).

Из этого вытекают важные правила:

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

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

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

Данный взлом работает не совсем корректно, так как блокирует создание новых пользователей – база становится не вполне полноценной.

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

Для sql баз возможен перенос таблиц пользователей из другой (исправной) базы.

В связи с перечисленными выше особенностями защиты паролями пользователей можно выделить  ряд правил.

Правила, повышающие парольную защиту

  • в больших компаниях рекомендуется использовать клиент-серверный вариант, даже при достаточной производительности – для улучшения степени защищенности (серверная часть работает с базой по своему каналу).
    прямой доступ к SQL базе должен быть также ограничен надежным паролем, внешний доступ к базе закрыт.
  • для уволенных сотрудников доступ должен сразу блокироваться, ни каких передач паролей приемникам.
  • при длительных отпусках, командировках, болезнях доступ к базе должен приостанавливаться.

Пароль к хранилищу конфигурации.

Также имеет низкую защищенность, особенно при файловом хранилище.

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

Технология может быть такой:

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

Доступ к “Конфигуратору”

Конфигуратор работает в режиме толстого клиента, поэтому получить конфигурацию через браузер или веб-сервер невозможно, если не используется режим обновления платформы и конфигурации через веб.

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

  • Рекомендуется использовать https.
  • Рекомендуется использовать vpn сети для удаленных рабочих мест/филиалов.

Пароли на текст модуля 1С

Устанавливается в “конфигураторе” в меню “Текст/Установить пароль”. 

Данная защита образует парадокс:

  • Никто не берется взламывать пароль, так как используется надежное шифрование; по крайней мере в открытом доступе информация о таких случаях отсутствует.
  • Если модуль идет без текста (поставка без текста), то оригинал его вообще не увидеть. (Меню “Конфигурация/Поставка/Настройка поставки”) 
  • Для корректного исполнения даже закрытого/отсутствующего модуля “1С” хранит модуль в формате байт-кодов(также называемых пи-кодами), для которых некоторые умельцы (например, Валерий Агеев/AWA,Samuray) создали работающие декомпиляторы данных модулей. 

Первый – самый распространенный, максимально доработанный под реальные условия, второй даже найти трудно, но текст его открытый – что будет интересно. (Данные разработки не могу рекомендовать для скачивания с моего или иного сайта, так как они нарушают авторские права, как минимум фирмы “1С”).

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

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

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

Получается защитить модуль никак нельзя?

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

Поэтому появились решения для защиты модулей:

  • wiseadvice – защита конфигураций (комплексное решение с обфускацией и привязкой к ключам), подробно можете ознакомится https://wiseadvice-it.ru/programmy-1s/nashi-resheniya/
  • awa-обфускатор (в открытом виде не распространяется).

Приведу (перескажу своими словами) информацию, которую урывками собирал с различных ресурсов.

Об wiseadvice:

  • Первые версии до 2.0 включительно были достаточно быстро “распарсены” (обфускация не достаточно сильная, автор это признал).
  • Разработчик говорит, что у него есть еще варианты усложнения обфускации (получается он их внедряет не сразу, а по мере, конечная версия не всегда максимально защищенная?).
  • Валерий Агеев имеет не распространяемую публично версию  декомпилятора (которая открывает текущую защиту wiseadvice).
  • Если возможность алгоритма позволяет поместить важные данные в hasp-ключи, это бесспорно улучшить защиту, но при наличии ключа и такие конфигурации отучают. Если ваше решение конечное (не динамически меняющееся), то скорее всего оно будет уязвимо.
  • “Непонятки” с ценой: на инфостарте старая версия продается по 12500, на одном сайте их сайте: цена от 15000 , на оригинальном сайте продукта 3.0.8 за 17500, раньше цена была 10000 (за 3-4 года выросла, но выросла ли настолько защищенность).
  • Вроде пишут, что все просто и понятно, но на демо-версии пришлось потратить некоторое время, чтобы получить окончательный результат (так как версия ограниченная, полностью проверить не получается). Интерфейсно, согласен, очень удобное решение, но требования создать определенные имена функции, ошибки которые не понятные в процессе. Это придирки, может всё из-за демо-версии.
  • Нельзя использовать “Выполнить\Вычислить” – с чем связано не понятно.
  • Ключи следует покупать отдельно, и они достаточно дороги для простых решений.
  • Оформляются документы на покупку решения (это может быть определяющим).

Набор данных фактов склонил меня к покупке второго обфускатора:

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

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

Код модуля должен иметь как можно больше кода – это повышает надежность обфускации. В Wiseadvice даже есть встроенная проверка на это.

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

Следует переписать код продукта под такую стратегию:

  • самое важное хранится в модулях.
  • эти процедуры должны быть максимально проверены и отлажены, покупатель не сможет их исправить самостоятельно.

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

Зачем нужны ключи в защите:

  • организация демо версии /времени использования;
  • ограничение работы по количеству пользователей;
  • ограничение функционала;
  • скрыть важные данные в ключе (небольшие объемы).

Внешние компоненты, как еще один вариант защиты:

Вынос исполнения кода, выполнение алгоритмов во внешние компоненты.

  • Это не тиражные решение, может быть платформо-зависимым в отличии обускации п-кода.
  • Достаточно много таких примеров на инфостарте.

Оценить надежность, пока не появится готовый продукт невозможно.

Почитать по теме защиты:

Книга знаний: Защита исходного кода конфигураций 

Реклама — самая интересная и самая трудная форма современной литературы.

— Олдос Леонард Хаксли