Создание СЗИ

Для создания СЗИ необходимо нажать кнопку "Добавить".

Последовательность создания СЗИ:

  1. Ввод имени. Важно: не рекомендуется использовать в качестве имени СЗИ фразу "WRONG RECORD", т.к. она зарезервирована Системой;

  2. Выбор шаблона (см. раздел "Шаблоны СЗИ");

  3. В зависимости от шаблона во вкладках "Общие настройки", "Маппинг" и "Воркфлоу" появляются поля, предзаполненные значениями по умолчанию;

  4. Выполняется заполнение полей;

  5. Сохранение созданного СЗИ;

  6. Созданное СЗИ представляет собой:

    • имя СЗИ и

    • конкретное заполнение настроек шаблона, в которых отсутствует лишняя информация, но присутствует конкретное значение.

image

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

Имя встроенной переменнойКомментарий

$CHAIN_ID

ID цепочки

$FILE_NAME

имя файла, который передается на анализ

$FILE_CHECKSUM

sha256 checksum файла

$FILE_SIZE

размер файла в байтах

$FILE_MIME_TYPE

mime-type файла (если заполнено в мета-информации, полученной с файлом из источника)

$FILE_CREATED

дата создания файла (если заполнено в мета-информации, полученной с файлом из источника)

$FILE_EXTENSION

расширение файла (если заполнено в мета-информации, полученной с файлом из источника)

$FILE_MODIFIED

время изменения файла (если заполнено в мета-информации, полученной с файлом из источника)

$INSTANCE_HOSTNAME

хост или IP-адрес инстанса, с которого происходит обращение к СЗИ (запущена задача)

Важно: чтобы подставить пароль или другие чувствительные данные, необходимо в разделе "Секреты" завести новую переменную, которая будет замаскированна средствами Системы (см. раздел "Создание секрета"). Затем в спецификации необходимо указать $ИМЯ_СЕКРЕТНОЙ_ПЕРЕМЕННОЙ, куда требуется подстановка данных. 

Например: PT_SANDBOX_API_KEY добавлен в разделе "Секреты", после чегор эту переменную можно использовать в URL, заголовках и теле запроса и других местах с помощью $PT_SANDBOX_API_KEY.

Возможные типы парметров, приведены в таблице ниже.

Тип переменнойКомментарии

text

текст

number

число

host

адрес сервера

port

порт (число от 1 до 65535)

json

гибкое поле

enum:val1|val2|…​

перечисление элементов, Например:, enum:sync|async|listening

[]number

список чисел

[]text

список строк

map[<key type (text)>]<value type (text, number, etc.)>

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

time-pair

выбор числа и выбор периода

registry

переменная из спецификации распаковки тела или заголовков ответа у шага с признаком is_report_step=true

Форма настройки интеграции с конкретным СЗИ зависит от выбранного шаблона. Модель описания шаблона интеграции приведена в таблице ниже.

ПараметрШаблон и значениеКомментарии

Общие настройки. Тип: map[string]any

connection_limit

name: connection_limit label: Лимит подключений type: number default: 5

Лимит подключений к системе анализа

host

name: host label: Хост type: host default: 127.0.0.1

Хост, где стоит СЗИ

insecure_skip_verify

name: insecure_skip_verify label: Игнорировать верификацию безопасного соединения (вкл/выкл) type: bool default: false

Маппинг Вкладка глобального маппинга заголовков (расширяет все запросы вовне) и маппингов кодов или вердиктов для отчетности. Тип: map[string]any

request_headers_mapping

name: request_headers_mapping label: Маппинг заголовков запроса type: map[text]text default: {
     "filename": "X-File-Name"}

Глобальное расширение хэдеров для всех шагов воркфлоу Пример: "request_headers_mapping": {
     "filename": "X-File-Name"
}

verdict_mapping

блок фиксированной структуры

Маппинг вердикта на общую модель Используется при интерпретации результатов, полученных при прохождении шага в воркфлоу с признаком is_report_step = true

verdict_mapping.path

name: path label: Путь к вердикту в источнике type: registry default:  data.result.verdict

Переменная, из которой берется вердикт

verdict_mapping.map

name: map label: Маппинг вердиктов type: map[text]text default: {
     "DANGEROUS": "danger",
     "SUSPICIOUS": "suspicious",
     "CLEAN": "clean"
}

Маппинг текстовых вердиктов на общую вердиктовую модель. Используется при интерпретации результатов, полученных при прохождении шага в воркфлоу с признаком is_report_step = true Пример: {
"false": "danger",
"true": "clean"
}

