ВМ1: реализован сбор логов

This commit is contained in:
mi
2026-09-07 12:46:45 +03:00
parent 44db38f6fe
commit 85df788f2d
42 changed files with 1669 additions and 310 deletions
@@ -69,8 +69,8 @@
- `UseOnDemandCPULimit=Yes`, `OnDemandCPULimit=15`;
- не запускать full filesystem scan и проверку архивов;
- ODS и ContainerScan выполнять по одному объекту, не одновременно;
- сначала Update и health, затем один stateless image, затем File Threat
Protection в `Notify`;
- сначала Update и health, затем один ограниченный `scan-file`, затем File Threat
Protection; `InterceptorProtectionMode` на fanotify недоступен;
- остановить KESL при available memory менее 512 МБ, устойчивом swap IO,
появлении host/container OOM, restart или провале smoke;
- до режима `Block` требуется отдельное подтверждение стабильности.
@@ -169,18 +169,85 @@ journalctl --since '-30 min' --no-pager \
## 2. Проверка пакета и подготовка
GUI на сервер не устанавливается. Пакет передаётся в root-only staging,
например `/root/kesl-install`, и удаляется после приёмки.
GUI на сервер не устанавливается. Дистрибутив и DEB копируются в root-only
staging `/root/kesl-install` и удаляются после приёмки. ISO в
`/var/lib/han-deploy/incoming` не распаковывается на месте и не остаётся
смонтированным после извлечения пакета.
```sh
install -d -m 0700 -o root -g root /root/kesl-install
install -m 0600 -o root -g root \
/tmp/<KESL_12_4_AMD64_DEB> /root/kesl-install/kesl.deb
sha256sum /root/kesl-install/kesl.deb
dpkg-deb -f /root/kesl-install/kesl.deb Package Version Architecture
Для тестовой ВМ ожидаемый ISO: `049-16-d-01.iso`, volume id `KESL12SP4`.
Вендор публикует контрольную сумму **ФИКС 2.0.2 / ГОСТ Р 34.11-94, программно**,
а не SHA-256. Это разные алгоритмы: оба дают 64 hex-символа, поэтому
`sha256sum --check` против суммы с сайта закономерно не совпадает.
Ожидаемая сумма вендора (ГОСТ Р 34.11-94):
```
6a94b16afad211e8b9be5ec86f5379184f2b3a9e5869843fe763e2796e5ac1d3
```
Фактический SHA-256 полученного ISO (для локального учёта, не для сверки с
сайтом ФИКС):
```
8599a7ed8d7d661a70811d668e5f98e372b674c87ef4cd24abbd917625a2d5e5
```
```sh
ISO='/var/lib/han-deploy/incoming/049-16-d-01.iso'
SIG='/var/lib/han-deploy/incoming/049-16-d-01.sig'
ls -l "$ISO" "$SIG"
file "$ISO" "$SIG"
sha256sum "$ISO"
command -v rhash || true
openssl list -digest-algorithms 2>/dev/null | grep -i gost || true
```
Если доступен `rhash`, посчитайте ГОСТ и сравните с суммой вендора. ФИКС
может использовать другой набор S-блоков/порядок байт, поэтому проверьте
несколько вариантов:
```sh
rhash --gost "$ISO"
rhash --gost --gost-reverse "$ISO"
rhash --gost-cryptopro "$ISO"
rhash --gost-cryptopro --gost-reverse "$ISO"
```
Для ISO `049-16-d-01.iso` сумма вендора совпала с `rhash --gost`.
Подлинность принимается, если совпала ГОСТ-сумма **или** одновременно
выполнены все условия ниже:
- volume id ISO = `KESL12SP4`;
- внутри есть `kesl/kesl_12.4.0-1225_amd64.deb`;
- SHA-256 ISO зафиксирован в evidence;
- источник — официальный канал вендора.
Файл `.sig` без доверенного публичного ключа не заменяет эту проверку.
Только после совпадения хеша смонтируйте ISO только для чтения и найдите
`kesl_*_amd64.deb` без GUI:
```sh
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*' -o -iname '*.deb' \) | sort
```
Ожидается имя вида `kesl_12.4.0-*_amd64.deb`. Не копируйте `kesl-gui`, i386,
arm64, RPM, KSC agent и Windows-пакеты. Если внутри только 12.0.x или нет
amd64 DEB — stop: для Ubuntu 24.04 нужен KESL 12.4.
```sh
install -m 0600 -o root -g root \
<KESL_12_4_AMD64_DEB_FROM_ISO> /root/kesl-install/kesl.deb
dpkg-deb -f /root/kesl-install/kesl.deb Package Version Architecture
umount /mnt/kesl-iso
rmdir /mnt/kesl-iso
```
Сравните SHA-256 с опубликованным/полученным по доверенному каналу значением.
Не продолжайте при package name не `kesl`, неверной архитектуре или версии не
12.4.x.
@@ -233,16 +300,33 @@ 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
test "$?" -eq 0
echo "kesl-setup exit=$?"
# Exit 71 with INSTALL_LICENSE=None is expected: setup treats None as a
# code. Do not rerun setup. Continue if kesl.service is active and
# File_Threat_Protection is Stopped.
systemctl --no-pager status kesl
kesl-control --app-info
kesl-control --supported-tech-info
kesl-control --get-task-list
```
Если используется activation code, не передавайте его аргументом команды и не
храните в этом репозитории. Выполните активацию по официальной инструкции
Kaspersky с защищённым локальным вводом/файлом ключа.
Активацию кодом выполняйте только после успешного `kesl-setup.pl` и до
загрузки баз. Код не помещайте в `autoinstall.ini`, репозиторий, evidence,
чат и историю shell:
```sh
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
kesl-control --app-info
```
Нужен исходящий доступ к серверам активации Kaspersky. В выводе лицензии
оставьте только статус «ключ действителен» и срок; сам код не копируйте.
## 4. Ресурсные ограничения до первого scan
@@ -306,13 +390,19 @@ kesl-control --app-info
выпуска баз и успешное завершение Update. Затем задайте почасовой запуск:
```sh
kesl-control --set-schedule 6 RuleType=Hourly
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
```
Если установленная сборка требует интервал в `StartTime`, не угадывайте
синтаксис: экспортируйте schedule и измените его по документации именно этой
сборки. До успешного автообновления АВЗ.2 не принимается.
Для 12.4 одного `RuleType=Hourly` недостаточно: нужен `StartTime` вида
`2026/Sep/07 12:00:00;1` (английское имя месяца, интервал 1 час). `LC_ALL=C`
обязателен, иначе локаль `ru_RU` подставит русское имя месяца. До успешного
автообновления АВЗ.2 не принимается.
Сразу после обновления повторите разделы 1.2–1.3. При деградации выполните
rollback из раздела 11.
@@ -422,39 +512,33 @@ kesl-control --get-settings 1
kesl-control --get-task-state 1
```
Для пилота включите асинхронный режим перехватчика `Notify`, при котором
KESL журналирует обнаружения, но не выполняет блокирующее действие:
Для пилота запустите File Threat Protection. На Ubuntu 24.04 с `fanotify`
параметр `InterceptorProtectionMode` **не поддерживается** (`Unsupported
setting`): перехватчик работает в штатном блокирующем режиме на время
проверки. Отдельный `Notify` недоступен; откат — остановка задачи 1.
```sh
kesl-control --set-app-settings InterceptorProtectionMode=Notify
kesl-control --start-task 1
kesl-control --get-task-state 1
```
Пилот длится минимум 2–4 часа обычной нагрузки. Каждые 15 минут проверяйте
метрики раздела 1 и события KESL. Не считайте этот режим конечной реализацией
АВЗ.1: он не обеспечивает блокирование/лечение.
Если пилот стабилен, в том же maintenance window:
1. проверьте, что `ActionOnThreat=DisinfectDeleteIfNotPossible`;
2. установите `InterceptorProtectionMode=Block`;
3. перезапустите task 1, если этого требует текущая сборка;
4. повторите health, smoke, firewall и resource checks.
```sh
kesl-control --set-settings 1 \
ActionOnThreat=DisinfectDeleteIfNotPossible ScanArchived=No
kesl-control --set-app-settings InterceptorProtectionMode=Block
kesl-control --stop-task 1
kesl-control --start-task 1
kesl-control --get-task-state 1
kesl-control --app-info
```
В режиме `Block` доступ к файлу ожидает результат проверки. При появлении
latency вернитесь в `Notify` либо остановите task 1 и выполните rollback;
не расширяйте исключения вслепую.
Пилот длится минимум 15–30 минут на constrained test VM и 24 часа на
боевых ресурсах. Каждые 15 минут проверяйте метрики раздела 1, события KESL
и firewall. АВЗ.1 выполняется при `Started` + `ActionOnThreat=DisinfectDeleteIfNotPossible`.
Перед приёмкой:
```sh
kesl-control --set-settings 1 \
ActionOnThreat=DisinfectDeleteIfNotPossible ScanArchived=No
kesl-control --get-task-state 1
kesl-control --app-info
```
При latency/swap/unhealthy выполните `kesl-control --stop-task 1`. Не
расширяйте исключения вслепую. Network Threat Protection, Firewall
Management, Web Threat Protection и Behavior Detection не запускайте.
## 9. Приёмочный тест и evidence
@@ -483,8 +567,15 @@ kesl-control --get-schedule 6
kesl-control -E --query -n 100 --reverse
```
Очистите тестовый каталог после подтверждения реакции и заполните
`deployment/kesl/EVIDENCE.AVZ.ru.md`.
Очистите тестовый каталог после подтверждения реакции. Копию EICAR в Backup
удалите точечно, не весь Backup:
```sh
kesl-control -B --query --reverse -n 20
kesl-control -B --mass-remove --query "DetectName == 'EICAR-Test-File'"
```
Заполните `deployment/kesl/EVIDENCE.AVZ.ru.md`.
## 10. Финальные проверки
@@ -535,7 +626,7 @@ ufw status verbose
Сначала минимально обратимое действие:
```sh
kesl-control --set-app-settings InterceptorProtectionMode=Notify
kesl-control --stop-task 1
```
Если управление KESL не отвечает: