Запрет запуска ert на низком уровне
Статья описывает возможность запрета на программный и интерактивный доступ к внешним ert средствами внешней компоненты (ВК). Приведен пример внешней компоненты с исходным кодом. | Автор статьи: romix | Редакторы: jbond Последняя редакция №4 от 08.04.06 | История URL: http://kb.mista.ru/article.php?id=114 |
Ключевые слова: ert, внешний отчет, внешняя обработка, запрет, безопасность, защитить
см. также
Книга знаний: Взлом и защита 1С:Предприятие 7.7
Не секрет, что одной из основных уязвимостей в системе безопасности 1С:Предприятие 7.7 является возможность программного открытия внешних отчетов и обработок (файлов с расширением ert), независимо от запрета на запуск внешних отчетов и обработок в пользовательских правах.
Другими словами, штатные средства 1С:Предприятие позволяют заблокировать только интерактивный, но не программный доступ к ert.
Приведенная ниже внешняя компонента позволяет блокировать доступ (как программный, так и интерактивный) к внешним отчетам и обработкам вне папки ExtForms конфигурации (в этой же папке должна находиться и компонента StopErt.dll).
Внешняя компонента перехватывает системный вызов CreateFile (эта функция используется в системе Windows для создания или открытия файлов) и блокирует доступ к ert, путь которых не принадлежит требуемой папке или содержит "..". Две точки как в Windows, так и в Unix используются для выхода в вышестоящую папку, что необходимо учитывать во избежание "хитрых" действий пользователя по обходу защиты.
Методика программного перехвата функций DLL подробно описана в книге Джеффри Рихтера "Windows для профессионалов".
Инициализация внешней компоненты
ФайлВК=КаталогИБ()+"ExtForms\StopErt.dll";
Если ЗагрузитьВнешнююКомпоненту(ФайлВК)=0 Тогда
Сообщить("Не удается загрузить "+ФайлВК);
Возврат;
КонецЕсли;
Больше ничего делать не нужно.
Первый запуск конфигурации необходимо производить под правами администратора или привилегированного пользователя Windows.
Внешняя компонента для скачивания:
http://x-romix.narod.ru/StopErt.rar
(~63К, скачивать ЛЕВОЙ кнопкой мыши).
В комплекте с компонентой идет описание, тестовый пример конфигурации с внешними отчетами и исходный код (компилятор - Delphi 6).
Вариант с использованием ВК 1С++ 2.0.2 или FormEx 2.0.2:
ПриЗагрузкеВнешнегоОтчета / OnLoadAsExternalForm
Синтаксис: ПриЗагрузкеВнешнегоОтчета(ИмяФайлаОтчета)
Параметры:
• ИмяФайлаОтчета - полный путь к файлу отчета (вместе с собственно именем файла).
Описание: Предопределенная процедура глобального модуля вызывается при загрузке внешнего отчета. Если в процедуре установить статус возврата в ноль, то внешний отчет не будет загружен.
Пример:
Процедура ПриЗагрузкеВнешнегоОтчета(ИмяФайлаОтчета)
// разрешен запуск внешних отчетов только из определенной папки
РазрешенныйПуть = КаталогИБ() + "\ВнешниеОтчеты\";
Если Врег(Лев(ИмяФайлаОтчета,СтрДлина(РазрешенныйПуть))) <> Врег(РазрешенныйПуть) Тогда
Сообщить("Запуск внешних отчетов разрешен только из каталога """+РазрешенныйПуть+"""");
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры
Как всегда 1С++ рулит по полной программе!
(от romix: функционал 1C++ в части ПриЗагрузкеВнешнегоОтчета был дополнен по результатам достаточно горячего обсуждения этой статьи Запрет запуска ert на низком уровне (статья+ВК)).
No comments:
Post a Comment