This commit is contained in:
Redsandyg
2026-06-15 06:31:35 +03:00
commit fcc9139361
50 changed files with 5400 additions and 0 deletions

View File

@@ -0,0 +1,356 @@
# Контроль целостности хранимого кода и конфигурации — результаты проверки
**Дата проверки:** 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` п. 34.
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 (п. 34); отдельная запись нужна, если SSI включён в выделенном location. Дополнительно контролировать отсутствие `<!--#exec-->` в файлах.
- **Источник:** Внешнее средство 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 (п. 34), либо явно:
/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` п. 67.
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`.