verdict_mapping.default_verdict

name: default_verdict label: Дефолтный вердикт type: text default: unsupported

Дефолтное значение вердикта (если Система не нашла чему сопоставить)

Воркфлоу Упорядоченный список шагов, фиксирующий правила: "если шаг упал - следующий не запускается, Система выдает ошибку". Тип:  []map[string]any

Воркфлоу: Общие параметры шага

name

name: name label: Имя шага type: text default: upload file

Имя шага

is_report_step

name: is_report_step label: Шаг с отчетностью(вкл/выкл сбор отчета) type: bool default: false

Признак того, что на шаге будет получено в response отчетность. Важно: В каждом ворфлоу должен быть ровно 1 шаг с is_report_step = true

kind

name: kind label: Тип шага type: enum:sync|poll|listening default: sync

Тип шага В зависимости от kind в step может быть только какой-то из соответствующих блоков: * sync - шаг с ожиданием ответа сразу (одна попытка, нет условия) * poll - шаг с периодическим опросом (несколько попыток через интервал, есть условие завершения)

Воркфлоу: блок sync шага (kind=sync)

sync.protocol

name: protocol label: Протокол http запроса type: enum:http|https default: http

Протокол, по которому отправляется http запрос. Для разных протоколов могут появляться и исчезать некоторые поля в секции sync

sync.icap_protocol

name: icap_protocol label: Протокол icap запроса type: enum:icap|icaps default: icap

Протокол, по которому отправляется icap запрос Для разных протоколов могут появляться и исчезать некоторые поля в секции sync

sync.port

name: port label: Порт http type: port (numeric, 1, 65535) default: 443

sync.icap_port

name: icap_port label: Порт icap type: port (numeric, 1, 65535) default: 1344

sync.method

name: method label: Метод http запроса type: enum:GET|POST|PUT default: POST

sync.icap_method

name: icap_method label: Метод icap запроса type: enum:REQMOD|RESPMOD default: REQMOD

sync.path

name: path label: Путь обращения http type: text default: /analyze

Например /path/$TASK_ID

sync.icap_path

name: icap_path label: Путь обращения icap type: text default: /reqmod

sync.headers

name: headers label: Дополнительные http заголовки type: json default: {
   "Content-Type": "application/octet-stream",
   "Content-Length": "$FILE_SIZE",
}

Заголовки, отправляемые в http запросе

sync.icap_headers

name: icap_headers label: Дополнительные icap заголовки type: json default: {
   "Content-Type": "application/octet-stream",
   "Content-Length": "$FILE_SIZE",
}

Заголовки, отправляемые в icap запросе

sync.body

блок параметров описания тела

sync.body.mode

name: mode label: Режим передачи данных запроса type: enum:binary|multipart|json default: json

sync.body.payload

name: payload label: Шаблон тела запроса type: json default: {    "file_content": "$FILE_CONTENT" }

Важно: При mode = json, multipart Шаблон тела запроса (может быть пустым, в зависимости от режима body_mode)  Например:: "payload":  {    "api_key": "",    "scenario_id": "",    "check_service": "",    "file_content": "$FILE_CONTENT" }

При mode=multipart возможно указание кастомного имени для управляемого поля в multipart запросе Для этого необходимо добавить в описание шаблона тела запроса "field_name": "<значение по документации, пример curl -F …​>" В большинстве случаев не требует ничего указывать, т.к. будет корректно работать дефолт (file)

sync.success_codes

name: success_codes label: Коды успешности type: []number default: [200, 201, 204]

Коды успешности. Если код ответа не входит в этот список - шаг считается проваленным, выдается ошибка

sync.retry_count

name: retry_count label: Количество попыток подключения type: number default: 1

sync.retry_interval

name: retry_interval label: Интервал между попытками подключения type: time-pair default: {value: 10, period: "second"}

sync.retry_timeout

name: retry_timeout label: Таймаут ожидания ответа type: time-pair default: {value: 90, period: "minute"}

Воркфлоу: poll блок poll шага (kind=poll) Важно: для icap не поддерживается

poll.protocol

name: protocol label: Протокол запроса type: enum:icap|http|https default: http

Протокол, по которому отправляется запрос Для разных протоколов могут появляться и исчезать некоторые поля в секции poll

poll.port

name: port label: Порт type: port (numeric, 1, 65535) default: 1

poll.method

name: method label: Метод запроса type: enum:GET|POST|PUT default: POST

poll.path

name: path label: Путь обращения type: text default: /result

Допустимо использование spec-переменных

poll.headers

