Thursday, June 15, 2006

Запрет запуска ert на низком уровне

Запрет запуска 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: