Tiếng ồn không hồi kết của SSH Brute-Force
Nếu bạn quản lý một máy chủ Linux với IP công cộng, tệp /var/log/auth.log của bạn có khả năng là một “nghĩa địa” của những nỗ lực đăng nhập thất bại. Đó là một luồng script tự động không ngừng nghỉ đến từ khắp nơi trên thế giới.
Cách đây vài năm, một cuộc tấn công brute-force đã đánh vào máy chủ cá nhân của tôi lúc 3 giờ sáng, và kể từ đó, tôi đã luôn ám ảnh với việc thắt chặt bảo mật (hardening) hệ thống của mình. Nhưng chặn IP bằng Fail2Ban hay đổi cổng SSH sang 2222 chỉ là cách che giấu vấn đề. Nó không cho bạn biết kẻ tấn công định làm gì nếu chúng thực sự đoán đúng mật khẩu.
Vì tò mò, tôi đã dành sáu tháng qua để vận hành một “mồi nhử kỹ thuật số”. Tôi đã sử dụng Cowrie, một SSH và Telnet honeypot tương tác trung bình (medium-interaction), được thiết kế để khiến kẻ tấn công nghĩ rằng chúng đã thành công. Thay vì một cánh cửa khóa chặt, tôi cho chúng một căn phòng giả với camera ẩn.
Cowrie chính xác là gì?
Cowrie là một ứng dụng dựa trên Python, mô phỏng một hệ thống Unix có lỗ hổng. Khi một hacker kết nối, họ không hề chạm vào hệ điều hành thực của bạn mà bị nhốt trong một sandbox. Chúng ta gọi đây là “tương tác trung bình” vì nó cung cấp một shell hoạt động được, nơi kẻ tấn công có thể thực thi các lệnh hoặc đổi mật khẩu, nhưng chúng vẫn hoàn toàn bị cô lập khỏi kernel và phần cứng của máy chủ host.
Đây là những gì làm cho Cowrie trở nên hiệu quả trong việc thu thập thông tin tình báo về mối đe dọa:
- Hệ thống tệp giả lập: Nó mô phỏng một môi trường Debian tiêu chuẩn. Kẻ tấn công có thể
ls,cd, vàcatcác tệp tin chỉ tồn tại trong bộ nhớ của Cowrie. - Ghi lại toàn bộ phiên làm việc: Mọi phím bấm đều được ghi lại. Nếu kẻ tấn công nhập mật khẩu, Cowrie sẽ lưu nó. Nếu chúng dành hai mươi phút để duyệt thư mục, bạn có thể xem lại toàn bộ phiên làm việc như một bộ phim.
- Chặn bắt mã độc: Khi kẻ tấn công sử dụng
wgethoặccurlđể tải xuống rootkit, Cowrie sẽ chặn việc tải xuống đó. Nó lưu tệp vào một thư mục cách ly để bạn phân tích sau.
Đặt bẫy: Triển khai Cowrie trên Ubuntu
Tôi khuyên bạn nên chạy honeypot trên một VPS rẻ tiền, khoảng $5 mỗi tháng. Điều này giúp cô lập lưu lượng mã độc khỏi hạ tầng sản xuất (production) của bạn. Đây là quy trình tôi đã sử dụng để kích hoạt cái bẫy của mình.
Bước 1: Di chuyển dịch vụ SSH thực
Trước khi honeypot có thể chiếm quyền điều khiển cổng 22, bạn phải chuyển dịch vụ SSH thực của mình sang một cổng khác. Tôi thường chọn một cổng lạ như 8822. Nếu bỏ qua bước này, bạn sẽ mất quyền truy cập vào máy chủ ngay khi Cowrie khởi động.
# Chỉnh sửa cấu hình SSH
sudo nano /etc/ssh/sshd_config
# Đổi 'Port 22' thành 'Port 8822'
sudo systemctl restart ssh
Hãy kiểm tra kỹ xem tường lửa (firewall) có cho phép lưu lượng truy cập trên cổng 8822 hay không trước khi bạn ngắt kết nối. Bị khóa bên ngoài honeypot của chính mình là một sai lầm đáng xấu hổ mà tôi đã từng mắc phải đúng một lần.
Bước 2: Chuẩn bị một người dùng không có đặc quyền
Bảo mật là về các lớp phòng thủ. Cowrie không bao giờ nên chạy dưới quyền root vì một lỗ hổng trong chính honeypot có thể làm hỏng máy chủ host. Hãy tạo một người dùng riêng với quyền hạn hạn chế.
sudo apt-get update
sudo apt-get install git python3-virtualenv libssl-dev libffi-dev build-essential authbind virtualenv -y
sudo adduser --disabled-password cowrie
sudo su - cowrie
Bước 3: Cài đặt môi trường
Clone repository và thiết lập môi trường ảo (virtual environment) Python. Điều này giúp các dependency của honeypot không gây xung đột với các thư viện Python của hệ thống.
git clone http://github.com/cowrie/cowrie
cd cowrie
virtualenv --python=python3 cowrie-env
source cowrie-env/bin/activate
pip install --upgrade pip
pip install --upgrade -r requirements.txt
Bước 4: Tùy chỉnh sự ngụy trang
Để làm cho máy chủ trông giống như một mục tiêu thực thụ, bạn cần tinh chỉnh cấu hình. Sao chép mẫu mặc định và chỉnh sửa hostname. Tôi đặt tên cho máy của mình là srv-prod-01 để nó trông giống như một mục tiêu quan trọng trong môi trường sản xuất.
cp etc/cowrie.cfg.dist etc/cowrie.cfg
nano etc/cowrie.cfg
Trong phần [ssh], hãy đảm bảo nó được thiết lập để lắng nghe trên cổng 2222. Chúng ta sẽ sử dụng một quy tắc tường lửa để điều hướng lưu lượng từ cổng 22 thực sang đây.
Bước 5: Điều hướng lưu lượng cổng 22
Vì người dùng không phải root không thể liên kết (bind) với các cổng dưới 1024, chúng ta sử dụng iptables để chuyển tiếp lưu lượng đến từ cổng 22 vào cổng 2222 của Cowrie. Điều này giúp quá trình này trở nên vô hình đối với kẻ tấn công.
# Chạy lệnh này dưới quyền root
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
Dữ liệu sau sáu tháng: Những gì tôi học được
Sau khi vận hành hệ thống này trong nửa năm, dữ liệu thu được thật đáng kinh ngạc. VPS nhỏ của tôi đã thu thập hơn 50GB log thô và bắt được 382 mẫu mã độc duy nhất. Hầu hết lưu lượng là tự động, nhưng các mô hình tấn công rất thú vị.
Những thông tin đăng nhập bị đoán nhiều nhất
Bot không chỉ đoán admin/admin. Chúng cụ thể một cách đáng ngạc nhiên. Năm tổ hợp hàng đầu mà tôi ghi nhận được là:
- root / root (hơn 34.000 lượt thử)
- root / 123456
- admin / admin
- root / password
- oracle / oracle
Tôi cũng thấy sự gia tăng đột biến trong các nỗ lực đăng nhập cho app/app và guest/guest, có khả năng nhắm vào các phiên bản cloud bị cấu hình sai.
Chiến thuật sau khi xâm nhập (Post-Exploitation)
Khi một con bot “xâm nhập” thành công, hành vi của nó hầu như luôn được lập trình sẵn. Trong vòng 0,5 giây sau khi đăng nhập, bot sẽ chạy uname -a và cat /proc/cpuinfo. Nó muốn biết liệu phần cứng có đáng để sử dụng cho việc đào tiền ảo hoặc tấn công DDoS hay không.
Tôi đã bắt được một script đặc biệt thông minh cố gắng tải xuống một tệp thực thi, đổi tên nó thành [kworker/u:1] để trông giống như một tiến trình kernel, sau đó xóa .bash_history. Vì Cowrie ghi nhật ký ở tầng ứng dụng, nỗ lực che giấu của kẻ tấn công là vô ích. Tôi có thể thấy chính xác URL nơi chứa mã độc, sau đó tôi đã báo cáo cho đội ngũ xử lý lạm dụng (abuse team) của nhà cung cấp hosting.
Yếu tố con người
Sử dụng tiện ích playlog, tôi đã xem một vài kẻ tấn công là con người thực thụ thao tác trên hệ thống. Không giống như bot, con người thường do dự. Họ gõ whoami, sau đó chờ đợi. Họ kiểm tra last để xem có ai khác đang theo dõi không. Chứng kiến một người thật nhận ra họ đang ở trong một môi trường giả—thường là sau khi họ cố gắng cài đặt một kernel module và thất bại—là phần thưởng lớn nhất đối với một nhà nghiên cứu bảo mật.
Lời kết
Vận hành Cowrie biến bảo mật từ một công việc phòng thủ nhàm chán thành một hoạt động giám sát an ninh chủ động. Nó sẽ không thay thế tường lửa hay SSH key của bạn, nhưng nó cung cấp ngữ cảnh mà các bản log tiêu chuẩn không thể so bì. Bằng cách theo dõi hacker, bạn biết chính xác những gì chúng đang tìm kiếm trước khi chúng tìm thấy dữ liệu thực của bạn. Nếu bạn có một máy chủ dư dả và một giờ rảnh rỗi, tôi thực sự khuyên bạn nên thiết lập hệ thống này. Những điều bạn thấy trong log sẽ thay đổi hoàn toàn cách bạn tiếp cận việc thắt chặt bảo mật máy chủ.

