Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 и 8.0. Выпуск 95


Информационный Канал Subscribe.Ru

Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 95 / 30.11.2005

Взлом и защита 1С:Предприятия 7.7

Автор: Роман Чертанов (romix)
Статья в Книге знаний: http://kb.mista.ru/article.php?id=55

В статье описаны как штатные механизмы защиты 1С:Предприятие 7.7 от обхода встроенной системы разграничения прав доступа, так и параметры настройки реестра Windows, а также программные ограничения WH_CBT (Computer Base Training - блокировки для обучающих программ). Показано сокрытие кнопки Пуск и рабочего стола средствами Windows API.

лняет проверок прав доступа со стороны программного кода – все проверки выполняются только в интерактивном (пользовательском) режиме. Поэтому для защиты необходимо полностью закрыть любые возможности для выполнения любого поступающего извне программного кода, что вполне обеспечивают средства администрирования 1С (и системы Windows NT/2000/XP).

Откроем в Конфигураторе информационную базу и зайдем на вкладку Права. Дважды щелкнем на название имеющегося набора прав (или создадим новый набор). Из контекстного меню при клике на корневом элементе появившегося «дерева» выберем единственный пункт «Свойства». В списке перечислены потенциально опасные действия пользователей. Рассмотрим некоторые из них.

Настройка: Административные функции

Уберите эту галочку, и пользователи не смогут под своим паролем изменять конфигурацию (файл конфигурации MD).

Разумеется, типичный Темный Пользователь может пойти обходным путем, и изменить непосредственно файл MD (например, при помощи плагина для FAR DocFile Browser, который умеет читать и изменять Compound-файлы Microsoft). Поэтому, файл MD необходимо открыть пользователям для доступа по сети только на чтение. Аналогично следует поступать с текстовыми файлами, которые извлечены из MD посредством директивы #ЗагрузитьИзФайла или внешней компоненты TurboMD.

Настройка: Использование в качестве OLE Automation сервера

Информационную базу можно «поюзать» через механизм OLE. Закройте для Темного Пользователя еще одну дверь, которая позволила бы ему видеть и изменять в информационной базе все.

Настройка: Использование любых Внешних Отчетов и Обработок

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

Настройка: Использование общих Внешних Отчетов и Обработок

Общие внешние отчеты и обработки находятся в папке ExtForms. На эту папку, разумеется, необходимо установить права доступа «только на чтение». Иначе Темные Пользователи положат в эту папку нужные им обработки, и выполнят произвольный программный код.

Настройка: Использование функций в табло и формульном калькуляторе

Малоизвестная возможность, но она тоже позволяет «сделать все», не имея никаких других прав.
Откройте пункт меню Сервис-Табло. Наберите в появившемся Табло (засветите в него) следующий программный код:
ОткрытьФорму("Отчет",," Тест.ert") 
Если в каталоге информационной базы лежит внешний отчет Тест.ert, то он будет открыт и выполнен, независимо от установленных у пользователя прав на выполнение Внешних Отчетов и Обработок. Аналогичная возможность имеется для калькулятора, если в меню Сервис-Параметры, на вкладке Общие, Темный Пользователь установил для него формульный режим.

Методы ОткрытьФорму/ОткрытьФормуМодально

Аналогичная уязвимость может существовать для конфигураций: если они выполняют встроенную функцию 1С наподобие
ОткрытьФорму("Отчет", , ИмяФайлаОтчета);
ОткрытьФормуМодально("Отчет", , ИмяФайлаОтчета);
не проверяя пользовательские права, то Темный 1С-ник может сделать с информационной базой опять же все, что захочет, ибо для него информационная база полностью открыта. Поэтому закройте в систему и эти «врата», и у Темного 1С-ника будет меньше шансов выполнить свое черное дело.

Защита таблицы

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

ОбработкаЯчейкиТаблицы

Темный 1С-ник может занести в поле Расшифровка таблицы совсем не то, что предусматривал разработчик.
Например, "Отчет.КарточкаСчета". Таким способом, он может открыть "неположенный" ему по должности отчет.

Блокируем чтение и изменение таблиц данных

Информационную базу (особенно, в DBF-варианте) злоумышленник может скопировать и унести целиком, ибо в сжатом виде она может «весить» совсем немного. После этого, злоумышленник может просто удалить папку с паролями, и получить к своей копии базы полный, ничем не ограниченный доступ.

SQL-вариант информационной базы тоже может быть скопирован, но для этого надо знать имя сервера и пароль пользователя sa (или логин и пароль dbo). Как же узнать эту информацию? Она хранится (в зашифрованном виде) в файле DBA информационной базы, и поддается расшифровке при помощи небольшой «хакерской» утилиты (название не помню).

Впрочем, во многих случаях пароль sa назначен пустым, или представляет собой любимое многими администраторами значение 123. Чтобы выяснить этот факт, достаточно воспользоваться сетевым сканером безопасности, который выявит в вашей сети эти и подобные огрехи. Удачным сканером безопасности является программа x-spider.

