# Контроль целостности хранимого кода и конфигурации — результаты проверки **Дата проверки:** 10.06.2026 **Объект проверки:** внешний FIM (afick или аналог) + пути, связанные с nginx **Метод:** ревью мер контроля, примеры конфигурации FIM и прав доступа, команды верификации (без настройки afick на стенде) ## Сводная таблица | № | Объект контроля | Статус | Механизм | |---|-----------------|--------|----------| | 1 | Основной конфигурационный файл nginx | Обязательно | afick | | 2 | Подключаемые конфигурационные файлы nginx | Обязательно | afick | | 3 | Разрешённые директории веб-приложений | Обязательно | afick | | 4 | Директории статического веб-контента | Обязательно | afick | | 5 | Динамические .so-модули nginx | Обязательно | afick | | 6 | Файлы njs | Условно (если используется njs) | afick | | 7 | Perl-файлы | Условно (если используется Perl) | afick | | 8 | XSLT-файлы | Условно (если используется XSLT) | afick | | 9 | SSI-файлы | Условно (если включён SSI) | afick | | 10 | Файлы WebDAV upload | Условно (если включён WebDAV) | afick | | 11 | Сертификаты и ключи TLS | Обязательно | afick + права ФС | | 12 | Файлы паролей Basic Authentication | Условно (если используется auth_basic) | afick + права ФС | | 13 | Файлы журналов nginx | Комбинированная мера | права ФС + syslog | --- 1. **Основной конфигурационный файл nginx** - *Причина контроля*: Конфигурация определяет правила доступа, маршрутизацию, передачу запросов обработчикам и загрузку модулей. - *Механизм контроля*: afick или иной утверждённый механизм контроля целостности. - *Ожидаемый результат*: Несанкционированное изменение конфигурации выявляется. - Проверка: - **Статус:** Обязательно - **Ревью меры контроля:** Причина и механизм полностью адекватны. Изменение `nginx.conf` может включить `load_module`, `proxy_pass` на произвольный backend или ослабить `allow`/`deny`. FIM — единственный корректный способ контроля; nginx сам целостность не проверяет. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/ (встроенный FIM не описан) - **Связь с nginx:** главный файл конфигурации, директива `include` подключает остальные файлы - **Контролируемые пути (пример):** `/etc/nginx/nginx.conf` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) /etc/nginx/nginx.conf R # Права доступа # chown root:root /etc/nginx/nginx.conf # chmod 644 /etc/nginx/nginx.conf ``` - **Проверка эффективности контроля:** ```bash afick -c /etc/afick.conf --check ls -la /etc/nginx/nginx.conf # Тест: echo "# test" >> /etc/nginx/nginx.conf afick -c /etc/afick.conf --check # Ожидание: отчёт о нарушении; затем восстановить файл ``` - **Примечание:** См. также функции 9.3 в `функции безопасности — проверка.md`; `Контроль выполнения кода — проверка.md` п. 15; `Минимально необходимые полномочия nginx — проверка.md` п. 2. 2. **Подключаемые конфигурационные файлы nginx** - *Причина*: Через подключаемые файлы могут быть добавлены новые location, proxy_pass, fastcgi_pass или load_module. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение подключаемой конфигурации выявляется. - Проверка: - **Статус:** Обязательно - **Ревью меры контроля:** Причина корректна: атака часто идёт через новый файл в `conf.d/` или `sites-enabled/`, а не через правку основного `nginx.conf`. Механизм достаточен. - **Источник:** Внешнее средство FIM - **Связь с nginx:** `include /etc/nginx/conf.d/*.conf;`, `include /etc/nginx/sites-enabled/*;` - **Контролируемые пути (пример):** `/etc/nginx/conf.d/`, `/etc/nginx/sites-enabled/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) /etc/nginx/conf.d/ R /etc/nginx/sites-enabled/ R ``` - **Проверка эффективности контроля:** ```bash afick -c /etc/afick.conf --check ls -la /etc/nginx/conf.d/ # Тест: создать /etc/nginx/conf.d/evil.conf с proxy_pass afick -c /etc/afick.conf --check ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 2. 3. **Разрешённые директории веб-приложений** - *Причина*: В этих директориях хранится код или контент, который может быть передан внешнему обработчику. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение файлов веб-приложений выявляется. - Проверка: - **Статус:** Обязательно - **Ревью меры контроля:** Причина и механизм адекватны. Изменение `.php`, `.py` и других скриптов — прямой риск выполнения кода через FastCGI/uWSGI. Пути должны соответствовать `root`/`alias` в конфигурации nginx. - **Источник:** Внешнее средство FIM - **Связь с nginx:** директивы `root`, `alias`, `fastcgi_param SCRIPT_FILENAME` - **Контролируемые пути (пример):** `/var/www/app/`, `/var/www/app/public/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) /var/www/app/ R ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep -E '^\s*root\s|^\s*alias\s' afick -c /etc/afick.conf --check find /var/www/app -name '*.php' -o -name '*.py' | head -10 # Сверить пути с утверждённым перечнем в эксплуатационной документации ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 3. 4. **Директории статического веб-контента** - *Причина*: Статические файлы могут быть изменены для подмены содержимого сайта. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение статического контента выявляется, если он включён в область контроля. - Проверка: - **Статус:** Обязательно - **Ревью меры контроля:** Причина корректна (подмена HTML, JS, вредоносные вложения). Может быть объединена с п. 3 одной записью `/var/www/ R`, если статика и приложение в одном дереве каталогов. - **Источник:** Внешнее средство FIM - **Связь с nginx:** `root` для статических `location` - **Контролируемые пути (пример):** `/var/www/html/` - **Пример реализации:** ``` # Вариант 1: отдельная запись /var/www/html/ R # Вариант 2: объединение с п. 3 /var/www/ R ``` - **Проверка эффективности контроля:** ```bash afick -c /etc/afick.conf --check # Тест: изменить index.html в web-root afick -c /etc/afick.conf --check ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 3. См. `Минимизация поверхности атаки nginx — проверка.md` п. 3–4. 5. **Динамические .so-модули nginx** - *Причина*: Динамические модули выполняются в процессе nginx и расширяют функциональность сервера. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Подмена или изменение модуля выявляется. - Проверка: - **Статус:** Обязательно - **Ревью меры контроля:** Причина и механизм полностью адекватны. Подмена `.so` — выполнение произвольного нативного кода в процессе nginx. FIM обязателен в сочетании с белым списком в `load_module`. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/ngx_core_module.html#load_module - **Связь с nginx:** `load_module modules/...so;` - **Контролируемые пути (пример):** `/usr/lib/nginx/modules/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) /usr/lib/nginx/modules/ R ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep load_module ls -la /usr/lib/nginx/modules/ afick -c /etc/afick.conf --check rpm -V nginx 2>/dev/null || dpkg -V nginx 2>/dev/null ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 10. 6. **Файлы njs** - *Причина*: При использовании njs JavaScript-файлы могут выполняться внутри nginx. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение njs-кода выявляется. - Проверка: - **Статус:** Условно (если используется njs) - **Ревью меры контроля:** Причина корректна при наличии njs. Если `js_import` не используется — объект не включается в область контроля. Механизм достаточен. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/njs/ - **Связь с nginx:** `js_import`, `js_content`, `js_set` - **Контролируемые пути (пример):** `/etc/nginx/njs/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) — только при использовании njs /etc/nginx/njs/ R ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep -E 'js_import|load_module.*js' # Если njs не используется — записи в afick и директивы js_* отсутствуют afick -c /etc/afick.conf --check ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 6. 7. **Perl-файлы** - *Причина*: При использовании Perl-модуля Perl-код может выполняться внутри nginx. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение Perl-кода выявляется. - Проверка: - **Статус:** Условно (если используется Perl) - **Ревью меры контроля:** Причина корректна. Рекомендация: не использовать Perl-модуль; при наличии — обязательный FIM на Perl-файлы. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/http/ngx_http_perl_module.html - **Связь с nginx:** `perl_modules`, `perl_require`, `perl` - **Контролируемые пути (пример):** `/etc/nginx/perl/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) — только при использовании Perl /etc/nginx/perl/ R ``` - **Проверка эффективности контроля:** ```bash nginx -V 2>&1 | grep -i perl nginx -T 2>/dev/null | grep -E 'perl|perl_require' # Ожидание для безопасной конфигурации: отсутствие Perl ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 7. 8. **XSLT-файлы** - *Причина*: XSLT-файлы управляют логикой преобразования XML-ответов. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение XSLT-файлов выявляется. - Проверка: - **Статус:** Условно (если используется XSLT) - **Ревью меры контроля:** Причина и механизм адекватны при использовании `xslt_stylesheet`. Иначе объект исключается из области контроля. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/http/ngx_http_xslt_module.html - **Связь с nginx:** `xslt_stylesheet` - **Контролируемые пути (пример):** `/etc/nginx/xslt/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) — только при использовании XSLT /etc/nginx/xslt/ R ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep xslt_stylesheet afick -c /etc/afick.conf --check ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 8. 9. **SSI-файлы** - *Причина*: SSI-команды могут влиять на формирование ответа. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Изменение SSI-файлов выявляется. - Проверка: - **Статус:** Условно (если включён SSI) - **Ревью меры контроля:** Причина корректна. SSI-файлы обычно находятся в web-root (п. 3–4); отдельная запись нужна, если SSI включён в выделенном location. Дополнительно контролировать отсутствие `` в файлах. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/http/ngx_http_ssi_module.html - **Связь с nginx:** `ssi on` в `location` - **Контролируемые пути (пример):** каталоги с `ssi on` внутри web-root, например `/var/www/html/ssi/` - **Пример реализации:** ``` # Покрывается записью web-root (п. 3–4), либо явно: /var/www/html/ssi/ R ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep -i 'ssi on' grep -r '#exec' /var/www/html/ 2>/dev/null # exec в SSI не должен присутствовать ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 3. 10. **Файлы, доступные для загрузки через WebDAV** - *Причина*: Загруженные файлы могут стать источником риска при попадании в обработку внешним интерпретатором. - *Механизм*: afick или иной утверждённый механизм контроля целостности. - *Результат*: Несанкционированные изменения или появление файлов выявляются, если директория включена в контроль. - Проверка: - **Статус:** Условно (если включён WebDAV) - **Ревью меры контроля:** Причина корректна. FIM на upload-директорию выявляет появление новых файлов (в т.ч. `.php`). Рекомендация: upload-директория не должна пересекаться с FastCGI `root`. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/http/ngx_http_dav_module.html - **Связь с nginx:** `dav_methods`, `location` с WebDAV - **Контролируемые пути (пример):** `/var/www/uploads/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) — только при использовании WebDAV /var/www/uploads/ R ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep dav_methods # Тест: загрузить файл через WebDAV, затем afick --check afick -c /etc/afick.conf --check ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 4. 11. **Сертификаты и ключи TLS** - *Причина*: Подмена сертификатов или ключей может нарушить доверие к защищённому соединению. - *Механизм*: afick или иной утверждённый механизм контроля целостности + ограничение прав доступа. - *Результат*: Изменение сертификатов/ключей выявляется. - Проверка: - **Статус:** Обязательно - **Ревью меры контроля:** Причина и комбинированный механизм (FIM + права) полностью адекватны. Приватные ключи — `chmod 600`, владелец root; сертификаты — `644`. - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate - **Связь с nginx:** `ssl_certificate`, `ssl_certificate_key`, `ssl_client_certificate` - **Контролируемые пути (пример):** `/etc/nginx/ssl/`, `/etc/ssl/nginx/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) /etc/nginx/ssl/ R # Права доступа # chmod 600 /etc/nginx/ssl/*.key # chmod 644 /etc/nginx/ssl/*.crt # chown root:root /etc/nginx/ssl/ ``` - **Проверка эффективности контроля:** ```bash afick -c /etc/afick.conf --check ls -la /etc/nginx/ssl/ stat -c '%a %U %n' /etc/nginx/ssl/* # Ключи: 600, сертификаты: 644, владелец root ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 6–7. 12. **Файлы паролей Basic Authentication** - *Причина*: Изменение файла пользователей может привести к несанкционированному доступу. - *Механизм*: afick или иной утверждённый механизм контроля целостности + ограничение прав доступа. - *Результат*: Изменение файла пользователей выявляется. - Проверка: - **Статус:** Условно (если используется auth_basic) - **Ревью меры контроля:** Причина и механизм корректны. FIM + `chmod 640`, владелец root, группа nginx (или без доступа для others). - **Источник:** Внешнее средство FIM; https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html#auth_basic_user_file - **Связь с nginx:** `auth_basic_user_file` - **Контролируемые пути (пример):** `/etc/nginx/htpasswd`, `/etc/nginx/htpasswd.d/` - **Пример реализации:** ``` # /etc/afick.conf (фрагмент) — при использовании auth_basic /etc/nginx/htpasswd R # chmod 640 /etc/nginx/htpasswd # chown root:root /etc/nginx/htpasswd ``` - **Проверка эффективности контроля:** ```bash nginx -T 2>/dev/null | grep auth_basic_user_file ls -la /etc/nginx/htpasswd afick -c /etc/afick.conf --check ``` - **Примечание:** См. права и полномочия в `Минимально необходимые полномочия nginx — проверка.md` п. 8. 13. **Файлы журналов nginx** - *Причина*: Журналы содержат события доступа и ошибок, важные для анализа безопасности. - *Механизм*: Контроль прав доступа; защита от несанкционированного изменения; централизованное журналирование. - *Результат*: Несанкционированное изменение или удаление журналов затруднено/выявляется. - Проверка: - **Статус:** Комбинированная мера - **Ревью меры контроля:** Причина корректна. Классический FIM на активно пишущиеся log-файлы неприменим (ложные срабатывания при каждой записи). Корректный подход: строгие права (`adm`/`root`), передача в syslog (см. ПМИ п. 14), ротация logrotate, опционально `chattr +a` (append-only). Механизм в исходнике описан верно. - **Источник:** Внешняя мера; https://nginx.org/en/docs/ngx_core_module.html#error_log , https://nginx.org/en/docs/syslog.html - **Связь с nginx:** `access_log`, `error_log` - **Контролируемые пути (пример):** `/var/log/nginx/access.log`, `/var/log/nginx/error.log` - **Пример реализации:** ``` # Права доступа (не afick на сами log-файлы) # chown root:adm /var/log/nginx/ # chmod 750 /var/log/nginx/ # chmod 640 /var/log/nginx/*.log # Централизованное журналирование в nginx.conf: # access_log syslog:server=192.168.1.1:514,... combined; # error_log syslog:server=192.168.1.1:514,...; # Опционально append-only (осторожно с ротацией): # chattr +a /var/log/nginx/access.log ``` - **Проверка эффективности контроля:** ```bash ls -la /var/log/nginx/ stat -c '%a %U:%G' /var/log/nginx/access.log # Попытка удаления от непривилегированного пользователя должна завершиться отказом nginx -T 2>/dev/null | grep -E 'access_log|error_log' # При syslog — проверить наличие записей на приёмнике (journalctl -t nginx) ``` - **Примечание:** Статус — комбинированная мера. См. `Минимально необходимые полномочия nginx — проверка.md` п. 5; ПМИ п. 14 в `Проверочные мероприятия для ПМИ — проверка.md`; функции 4.4 и 9.3 в `функции безопасности — проверка.md`.