name: headers label: Дополнительные заголовки type: json default: {
   "Content-Type": "application/octet-stream",
   "Content-Length": "$FILE_SIZE",
}

Заголовки, отправляемые в запросе

poll.body

блок параметров описания тела

poll.body.mode

name: mode label: Режим передачи данных запроса type: enum:binary|multipart|json default: json

poll.body.payload

name: payload label: Шаблон тела запроса type: json default: {    "task_id": "$TASK_ID" }

При mode = json, multipart Шаблон тела запроса Например: "body":  {     "task_id": "$TASK_ID" } При mode=multipart возможно указание кастомного имени для управляемого поля в multipart запросе. Для этого необходимо добавить в описание шаблона тела запроса "field_name": "<значение по документации, пример curl -F …​>" В большинстве случаев не нужно ничего указывать, т.к. дефолт (file) будет работать корректно.

poll.success_codes

name: success_codes label: Коды успешности type: []number default: [200, 201, 204]

Коды успешности  Если код ответа не входит в этот список - шаг считается проваленным, выдается ошибка

poll.retry_count

name: retry_count label: Количество попыток подключения type: number default: 1

poll.retry_interval

name: retry_interval label: Интервал между попытками подключения type: time-pair default: {value: 10, period: "second"}

poll.retry_timeout

name: retry_timeout label: Таймаут ожидания ответа type: time-pair default: {value: 90, period: "minute"}

poll.poll_interval a

name: poll_interval label: Таймаут между попытками опроса type: time-pair default: {value: 2, period: "minute"}

Важно: параметр отсутствует в sync

poll.poll_global_timeout

name: retry_timeout label: Общий таймаут опроса type: time-pair default: {value: 90, period: "minute"}

Важно: параметр отсутствует в sync

poll.poll_until_path

name: poll_until_path label: Источник условия завершения опроса type: text default: data.status

Важно: параметр отсутствует в sync

poll.poll_until_op

name: poll_until_op label: Оператор условия завершения опроса type: enum:eq|neq|gt|lt default: eq

Важно: параметр отсутствует в sync

poll.poll_until_value

name: poll_until_value label: Значение условия завершения опроса type: text default: READY

Важно: параметр отсутствует в sync

Воркфлоу: extraction [.underline]#Важно:#_ Блок настроек "распаковки" ответа во внутреннюю модель

extraction.extraction_header_mapping

name: extraction_header_mapping label: Маппинг распаковки заголовков ответа type: map[text]text default: {
     "X-File-Name": "$FILENAME"
}

Маппинг заголовков результата на внутреннюю модель

Примеры: "extraction_header_mapping": {
   "X-Request-Id": "$REQUEST_ID",
   "X-RateLimit-Remaining": "rate_limit_remaining"
}

extraction.extraction_body_mapping

name: extraction_body_mapping label: Маппинг распаковки тела ответа type: map[text]text (возможны вложенности в ключах (типа "res.data.result": "result") default: "extraction_body_mapping": {
"data.task_id": "$FILE_URI"
}

Маппинг тела результата на внутреннюю модель

Примеры: "extraction_body_mapping": {
   "data.task_id": "$FILE_URI"
} "extraction_body_mapping": {
   "data.result.verdict": "verdict",
   "data.result.threat": "$THREAT",
   "data.result.duration": "duration",
   "data.scan_id": "scan_id",
   "data.file_info.sha256": "sha256",
   "data.file_info.sha1": "sha1",
   "data.file_info.mime_type": "mime_type",
   "data.file_info.size": "size",
   "data.artifacts.0.engine_results.0.result.scan_state": "scan_state",
   "data.artifacts.0.engine_results.0.detections": "detections",
   "errors": "errors"
}

extraction.extraction_code_mapping

name: extraction_code_mapping label: Маппинг распаковки http кода ответа type: text default: "$RESPONSE_CODE"

Маппинг кода ответа в переменную registry. В первую очередь выполняется поиск инкапсулированных http кодов и при их наличии происходит размещение в переменную. Если http кодов нет, тогда выполняется поиск признаков (кодов) в других местах (icap status code, icap headers etc.), и используя внутреннюю модель маппинга сущностей (Icap status code…​) в http коды, выполняется преобразование и присваиваем переменной.

Например: (Icap_status_code=200 → http_code=403).

extraction.extraction_mode

name: extraction_mode label: Режим распаковки ответа type: enum:headers|payload|file|code default: headers

default - headers. В случае payload|file - так же учитыватся headers. В случае code - может учитываться всё остальное, если заполнены маппинги. Важно: Могут встречаться сочетания