Cuộc ghé thăm của kdevtmpfsi
Loại bỏ crypto mining virus trong môi trường Docker
Hi Devs! 👋 Hôm nay, mình muốn chia sẻ một câu chuyện có thể giúp các bạn tránh được cơn đau đầu mà team mình vừa trải qua. Đây là câu chuyện về việc làm thế nào mà một con malware đào tiền ảo ranh ma tên là kdevtmpfsi
đã lẻn vào các container Docker của chúng mình, và quan trọng hơn, làm thế nào chúng mình đã chiến đấu và chiến thắng nó.
1. Ngày Chúng Mình Phát Hiện Ra Điều Bất Thường
Mọi chuyện bắt đầu khi một đồng nghiệp báo về một vấn đề lạ: "Bình xem hộ anh nhé - Máy chủ xxx.xxx.xxx.xxx vẫn báo Full". Thoạt đầu, chúng mình nghĩ đây chỉ là vấn đề tải cao bình thường. Nhưng khi kiểm tra kỹ hơn, chúng mình phát hiện ra điều gì đó không ổn.
Những Dấu Hiệu Đầu Tiên
Như một câu chuyện trinh thám, chúng mình bắt đầu điều tra:
- Bên ngoài có thể truy cập bình thường, nhưng bên trong server thì không thể đăng nhập
- Một process lạ tên
kdevtmpfsi
xuất hiện trong hệ thống - Server chạy chậm bất thường, CPU liên tục ở mức cao
Sau khi phân tích nhanh, chúng mình xác nhận: "Bị dính miner bot rồi anh". Đúng vậy, server của chúng mình đã bị nhiễm malware đào tiền ảo!
Phân Tích Chi Tiết Về kdevtmpfsi
Khi nghiên cứu kỹ hơn về con malware này, chúng mình phát hiện ra những điều thú vị:
- Đặc Điểm Nhận Dạng:
- Process chạy từ thư mục
/tmp
(dấu hiệu điển hình của malware) - Thường xuất hiện dưới dạng daemon process
- Hay gây ra segfault với thư viện libnss
- Tạo nhiều bản sao với tên khác nhau như
bash7
,init7
,sh7
- Process chạy từ thư mục
- Cơ Chế Hoạt Động:
- Tự động cài crontab để duy trì tồn tại
- Kết nối với IRC botnet để nhận lệnh điều khiển
- Đào tiền ảo Monero (XMR) cho kẻ tấn công
- Mức Độ Nguy Hiểm:
- Chiếm dụng tài nguyên CPU và RAM để đào tiền ảo
- Có khả năng tự nhân bản và phục hồi
- Khó phát hiện do cơ chế ngụy trang tinh vi
- Có thể lan truyền qua mạng container
Dấu Hiệu Trong Log:
CRON[105618]: (daemon) CMD (/var/lock/bash7 > /dev/null 2>&1)
CRON[105627]: (daemon) CMD (/var/tmp/sh7 > /dev/null 2>&1)
CRON[105628]: (daemon) CMD (/tmp/bash7 > /dev/null 2>&1)
Tạo nhiều bản sao ở các thư mục khác nhau:
/dev/shm/
/var/tmp/
/tmp/
/var/lock/
/var/run/
Lần Theo Manh Mối
Khi đào sâu hơn, chúng mình phát hiện ra điều khiến phải đập tay lên trán 🤦♂️. Nhớ cái container Redis mà chúng mình setup không? Chúng mình đã đổi port của nó từ 6379 sang 6380, và nghĩ "thế là đủ rồi!" Nhưng này - chúng mình đã quên mất biện pháp bảo mật cơ bản nhất: đổi mật khẩu mặc định. Giống như việc thay ổ khóa cửa trước nhưng vẫn để chìa khóa dưới thảm chùi chân vậy!
Cấu hình của chúng mình lúc đó như này:
- Port Redis: Đã đổi ✅
- Mật khẩu Redis: Mặc định (trời ơi!) ❌
- Truy cập từ bên ngoài: Mở toang ❌
Câu Chuyện Xâm Nhập
Phần này mới thú vị này. Bọn tấn công giống như những tên trộm chuyên nghiệp đã tìm thấy cánh cửa Redis không khóa của chúng mình. Chúng:
- Đầu tiên phát hiện ra service Redis đang mở
- Dùng nó làm điểm đột nhập (cảm ơn cái mật khẩu mặc định!)
- Len lỏi qua mạng container như kiểu trẻ con vào tiệm kẹo ấy
- Thiết lập cơ sở đào tiền ảo trong container PostgreSQL của mình. Lừa ta chỉ tập trung vào container của PostgreSQL 🎃
2. Hiểu Rõ Về Mối Đe Dọa
kdevtmpfsi là gì?
- Một loại malware đào tiền ảo cực xuất phát từ các hacker Nga Ngố từ 2020.
- Ngụy trang như một process phát triển KDE hợp pháp
- Thường xâm nhập qua các service không được bảo mật (trong trường hợp này là Redis)
- Lan truyền qua mạng nội như virus
Đánh Giá Thiệt Hại
Khi kiểm tra các chỉ số của hệ thống, con số khiến chúng mình giật mình:
NAME CPU % MEM USAGE / LIMIT
mse-quiz-bank-db-1 377.50% 2.348GiB / 7.751GiB 🔥
mse-quiz-bank-backend-1 3.26% 119MiB / 7.751GiB
mse-quiz-bank-redis-1 0.57% 3.43MiB / 7.751GiB
Nhìn mấy con số này đi! Container PostgreSQL của mình làm việc còn vất vả hơn cả máy pha cà phê vào sáng thứ Hai. Nó xài gần 4 nhân CPU và hơn 2GB bộ nhớ - đúng là con quỷ tham ăn! 📊
3. Chiến Dịch Dọn Dẹp: Từ Container Nhiễm Bệnh Đến Môi Trường Sạch
Khi phát hiện malware trong hệ thống, phương án đơn giản nhất là xóa và tạo lại toàn bộ máy ảo. Tuy nhiên, chúng mình muốn thử nghiệm một cách tiếp cận khác - một cách mà có thể áp dụng được trong môi trường production thực tế, nơi việc xóa và tạo lại toàn bộ hệ thống không phải lúc nào cũng khả thi.
May mắn là toàn bộ hệ thống của chúng mình được triển khai dưới dạng Docker container. Điều này cho phép chúng mình thực hiện "phẫu thuật" có kiểm soát thay vì "đốt rừng trồng lại". 🔧
Bước 1: Điều Tra Và Cô Lập
Trước khi bắt tay vào dọn dẹp, chúng mình cần xác định chính xác phạm vi nhiễm bệnh:
# Kiểm tra các process đang chạy và mức độ sử dụng tài nguyên
top -b -n 1 -o %CPU | head -n 15
# Theo dõi tình trạng các container
docker stats --no-stream
# Phân tích hành vi của process đáng ngờ
lsof -p <PID> # Xem file nào đang bị truy cập
ss -anp | grep <PID> # Kiểm tra các kết nối mạng
Qua điều tra, chúng mình xác định được:
- Container PostgreSQL đã bị chiếm quyền điều khiển
- Redis container là điểm xâm nhập ban đầu
- Malware đã tạo nhiều bản sao ở các thư mục khác nhau
Bước 2: Quy Trình Dọn Dẹp
Với thông tin đã có, chúng mình tiến hành quy trình dọn dẹp có hệ thống:
# 1. Dừng toàn bộ container để ngăn malware lây lan
docker-compose down
# 2. Xóa sạch các image có khả năng đã bị nhiễm
docker images | grep 'mse-quiz-bank' | awk '{print $3}' | xargs -r docker rmi -f
# 3. Dọn dẹp cache và các image không sử dụng
docker builder prune -f && docker image prune -f
# 4. Xây dựng lại từ source sạch
docker-compose build --no-cache
docker-compose up -d
Bước 3: Kiểm Tra Sau Dọn Dẹp
Sau khi rebuild, chúng mình thực hiện kiểm tra kỹ lưỡng:
- Theo dõi CPU và memory usage
- Kiểm tra các process đang chạy
- Xác nhận không còn dấu hiệu của malware
- Đảm bảo các service hoạt động bình thường
Bước 4: Thiết Lập Hệ Thống Cảnh Báo Sớm
Để phòng trường hợp malware quay trở lại, chúng mình đã tạo một cronjob đơn giản để giám sát:
#!/bin/bash
# /usr/local/bin/check_kdevtmpfsi.sh
# Kiểm tra xem process kdevtmpfsi có đang chạy không
if pgrep -f "kdevtmpfsi" > /dev/null; then
# Kill process nếu tìm thấy
pkill -f "kdevtmpfsi"
# Gửi cảnh báo qua Telegram
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="⚠️ CẢNH BÁO: Phát hiện kdevtmpfsi trên server $(hostname)! Process đã bị kill."
fi
Thêm cronjob chạy mỗi 5 phút:
# Thêm vào crontab
*/5 * * * * /usr/local/bin/check_kdevtmpfsi.sh
Script này sẽ:
- Tự động kiểm tra sự xuất hiện của
kdevtmpfsi
- Kill process nếu phát hiện
- Gửi thông báo ngay lập tức qua Telegram
- Giúp chúng mình phản ứng nhanh nếu malware quay trở lại
Toàn bộ quá trình này giống như việc tổng vệ sinh một căn nhà bị mối - không chỉ diệt mối mà còn phải đảm bảo căn nhà vẫn vững chắc và an toàn để ở, đồng thời lắp đặt hệ thống báo động để phát hiện sớm nếu mối quay lại. 🏠
4. Xây Dựng Pháo Đài Bảo Mật
Sau cuộc chạm trán này, chúng mình đã biến môi trường Docker từ một tấm thảm chào mừng thành một pháo đài! 🏰
Bảo Mật Redis
# Cấu hình Redis đã qua chiến trận
redis:
image: redis:7-alpine # Version cụ thể, không xài 'latest'!
command: redis-server --requirepass ${REDIS_PASSWORD} # Bảo vệ bằng mật khẩu đàng hoàng
networks:
- internal # Không cho truy cập public!
deploy:
resources:
limits:
cpus: '0.50' # Giới hạn CPU
memory: 256M # Giới hạn memory
Giới Hạn Tài Nguyên Container
services:
db:
deploy:
resources:
limits:
cpus: '1.0' # Giới hạn hợp lý cho database
memory: 1G # Đủ để làm việc, không đủ để đào tiền ảo!
Hệ Thống Giám Sát
- Theo dõi mô hình sử dụng CPU (phát hiện sớm đột biến)
- Giám sát giới hạn tài nguyên container
- Kiểm tra lưu lượng mạng bất thường
- Ghi log đầy đủ mọi hoạt động
5. Bài Học Rút Ra
Như người ta vẫn nói - điều gì không giết chết server của bạn sẽ khiến bạn trở thành developer khôn ngoan hơn! 🦉
Những Điều Răn Bảo Mật
- Không bao giờ tin tưởng cấu hình mặc định
- Luôn giới hạn tài nguyên cho container
- Cô lập mạng nội bộ triệt để
- Giám sát hệ thống 24/7. Yes, sad but true.
- Cập nhật phiên bản thường xuyên
- Backup dữ liệu quan trọng
Lời Kết
Chúc các bạn luôn an toàn, hỡi những bảo mẫu product! Và hãy nhớ - khi nói đến bảo mật, hoang tưởng một chút thực ra là đang chuẩn bị kỹ càng! 🛡️
P.S. Nếu bạn đã đọc đến đây, mong rằng bạn đã loại bỏ được kdevtmpfsi
. Chúc các container của bạn luôn khỏe mạnh và CPU hoạt động bình thường! 🎉