Однако, про утилитку, извлекающую из информации о подключении логины и пароли, Темные Пользователи, разумеется, уже знают, поэтому пустой или не пустой пароль sa - особой роли уже не играет. Факт в том, что при любом пароле Темные Пользователи могут делать с информационной базой 1С все, что угодно: копировать всю базу, а также изменять или удалять отдельные записи. Правда, это придется делать на более низком уровне (правкой таблиц информационной базы), но ничего невозможного или сверхсложного в этом нет. Таблицы есть таблицы, просматривать и редактировать их можно небольшими утилитами или скриптами (в т.ч. из комплекта Microsoft Office), а связи между элементами данных прописаны в текстовом файле DD/DDS.

Защита при помощи сервера терминалов

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

HKCU\
Software\
 Microsoft\
  Windows\
   CurrentVersion\
    Policies\
     Explorer\RestrictRun

Строковые параметры с именами в виде чисел по возрастанию указывают, запуск каких программ необходимо разрешить (запуск остальных будет запрещен), например:

1=c:\Program Files\1Cv77\BIN\1cv7s.exe
2=c:\program files\msoffice\winword.exe

При экспериментах разрешите себе запуск regedit.exe.
Прописывайте полные пути, иначе Темный Пользователь сможет назвать именем 1cv7s.exe произвольный софт.

Скрываем кнопку Пуск и Рабочий стол

Пример программы, которая скрывает кнопку Пуск (вместе с панелью задач) и рабочий стол.
Чтобы от панели задач не оставалась «дырка» в окне Windows, включите ее (панели задач) автоскрытие.

Компилятор – Delphi 6.
Имя файла – HideStartButton.dpr.

Program HideStartButton;

uses Windows;

var h1, h2 : THandle;

begin
h1 := FindWindow('ProgMan', nil);
h1 := GetWindow(h1, GW_CHILD);
ShowWindow(h1, SW_HIDE);

h2 := FindWindow('Shell_TrayWnd', nil);
ShowWindow(h2, SW_HIDE);

MessageBox(0, 'Рабочий стол и кнопка Пуск были скрыты.', 'HideStartButton', MB_ICONINFORMATION);

ShowWindow(h1, SW_SHOW);
ShowWindow(h2, SW_SHOW);

MessageBox(0, 'Рабочий стол и кнопка Пуск были восстановлены.', 'HideStartButton', MB_ICONINFORMATION);

end.

Скомпилированные примеры кода приведены в конце этой статьи.

Блокируем окна «Открыть» и «Сохранить как», а также меню Пуск

Пример программы, которая блокирует окна «Открыть» и «Сохранить как», а также запрещает открытие меню кнопки Пуск по нажатию Ctrl-Esc и кнопки Windows.

Компилятор – Delphi 6.
Имя файла – HookCreateWindow.dpr.

Program HookCreateWindow;
uses Windows;

var HookHandle: hHook;

///////////////////////////////////////////////////////////////////////
//Ловушка WH_CBT (Computer Base Training - блокировки для обучающих программ)
function CBTProc(Code: integer; WParam: word; LParam: Integer): Longint; stdcall;

type PCBT_CREATEWND=^CBT_CREATEWND;
var s: pchar;
var z: PCBT_CREATEWND;
var ok: Integer;
begin
    if Code<0 then begin
      Result := CallNextHookEx(HookHandle, code, WParam, LParam);
      exit;
    end;

     case Code of
       HCBT_CREATEWND: begin //Перехватываем создание окна

         z:=PCBT_CREATEWND(LParam);

         //Получаем заголовок окна
         s:=z.lpcs.lpszName;


         if s<>nil then begin

         ok:=0;

         //Сравнение заголовка окна и подстроки
         if s^<>'О' then ok:=1; inc(s);
         if s^<>'т' then ok:=1; inc(s);
         if s^<>'к' then ok:=1; inc(s);
         if s^<>'р' then ok:=1; inc(s);
         if s^<>'ы' then ok:=1; inc(s);
         if s^<>'т' then ok:=1; inc(s);
         if s^<>'ь' then ok:=1; inc(s);
                 if s^<>#0  then ok:=1;


         if ok=0 then begin //Если подстрока найдена..
           Result:=1; //.. то запрещаем открытие окна
           exit;
         end;

         end;

       end;// HCBT_CREATEWND:

       HCBT_SYSCOMMAND: begin
         case WParam of

           //Блокируем меню Пуск по Ctrl-Esc и клавише Windows
           SC_TASKLIST: begin
             Result:=1; //Запрещаем действие
             exit;
           end;

         end;//case WParam

       end; // HCBT_SYSCOMMAND:
     end;//case

   Result := 0;//Разрешаем действие
end;

///////////////////////////////////////////////////////////////////////
begin
 //Устанавливаем ловушку на сообщения WH_CBT
 HookHandle := SetWindowsHookEx(WH_CBT, @CBTProc, HInstance, 0);

 if HookHandle<=0 then begin
   MessageBox(0,'Ошибка - ловушка не была установлена!','HookCreateWindow',MB_ICONERROR);
   Exit;
 end;

