# Сервис сканирования файлов

Механизм автоматической антивирусной проверки вложений при загрузке в систему. Взаимодействует с внешними сканирующими решениями (например, Kaspersky Scan Engine) через API, обеспечивая контроль безопасности файлов до их сохранения в хранилище.

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

**Основные сценарии использования:**
- Контроль безопасности файлов, загружаемых пользователями из внешних источников;
- Предотвращение попадания вредоносного ПО в корпоративную систему;
- Проверка вложений перед их использованием в бизнес-процессах;
- Соответствие требованиям информационной безопасности организации.

## Архитектура

```mermaid
%%{init: {'flowchart': {'fontSize': 24, 'nodeSpacing': 50, 'rankSpacing': 80, 'diagramPadding': 30}} }%%
flowchart TD
    A[Загрузка файла в систему] --> B[Проверка доступности сервиса сканирования]
    B --> C[Сервис доступен]
    B --> D[Сервис недоступен]
    
    C --> E[Сканирование файла]
    E --> F[Файл безопасен]
    E --> G[Обнаружена угроза]
    
    F --> H[Загрузка в хранилище]
    H --> I[Файл доступен<br>для работы]
    
    G --> J[Удаление]
    G --> K[Изоляция]
    K --> L[Помещение в карантин]
    L --> M[Запись в Реестр]
    M --> N[Ожидание решения]
    
    D --> O[Загрузка файла в хранилище]
    O --> P[Файл доступен<br>для работы]
    P --> Q[Запись в Реестр]
    Q --> R[Проверка при скачивании<br>на ПК пользователя]
```

## Настройка

Настройка антивирусной проверки выполняется в разделе:

`Настройки модулей системы > Общие настройки модулей > btk > Антивирусное ПО`

**Настройки сервиса сканирования файлов**  

В этом разделе задаются параметры подключения и поведения сервиса:

- **Хост** — адрес сервера внешнего сканирующего сервиса;
- **Порт** — порт подключения к сервису;
- **Сервис** — выбранный сервис сканирования в антивирусе;
- **Удаление файла при обнаружении** — флаг удаления файла (если не установлен — файл изолируется);
- **Текст сообщения** — сообщение, отображаемое пользователю при обнаружении угрозы.

**Сервис сканирования файлов**

В этом разделе управляется активация механизма — выбор внешнего сканирующего сервиса для включения проверки или «Не определено» для отключения.

## Процесс проверки файлов

Проверка выполняется **на этапе загрузки файла** автоматически при попытке добавить вложение через любой инструмент прикрепления файлов. Контроль происходит **до** фактической загрузки файла в хранилище: пользователь инициирует добавление файла -> система отправляет файл на проверку -> если угроз не обнаружено, файл сохраняется в системе.

Механизм распространяется только на внешние файлы, загружаемые через интерфейс прикрепления вложений. Внутренние системные файлы и файлы, формируемые интеграционными процессами, проверке не подлежат.

```{admonition} Исключение из проверки
Чтобы исключить файлы из антивирусной проверки, внесите класс объекта-источника в справочник `Btk_FileRestrictionDisable` — «Настройка снятия ограничений на прикрепление файлов».  
При загрузке система проверяет метаданные файла в таблице `Btk_File`: если класс объекта-источника (значение `gidSrc`) присутствует в справочнике `Btk_FileRestrictionDisable`, файл загружается без проверки.
```

## Режимы работы

В зависимости от доступности внешнего сервиса сканирования система работает в одном из двух режимов.

### Сервис сканирования недоступен

Если сканирование включено, но внешний сервис не работает или недоступен, файл пропускается в систему.

При этом файл **полностью доступен для дальнейшей работы:** его можно использовать в объектах, скачивать, редактировать связанные данные. При попытке скачать файл проверка выполняется антивирусом на ПК пользователя. Файл также попадает в реестр вредоносных файлов для последующего контроля.

### Сервис сканирования доступен

Если внешний сервис работает, выполняется сканирование файла. При отсутствии угроз файл загружается в систему. При обнаружении угрозы выводится информационное сообщение, после чего выполняются настроенные действия: изоляция или удаление.

## Действия с зараженными файлами

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

**Изоляция** (настройка по умолчанию):
- зараженный файл помещается в отдельное файловое хранилище — карантин;
- файл недоступен для использования в системе и скачивания;
- при решении пропустить файл через реестр вредоносных файлов он перемещается из карантина в целевое хранилище, куда планировалась исходная загрузка;
- файл можно удалить из карантина без перемещения.

**Удаление:**
- файл сразу удаляется из системы без возможности восстановления.

```{admonition} Настройка
Изменить действие по умолчанию можно в настройках модулей системы.
```

## Реестр вредоносных файлов

**Реестр вредоносных файлов** — это журнал файлов, которые не прошли проверку или содержат угрозы.

Путь к реестру: `Настройки системы > Настройки и сервисы > Дополнительно > Реестр вредоносных файлов`.

![reest](/030_class/service/img/reestr_antivirus.png)

**Что попадает в реестр:**
- файлы с обнаруженными вирусами;
- файлы, не прошедшие проверку из-за недоступности сервиса;
- файлы, при проверке которых возникли ошибки.

