Специалист по безопасности открывает журнал событий и видит тысячи строк логов, в которых невозможно найти одну подозрительную активность. Подобная ситуация возникает из-за огромного потока данных, где полезные сигналы тонут в системном шуме. Чтобы быстро отсеять лишнее и обнаружить атаку, нужно понимать, как использовать логические операторы в кибербезопасности. Я помогу разобраться в работе AND, OR и NOT, чтобы вы могли создавать точные правила фильтрации и находить угрозы за считанные минуты.
Принципы булевой логики в информационной безопасности
В основе любой системы защиты лежит булева алгебра, где каждое условие может принимать только два значения: истина (True) или ложь (False). Компьютер интерпретирует правила безопасности именно так. Если условие правила совпадает с событием в логах, система считает это «истиной» и вызывает срабатывание (алерт). Если данные не соответствуют критериям — это «ложь», и событие игнорируется.
Для понимания того, как комбинируются условия, я составил таблицу истинности:
| Оператор | Условие 1 | Условие 2 | Результат |
|---|---|---|---|
| AND | Истина | Истина | Истина |
| AND | Истина | Ложь | Ложь |
| OR | Истина | Ложь | Истина |
| NOT | Истина | — | Ложь |
Точная фильтрация с помощью оператора AND (И)
Оператор AND используется для пересечения условий. Это значит, что правило сработает только в том случае, если все указанные критерии выполняются одновременно. Я часто использовал этот метод, когда нужно было максимально уменьшить количество «шума» и найти конкретную угрозу. Чем больше условий через AND, тем меньше результатов выдаст поиск, но тем выше будет их точность.
Например, если вы ищете попытку подбора пароля, одного события «Ошибка входа» недостаточно, так как пользователи часто ошибаются. Нужно объединить несколько признаков:
- Введите условие «Ошибка входа». Система отфильтрует все неудачные попытки авторизации.
- Добавьте оператор AND и условие «IP-адрес не из внутренней сети». Теперь в списке останутся только внешние попытки.
- Добавьте еще один AND и условие «Количество попыток > 10 за минуту». Результатом станет список только тех адресов, которые ведут активный брутфорс.
- Нажмите «Применить». Вы получите точный список атакующих без лишних записей.
Расширение охвата с оператором OR (ИЛИ)
Принцип работы OR заключается в объединении условий. Правило сработает, если верно хотя бы одно из указанных требований. Это полезно, когда нужно одним правилом отследить разные типы атак или несколько подозрительных признаков. Однако здесь есть риск: слишком широкие условия приводят к росту ложноположительных результатов, когда легитимные действия принимаются за атаку.
Я рекомендую применять OR для создания общих групп мониторинга. Например, для обнаружения сканирования сети можно создать список портов:
- Попытка подключения к порту 22 (SSH).
- Попытка подключения к порту 23 (Telnet).
- Попытка подключения к порту 3389 (RDP).
- Попытка подключения к порту 445 (SMB).
- Попытка подключения к порту 21 (FTP).
Если любое из этих условий истинно, система зафиксирует событие как «Попытка доступа к критическому порту».
Исключение лишнего через оператор NOT (НЕ)
Оператор NOT инвертирует значение: он превращает истину в ложь и наоборот. В кибербезопасности это главный инструмент для создания «белых списков» внутри правил. С его помощью можно отсекать легитимный трафик, который по своим признакам похож на атаку, но на самом деле является нормальной работой системы.
Чаще всего я применял NOT для очистки логов от системных сообщений. Если антивирус или сканер уязвимостей постоянно генерирует тысячи уведомлений с одного и того же доверенного сервера, эти записи только мешают анализу. Добавление условия NOT «IP-адрес = [Адрес сканера]» мгновенно убирает этот мусор из выдачи, оставляя только реальные инциденты.
Построение сложных комбинированных запросов
В реальных задачах редко используются одиночные операторы. Для создания гибких правил применяются комбинированные запросы. Здесь критически важна приоритезация: операции в скобках выполняются первыми, затем идут AND, и в конце — OR. Это похоже на математику, где скобки меняют порядок действий.
Рассмотрим логическую цепочку для обнаружения подозрительной активности администратора: (Вход в систему OR Изменение прав) AND (Время = Ночь OR IP = Внешний).
Разбор этой цепочки работает так:
- Сначала система проверяет первую группу в скобках: было ли это действие входом или сменой прав.
- Затем проверяется вторая группа: произошло ли это ночью или с внешнего адреса.
- Если оба блока вернули «Истину», срабатывает общий алерт.
Применение в реальных инструментах
Разные программы имеют свой синтаксис, но логика остается единой. В SIEM-системах (например, Splunk или ELK) операторы пишутся заглавными буквами в строке поиска. В настройках Firewall или WAF условия часто задаются в виде визуальных блоков или текстовых правил.
Для поиска уязвимостей в открытом вебе используются Google Dorks. Здесь оператор OR позволяет искать файлы разных типов, а знак минуса (аналог NOT) исключает ненужные сайты.
| Задача | Логическая формула | Результат |
|---|---|---|
| Поиск брутфорса | «Failed Login» AND «IP != Internal» | Список внешних попыток входа |
| Поиск веб-сканов | «404 Error» OR «403 Forbidden» | Все запросы к несуществующим страницам |
| Поиск конфигов | filetype:env OR filetype:conf NOT site:github.com | Конфиги в сети, исключая GitHub |
Сравнение основных операторов для выбора стратегии:
| Критерий | AND | OR |
|---|---|---|
| Цель применения | Сузить поиск, уточнить угрозу | Расширить охват, объединить типы атак |
| Влияние на результаты | Количество записей уменьшается | Количество записей увеличивается |
| Риск ложных срабатываний | Низкий | Высокий |
Типичные ошибки при составлении правил
Самая частая проблема — игнорирование приоритетов. Если написать Условие1 OR Условие2 AND Условие3 без скобок, система сначала выполнит AND, а затем OR. В итоге вы получите гораздо больше результатов, чем ожидали, и правило станет бесполезным.
Также часто встречаются противоречивые условия. Например: «IP = 192.168.1.1» AND «IP = 10.0.0.1». Один и тот же пакет не может иметь два разных IP-адреса одновременно, поэтому такое правило никогда не сработает и ничего не найдет.
Что делать, если правило не работает:
- Проверьте расстановку скобок.
- Убедитесь, что условия не исключают друг друга.
- Проверьте синтаксис (заглавные буквы AND/OR/NOT).
- Попробуйте упростить запрос, убрав по одному условию.
Если после всех правок правило всё равно выдает ошибку или работает некорректно, стоит обратиться к старшему архитектору безопасности или в техподдержку вендора ПО — возможно, проблема в специфике обработки логов самой системой.
Полезные советы по оптимизации
Я заметил, что объединение логических операторов с регулярными выражениями (Regex) в разы ускоряет поиск. Вместо того чтобы писать десять условий OR для разных расширений файлов, можно использовать один Regex-паттерн, а затем отсечь лишнее через NOT.
Для повышения качества защиты используйте следующие лайфхаки:
- Всегда тестируйте новое правило на небольшом наборе данных перед запуском в «продакшн».
- Начинайте с самого широкого правила (OR), а затем постепенно сужайте его с помощью AND.
- Документируйте логику сложных запросов, чтобы через месяц вы могли понять, зачем здесь стоят эти скобки.
- Используйте NOT для исключения известных автоматических обновлений системы.
- Проверяйте правила на «перекрытие», чтобы одно и то же событие не вызывало пять разных алертов.
FAQ
Чем отличается AND от OR в фильтрах?
AND требует выполнения всех условий одновременно (сужает поиск), а OR требует выполнения хотя бы одного из них (расширяет поиск).
Как избежать ложных срабатываний при использовании OR?
Добавляйте к правилу с OR уточняющее условие через AND или исключайте доверенные адреса с помощью NOT.
Работают ли эти операторы в Linux grep?
Да, но синтаксис другой. Для OR используется символ «|» (вертикальная черта), а для NOT — флаг -v.
Можно ли использовать более двух условий в одном правиле?
Да, количество условий не ограничено, но для ясности и правильной работы обязательно используйте скобки.
Что будет, если забыть поставить скобки в сложном запросе?
Система применит стандартный приоритет (сначала AND, потом OR), что может привести к неверной фильтрации данных.
Как быстро проверить, работает ли правило?
Запустите запрос на исторических данных (логах за прошлую неделю) и посмотрите, какие события попали в выборку.


