Узнайте, как выявить автоматизированный сканер по поведению. Практический метод с примерами кода на Python. Примените сегодня!
Представьте: вы настроили песочницу, наблюдаете за сканером, и всё выглядит нормально. Но однажды замечаете странность: параметры меняются, а реакция отсутствует. Это признак того, что вы имеете дело не с реальным исследователем, а с автоматизированным скриптом. В этой статье я покажу, как провести сравнение поведения и выявить подделку, используя Python и простые статистические методы.
Когда вы анализируете сетевой трафик или взаимодействие с API, важно понимать, кто перед вами: человек, исследующий систему, или программа, выполняющая заранее написанный сценарий. Реальные исследователи адаптируются к изменениям, а скрипты следуют фиксированным алгоритмам. Различие можно обнаружить, меняя параметры окружения и наблюдая за реакцией.
Для выявления скрипта используйте метод единичной переменной: изменяйте один параметр окружения и наблюдайте за поведением источника. Если источник реагирует — он, скорее всего, реальный. Если нет — это скрипт.
Предположим, у вас есть песочница с тремя слоями: API, база данных и админка. Вы меняете задержку ответа на среднем слое с 200 мс на 800 мс. Реальный исследователь заметит задержку и, возможно, увеличит время ожидания или повторит запрос. Скрипт же просто отправит запрос и получит ответ, не меняя своего поведения.
Запишите все параметры: время ожидания (dwell), количество повторов, порядок портов, интервалы между запросами. Сравните их с предыдущими визитами. Если все параметры идентичны, кроме времени ожидания, которое увеличилось ровно на разницу в задержке, это указывает на пассивное ожидание — характерно для скрипта.
Используйте Python для сравнения. Например, у вас есть данные о визитах:
import json
# Данные о визитах: список словарей с параметрами
visits = [
{"visit": 6, "dwell": 4.7, "retries": 0, "ports": [22, 443, 8443, 9443], "gap": 3.8},
{"visit": 7, "dwell": 5.3, "retries": 0, "ports": [22, 443, 8443, 9443], "gap": 3.8}
]
# Функция для сравнения двух визитов
def compare(v1, v2):
diff = {}
for key in v1:
if key == "visit":
continue
if v1[key] != v2[key]:
diff[key] = (v1[key], v2[key])
return diff
# Сравниваем визиты 6 и 7
diff = compare(visits[0], visits[1])
print("Различия:", diff)
# Вывод: Различия: {'dwell': (4.7, 5.3)}
# Разница 0.6 с — ровно на величину изменения задержки (800-200=600 мс)
Если различие только в dwell и оно точно соответствует изменению задержки, это означает, что источник просто ждал ответа, не меняя своих действий. Реальный исследователь, скорее всего, увеличил бы число повторов или изменил порядок действий.
Помимо активного эксперимента, можно проанализировать исторические данные. Вот несколько проверок, которые вы можете реализовать на Python:
# Количество новых признаков по визитам
new_features = [8, 6, 5, 3, 3, 3, 3] # начиная со второго визита
# Вычислим стандартное отклонение
import statistics
std = statistics.stdev(new_features[3:]) # с пятого визита
print(f"Стандартное отклонение: {std:.2f}")
# Если std близко к 0, это подозрительно — реальные данные имеют большую вариативность
Если порядок портов на разных слоях различается, это может быть признаком скрипта, так как реальный исследователь, скорее всего, использовал бы одинаковую логику.
Возьмите свою систему и проведите эксперимент с изменением одного параметра. Соберите данные до и после, сравните их с помощью Python. Если вы обнаружите, что поведение не меняется, это повод для глубокого анализа. Настройте алерты на аномалии и регулярно пересматривайте профили поведения. Помните: скрипты можно выявить, если систематически проверять их реакцию на изменения.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →