Что такое Honeypot :
Honeypot обнаруживает и записывает атаки, когда злоумышленник пытается взломать систему.
Honeypot, о котором мы здесь поговорим, – это SSH honeypot.
Предварительный этап
Эта статья следует за той, что я опубликовал о работе SSH Honeypot в дикой среде в течение 30 дней, статья вызвала хороший резонанс, и я получил много сообщений с просьбой показать, как я настраивал и конфигурировал этот SSH Honeypot.
Предыдущая статья :
Sofiane’s Blog - Что вы получаете после 30 дней работы SSH Honeypot
Требования
Мы настроим это на обычном VPS без какой-либо специальной предварительной настройки.
[!ВАЖНО]
Эта настройка предназначена для исследований и тестирования, поэтому, пожалуйста, не настраивайте это в вашей локальной сети или в сети для личного/профессионального использования.
VPS
Выбор и поиск поставщика VPS зависит от вас и должен подходить именно вам.
Honeypot Cowrie
Есть несколько известных SSH honeypot’ов, но мы используем тот, который называется Cowrie.
Это улучшенная версия популярного honeypot под названием Kippo.
Docker
Для установки мы будем использовать Docker-образ Cowrie.
Для этого на новом VPS должен быть установлен docker, вы можете ознакомиться с официальной документацией Docker для установки.
Пакеты для установки
- python3
- wget
Конфигурация
Я обычно меняю стандартный порт SSH на своих серверах или машинах.
Один из методов, который я предпочитаю — установить реальный SSH порт, например, 2022. Затем я настраиваю honeypot слушать на стандартном SSH порте, 22.
Установка
По умолчанию Cowrie настроен слушать порт 2222. Мы сопоставим этот порт в Docker-контейнере с портом 22 на нашем хосте. Такая настройка позволяет направлять всех сканирующих ботов и злоумышленников на наш 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>
Пример ввода и вывода :
> 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
Обсуждение
Оставить комментарий
Комментарии гостей будут проверены перед публикацией на сайте.
Пока нет комментариев. Будьте первым, кто начнет обсуждение!