Обнаружьте загрузки неразрешённому сборщику

КибербезопасностьBeginner
Практиковаться сейчас

Введение

Команда обычно загружает документы на docs.approved.test. Небольшой записанный захват содержит и передачи другому получателю. Вам разрешено создать офлайн-детектор этих синтетических обменов.

Захват пакетов (PCAP) хранит сетевые пакеты. Suricata восстанавливает HTTP-запросы и проверяет правила. Здесь движок читает файлы, не обращаясь к этим хостам. Все имена и документы вымышлены. Открытый HTTP делает тело видимым; чтение зашифрованного HTTPS не демонстрируется.

Команды вводите на вкладке Analyst. Выберите вкладку Traffic Reference, чтобы увидеть те же подготовленные запросы, что и в traffic/requests.txt; справочная страница открывается сразу. Это записанные примеры, а не живая топология. Достаточно базового ввода в терминал и переключения вкладок; опыт IDS не нужен.

Распознайте запросы загрузки

На этом шаге создайте первое правило для POST, включая обычные загрузки. Тревога означает совпадение правила, а не доказательство взлома, и ничего не блокирует.

Чтобы начать этот шаг, выберите вкладку Analyst в интерфейсе лабораторной работы.

HTTP — протокол запросов и ответов. Метод задаёт действие: POST отправляет содержимое; GET запрашивает ресурс. Заголовок Host указывает сайт назначения, URI — маршрут, а тело содержит отправленные поля документа. Перейдите на вкладку Traffic Reference, чтобы увидеть подготовленные HTTP-обмены в браузере. Это справочная страница, а не монитор текущих пакетов. Затем вернитесь на вкладку Analyst, чтобы прочитать те же обмены и выполнить все команды ниже. cat выводит файл; путь указывает его расположение.

Traffic Reference с подготовленными HTTP-методами, адресатами, маршрутами и телами документов

Перед выполнением следующей команды перейдите на вкладку Analyst.

cat traffic/requests.txt

Сравните легитимный POST на docs.approved.test, GET получателя и POST с classification=internal. Организация разрешает внутренние документы на одобренном сервисе. Маршрут сборщика принимает публичные демонстрационные документы, но не внутренние. Важно сочетание назначения и содержимого; незнакомое имя хоста само по себе ничего не доказывает.

Правило Suricata имеет заголовок и параметры в скобках. alert http выбирает тревогу для разобранного HTTP. Две пары any any допускают любые адреса и порты источника/назначения; -> задаёт направление. flow:established,to_server ограничивает проверку запросами подключённого клиента. Параметры завершаются точкой с запятой. msg описывает совпадение, sid — числовой идентификатор сигнатуры, rev — её редакция. Правило использует уникальный sid.

Sticky buffer выбирает HTTP-поле для следующего content. http.method выбирает метод. content:"POST" ищет текст, а startswith и endswith требуют совпадения всего поля вместо подстроки. Используйте правило ниже.

cat > method.rules записывает файл, заменяя старое содержимое. <<'RULE' начинает буквальный многострочный ввод; завершающий RULE должен стоять отдельно. Это простой способ редактирования: при опечатке выполните весь блок снова.

cat > method.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.method; content:"POST"; startswith; endswith; sid:1000001; rev:1;)
RULE

Воспроизведите захват. mkdir -p создаёт выходной каталог и допускает существующий. --runmode single использует один поток обработки; -c выбирает конфигурацию, -S загружает только ваш файл правил, -r читает PCAP, -l выбирает вывод. --init-errors-fatal останавливает движок, если правило не загружается. Настройка проверяет до 64 КБ каждого тела; все примеры помещаются. Ограничения реального развёртывания оцениваются отдельно.

mkdir -p method-output
suricata --runmode single -c suricata.yaml -S method.rules -r traffic/core.pcap -l method-output --init-errors-fatal
python3 /opt/c09/read-alerts.py method-output/eve.json

Сообщение остановки в конце офлайн-файла нормально. eve.json содержит JSON-объект на событие. В JSON поля имеют имена: event_type: alert обозначает совпадение, signature_id — правило, поля HTTP — запрос. Готовый Python-просмотрщик выводит исходный порт, метод, хост, URI и идентификатор сигнатуры каждой тревоги. Порт связывает обмен со справочником, но не является условием политики.

