Web Defacement
Содержание |
Обзор
Модуль Web Defacement проверяет, изменился ли хэш файлов на диске сервера, чтобы распознать дефейсмент. Когда происходит дефейсмент, модуль может восстановить замененные веб-страницы.
Этот модуль выпущен в SEnginx, но также может быть использован в стандартном nginx.
Примечание: Эта функция является решением для устранения веб-дефейсмента. Администраторы должны принять необходимые меры, например использовать SELinux для защиты.
Директивы
web_defacement
| Синтаксис | web_defacement on | off; |
| По умолчанию | off |
| Контекст | http, server, location |
Включить веб-дефейсмент.
Пример:
web_defacement on;
web_defacement_original
| Синтаксис | web_defacement_original /path/to/original/files; |
| По умолчанию | |
| Контекст | http, server, location |
Папка файлов/страниц, которые будут защищены. Обычно это абсолютный путь на файловой системе. Если используется относительный путь, то корнем пути будет каталог 'conf' в каталоге SEnginx.
Пример:
web_defacement_original /var/www/html;
web_defacement_hash_data
| Синтаксис | web_defacement_hash_data /path/to/hash/data/file; |
| По умолчанию | |
| Контекст | http, server, location |
Путь к хэш-файлу страниц, которые необходимо защитить.
Хэш-файл можно сгенерировать с помощью утилиты web_defacement.pl, поставляемой вместе с SEnginx. Если используется относительный путь, корнем пути будет каталог 'conf' в каталога SEnginx.
Пример:
web_defacement_hash_data /usr/local/senginx/hash_data;
Сгенерировать хэш-файл:
cd senginx-install-dir ./web_defacement.pl -d /path/to/original/files -o /path/to/hash/file;
Пример:
cd /usr/local/senginx ./web_defacement.pl -d /var/www/html -o ./hash_data;
web_defacement_log
| Синтаксис | web_defacement_log on | off; |
| По умолчанию | off |
| Контекст | http, server, location |
Записать атаку дефейсмента в error.log.
Пример:
web_defacement_log on;
web_defacement_index
| Синтаксис | web_defacement_index filename; |
| По умолчанию | |
| Контекст | http, server, location |
Индексная страница по умолчанию. При запросе пути модуль web defacement проверить хэш-сумму индексной страницы по этому пути.
Пример:
location /cn/ {
web_defacement_index index.html;
}
В этом примере, если клиент запрашивает путь '/cn/', модуль web defacement проверит файл '/cn/index.html' на дефейсмент. Обратите внимание, что путь должен заканчиваться на "/", в противном случае он будет воспринят как имя файла.
web_defacement_whitelist
| Синтаксис | web_defacement_whitelist ua_var_name=UA whitlist ip_var_name=IP whitelist ip_var_value=value; |
| По умолчанию | |
| Контекст | http, server, location |
| С версии | 1.5.11 |
Эта директива определяет использование белого списка IP-адресов и белого списка на основе User Agent. Белый список IP-адресов задается с помощью geo модуля nginx.
Пример:
# Определить белый список IP-адресов
geo $ip_wl {
ranges;
default 0;
127.0.0.1-127.0.0.1 1;
3.0.0.1-3.2.1.254 1;
}
# Определить белый список на основе User Agent
whitelist_ua $ua_wl {
"autotest" ".*\.test\.com";
}
server {
location {
web_defacement_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1;
}
}
Переменные
Модуль Web Defacement предоставляет 2 переменные для определяемых пользователем действий.
- $web_defacement
Если запрошенная страница подвергнута дефейсменту, эта переменная принимает значение true.
- $web_defacement_file
Если запрошенная страница подвергнута дефейсменту, эта переменная принимает значение URL, который ссылается на поврежденный файл.
Примеры
SEnginx в режиме web сервера
Предположим, что все файлы веб-сайта располагаются в каталоге /var/www/html, а SEnginx установлен в /usr/local/senginx. Для настройки модуля веб-дефейсмента выполните следующие шаги:
Перейдите в каталог SEginx
cd /usr/local/senginx
Запустите web_defacement.pl чтобы сгенерировать файл /usr/local/senginx/hash_data с хэш-данными
./web_defacement.pl
Измените nginx.conf, включите модуль Web Defacement и укажите location или server, который нужно защитить:
server {
listen 80;
server_name localhost;
web_defacement on; # Включить модуль web defacement
web_defacement_original /var/www/html; # Каталог web-страниц
web_defacement_hash_data /usr/local/senginx/hash_data; # Хэш-файл
location / {
web_defacement_index index.html; # Индексный файл по умолчанию
web_defacement_log on; # Включить журнал атак
if ($web_defacement) { # Определить действия при дефейсменте. В данном случае - вернуть ошибку 403.
# Если необходимо, сделать другие действия здесь
return 403;
}
index index.html;
root /var/www/html;
}
location /other {
web_defacement off; # Запретить модуль web defacement в этом location
... ...
}
}
Перезапустить или перезагрузить SEnginx
SEnginx в режиме reverse proxy
Если SEnginx работает в режиме reverse proxy, как он может получить доступ к файлам на backend серверах? В этом примере мы испольуем NFS чтобы смонтировать удаленную директорию с файлами. Предположим, что IP адрес backend сервера 1.1.1.1 и директория /var/www/html на backend сервере монтируется в /opt/original на сервере SEnginx.
Порядок монтирования 1.1.1.1:/var/www/html к /opt/original на сервере SEnginx здесь не описан.
Сгенерируйте hash_data согласно примеру выше. Обратите внимание, что исходный каталог должен быть /opt/original.
Измените nginx.conf:
server {
listen 80;
server_name localhost;
web_defacement on; # Включить модуль web defacement
web_defacement_original /opt/original; # Каталог web-страниц
web_defacement_hash_data /usr/local/senginx/hash_data; # Хэш-файл
location / {
web_defacement_index index.html; # Индексный файл по умолчанию
web_defacement_log on; # Включить журнал атак
if ($web_defacement) { # Определить действия при дефейсменте. В данном случае - вернуть ошибку 403.
# Если необходимо, сделать другие действия здесь
return 403;
}
proxy_pass http://1.1.1.1;
}
location /other {
web_defacement off; # Запретить модуль web defacement в этом location
... ...
}
}
Чтобы не использовать NFS, скопируйте вручную файлы с backend сервера на сервер SEnginx. Недостаток этого способа в необходимости синхронизации при внесении изменений в файлы на backend сервере.
Восстановление после дефейсмента
Модуль Web Defacement предоставляет переменные, показывающие, происходит ли дефейсмент. С помощью этих переменных можно определить в файле конфигурации необходимые действия при дефейсменте. В следующем примере показано, как восстановить исходные страницы, если страницы были дефейсированы. Прежде всего, вам необходимо сделать резервную копию файлов страниц. Если SEnginx работает в режиме reverse proxy, вам необходимо скопировать файлы резервных копий на сервер SEnginx. Предположим, что файлы страниц резервируются в /var/www/recover.
Следуйте приведенным выше примерам, чтобы настроить обратный прокси-сервер или веб-сервер и сгенерировать hash_data.
Измените nginx.conf:
server {
listen 80;
server_name localhost;
web_defacement on; # Включить модуль web defacement
web_defacement_original /opt/original; # Каталог web-страниц
web_defacement_hash_data /usr/local/senginx/hash_data; # Хэш-файл
location /recover {
web_defacement off;
root /var/www;
}
location / {
web_defacement_index index.html; # Индексный файл по умолчанию
web_defacement_log on; # Включить журнал атак
if ($web_defacement) { # При дефейсменте сделать редирект на каталог recover. Также можно сделать восстановление файлов из резервной копии.
rewrite ^(.*)$ /recover$1 last;
}
proxy_pass http://1.1.1.1;
}
location /other {
web_defacement off; # Запретить модуль web defacement в этом location
... ...
}
}
Статистика
Используйте модуль Статистика трафика и атак для получения статистики атак веб-дефейсмента.