MessageBox(0, 'Ловушка установлена. Проверьте диалоги открытия и записи файла.', 'HookCreateWindow', MB_ICONINFORMATION);

 //Убираем ловушку
 if HookHandle <> 0 then
   UnhookWindowsHookEx(HookHandle);

MessageBox(0, 'Ловушка снята. Диалоги открытия и записи файла снова доступны.', 'HookCreateWindow', MB_ICONINFORMATION);
end.

Скомпилированные примеры кода приведены в конце этой статьи.

Автозапуск примеров

Автозапуск примеров из меню "Пуск-Программы-Автозагрузка" может быть отключен Темным пользователем удерживанием при старте клавиши Shift. Поэтому, автозапуск необходимо поместить "поглубже" в реестр.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"HideDesktop"="E:\\Защита1С\\WinHooks\\HideStartButton\\HideStartButton.exe /i"
"HookCreateWindow"="E:\\Защита1С\\WinHooks\\HookCreateWindow\\HookCreateWindow.exe /i"

Для их автозапуска для всех пользователей -
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
(однако, будьте с этим осторожны, чтобы не заблокировать все себе).

Ключ /i отключает окна с вопросами и заставляет программу "заснуть".
 if ParamStr(1)='/i' then begin
   repeat
     sleep(10000);
   until false;
 end;

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

Автозапуск примеров для текущего пользователя

"HideDesktop"="E:\\Защита1С\\WinHooks\\HideStartButton\\HideStartButton.exe /i"
"HookCreateWindow"="E:\\Защита1С\\WinHooks\\HookCreateWindow\\HookCreateWindow.exe /i"

Блокируем нажатия Windows-E и Windows-R

Они открывают, соответственно, проводник и окно «Запуск программы», которые позволят Темному Пользователю сделать свое черное дело.
Ключ реестра NoWinKeys блокирует горячие клавиши Windows:

HKCU\
Software\
 Microsoft\
  Windows\
   CurrentVersion\
    Policies\
     Explorer\NoWinKeys = dword:1m

Отключение запуска диспетчера задач по Ctrl-Alt-Del

Еще одна лазейка для Темного Пользователя.
Ключ реестра DisableTaskMgr блокирует диспетчер задач:
HKCU\
Software\
 Microsoft\
  Windows\
   CurrentVersion\
    Policies\
     System\DisableTaskMgr = dword:1

Блокируем изменение программных файлов 1С:Предприятие

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

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

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

Скомпилированные примеры кода из статьи приведены здесь:
http://x-romix.narod.ru/WinHooks.rar


Новости Волшебного форума

  1. По статистике, Волшебный форум стал самым популярным и активным форумом по 1С в Интернете, опередив ближайшего конкурента "Территория 1С".
  2. Добавлена раскраска фрагментов программного кода в тексте сообщения (не требуется обозначать код специальными тегами, движок форума пытается догадаться сам, где начинается, а где заканчивается программа).
  3. Сделано добавление сообщений без перезагрузки страницы.
  4. Реализовано автоматическое обновление темы (как в чате), подгружаются только новые сообщения.
  5. Для экономии трафика есть возможность включить сжатие GZIP в личных настройках.

Заходите на форум. С нами интересно!


mista.ru - официальный сайт рассылки, учебник по 1С 7.7, статьи, ссылки на другие сайты
forum.mista.ru - Волшебный форум, самый популярный форум по 1С в Интернете
kb.mista.ru - Книга знаний на принципах Wikipedia. Вы можете добавить и отредактировать любую статью.

С уважением,
Станислав Митичкин (Волшебник)
stasmit@mail.ru


Уважаемые начинающие программисты 1С!

Войдите в Новый 2006 Год настоящим специалистом!

Крупнейшая франчайзинговая сеть "Бухучет и торговля" предоставляет уникальную возможность бесплатно пройти 3-недельные курсы обучения для начинающих программистов 1С и стать полноценным сотрудником компании уже к Новому Году!

Что требуется от Вас (эти требования являются обязательными):

1. Возраст от 21 до 35 лет
2. Знание современных языков программирования
3. Знание основ бухучета
4. Образование высшее или неполное высшее (экономическое или техническое)
5. Желание работать в компании и стать программистом 1С.

Почему надо работать у нас?

? Продвинутая система обучения (большое количество курсов для сотрудников)
? Достойная схема мотивации (опытный специалист зарабатывает $1500-$2000)
? Множество дополнительных бонусов
? Оплачиваемый отпуск
? Компенсация расходов на сотовую связь
? Оплачиваются транспортные расходы
? Мы находимся в 5 метрах от метро "Преображенская площадь"
? Вы будете работать в новом офисе с новой мебелью и компьютерами
? Есть возможность частичной занятости в случае, если Вы - студент
? Программист занимается внедрением, никаких продаж, никаких замен картриджей
? Для опытных специалистов предоставляется жилье
? Хорошие перспективы для профессионального и карьерного роста

Компания также остро нуждается в опытных программистах 1С.

Звоните: 748-44-48

Резюме присылайте по электронной почте: iotkalo@1cbit.ru

Мы сделаем из Вас профессионала!!!


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.magic1c
Архив рассылки
Отписаться
Вспомнить пароль

В избранное