Files

12 KiB
Raw Permalink Blame History

KESL 12.4 standalone на ВМ2 Processing

Операторский runbook для Ubuntu 24.04 ВМ2. Команды выполняет персональная роль admin через sudo в отдельное maintenance window. Репозиторий не устанавливает, не активирует и не запускает KESL автоматически.

Цели:

  1. АВЗ.1: обнаружение и реагирование через host File Threat Protection.
  2. АВЗ.2: автоматическое обновление баз.
  3. Замена ClamAV в Message Safety локальным fail-closed scan-broker.

KESL 12.4 commercial не заявляется как сертифицированная ФСТЭК сборка.

0. Approvals и stop conditions

До окна зафиксировать change ID, оператора, Security/Service/Operations approvers, hostname, ОС/ядро, package version/hash/source, лицензию, release SHA и rollback. EULA, Privacy Policy и KSN согласовать отдельно. Activation code, ключи и secrets не помещать в репозиторий, историю shell, chat или evidence.

Остановиться, если:

  • ОС/архитектура/ядро отсутствуют в матрице KESL 12.4;
  • установлен другой AV или неизвестный KESL;
  • свободно менее 10 ГБ, нет 4 ГБ swap либо baseline ВМ2 уже деградирован;
  • KESL+ClamAV coexistence оставляет менее 2 ГБ available memory, вызывает устойчивый swap IO, OOM/restart, IO wait >10% за 5 минут;
  • p95 Safety/Redis вырос более чем на 20%, queue age >30 секунд;
  • package hash/source не подтверждены, лицензия недействительна или базы не загружены.

Не совмещать с deploy, миграциями, backup, TLS renewal, Docker restart или reboot.

1. Read-only baseline

date -Is
hostnamectl
uname -a
dpkg --print-architecture
free -h
swapon --show
df -hT / /var/lib/docker /tmp
df -ih / /var/lib/docker /tmp
systemctl is-active docker fail2ban ufw han-processing.service
dpkg-query -W -f='${Package}\t${Version}\t${Status}\n' \
  kesl kesl-gui kav4fs 2>/dev/null || true
/usr/local/sbin/han-vm2-compose ps
docker stats --no-stream
iptables -S HAN-CHAT-VM2
ufw status verbose

Сохранить baseline CPU/RAM/swap/IO, Safety latency/error/queue, Redis latency, container restart/OOM, OTEL queue и внешний/private smoke. Получить фактические mountpoint только для redis-safety-data и otel-queue через docker volume inspect; prefix Compose не угадывать.

2. Дистрибутив и установка

Использовать amd64 DEB KESL 12.4 из официального канала. Хеши пилота ВМ1 не считать универсальными: записать фактические SHA-256 DEB/ISO и, если поставщик публикует ФИКС/ГОСТ, проверить соответствующим алгоритмом.

Проверка файла:

apt install rhash
ISO='/var/lib/han-deploy/incoming/049-16-d-01.iso'
command -v rhash
rhash --gost "$ISO"

Должно быть 6a94b16afad211e8b9be5ec86f5379184f2b3a9e5869843fe763e2796e5ac1d3

Если совпадёт, извлеките DEB:

install -d -m 0700 -o root -g root \
  /root/kesl-install /mnt/kesl-iso

mount -o ro,loop "$ISO" /mnt/kesl-iso

find /mnt/kesl-iso -type f \
  \( -iname 'kesl_*_amd64.deb' -o -iname '*.deb' \) |
  sort

Затем:

DEB='/mnt/kesl-iso/kesl/kesl_12.4.0-1225_amd64.deb'

dpkg-deb -f "$DEB" Package Version Architecture
sha256sum "$DEB"

install -m 0600 -o root -g root \
  "$DEB" /root/kesl-install/kesl.deb

umount /mnt/kesl-iso
rmdir /mnt/kesl-iso

Ожидаемые свойства: kesl, версия 12.4.x, архитектура amd64. После этого можно выполнять:

apt-get install /root/kesl-install/kesl.deb

Создать /root/kesl-install/autoinstall.ini mode 0600:

KSVLA_MODE=No
ENDPOINT_AGENT_MODE=No
EULA_AGREED=<Yes_AFTER_APPROVAL>
PRIVACY_POLICY_AGREED=<Yes_AFTER_APPROVAL>
USE_KSN=<Yes_OR_No_AFTER_APPROVAL>
GROUP_CLEAN=Yes
LOCALE=ru_RU.UTF-8
INSTALL_LICENSE=None
UPDATER_SOURCE=KLServers
UPDATE_EXECUTE=No
KERNEL_SRCS_INSTALL=No
USE_GUI=No
CONFIGURE_SELINUX=No
DISABLE_PROTECTION=Yes
INTERCEPTOR_MODE=UseFanotify
ENABLE_TRACES_ON_FIRST_STARTUP=No
chmod 0600 /root/kesl-install/autoinstall.ini
/opt/kaspersky/kesl/bin/kesl-setup.pl \
  --autoinstall=/root/kesl-install/autoinstall.ini
systemctl --no-pager status kesl
kesl-control --app-info --json
kesl-control --get-task-list

При INSTALL_LICENSE=None setup может вернуть 71; не запускать повторно, если kesl.service active и компоненты защиты остановлены. Активацию выполнить без history, затем удалить переменную:

set +o history
unset HISTFILE
read -rsp 'KESL activation code: ' KESL_CODE; echo
kesl-control --add-active-key "$KESL_CODE"
unset KESL_CODE
set -o history
kesl-control -L --query

