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
              ... ...
        }
}

Статистика

Используйте модуль Статистика трафика и атак для получения статистики атак веб-дефейсмента.