Tại sao tôi ưu tiên khả năng giám sát nội bộ
Cách đây vài năm, một trong những máy chủ của tôi đã bị tấn công brute-force SSH liên tục vào lúc 2 giờ sáng. Mặc dù việc chặn các lần đăng nhập thất bại bằng các thực hành tốt nhất bảo mật SSH là một bước khởi đầu vững chắc, nhưng nó sẽ không giúp ích gì nếu một payload đã lọt qua được. Các công cụ diệt virus tiêu chuẩn trên Linux thường giống như những chiếc búa tạ—chúng cồng kềnh và thường bỏ lỡ các script tùy chỉnh tinh vi được sử dụng trong các cuộc khai thác hiện đại.
Đó là lúc YARA xuất hiện. Thường được gọi là “con dao Thụy Sĩ” cho các nhà nghiên cứu bảo mật, YARA cho phép bạn xác định các họ malware dựa trên các mẫu văn bản hoặc mã nhị phân cụ thể.
Bạn không chỉ tìm kiếm một mã hash tệp tĩnh mà kẻ tấn công có thể thay đổi chỉ bằng một byte mã rác. Thay vào đó, bạn đang săn lùng các đặc điểm cụ thể như chuỗi hex, chuỗi ký tự độc nhất hoặc các hành vi đáng ngờ. Đối với môi trường production, YARA cung cấp độ chính xác cần thiết để tìm ra các backdoor ẩn giấu hoặc các trình khai thác tiền điện tử trái phép.
Chuẩn bị YARA trên máy chủ của bạn
Hầu hết các bản phân phối hiện đại đều bao gồm YARA trong kho lưu trữ chính thức của họ. Tôi khuyên bạn nên sử dụng ít nhất phiên bản 4.5.0 để tận dụng các cải tiến hiệu suất và hỗ trợ module mới nhất.
Cài đặt trên Ubuntu/Debian
Cập nhật danh sách gói và cài đặt binary cốt lõi cùng với thư viện Python để tự động hóa sau này:
sudo apt update
sudo apt install yara python3-yara -y
Cài đặt trên CentOS/RHEL
Bạn sẽ cần bật kho lưu trữ EPEL để tìm gói YARA:
sudo dnf install epel-release -y
sudo dnf install yara -y
Xác minh cài đặt bằng cách kiểm tra phiên bản. Đây là cách nhanh chóng để đảm bảo binary đã nằm trong PATH và sẵn sàng hoạt động:
yara -v
Tạo YARA Rule đầu tiên của bạn
Hãy coi một YARA rule như một dấu vân tay dựa trên logic. Nó thường bao gồm ba phần: Meta để ghi chú tài liệu, Strings cho các tiêu chí tìm kiếm và Condition cho logic kích hoạt. Hãy xây dựng một quy tắc để bắt một PHP web shell phổ biến. Kẻ tấn công thường để lại những tệp này sau khi khai thác các lỗ hổng web phổ biến để duy trì quyền truy cập.
Mở một tệp mới có tên webshell_detect.yar:
nano webshell_detect.yar
Chèn logic này vào tệp:
rule Detect_PHP_Webshell {
meta:
description = "Phát hiện các chuỗi backdoor PHP cơ bản được sử dụng trong web shell"
author = "TechnicalEditor"
date = "2024-05-20"
strings:
$php_tag = "<?php"
$eval = "eval(base64_decode("
$system = "system($_GET["
$shell_exec = "shell_exec("
condition:
$php_tag and ($eval or $system or $shell_exec)
}
Quy tắc này sẽ gắn cờ bất kỳ tệp nào chứa thẻ mở PHP kết hợp với các hàm nguy hiểm như eval hoặc system. Kẻ tấn công thường đổi tên script thành image.php hoặc style.css.php để ẩn mình. Quy tắc này bỏ qua tên tệp và tập trung hoàn toàn vào nội dung độc hại bên trong.
Quét tệp tin và các tiến trình đang hoạt động
Việc săn lùng có thể được thực hiện theo hai cách. Bạn có thể quét các tệp tĩnh nằm trên ổ cứng NVMe, hoặc bạn có thể kiểm tra bộ nhớ tạm thời của các tiến trình đang chạy.
Quét hệ thống tệp tin
Để kiểm tra thư mục gốc web của bạn, hãy trỏ YARA tới thư mục đó. Sử dụng cờ -r để quét sâu vào các thư mục con một cách đệ quy:
yara -r webshell_detect.yar /var/www/html/
Trên một trang web tiêu chuẩn với 500-1.000 tệp, quá trình quét này thường kết thúc trong chưa đầy hai giây. Nó cực kỳ hiệu quả.
Quét các tiến trình đang chạy
Các mối đe dọa nâng cao thường chỉ cư trú trong bộ nhớ, không để lại dấu vết trên đĩa vật lý. YARA có thể đính kèm vào một Process ID (PID) và quét không gian bộ nhớ được cấp phát của nó. Đây là cứu cánh để phát hiện malware không tệp tin (fileless malware).
Để quét một tiến trình nghi ngờ cụ thể:
# Thay thế 1234 bằng PID thực tế từ lệnh 'top' hoặc 'ps'
sudo yara webshell_detect.yar 1234
Nếu bạn nghi ngờ có sự xâm nhập nhưng không chắc tiến trình nào bị thỏa hiệp, hãy sử dụng vòng lặp đơn giản này để kiểm tra mọi PID đang chạy. Phần 2>/dev/null rất quan trọng; nó ẩn các lỗi quyền truy cập khi YARA cố gắng truy cập vào các tiến trình kernel được bảo vệ:
for pid in $(ps -ef | awk '{print $2}' | grep -v PID); do
sudo yara webshell_detect.yar $pid 2>/dev/null
done
Xác minh & Giám sát liên tục
Quét thủ công phù hợp cho việc ứng phó sự cố Linux, nhưng tự động hóa mới là thứ giúp máy chủ an toàn khi bạn đang ngủ. Tôi thích thiết lập một cron job chạy một tập hợp các quy tắc cộng đồng đã được xác minh đối với các đường dẫn rủi ro cao như /tmp và /dev/shm.
Tận dụng trí tuệ cộng đồng
Việc tự viết mọi quy tắc từ đầu rất tốn sức. Dự án YARA-Rules trên GitHub là một mỏ vàng. Nó chứa hàng ngàn chữ ký cho rootkit, ransomware và các trình đào Monero. Bạn có thể clone kho lưu trữ trực tiếp về máy chủ của mình:
git clone https://github.com/Yara-Rules/rules.git /opt/yara-rules
Tự động hóa với Cron
Tạo một shell script đơn giản tại /usr/local/bin/yara_check.sh để tổng hợp các phát hiện của bạn. Script này chỉ ghi lại kết quả nếu tìm thấy kết quả khớp, ngăn chặn việc log của bạn bị lấp đầy bởi các báo cáo trống:
#!/bin/bash
RULES="/opt/yara-rules/malware_index.yar"
SCAN_DIR="/tmp"
LOG_FILE="/var/log/yara_scan.log"
# Chạy quét và nối các kết quả khớp vào tệp log
/usr/bin/yara -r $RULES $SCAN_DIR >> $LOG_FILE 2>&1
if [ -s $LOG_FILE ]; then
echo "Cảnh báo: YARA đã phát hiện kết quả khớp!" | mail -s "Cảnh báo Bảo mật" [email protected]
fi
Lập lịch để script này chạy hàng ngày vào lúc 2 giờ sáng bằng cách thêm nó vào crontab:
0 2 * * * /usr/local/bin/yara_check.sh
Lời kết
YARA cung cấp một mức độ kiểm soát mà hầu hết các bộ bảo mật thương mại không thể sánh kịp. Bằng cách định nghĩa chính xác thế nào là “độc hại” đối với khối lượng công việc cụ thể của bạn, bạn có thể bắt được các mối đe dọa vượt qua tường lửa và các phương pháp phát hiện dựa trên chữ ký truyền thống. Hãy bắt đầu nhỏ với các chuỗi ký tự cơ bản. Khi bạn đã thoải mái, hãy tích hợp các nguồn cấp dữ liệu từ cộng đồng để xây dựng một hệ thống phòng thủ tự động, mạnh mẽ cho hệ thống Linux của mình.

