Реализовано в Такси.
Появилась необходимость реализовать дополнительную защиту для конфигурации от несанкционированного доступа. Была перелопачено куча статей и информации, но почему-то ничего они не дали.
Пришлось разбираться самому, и вот что вышло.
1. Что необходимо.
— USB накопитель любого объема;
— внешняя компонента USBInfo.dll (в интернете не найдете, т.к. писалась на заказ из-за недостатка опыта разработки ВК);
— обработка для создания ключа защиты (есть в архиве);
— конфигурация с внедренной системой (пример есть в архиве).
2. Создание ключа.
— форматируем USB накопитель и присваиваем ему имя по умолчанию «1CKEY», если не нравится, можно другое, но придётся поменять в коде в одном месте;
— регистрируем USBInfo.dll, можно через командную строку, можно через батник в папке с dll-кой, не забываем про права администратора;
— открываем обработку «СоздатьКлючЗащиты.epf» в любой конфигурации, указываем путь к USB-накопителю, просто букву тома. Нажимаем кнопку создать. Обработка с помощью dll-ки получает всю необходимую информацию о USB-носителе, обрабатывает её, формирует текст и сохраняет его в txt файл в корне накопителя под именем «lic.lic» (также можно задать любое имя и расширение для файла, но надо исправить в коде в двух местах).
— что получаем в файле? В файл у нас записывается информация о накопителе: серийный номер, VID и PID. Как стало известно в ходе реализации, что у USB накопителя «два серийных номера». Этого я раньше не знал, т.к. далек от железа, первый тот, что вшит производителем, а второй тот, который присваивает виндовс, и на разных ПК он частенько отличается, а так как нам необходимо использовать на любом ПК, то второй номер не рассматриваем. Итак, в файл у нас записана информация, которая будет нужна для идентификации USB накопителя как ключа защиты/
Человеку, который далек от программирования, думаю, не сразу будет понятно, что тут записано, а тем, кто разбирается, думаю, объяснять не придётся.
— На этом создание ключа закончено.
3. Как работает в конфигурации?
— В архиве пример конфигурации и отдельно обработка.
— В процедуру «ПриНачалеРаботыСистемы», также можно в любую, какую хотите, вставляем:
Процедура ПриНачалеРаботыСистемы (Отказ)
ОткрытьФорму("Обработка.ПроверитьНаличиеКлючаЗащиты.Форма.Форма");
КонецПроцедуры
— При открытии обработка по имени «1CKEY» ищет USB накопитель (также, если есть желание, можно убрать привязку к названию флешки), если накопитель найден, идет чтение файла «lic.lic», если он есть, естественно. Файл прочитан.
— Далее с помощью dll-ки получаем информацию о USB накопителе (серийный номер, VID, PID) и сравниваем с тем, что в файле. Кстати, dll-ка должна быть зарегистрирована на всех ПК, где будет использоваться флешка.
— Если все удачно и все совпадает, то можно работать, если нет, то обработка завершает работу с предупреждением.
Видео, демонстрирующее работу ключа и внедрение в ЗУП (демо) 3.0
Конечно же, это не супер идеальная защита от злоумышленников и вредителей, но все же недостаточно опытных и сообразительных остановит с легкостью. Поэтому полностью не описываю процесс формирования файла и т.п. В данный момент используется в двух организациях, естественно, там она доработана и повышена защита. Здесь же представлено основное, от чего отталкиваться, а далее фантазия.
В планах реализовать защиту от удаления/копирования/чтения файла с информацией пользователем, но это пока в планах.
Если у кого-то есть какие критика/замечания/предложения/дополнения, буду рад.
П.С. Конечно же, вы можете сказать, что просто взял все отсюда //infostart.ru/public/77203/ , но, уверяю вас, вы ошибаетесь, данную статью увидел только после реализации своей идеи, вот почему-то, когда нужно было, она мне не попалась на глаза…
Что получате в архиве:
— dll-ку, которая протестирована и работает как на Windows 7 x64/86, так и на Windows 8 x64/86;
— обработки внешние «ПроверитьНаличиеКлючаЗащиты» и «СоздатьКлючЗащиты»;
— пустая конфигурация, пример работы.
Я немного не понял, если пользователь прочтет эту статью, скачает эту обработку, он просто сможет сделать себе нужное количество флешек?
(0)все это (подобное) можно реализовать и без флэшки и без дилки — в модуле сеанса вклейти проверку на железо и будет вам щастье. Но, людям ищущим, всегда респект и уважуха))))
(2) seermak, Использование к привязке к железу, на мой взгляд, не удачная идея, т.к.:
1. Вас постоянно будут дергать при переносе с компа на комп, а иногда это бывает по несколько раз в месяц, а если вы используете сетевую версию, то все умножаете на количество пользователей.
2. При переносе вам придется доставать эти параметры и вшивать в конфигурацию изменяя ее, что тоже не совсем удобно, особенно если вы ставите ее на поддержку.
А данное решение удобно, спасибо за идею и реализацию.
имхо, без шифрования исходных текстов, такая защита ничего не стоит
достаточно закомментировать вызов обработки и вы состоялись как хакер)
У нас то же есть на работе ключи защиты. Как реализовано не знаю не смотрел принцип. Но суть в том что на флешку записывается файл-ключ.
Если на другую флешку его скопировать то работать не будет.
(1) webester, ну так в файл на флешке можно запихнуть все что угодно для доп проверки, здесь в обработках прописано только минимум…
(2) seermak, если проверять в самой 1С без внешней компоненты то нужно прописывать и хранить всю информации в конфигурации.
(4) delete, не обязательно вызывать при старте системы, можно в другом месте и другой процедурой, обработку проверки можно также переименовать как угодно и заполировать, или вообще раскидать все по конфигурации.
(5) TODD22, тоже самое, если скопировать то не будет работать на другой флешке.
(3) прочитайте хорошенько — автор как раз и привязывает флэшку к железу (может я чего-то не так понял) и вся проверка заключается в проверке эталонного числа, полученного ранее от этого железа и проверкой железа при начале работы…..
(7) seermak, да в чем то вы правы, привязываем к железу но не к жлезу компа =), что позволяет использовать данную флешку на любом ПК.
(4) delete, Это понятно, но шифровать модуль в который залочены часть процедур основных бизнес процессов, и который проверяет данную флешку не такая проблема (Так реализована защита почти всех отраслевых решений)
В данном способе смущает только одно — использование dll, т.к. могут быть проблемы при обновлении на следующую версию системы или на конкретной клиентской машине, а dll это черный ящик, без возможности корректировки и отладки. Было бы интересней, если бы это было реализовано с помощью встроенного языка. Из него вызывать скриптовые языки для получения информации о железе, а с помощью средств шифрования платформы (по-моему такие есть) формировать уже хэши, но это так на вскидку :).
а прошить флешку с нужным серийником разве проблема?
(10) davdykin, про какую версию системы говорите 1С или ОС? Пока за 6 месяцев проблем не было. А до встроенных средств платформы руки не доходят =)
(11) vano-ekt, ну можно сменить серийник, потом сменить PID и VID флешки если получится, но можно еще придумать кучу информации которую можно запихнуить в файл…
Мир этому дому!
Идеальной защиты не существует — все зависит от стоимости ее взлома… Но иногда, достаточно иметь «защиту от дурака» — для этой цели решение вполне рабочее. Тем более предлагается готовое решение, с возможностью расширения функционала. Это может быть не только элемент защиты кода, но и, например элемент «шифрования» информации…
(12) Я говорил о версии ОС. Просто я имею ввиду, что для всех, кроме вас, это черная коробочка, ни разобраться в ней, ни исправить, в случаи возникновения каких-либо заморочек — невозможно. И это слабое место этого решения.
(14) davdykin, в таком понимании согласен с вами. Но если у кого возникнут заморочки то постараемся помочь разобраться и или вместе решим =) новые заморочки новый опыт, новые знания…
(13) LexSeIch, такую примитивную защиту можно и без флешки замутить, к чему такие сложности.
(16) JesteR, я критику только приветствую, можете написать какие для вас здесь сложности? или как бы вы реализовали?
(16) JesteR, Критикуя — предлагайте, иначе смысла в вашей критике…
Да никто не критикует. Разработка замечательная, но как защита — она ничего не защищает.
Применение например такое: Враги могут прийти и запустить программу. Надо как-то сделать так, чтобы если они запустят «не санционированно», то увидили другое, нежели нужно. Вот тут этот ключик проверяется, но с таким же успехом можно проверять просто наличие файла на сетевом ресурсе или по определенному URL запросу или еще кучей, просто реально кучей способов определить «все ли спокойно в Багдаде».
Если же говорить о защите, то тут надо как-то шифровать или выносить во внешнее шифрованное хранилище сам 1С овский код.
(19) alex_4x,
Думал и о файликах (на диске/фтп и т.п.) — но пришел к выводу, что это совсем не то, таким образом в базу зайдет любой зная пароль пользователя, ведь доступ к файлу будет всегда… А тут вытащил флешку и все, тока в конфигураторе править что бы войти…
Тут согласен да необходимо что то придумывать, но смотря как реализована защита у отраслевых конфигураций, там с этим на столько не замарачиваются, модуль запаролили и все.
П.С. Может на счет отраслевых не прав, особо не смотрел как там реализовано.
(20) Я понимаю что обидно, но весь этот проделанный нелегкий труд — бессмысленен.
Копайте в сторону шифрации модулей — это будет реально применимо.
(21) alex_4x, да вы что ни какой обиды =) наоборот только позитив от того, что вы заинтересовались, обдумали и высказали что считаете нужно… я еще раз обдумал, что сделал, в чем то лишний раз убедился в чем то понял что ошибся, в чем то заинтересовался… опыт от общения с положительно настроенным человеком, у которого нет цели оскорбить или высмеять, всегда находит место быть… =)
Надежнее разместить функцию проверки в сети интернет, где хранить информацию о привязке ключа к параметрам компьютера и при изменении условий сообщать о необходимости запроса лицензии.Также встречал функционал компиляции кода на удаленно.
В типовых конфигурациях встречал проверку наличия защиты при вызове основных/базовых процедур, а не только при старте системы.В этом случае ключ возвращал определенный код, который динамически исполнялся и определял дальнейшее действие в бизнес процессе.
(23) ivanov660,
Ну тогда для каждого компьютера нужно делать файл-ключик в отдельности… А если кто то узнает пароль пользователя и с его рабочего места войдет в базу? А тут пользователь флешку забрал и все никто не зайдет… Как по мне такой метод подходит для лицензирования конфигурации, а не для защиты от несанкционированного доступа…
Так же и здесь, можно впихнуть в любую часть конфигурации и как то завуалировать…
кто мешает убить защиту вот так:
//ОткрытьФорму(«Обработка.ПроверитьНаличиеКлючаЗащиты.Форма.Форма»);
такое под силу любому студенту….
наверно сабж можно применять не для защиты а для подписей, на флешке хранится открытый и закрытый ключ,
при начале работы 1с копирует себе открытый ключ и идентифицирует его с конкретным пользователем, при попытке «подписать» 1с берет с флешки закрытый ключ и им шифрует данные (сразу добавляя к ним открытый ключ), то есть будет вполне надежная ЭЦП без всяких толкинов и центров выдачи сертификатов.
конечно такая система не идеально, но лучше чем ничего 🙂
(25) vde69, никто не мешает… пароль от пользователя с полными правами надо беречь =) и ни кому не давать =)
(26) vde69, угу… тоже вариант…
Задумка интересная, только если флешка помрет, делать новую, трата времени, да и код можно закоментировать, просто защита от дурака. Но автор молодец!
(28) panihinnv, Спасибо за позитив.
Да закомментировать можно и тут надо что то придумывать… Может кто подкинет идеи?
А если флешка помрет то новую сделать не сложно, дольше идти в магазин за новой… Я думаю если взять флешку ~256mb то создать из нее новую займет не более минуты, пробовал на 8Gb заняло 2 минуты, самое долгое форматирование… =)
ИМХО, для примитивной защиты от простого юзера слишком сложно, а от «продвинутого» — слишком бесполезно, ибо «ломается» комментированием одной строки в коде.
(17) буду честен. Сам я такое никогда не делал, не было нужды. По ссылке ниже и без флешки и dll описан один из примеров реализации:
http://www.nashe1c.ru (с) Андрей Скляров
Думаю, правильно было бы рассматривать все в комплексе. Т.е. как организована работа системы.
1. Пользователи не должны быть с правами администратора (тогда всякого рода хакинг базы сведен к минимуму).
2. Нет доступа к конфигуратору (если у пользователя «»Полные права» то закомментировать нужную строчку проблем нет, хотя и займет немного времени).
Из опыта скажу, что любая защита лучше чем ее отсутствие, т.к. правильно здесь было замечено про стоимость взлома и т.п. Думаю, что любой кто бы такое встретил при запуске и подумать бы не смог что хакинг сведется к комментированию строчки кода, как минимум ожидаешь зашифрованный модуль или модуль без поставки кода. Те кому надо (враги) придут и заберут сервер со всеми потрохами, а от обычных юзеров «защита» сойдет. Если использовать как защиту кода (конфигурации) от повторного использования, то явно не подходит.
(31) JesteR, спасибо за ссылку, изначально были задумки с реестром, искал примеры работы с реестром но че то не встречались и данную статью не встречал. Вечерком надо будет посмотреть внимательнее…
(32) Yimaida, полностью согласен…
(32) Yimaida, К сожалению для настройки программы или учетной политики нужны именно права администратора.
Поэтому бухгалтеру приходится такие права давать (хотя бы на время). Иначе будете работать за них и отвечать за то как все настроено.
И вопрос автору — как флешка будет проверяться в случае сетевой версии с других компьютеров ?
Лет 20 назад делал защиту по номеру диска С. Команда «VOL c: > log.log» — т.е. ответ пишем в файл и далее читаем оттуда уникальный номер диска С: на компе. Сравниваем с зашифрованным при первоначальной инсталляции.
Вообще флешка не нужна. Но проблемы те же,нужно только в ПриНачалеРаботыСистемы добраться.
(34) folo, может ошибаюсь, давно права в БП не смотрел, разве роль Администратора дает право на конфигурирование?
(35) Думаю, возникла небольшая путаница. «Администратор» это имеется в виду для винды, а «Полные права» для 1с, а folo употребил «Администратор» вместо «Полные права».
Для «простого» пользователя — и пароля как средства защиты достаточно. Лень вводить пароль? Сделайте авторизацию по AD. С настройкой автоблокировки экрана при бездействии в течении пары минут. Забыть флешку в накопителе — также просто, как и забыть заблокировать экран.
Можно в текстовый файл зашить какой-нибудь 1С-код, и выполнять его камандой «Вычислить» или «Выполнить».
Можно часть кода — тогда можно без «Вычислить» или «Выполнить», поскольку Вычислить-Выполнить вроде не всех клиентах работает. Например, имя поля какой-нибудь структуры. Тогда будет, например, обычный 1С-код и имя поля структуры в переменной из файла защиты, можно сериализованное сжатое ХранилищеЗначения положить в файл защиты с разными данными или кусочками кода 1С.
Вызывать проверку в нескольких местах.
Тогда банальный коммент вызовов проверки защиты не прокатит, поскольку не выполнится нужный 1С-код.
(38) GusevNA, можно и так… можно что угодно в файлик засунуть потом вытащить и проверить или выполнить…
Лучшая защита — это трансформация данных!
Вставляете при начале работы запрос некоторого серийного номера, который выдаете и проверяете при запуске.
Неверный введенный серийник — выдаете сообщение «Программа не активирована. Купите серийный номер»
Никакие сообщения не возникают более. Продвинутый пользователь (типа хакер) радостный фиксит данную проверку и радуется.
Но в конфигурации, по времени и в разных местах расставлены доп. проверки, которые вылезают в самый неподходящий момент!
Делал так не однократно, звонили мне и покупали все таки конфу, администратора (типа хакера) ругали и мучали за «коммунизм»!
Работает такой механизм на «УРА!» и не надо никаких привязок к железу, флэшек и т.д.
При выпуске обновлений расставляет новые капканы, наступает момент, когда проще купить или отказаться, нежели фиксить все это хозяйство!
При этом все открыто! Найди, если хочешь!
Как то так…
(40) pro1c@inbox.ru, довольно интересно, но немного не понял что значит:
PID и VID… Допустим, закупаю я на бухгалтерию 5 одинаковых флешек под ключи, VID и PID у них, скорее всего совпадут.
Инсайдер может узнать поставщика организации, закупить у него такую же флешку, и скорее всего, она будет с тем же VID и PID.
Идея хорошая, но мне кажется одних PID и VID маловато будет.
Никогда не прикручивал к 1С WMIC, но подозреваю, что посмотреть нужные данные можно и без внешней dll,
разбором, например, выдачи консольной команды:
(34) «Vоlume serial» хорошая штука, выдерживает форматирование и мало кто знает в лицо утилиты по его замене.
Аналогичная защита была бы интересна как дополнительный слой защиты от выноса базы ушлыми сотрудниками за пределы сервера.
Меня вот реально интересует следующее: Умеет ли кто нибудь из тут присутствующих подменять исполняемый на форме или в модуле код ? То есть то что это возможно — я уверен, ведь этот текст просто считывается 1С-кой из бызы 1С и выполняется, значит как-то можно этот код подменить. Оператор Выполнить (КусокКода) — это не серьезно, большой кусок кода им не исполнить.
(43) Из общих модулей и модулей объектов код можно выпиливать, в модулях форм код можно обфусцировать (пример обфускатораhttp://infostart.ru/public/15907/ ), можно придумать какой угодно свой динамический интерпретатор (подобные технологии были придуманы и обкатаны ещё в MSDOS-вирусах), вариантов масса.
Сложно соблюсти баланс между простотой установки типовых обновлений на защищённую конфигурацию и сложностью выпиливания защиты.
(44) v3rter, Скажите пожалуйста как выпиливать код из модулей ???
Можно примерчик обработки с выпеленным кодом (ну чтобы кнопку нажимаешь, он пишет «- привет мир!»)
Или это надо какие-то платные и не на любой платформе работающие специальные напильники покупать ?
Обфускация — тема зачётная. Но я хочу понять про полную подмену (в одном случае один код, в другом — полностью другой чтобы был)
Спасибо!
(41)
это кода ноль — становится единицей!
когда слово «да» исправляется на «нет»
когда к итоговой сумме прибавляется случайное число от 1 рубля до 100 рублей, например.
т.е. защита не кричит об ошибке. ошибку видно потом, но Вы не виноваты! конфигурацию ведь — не купили!
(46)То же самое что и добраться до процедуры «При открытии». То есть в какой то момент, нашли проблему. Посмотрели в коде, где косяк. Нашли косяк посмотрели какими методами реализована «зашита», проанализировали глобальным поиском конфигурацию, на похожие места.
(45) «Выпилить» можно только в модулях конфигурации. Вот тут обсуждали детали:http://forum.infostart.ru/forum26/topic74028/
Для тех, кому интересно: получаем консольной командой метку тома и серийный номер тома для всех подключенных флешек
(на всякий случай, если будет кем-то прочтено без контекста: серийный номер отформатированного раздела, а не железа флешки)
(48) v3rter, Поставка без «кода» или с паролем — это блеф. Там весь код остается, его сто лет в обед через плагины и обработкой расшифровки достать можно.
Вопрос как код полностью взять из другого источника.
(47) webester,
модули защиты варьировать, не повторяться… расставлять в неудобных местах…
А что мешает использовать клиент-серверный вариант 1С с настроенным входом через домен, а уже в самом домене настраивать всё как вам угодно? Зачем лишний физический посредник? Что он даёт?
Извиняюсь. Перечитал введение и понял что это способ защиты конфигурации, а не информации в конфигурации. Вопрос отпал.
Идея хорошая.(25) vde69,
но если вы не Администратор конфигурации, то как вы попадете в неё чтобы поставить //
Я понимаю, в файловом варианте можно взломать методом удаления паролей в файле))
А если у вас на сервере стоит 1с. SQL. Только у админа есть доступ к конфигурации. То метод хорош.
(52)
статья для размышления )
Метод заслуживает внимания, но, как уже тут упоминалось:
1. хорошо бы отказаться от dll (
2. вообще уйти от локального USB, ибо зачастую НЕТ доступа у пользователя к USB (либо не должно быть)
Это не защита. Уберите громкое название из заголовка статьи. Вся это «котовасия» рушится при комментировании строки ОткрытьФорму(«Обработка.ПроверитьНаличиеКлючаЗащиты.Форма.Форма»)
С аналогичным успехом можно было просто создать текстовый файлик на флешке и прописать туда что угодно…
5 см за такое — вы меня извините — это уровень старших классов средней школы.
(54) Да вы прям хакер ))) Вы возможно не поняли суть и назначение.
я вот тоже не понял сути.
закомментировали строку проверки и все.
1. Где закрытый код который не работает если не выполняется проверка ключа?
2. Если я работаю на Маке? то все? метод не применить?
А Маководов кстати становится все больше.
а информацию о накопителе можно и без dll вроде получитьhttp://infostart.ru/public/17199/