|
Управление гостевыми пользователями
NGFW позволяет создавать списки гостевых пользователей. Данная возможность может быть полезна для гостиниц, публичных Wi-Fi, сетей интернет, где необходимо идентифицировать пользователей и предоставить им доступ на ограниченное время.
Гостевые пользователи могут быть созданы заранее администратором системы или пользователям может быть предоставлена возможность самостоятельной регистрации в системе с подтверждением через SMS или email.
Для создания списка гостевых пользователей администратором необходимо выполнить следующие шаги:
Наименование
|
Описание
|
Шаг 1. Создать администратора гостевых пользователей (опционально).
|
-
В разделе Администраторы нажать кнопку Добавить и создать профиль администратора, разрешающий Гостевой портал для чтения и записи в закладке Разрешения для веб-консоли. Данный профиль дает доступ в консоль управления временными пользователями.
-
Создать учетную запись администратора и назначить ей созданную роль.
Более подробно о создании администраторов NGFW смотрите соответствующий раздел руководства.
|
Шаг 2. Создать группу, в которую будут помещены гостевые пользователи. Группа необходима для удобства управления политиками доступа гостевых пользователей.
|
В консоли NGFW в разделе Группы нажать на кнопку Добавить и создать группу, отметив поле Группа для гостевых пользователей. Более подробно о создании групп пользователей смотрите соответствующий раздел руководства.
|
Шаг 3. Подключиться к консоли управления Гостевого портала.
|
В браузере перейти на адрес https://IP_NGFW:8001/ta Для авторизации необходимо использовать логин и пароль администратора устройства или администратора гостевых пользователей, созданного на шаге 1.
|
Шаг 4. Создать список пользователей.
|
В консоли нажать на кнопку Добавить и заполнить поля:
-
Количество пользователей.
-
Комментарий.
-
Дата и время окончания — время, когда учетная запись гостевого пользователя будет отключена.
-
Длина пароля — определяет длину пароля для создаваемого пользователя.
-
Сложность пароля — определяет сложность пароля для создаваемого пользователя. Возможны варианты:
-
Время жизни — продолжительность времени с момента первой авторизации гостевого пользователя, по истечении которого учетная запись будет отключена.
-
Группа — созданная на шаге 2 группа, в которую будут помещены создаваемые пользователи.
|
Список созданных пользователей можно посмотреть в разделе Пользователи консоли управления временными пользователями.
Для самостоятельной регистрации пользователей в системе необходимо выполнить следующие шаги:
Наименование
|
Описание
|
Шаг 1. Создать профиль оповещения SMPP (для подтверждения через SMS) или SMTP (для подтверждения через email).
|
В разделе Библиотеки ➜ Профили оповещений нажать кнопку Добавить и создать профиль оповещения SMPP или SMTP. Более подробно о создании профилей оповещения смотрите раздел руководства Профили оповещений.
|
Шаг 2. Создать группу, в которую будут помещены гостевые пользователи. Группа необходима для удобства управления политиками доступа временных пользователей.
|
В консоли NGFW в разделе Группы нажать на кнопку Добавить и создать группу, отметив поле Группа для гостевых пользователей. Более подробно о создании групп пользователей смотрите соответствующий раздел руководства.
|
Шаг 3. Создать профиль Captive-портала, в котором указать использование профиля оповещений, для отсылки информации о созданной учетной записи.
|
В разделе Пользователи и устройства в подразделе Captive-профили создать профиль, указав в нем использование созданного ранее профиля оповещения. Указать в качестве страницы авторизации шаблон Captive portal: email auth или Captive portal: SMS auth, в зависимости от способа отправки оповещения. Настроить сообщение оповещения, группу, в которую будут помещены временные пользователи, времена действия учетной записи. Более подробно о создании профилей оповещения смотрите раздел руководства Профили оповещений.
|
Шаг 4. Создать правило Captive-портала, которое будет использовать созданный на предыдущем шаге Captive-профиль.
|
В разделе Пользователи и устройства ➜ Captive-портал создать правило, которое будет использовать созданный ранее Captive-профиль. Более подробно о создании правил Captive-портала смотрите раздел руководства Настройка Captive-портала.
|
В данном разделе будут рассмотрены поля протоколов ICMP, TCP, UDP, HTTP.
Т.к. для одной сигнатуры можно задать только один протокол, то использование ниже представленных параметров автоматически определяет его, т.е равносильно использованию параметра .protocol.
ПримечаниеУказание параметров разных протоколов приведёт к ошибке.
ICMP
Для проверки свойств заголовка ICMP доступно использование следующих параметров:
Наименование
|
Описание
|
.icmp.type
|
Проверка типа ICMP.
Доступно использование следующих операторов: =, !=.
|
.icmp.code
|
Проверка значения кода ICMP.
Доступно использование следующих операторов: =, !=.
|
.icmp.id
|
Проверка значений идентификаторов ICMP.
Доступно использование следующих операторов: =, !=.
|
.icmp.checksum
|
Проверка контрольной суммы, которая используется при обнаружении ошибок.
Доступно использование следующих операторов: <, >, <=, >=, =, !=.
|
.icmp.data_size
|
Проверка размера поля данных пакета. Параметр используется для обнаружения пакетов аномальных размеров, зачастую использующихся для переполнения буфера.
Доступно использование следующих операторов: <, >, <=, >=, =, !=. Если заданы несколько условий, то они объединяются логическим оператором И.
|
Примеры:
UASL(.name="Ping Death"; .protocol=icmp; .data_size>32000)
UASL(.name="Ping Death"; .icmp.data_size>32000)
TCP
Для проверки свойств заголовка TCP доступно использование следующих параметров:
Наименование
|
Описание
|
.tcp.sport
|
Проверка номера порта или диапазона портов источника.
Доступно использование следующих операторов: =, !=.
|
.tcp.dport
|
Проверка номера порта или диапазона портов назначения.
Доступно использование следующих операторов: =, !=.
|
.tcp.window_size
|
Проверка размера окна TCP.
Поддерживаются следующие операторы: <, >, <=, >=, =, !=.
|
.tcp.checksum
|
Проверка контрольной суммы, использующейся для проверки на наличие ошибок при передаче и/или приеме отправленного пакета.
Доступно использование следующих операторов: <, >, <=, >=, =, !=.
|
.tcp.seq
|
Проверка значения порядковых номеров TCP.
Поддерживаются следующие операторы: <, >, <=, >=, =, !=.
Доступно использование модификатора relative — проверка относительно начального номера последовательности.
Применение:
.tcp.seq=<value>,relative;
где <value> - порядковый номер TCP.
|
.tcp.flags
|
Проверка TCP-флагов:
.tcp.flags=[<mod>]<tcp_flags>;
где <mod> — модификатор.
<tcp_flags> — флаг TCP, который может быть указан как в буквенном, так и в числовом (десятеричной или шестнадцатеричной системах) форматах.
Флаги:
Модификаторы:
-
* — должен быть установлен хотя бы один из заданных флагов, остальные не проверяются;
-
+ — должны быть установлены все заданные флаги, остальные не проверяются;
-
! — все заданные флаги должны быть сброшены, остальные не проверяются;
-
!0 — должен быть установлен хотя бы один флаг (любой).
Важно! Если ни один из модификаторов не указан, то должны быть установлены все заданные флаги (строгое соответствие), остальные - сброшены.
|
.tcp.data_size
|
Размер полезной нагрузки пакета TCP (без учета заголовков).
Поддерживаются следующие операторы: <, >, <=, >=, =, !=.
Возможно указание как .data_size, тогда параметр будет относится к протколам TCP и UDP.
|
UDP
Для проверки свойств заголовка UDP доступно использование следующих параметров:
Наименование
|
Описание
|
.udp.sport
|
Проверка номера порта или диапазона портов источника.
Доступно использование следующих операторов: =, !=.
|
.udp.dport
|
Проверка номера порта или диапазона портов назначения.
Доступно использование следующих операторов: =, !=.
|
.udp.checksum
|
Проверка контрольной суммы.
Доступно использование следующих операторов: <, >, <=, >=, =, !=.
|
.udp.data_size
|
Размер полезной нагрузки пакета UDP (без учета заголовков).
Поддерживаются следующие операторы: <, >, <=, >=, =, !=.
Возможно указание как .data_size, тогда параметр будет относится к протколам TCP и UDP.
|
HTTP
Для проверки свойств заголовка HTTP доступно использование следующих параметров:
Наименование
|
Описание
|
.uri
|
Проверка поля идентификатора ресурса (URI).
|
.header
|
Проверка произвольных заголовков HTTP.
|
.body
|
Проверка тела содержимого запроса или ответа HTTP.
|
.host
|
Проверка доменного имени узла.
|
Модификаторы области поиска
.no_case
Модификатор no_case позволяет осуществлять поиск, заданный параметром .pattern, без учета регистра символов.
Пример:
UASL(.id=XXX; .name="XXX"; .pattern="Host: "; .pattern="google.com";)
.where
Модификатор .where используется для указания области поиска сигнатуры:
.where=<MODE>;
где <MODE> может принимать следующие значения:
Наименование
|
Описание
|
packet_origin
|
Областью поиска является весь пакет без протокольного декодера.
|
uri
|
Область поиска — поле URI заголовка HTTP.
|
host
|
Областью поиска для HTTP-сессии является поле Host (до переноса строки).
|
header
|
Областью поиска для HTTP-сессии являются http заголовки, smtp и pop3 команды, заголовки протоколов tls и ssh.
|
body
|
Областью поиска является содержимое пакетов HTTP.
|
file
|
Областью поиска являются: декодированное http содержимое, вложения в eml, ftp-data сессии.
|
.service
Данный модификатор области поиска предназначен для выбора диссектора:
.service=<MODE>;
где <MODE> может принимать следующие значения:
Наименование
|
Описание
|
http
|
Разбор протокола HTTP.
|
Пример:
UASL(.name="block.google"; .protocol=tcp; .service=http; .host="google.com";)
.distance, .within, .at, .startin
Данные модификаторы позволяют:
Наименование
|
Описание
|
.distance
|
Пропустить заданное количество байтов (RANGE) от начала или последнего найденного блока.
Задаётся в формате:
.distance=<RANGE> [,<MODE>];
где <RANGE> — это целое число, начиная с 0.
Опциональные параметры (<MODE>) будут рассмотрены далее.
Например, следующая запись задаёт пропуск 10 байтов с начала для первого шаблона или от последнего найденного для второго и последующего шаблонов:
.distance=10;
Пример использования опциональных параметров:
|
.within
|
Сканировать в заданном интервале (RANGE) от начала или последнего найденного блока (шаблон полностью попадает в заданный интервал).
Задаётся в формате:
.within=<RANGE> [,<MODE>];
где <RANGE> — это целое число, начиная с 1.
Опциональные параметры (<MODE>) будут рассмотрены далее.
Например, следующая запись задаёт поиск с 1-го по 10-й байт с начала для первого шаблон или от последнего найденного для второго и последующего шаблона:
.within=10;
Пример использования опциональных параметров:
|
.startin
|
Сканировать в заданном интервале (RANGE) от начала или последнего найденного блока (для совпадения в заданный интервал может попадать только начало шаблона).
Задаётся в формате:
.startin=<RANGE> [,<MODE>];
где <RANGE> — это целое число, начиная с 1.
Опциональные параметры (<MODE>) будут рассмотрены далее.
|
.at
|
Проверять наличие шаблона в заданной позиции.
Важно! Данный модификатор не совместим с модификаторами .distance и .within.
Задаётся в формате:
.at=<RANGE> [,<MODE>];
где <RANGE> — это целое число, начиная с 0.
Опциональные параметры (<MODE>) будут рассмотрены далее.
|
В следующей таблице представлены опциональные параметры:
Наименование
|
Описание
|
start
|
Поиск с начала потока данных.
Важно! Является значением по умолчанию для первого шаблона.
|
packet
|
Сканирование с начала пакета.
|
reverse
|
Поиск с конца пакета (удобно для проверки Next Protocol в ESP).
|
match
|
Поиск от последнего найденного шаблона.
Важно! Является значением по умолчанию для второго и последующего шаблона.
|
lastmark
|
Сканирование от последней метки, выставленной с помощью .mark pset.
|
ПримечаниеЕсли опциональный параметр для модификаторов .distance и .within совпадают, то отсчёт значения модификатора .within производится от значения .distance.
Например, запись:
.distance=10,match; .within=5,match
задаёт поиск в диапазоне с 10-го по 15-й байт от последнего найденного шаблона.
Примеры:
UASL(.name="sock5.proxy.detect"; .protocol=tcp; .flow=from_client; .seq=1,relative; .pattern="|05 01 00|"; .within=1;)
UASL(.name="block.google"; .protocol=tcp; .service=http;.pattern="google.com"; .within=512;)
.protocol
Данный модификатор позволяет указать протокол транспортного уровня, к которому будет применена сигнатура:
.protocol=<MODE>;
где <MODE> может принимать следующие значения:
-
icmp: анализ трафика протокола ICMP.
-
udp: анализ трафика протокола UDP.
-
tcp: анализ трафика протокола TCP.
ПримечаниеМожно задать только один протокол. Если протокол не указан, то сигнатура применяется только к трафику TCP и UDP.
Пример:
UASL(.name="block.google"; .protocol=tcp; .pattern="google.com";)
Для задания проверки TCP/UDP-портов используйте параметры:
Доступно использование следующих выражений:
Наименование
|
Описание
|
.src_port=<port_number>;
.dst_port=<port_number>;
|
Указание конкретного порта источника и/или назначения.
|
.src_port!=<port_number>;
.dst_port!=<port_number>;
|
Проверка всех портов кроме указанного.
|
.src_port=:<port_number>;
.dst_port=:<port_number>;
|
Проверка всех портов, номер которых меньше или равен номеру указанного порта.
|
.src_port!=:<port_number>;
.dst_port!=:<port_number>;
|
Проверка всех портов, номер которых больше указанного.
|
.src_port=<port_number>:;
.dst_port=<port_number>:;
|
Проверка всех портов, номер которых больше или равен номеру указанного порта.
|
.src_port!=<port_number>:;
.dst_port!=<port_number>:;
|
Проверка всех портов, номер которых меньше указанного.
|
.src_port=<port_number1>:<port_number2>;
.dst_port=<port_number1>:<port_number2>;
|
Проверка портов, находящихся в указанном диапазоне (port_number1 и port_number2 включительно).
|
.src_port!=<port_number1>:<port_number2>;
.dst_port!=<port_number1>:<port_number2>;
|
Проверка всех портов, не входящих в указанный диапазон (т.е. проверяются порты с номерами менее port_number1 и более port_number2).
|
Примеры:
.src_port=1000:; # '>= 1000'
.dst_port=5060;
.dst_port=1000:;
.dst_port=2000:8000; # '>= 2000 and <= 8000'
.dst_port!=2000:8000; # '< 2000 and > 8000'
Данные параметры позволяют настроить проверку заданных IP-адресов:
.src_addr[!]=<IP_address/subnet>;
.dst_addr[!]=<IP_address/subnet>;
Допустимы следующие форматы указания IP-адресов:
-
A.B.C.D;
-
A.B.C.D/E;
-
A.B.C.D:E.
При задании IP-адреса указание маски подсети необязательно; чтобы задать несколько IP-адресов используйте квадратные скобки, например:
.src_addr=[<IP_address1>, <IP_address2>];
Примеры:
.src_addr!=10.10.10.1;
.src_addr=10.10.10.0/24;
.src_addr=[10.10.10.0/24, 10.10.20.0/24, 10.10.30.0/24];
В данном разделе приведены примеры, написанные с использования UASL.
Пример 1
UASL(
.id = 1;
.pattern = "ABC"; .startin = 1;
.pattern = "XYZ"; .at = 3, match;
)
В данном примере выполняется последовательный поиск 2-х шаблонов:
-
поиск начала шаблона ABC в заданном диапазоне, т.е. первый байт заданного шаблона обязательно должен находится в диапазоне. Значение модификатора .startin равно 1 (диапазон = 1, поиск шаблона с начала сессии, т.к. первый модификатор по умолчанию — start) — байт, входящий в этот диапазон должен быть равен началу шаблона ABC;
-
поиск шаблона XYZ начиная с позиции 4 (.at=3;) от последнего найденного шаблона ABC.
Пример 2
UASL(
.id = 2;
.pattern = "ABC"; .at = 0;
.pattern = "XYZ"; .distance = 3, match; .startin = 1, match;
)
Выполняется последовательный поиск 2-х шаблонов:
-
поиск начала шаблона ABC с начала пакета (.at=0;);
-
пропустив 3 байта от последнего найденного шаблона ABC (.distance=3,match;) производится поиск начала шаблона XYZ; для срабатывания начало шаблона XYZ должно быть равно первому байту, с которого начинается поиск, т.к. .startin=1,match;.
Пример 3
UASL(
.id = 3;
.pattern = "ABC";
.pattern = "XYZ"; .distance = 3, match; .within = 3, match;
)
Производится последовательный поиск 2-х шаблонов:
Для каждого потока данных может быть указана именованная метка. Для ее указания используется:
.mark <parameter>=<value>;
где <value> – название метки (указывается с использованием кавычек "");
<parameter> может принимать значения, представленные в таблице ниже.
Сопоставление шаблонов основано, в большинстве случаев, на работе с пакетами данных. Метки используются в случаях, если шаблон атак присутствует в нескольких пакетах. Сигнатура, сработавшая для предыдущего пакета, может поставить метку; наличие меток проверяется при отправке пакетов в рамках одной сессии.
Наименование
|
Описание
|
set
|
Установить именованную метку для текущего потока данных.
|
pset
|
Установить и запомнить последнюю выставленную метку для возможности её использования с модификаторами области поиска .distance и .within.
|
clear
|
Удалить именованную метку.
|
toggle
|
Изменить статус метки.
|
test
|
Проверить, существует ли метка.
|
reset
|
Сбросить все метки.
|
Данный параметр является опциональным и позволяет применять сигнатуру к определённым потокам трафика. В результате можно создавать сигнатуры, которые будут анализировать трафик от клиента, от сервера или в обоих направлениях.
.flow=<MODE>;
где <MODE> может принимать следующие значения:
Наименование
|
Описание
|
from_client
|
Анализ трафика от клиента.
|
from_server
|
Анализ трафика от сервера.
|
bi_directional
|
Анализ трафика в обоих направлениях.
|
Следующий параметр позволяет задать шаблон, на наличие которого система обнаружения и предотвращения вторжений будет проверять содержимое пакетов (packet payload):
.pattern[!]="string";
ПримечаниеСледует помнить, что при поиске учитывается регистр символов.
Данные, представленные в шестнадцатеричной системе счисления (HEX), должны быть указаны с использованием символа вертикальной черты (|), например, |05 00 27|.
Для указания специальных символов используйте соответствия, представленные в таблице:
Символ
|
Запись в шестнадцатеричном формате
|
"
|
|22|.
|
;
|
|3B| или |3b|.
|
\
|
|5C| или |5c|.
|
|
|
|7C| или |7c|.
|
:
|
|3A| или |3a|.
|
Помимо оператора =, может быть использован и оператор !=. Тогда будет производится поиск пакетов, не содержащих заданный шаблон.
Общий формат задания параметра:
.pattern[!]="string"; [.where=<MODE>;] [.no_case;] [.distance=<RANGE>[,<MODE>];] [.within=<RANGE>[,<MODE>];] [.service=<MODE>;]
Модификаторы области поиска (.where, .no_case, .distance, .within, .service) будут рассмотрены далее.
При написании сигнатуры доступно использование нескольких параметров .pattern с целью снижения уровня ложных срабатываний.
Сканирование пакетов без полезной нагрузки
Поле .nopayload предназначено для возможности сканирования пакетов, в которых отсутствует полезная нагрузка.
ПримечаниеПоле неприменимо для сигнатур с поиском шаблонов и проверкой метки.
Например, данное поле может быть использовано для обнаружения сканирования портов пакетами без полезной нагрузки. Далее представлена сигнатура для обнаружения SYN-сканирования:
UASL(.protocol=tcp; .tcp.flags=S; .rate=1000,2; .track=src_ip; .nopayload;)
ПримечаниеУказание поля .nopayload не исключает сканирования пакетов с нагрузкой.
Поле .rev предназначено для указания дополнительной информации: пользователь, который создал сигнатуру, дата создания, тип и версия сигнатуры. Поле является опциональным и не влияет на работу СОВ; может быть использовано для отслеживания изменений.
Формат поля следующий:
.rev = <date>,<version>,<status>,<author>;
где параметры имеют следующий тип данных:
|