Файлы в реестре физически хранятся в карантинном хранилище и недоступны для использования до принятия решения.

**Действия в реестре:**

- **Пропустить** — разрешить использование файла в системе. Доступно пользователям с объектной привилегией `allowfile` — «Пропускать подозрительный файл» или ролью `btk_allowfile` — «Исключение подозрительных файлов из процесса сканирования».
- **Повторно сканировать** — запустить проверку файла заново. Доступно всем пользователям с доступом к реестру. После повторного сканирования результат проверки обновляется в записи реестра.

```{admonition} Привилегии
- Кнопка **Пропустить** отображается только у пользователей с соответствующей привилегией.
- При пропуске файла оставьте комментарий в диалоговом окне — это обязательное действие.
- После пропуска файл перемещается из карантина в целевое хранилище и становится доступен для использования.
```

**Рекомендация по настройке сторонних антивирусов**

Если на сервере с файловым хранилищем установлен дополнительный десктопный антивирус, добавьте в исключения:
- путь к основному файловому хранилищу;
- путь к карантинному хранилищу.

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

**Отсутствие автоматических уведомлений**

Сервис не формирует автоматические оповещения для администраторов при обнаружении угроз. Все сведения о проблемных файлах фиксируются только в реестре вредоносных файлов. Обработка записей выполняется по факту обращения пользователя или при самостоятельной проверке реестра администратором.

## Журнал логов

Путь к журналу: `Аудит > Журнал сканирования файлов`.

![log](/030_class/service/img/log_antivirus.png)

В журнале фиксируются результаты проверки файлов, ошибки сканирования и действия, выполненные с файлами.

**Поля журнала:**

| Поле | Описание |
|------|----------|
| **Пользователь** | Учетная запись пользователя, который инициировал загрузку файла. |
| **Хост** | Адрес компьютера или сетевого узла, с которого была выполнена загрузка. |
| **Сервис** | Наименование сервиса сканирования, который выполнял проверку (например, `Kaspersky Scan Engine`). |
| **Дата** | Дата и время загрузки файла и выполнения проверки. |
| **Продолжительность** | Длительность сканирования файла в миллисекундах. |
| **Имя файла** | Оригинальное наименование файла. |
| **Путь до файла** | Расположение файла в файловом хранилище системы. |
| **Угроза** | Наименование обнаруженной угрозы, если проверка выявила вредоносный код. |
| **Тип угрозы** | Категория обнаруженной угрозы: вирус, троян, шпионское ПО, нежелательное ПО и т.д. |
| **Результат** | Итог проверки. Возможные значения:<br>- `Обнаружена угроза` — файл содержит вредоносный код;<br>- `Не представляет угрозы` — файл безопасен;<br>- `Ошибка со стороны клиента` — соединение установлено, но запрос не может быть выполнен корректно из-за ошибок клиента;<br>- `Ошибка соединения` — не удалось установить соединение с сервисом сканирования. |
| **Действие** | Выполненное действие с файлом. Возможные значения:<br>- `Пропущен вручную` — файл разрешён к использованию через операцию **Пропустить** в Реестре вредоносных файлов; файл перемещается из карантина в целевое хранилище;<br>- `Заблокирован` — файл перемещён в карантинное хранилище, создана запись в Реестре вредоносных файлов;<br>- `Пропущен` — файл загружен без ограничений;<br>- `Пропущен с ошибкой` — при ошибке сканирования файл пропущен для сохранения бизнес-процессов, но помещён в Реестр вредоносных файлов;<br>- `Удален` — файл удалён из системы. |
| **Описание** | Дополнительная техническая информация о событии проверки. |
| **Комментарий** | Примечание, добавленное пользователем или системой для пояснения результата. |

## Сценарий работы

Общий сценарий обработки файла при загрузке в систему на примере Kaspersky Scan Engine:

1. **Загрузка файла**  
   Пользователь инициирует загрузку файла.

2. **Проверка**  
   Система автоматически отправляет файл на проверку в Kaspersky Scan Engine.

3. **Результат проверки**  
   В зависимости от ответа антивируса:
   - Если файл безопасен — он загружается в хранилище и становится доступен для использования согласно правам доступа;
   - Если обнаружена угроза или ошибка — система выполняет настроенное действие:
     - `Изоляция` — файл перемещается в карантинное хранилище и блокируется для использования;
     - `Удаление` — файл удаляется из системы;
     - `Пропуск с ошибкой` — при недоступности сервиса файл загружается в систему и попадает в реестр.

4. **Уведомление пользователя**  
   Если файл заражен, пользователь получает информационное сообщение с указанием:
   - что произошло с файлом;
   - куда обратиться за помощью (к администратору или в службу поддержки).

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

6. **Анализ логов**  
   Служба поддержки извлекает логи из журнала `Аудит > Журнал сканирования файлов`:
   - кто загрузил файл;
   - когда произошла проверка;
   - какой результат получен.

7. **Принятие решения**  
   Служба поддержки принимает решение:
   - пропустить файл;
   - удалить файл окончательно;
   - повторно сканировать.