Ожидается Alerts: 10. Видны обычный POST документов и POST сборщику. GET и PUT остаются без тревог. Этот намеренно широкий первый детектор учит сопоставлению метода.

Проверяющая программа выполняет неизменённое правило на двух небольших независимых наборах в временных выходных каталогах. Она игнорирует сохранённые журналы и не меняет правила или захваты. Проверьте детектор метода:

python3 /opt/c09/check.py method.rules method

Обе строки должны сообщить о 10 нужных обменах. При ошибке синтаксиса проверьте кавычки, точки с запятой и закрывающую скобку, перепишите и повторите. Повторная запись в тот же каталог добавляет события; для сравнения количества используйте новый. Проверка всегда начинает с чистого вывода.

Выберите назначение сборщика

На этом шаге объедините метод и хост, исключив обычные загрузки в документный сервис. Все буферы правила должны совпасть в одной HTTP-транзакции.

Чтобы начать этот шаг, выберите вкладку Analyst в интерфейсе лабораторной работы.

Имя сайта назначения относится к http.host, а не к поиску в теле: документ может упоминать сборщик, не отправляясь ему. Suricata нормализует буфер хоста в нижний регистр. collector.example.test.other.test в справочнике — другой хост. Сопоставление целого поля отделяет его.

Создайте новый файл, сохранив первый детектор для сравнения. Заголовок и метод остаются; буфер хоста добавляет назначение.

Перед выполнением следующей команды перейдите на вкладку Analyst.

cat > destination.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.method; content:"POST"; startswith; endswith; http.host; content:"collector.example.test"; startswith; endswith; sid:1000001; rev:1;)
RULE
mkdir -p destination-output
suricata --runmode single -c suricata.yaml -S destination.rules -r traffic/core.pcap -l destination-output --init-errors-fatal
python3 /opt/c09/read-alerts.py destination-output/eve.json

Ожидается Alerts: 6. Одобренный сервис и похожее имя хоста исчезают. POST на /status и /collect-backup ещё совпадают, поскольку маршруты пока не различаются. Эти известные ложные срабатывания полезны: совпадение выходит за рамки исследуемого поведения.

python3 /opt/c09/check.py destination.rules destination

Оба набора должны дать шесть совпадений метода и хоста. Если разрешённый хост ещё вызывает тревогу, проверьте startswith; endswith; после его содержимого. Изменение сохранённого JSON-события не исправляет детектор: меняйте правило и воспроизводите снова.

Ограничьте обнаружение маршрутом загрузки

На этом шаге создайте рабочий детектор маршрута, сохраняя понимание ограничения по содержимому. URI — маршрут запроса, например /collect, а не хост.

Чтобы начать этот шаг, выберите вкладку Analyst в интерфейсе лабораторной работы.

С помощью http.uri и целого поля выберите ровно /collect. /collect-backup — другой маршрут. Сохраните метод и назначение, чтобы проверки состояния и легитимные получатели оставались без тревог.

Перед выполнением следующей команды перейдите на вкладку Analyst.

cat > upload.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.method; content:"POST"; startswith; endswith; http.host; content:"collector.example.test"; startswith; endswith; http.uri; content:"/collect"; startswith; endswith; sid:1000001; rev:1;)
RULE
mkdir -p route-output
suricata --runmode single -c suricata.yaml -S upload.rules -r traffic/core.pcap -l route-output --init-errors-fatal
python3 /opt/c09/read-alerts.py route-output/eve.json

Ожидается Alerts: 4 для портов 41002, 41003, 41007, 41011. Сравните тела: два внутренних и два публичных демонстрационных документа. Все четыре — POST выбранному хосту и маршруту. Мониторинг маршрута работает, но завышает число чувствительных загрузок.

python3 /opt/c09/check.py upload.rules route

Оба набора должны дать четыре нужных обмена маршрута. Проверка меняет также имена документов и исходные порты: эти случайные значения не должны определять обнаружение. При передаче тревог объясняйте назначение правила. Следующая работа добавляет контекст документа и проверяет снижение шума в новой среде.

Резюме

Вы создали детекторы метода, назначения и маршрута с настоящим воспроизведением Suricata, связали тревоги с записанными запросами и нашли ложные срабатывания на публичные документы до заявления об обнаружении чувствительных загрузок.