3. Resource budget до первой проверки

Defaults ScanMemoryLimit=8192 и MaxMemory=auto не принимать на ВМ2 8 ГБ. Стартовый кандидат — ScanMemoryLimit=1024, MaxMemory=2048MB; окончательные значения определяются baseline и coexistence с ещё работающим ClamAV.

kesl-control --get-app-settings \
  --file /root/kesl-install/app-settings.before.ini
kesl-control --set-app-settings \
  UseOnDemandCPULimit=Yes OnDemandCPULimit=<APPROVED_VALUE>

ScanMemoryLimit/MaxMemory менять только по официальной процедуре в секции [General] /var/opt/kaspersky/kesl/common/kesl.ini при остановленном KESL.

4. АВЗ.2 — базы

ID подтвердить через --get-task-list.

kesl-control --get-settings 6
kesl-control --start-task 6 -W
kesl-control --get-task-state 6
kesl-control --app-info --json
START="$(LC_ALL=C date +'%Y/%b/%d %H:%M:%S;1')"
kesl-control --set-schedule 6 RuleType=Hourly \
  "StartTime=${START}" RunMissedStartRules=No RandomInterval=0
kesl-control --get-schedule 6

До приёмки наблюдать хотя бы один автоматический hourly cycle. Alert: ошибка Update, базы старше 240 часов, базы не загружены, лицензия недействительна.

5. Host protection — АВЗ.1

Добавить только фактические hot-data mountpoint Redis Safety и OTEL queue. Не исключать /var/lib/docker, release, incoming, secrets, /tmp или /. Не исключать staging broker /var/lib/han-kesl-scan/staging: исключение task 1 распространяется и на явный Scan_File, поэтому файл будет пропущен. Если исключение уже добавлено, удалить его до проверки broker:

kesl-control --set-settings 1 \
  --del-exclusion /var/lib/han-kesl-scan/staging
kesl-control --get-settings 1 \
  --file /root/kesl-install/file-threat.before.ini
kesl-control --set-settings 1 \
  --add-exclusion <REDIS_SAFETY_DATA_MOUNTPOINT>
kesl-control --set-settings 1 \
  --add-exclusion <OTEL_QUEUE_MOUNTPOINT>
kesl-control --start-task 1
kesl-control --set-settings 1 \
  ActionOnThreat=DisinfectDeleteIfNotPossible ScanArchived=No
kesl-control --get-task-state 1
kesl-control --get-settings 1

Проверять события, health, firewall и ресурсы каждые 15 минут. При деградации: kesl-control --stop-task 1.

6. Scan-broker

После активации release повторить host setup для установки root-owned unit, затем проверить файлы и включить socket:

systemd-analyze verify \
  /etc/systemd/system/han-kesl-scan-broker.service \
  /etc/systemd/system/han-kesl-scan-broker.socket
systemctl enable --now han-kesl-scan-broker.socket
systemctl is-active kesl han-kesl-scan-broker.socket
stat -c '%U:%G:%a %n' /run/han-kesl/scan.sock
/usr/local/libexec/han-kesl-scan-broker --probe
journalctl --since '-10 min' --no-pager -u han-kesl-scan-broker.service

Ожидается root:han-message-safety:660. Broker не имеет TCP port, принимает не более 5 MiB, не получает S3 key/имя/ПД, запускает фиксированный Scan_File Inform и возвращает только verdict/version. Неизвестный вывод KESL — error. Для Scan_File код возврата 72 означает обнаружение угрозы и принимается только вместе с итогом detected > 0; любое противоречие обрабатывается как scanner_unavailable. Broker service намеренно не содержит Requires=kesl.service: иначе обращение к socket автоматически запустит остановленный KESL и сделает fail-closed проверку недостоверной. Порядок запуска обеспечивается After=kesl.service.

7. Приёмка и cutover

EICAR разрешён только письменно Security и не хранится в repository/evidence. Отдельно выполнить:

  1. host on-access: обнаружение и реагирование task 1;
  2. broker: clean → clean, EICAR → infected, остановленный KESL → error;
  3. 5 concurrent broker slots и corpus 2 file/s; p95 final ≤60 s, public wait ≤300 s, queue age p95 ≤5 s;
  4. Message Safety: clean 200, malware 403, scanner error 503, verdict sticky;
  5. smoke ВМ2/ВМ1, firewall unchanged, 24 часа без OOM/restart/5xx/degradation.

Только после gates активировать новую config version, release без clamd/freshclam, затем подтвердить отсутствие их контейнеров/volumes и закрыть старый signature-CDN egress.

8. Evidence

Заполнить EVIDENCE.AVZ.ru.md без activation code, secrets, file bytes, S3 key, полного checksum и EICAR. Сохранить безопасные excerpts:

systemctl is-active kesl han-kesl-scan-broker.socket
kesl-control --app-info --json
kesl-control --get-task-state 1
kesl-control --get-settings 1
kesl-control --get-schedule 6
kesl-control -E --query -n 100 --reverse --json
/usr/local/sbin/han-vm2-compose ps

9. Rollback

Application rollback: вернуть предыдущие совместимые image/config/release с clamd, не создавать новый task id для уже pending request. Host KESL оставить, если он не причина инцидента.

Если проблема в host protection:

kesl-control --stop-task 1
# если KESL не отвечает:
systemctl stop kesl

apt-get purge kesl — только по решению approver. Не выполнять compose down -v, не удалять Redis/OTEL volumes и не менять firewall ради обхода.

После rollback повторить smoke, resource checks и зафиксировать incident.