HellPot — ловушка для web (HoneyPot)

DISCLAIMER|ВНИМАНИЕ: Нужно понимать что описываемые ниже приёмы и механизмы вынуждают web-сервер вести себя не так как предусматривает стандарт HTTP, например RFC 9110 описанный Internet Engineering Task Force (IETF). В следствии чего, поисковые системы могут исключить ваш сайт из индексации или произойти прочие не приятные инциденты, будьте внимательны) А так же в статье используется любительский проект с GitHub, неизвестно сколько времени он будет поддерживаться и развиваться, какие в нём имеются уязвимости и\или закладки.

Введение

Сегодня хочу рассказать об установке и минимальной (для меня) настройке ловушки для web сайта, HoneyPot или медовый горшочек. Смысл таких ловушек, притворится легитимной службой\сервисом, приманив тем самым ботов которые собирают информацию в автоматическом режиме или пытаются взломать сервис на вашем сервере. Принцип работы заключается в том что бы бот, максимально «увяз» пытаясь получить доступ или собрать информацию, наш медовый горшочек будет бесконечно имитировать загрузку сайта.

Приступаем

За основу был взят проект с github, реализация написана на Go, в оригинале нам предлагают скачать проект, скомпилировать, с генерировать конфиг файл или же ЙОЛО метод) скачать готовый бинарный файл, положить\создать конфиг файл в директории по умолчанию. Необходимо будет выполнить минимальные настройки\пререквесты сервера, установить golang, включить модули Apache (mod_proxy, mod_proxy_http, mod_ratelimit), в рамках данной статьи мы это рассматривать не будем. Мы пойдём вторым путём:

  1. Идём на страницу с скомпилированными релизами и скачиваем для нашей архитектуры, в нашем случае нас интересует — HellPot-v0.3.9-linux-amd64.tar.gz
  2. Создаем конфиг файл:
nano $HOME/.config/HellPot/config.toml

Содержимое файла следующее, здесь я слегка изменил оригинальное содержимое, будьте внимательны, возможно будет необходима доработка под себя:

[deception]
  # Used as "Server" HTTP header. Note that reverse proxies may hide this.
  server_name = "Apache"

[http]
  # TCP Listener (default)
  bind_addr = "127.0.0.1"
  bind_port = "8081"

  # header name containing clients real IP, for reverse proxy deployments
  real_ip_header = 'X-Real-IP'

  # this contains a list of blacklisted useragent strings. (case sensitive)
  # clients with useragents containing any of these strings will receive "Not found" for any requests.
  uagent_string_blacklist = ["Cloudflare-Traffic-Manager", "curl"]

  # Unix Socket Listener (will override default)
  unix_socket_path = "/var/run/hellpot"
  unix_socket_permissions = "0666"
  use_unix_socket = false

  [http.router]
    # Toggling this to true will cause all GET requests to match. Forces makerobots = false.
    catchall = true
    # Toggling this to false will prevent creation of robots.txt handler.
    makerobots = true
    # Handlers will be created for these paths, as well as robots.txt entries. Only valid if catchall = false.
    paths = ["wp-login.php", "wp-login"]

[logger]
  # verbose (-v)
  debug = true
  # extra verbose (-vv)
  trace = false
  # JSON log files will be stored in the below directory.
  #directory = "/home/kayos/.local/share/HellPot/logs/"
  # disable all color in console output. when using Windows this will default to true.
  nocolor = false
  # toggles the use of the current date as the names for new log files.
  use_date_filename = true

[performance]
  # max_workers is only valid if restrict_concurrency is true
  max_workers = 256
  restrict_concurrency = true

3. Подготавливаем web-сервер, создаем фейковый каталог /content в корне нашего сайта, создаём в нём пустые файлы 400,403,404,500, создаём файл robot.txt запрещаем индексировать этот каталог и его содержимое.

4. Дописываем параметры в VirtualHost нашего сайта, пример для Apache:

<VirtualHost yourserver>
....
ProxyPreserveHost   on
    ProxyPass         "/content/" "http://localhost:8081/"
    ProxyPassReverse  "/content/" "http://localhost:8081/"

    <Location "/content/">
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 5
    </Location>

</VirtualHost>

5. Разархивируем скачанный архив и запускаем, я использую screen:

tar –xvzf HellPot-v0.3.9-linux-amd64.tar.gz
screen
./HellPot

После запуска в консоли увидим вывод:

Видим сообщение что сервер запустился и принимает соединения на порту 8081.

Следующим шагом, я слегка изменил стандартный файлы wordpress, таким образом что бы все несуществующие страницы так же редиректились в /content/404. Идём в раздел «Внешний вид» — «Редактор тем», меняем содержимое файла 404.php, родное содержимое скопируем в надёжное место, вставим следующий код:

<?php wp_redirect( 'https://iamninja.ru/content/404', 301 ); exit; ?>

Заключение

На этом базовая настройка закончена. По итогу получаем конфигурацию сайта, при которой клиенты которые игнорируют содержимое robot.txt получают бесконечный поток, напоминающих загрузку реального веб-сайта. Предполагается что такая загрузка будет идти «вечно». В конфигурации виртуального хоста Apache, мы так же указали лимит скорости в 5 кб\с, в конфигурации самого HellPot’a ограничили колличество клиентов — 256.