Hatena
Máy chủ có bị tấn công qua lỗ hổng PHP khẩn cấp "php2shell" không? Ba dấu vết để lại trên máy chủ và cách kiểm tra
Bảo mậtLần đầu xuất hiện 311 điểm
Đây là hướng dẫn kiểm tra xem máy chủ web đã bị tấn công qua lỗi PHP nghiêm trọng tên là "php2shell" hay chưa. Bài viết chỉ cách tìm dấu vết kẻ tấn công để lại, kể cả sau khi PHP đã được cập nhật.
Chuyện gì đang xảy ra
Tác giả là một kỹ sư hạ tầng. Ông giải thích rằng cập nhật PHP không xóa các tệp xấu hoặc chương trình xấu mà kẻ tấn công có thể đã đặt lên máy chủ hoặc đã chạy. Theo bài viết, có những lần thử tấn công vào ngày 17/10, bốn ngày trước khi lỗi được công bố vào ngày 21/10. Vì vậy, cách an toàn là kiểm tra nhật ký (log) của máy chủ từ ngày 17/10 cho đến lúc việc cập nhật hoàn tất.
Các con số và sự kiện chính
- Có lần thử tấn công vào ngày 17/10/2026, trước ngày công bố công khai 21/10 bốn ngày.
- Một yêu cầu gửi biểu mẫu xấu có thể dài khoảng 3,5 MB, với tên trường rất dài.
- Thông báo lỗi "Unknown on line 0" có thể nghĩa là bộ nhớ đã cạn trước khi đoạn mã kịp chạy.
- Tiến trình máy chủ web chạy một shell (chương trình ra lệnh cho máy tính) là dấu hiệu trực tiếp nhất của một cuộc tấn công thành công.
Trước khi tìm kiếm
Trước tiên, hãy xác định khoảng thời gian cần kiểm tra. Công cụ xoay vòng nhật ký (log rotation) có thể xóa log cũ sau khoảng một tuần, nên hãy xem log cũ còn không và sao chép chúng đến nơi an toàn. Sau đó, xem xét ba nơi: các yêu cầu web nhận được, nhật ký lỗi của PHP, và các tiến trình mà máy chủ web đã khởi chạy.
Vì sao điều này quan trọng
Một dấu hiệu đơn lẻ không phải là bằng chứng chắc chắn. Lỗi bộ nhớ có thể xảy ra khi tải lên tệp lớn bình thường, và một cuộc tấn công thành công vẫn có thể trả về phản hồi HTTP 200 bình thường. Chuyên gia phải so sánh thời điểm của các yêu cầu, lỗi và tiến trình cùng lúc. Các thói quen tốt như ghi lại kích thước yêu cầu ngay từ bây giờ sẽ giúp việc kiểm tra sau này dễ dàng hơn nhiều.
Những việc cần làm tiếp theo
- Tìm các yêu cầu biểu mẫu có tên trường rất dài hoặc ký tự điều khiển lạ.
- Tìm trong log PHP và Apache các cụm từ "Unknown on line 0", "Allowed memory size" và "Segmentation fault".
- Kiểm tra xem tiến trình máy chủ web có khởi chạy shell không, đặc biệt là shell kết nối với máy chủ bên ngoài.
- Xác nhận WAF (tường lửa ứng dụng web) kiểm tra đầy đủ các yêu cầu lớn và giới hạn của nó khớp với giới hạn của ứng dụng.
Chú giải
- php2shell
- Tên lỗi nghiêm trọng trong PHP, cho phép kẻ tấn công có thể chạy lệnh trên máy chủ.
- PHP
- Ngôn ngữ lập trình dùng để tạo trang web và chạy trên máy chủ.
- shell
- Chương trình cho phép người dùng ra lệnh trực tiếp cho máy tính.
- WAF
- Tường lửa ứng dụng web, lọc các yêu cầu độc hại trước khi chúng đến ứng dụng.
- Segmentation fault
- Lỗi khi chương trình truy cập vùng bộ nhớ không được phép, khiến nó bị dừng đột ngột.