Как отловить несанкционированное COM-соединение и предотвратить самопроизвольное изменение данных

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет
← На главную

Ситуация, когда данные в информационной базе начинают «жить своей жизнью» — очищаться, изменяться или перезаписываться без участия пользователя, — является критической для любого предприятия. Особенно остро это ощущается в таких конфигурациях, как 1С:Бухгалтерия 3.0 КОРП, где автоматизация процессов тесно переплетена с внешними обменами. Рассмотрим ситуацию, когда документы РезервыПоОплатеТруда самопроизвольно очищаются, а Журнал регистрации фиксирует загадочное COM-соединение. Проанализируем причины этого явления и разберем по шагам методы обнаружения «виновника».

Выясним причину: почему очищаются документы?

Прежде чем приступать к активному поиску, проанализируем механику проблемы. Если документ был заполнен и проведен, а через 10–15 минут данные в нем исчезли, это означает, что некий внешний процесс инициировал программную перезапись объекта. В Журнале регистрации это часто выглядит как сеанс с типом COM-соединение. Основная сложность заключается в том, что стандартный журнал не всегда показывает IP-адрес или имя компьютера, с которого пришел запрос.

Наиболее вероятной причиной в 90% случаев является наличие забытой копии базы данных. Рассмотрим типичный сценарий: администратор сделал копию «боевой» базы для тестов или разработки. При запуске копии система задает вопрос: «Информационная база перемещена или является копией?». Если был выбран вариант «Я передвинул ее», 1С не блокирует регламентные задания. В итоге копия базы по расписанию запускает обмен данными (например, с ЗУП), подключается по COM к «боевой» базе и, не обнаружив в себе актуальных данных по резервам, «транслирует» эту пустоту в основную базу, затирая корректные сведения.

Метод 1. Анализ через Технологический журнал (ТЖ)

Рассмотрим самый надежный способ идентификации источника подключения. Журнал регистрации дает нам лишь факт события, но Технологический журнал позволяет увидеть сетевые параметры. Для этого нам необходимо создать или отредактировать файл logcfg.xml, который располагается в каталоге conf на сервере 1С.

Проанализируем пример настройки, которая позволит отловить входящие соединения:


<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\LOGS\COM_CONN" history="24">
    <event>
      <eq property="Name" value="CONN"/>
    </event>
    <event>
      <eq property="Name" value="PROC"/>
    </event>
    <property name="All"/>
  </log>
</config>

В данном логе мы сможем найти событие CONN, которое содержит атрибут t:computerName или IP-адрес источника. Это позволит нам точно определить физический сервер или рабочую станцию, с которой инициируется COM-объект.

Метод 2. Мониторинг сеансов в консоли администрирования

Разберем, как поймать соединение в режиме реального времени. Если изменения происходят периодически (раз в 10–15 минут), мы можем использовать консоль «Администрирование серверов 1С Предприятия».

  1. Откроем список сеансов нужной информационной базы.
  2. Добавим в список колонки «Имя приложения» и «Компьютер».
  3. Будем мониторить появление строк с приложением COM-соединение.
  4. Как только такое соединение появится, зафиксируем имя компьютера. Если соединение слишком кратковременное, можно использовать системную утилиту netstat -anb на сервере приложений Windows, чтобы увидеть, какой процесс rphost.exe принимает входящее соединение по порту и с какого IP-адреса оно пришло.

Метод 3. Программная ловушка в коде 1С

Если административные методы не дают быстрого результата, мы можем прибегнуть к «партизанскому» методу — внедрению кода-ловушки непосредственно в объект документа. Рассмотрим подробнее, как это реализовать. В модуле объекта документа РезервыПоОплатеТруда в процедуре ПередЗаписью добавим блок записи в Журнал регистрации расширенной информации.

Посмотрим на пример кода:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ОбменДанными.Загрузка Тогда
        // Сюда попадают изменения, идущие через COM/обмен
        ТекстДляЛога = СтрШаблон("ВНИМАНИЕ! Изменение документа через COM. Компьютер: %1, Пользователь: %2, База: %3", 
                        ИмяКомпьютера(), ИмяПользователя(), СтрокаСоединенияИнформационнойБазы());
        ЗаписьЖурналаРегистрации("ПоискВзломщика", УровеньЖурналаРегистрации.Предупреждение, , , ТекстДляЛога);
    КонецЕсли;
КонецПроцедуры

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

Метод 4. Анализ системных процессов через dllhost.exe

Выясним, как COM-объекты ведут себя на уровне операционной системы. Когда внешнее приложение подключается к 1С через COM, на стороне клиента или сервера (в зависимости от архитектуры) запускается процесс dllhost.exe (DCOM DLL Host Process), который загружает библиотеку comcntlev83.exe.

Используя «Монитор ресурсов» Windows, мы можем отследить активность этих процессов. Обратите внимание на сетевые подключения процесса dllhost.exe — там будет указан адрес сервера 1С, а в колонке «Пользователь» будет указана учетная запись, от имени которой запущен скрипт или база-копия. Часто это бывает техническая учетная запись, под которой работают службы 1С на тестовых серверах.

Предотвращение проблемы: системный подход

После того как мы нашли и «убили» несанкционированное соединение, важно предотвратить рецидив. Разберем основные правила гигиены при работе с копиями баз:

  1. Блокировка регламентных заданий: При развертывании любой копии в консоли кластера в свойствах информационной базы всегда устанавливайте флаг «Блокировка регламентных заданий включена».
  2. Проверка параметров синхронизации: В конфигурации Бухгалтерия 3.0 КОРП зайдите в раздел «Администрирование» — «Синхронизация данных» — «Настройки синхронизации». Убедитесь, что нет активных узлов обмена с ЗУП, использующих COM-подключение, которые не должны работать в автоматическом режиме.
  3. Смена пароля технического пользователя: Если вы не можете найти копию базы, временно смените пароль пользователя, под которым происходит COM-подключение. Это «уронит» несанкционированный процесс, и в логах системы инициатора обязательно появится ошибка подключения, которая поможет системным администраторам локализовать источник по записям об отказах в доступе.

Таким образом, комбинируя методы анализа Технологического журнала, мониторинга активных сеансов и программных методов логирования, мы можем быстро локализовать источник нежелательных изменений и навести порядок в ИТ-инфраструктуре предприятия.

← На главную