Cách tìm, phát hiện và xóa, loại bỏ Shell trong Source web
Có 3 cách để người ta chèn Shell vào host của bạn:
1. Shell chuẩn dưới dạng file PHP nguyên gốc, thường hay có tên là C99.php, Alucar.php, R57.php, remnew.php… Hoặc 1 cái tên nào đó hơi ngộ, nhiều người cũng có thói quen đặt những cái tên như kiểu file của hệ thống: init.php, httpd.php….
Với loại này, bạn phải ngồi kiểm tra từng file 1 nếu bạn thấy nghi ngờ. file đó là Shell.
Và may mắn cho bạn 1 điều là:
Nếu đó thực sự là file shell thì rất đơn giản để bạn biết được.
Thông tin Shell luôn được trích sẵn trong code, hoặc nếu file đó bị mã hóa đi như phpencypt hoặc Zend thì bạn cũng có thể đoán được đó chính là file shell.
2. Shell include
Nghĩa là lúc này họ sẽ chỉ cần edit 1 file php nào đó trong hệ thống code của bạn, và include vào đó 1 file shell .php “nằm ở bất cứ nơi đâu…”
Với loại này quả thực là hơi khó phát hiện. Vì thế, bạn chỉ có cách là so sánh code nguồn và code hiện tại của bạn.
3. Shell insert code
Loại này nghĩa là người ta có thể chèn 1 đoạn code shell ngay trong các file kém quan trọng nhất, hoặc cũng có thể là quan trọng nhất trong hệ thống file của bạn. Khiến cho bạn chủ quan, hoặc quá cẩn thận tới mức ko thể phát hiện được ra chúng.
Với loại này bạn cũng làm theo cách 1 và cách 2 ở trên.
Nói chung các cách để bạn phát hiện Shell là:
1. Down toàn bộ code cũ về.
2. Hiện này đã có một số trình diệt virus có khả năng phát hiện Shell trong code.
Vì thế, khi down về bạn có thể dùng trình diệt virus để quét trong thư mục đó.
Thường thì Bidefender là mạnh nhất về search shell
sau đó là tới Norton antivirus, Mcafe rồi mới tới Kaspersky.
3. Nếu quá trình quét shell bằng trình diệt virus không thành công, thì bạn buộc phải dùng cách so sánh code vừa down về và code chuẩn.
4. Sau khi so sánh rồi bạn sẽ lọc ra được những file lạ.
Lưu những file đó vào 1 khu vực, rồi thay toàn bộ code bằng code chuẩn.
Tiếp tục đi kiểm tra các file lạ kia.
Cũng khuyên bạn nên giữ lại đám code đã dính shell, vì nếu như trong đám file lạ kia ko có shell thì rất có thể bạn bị include shell hoặc insert shell.
Nếu bạn là nhà quản trị server, cũng có thể áp dụng các cách sau đây (linux):
1. Find
find /home/ -name “*”.php -type f -print0 | xargs -0 grep r57 | uniq -c | sort -u | cut -d”:” -f1 | awk ‘{print “rm -rf ” $2}’ | uniq
Bạn có thể thay thế r57 bằng các từ khóa phổ biến như: alucar, c99…
2. Egrep
Tạo 1 file scan.txt trong /root/
egrep “cgitelnet|webadmin|PHPShell|tryag|r57shell|c99she ll|sniper|noexecshell|/etc/passwd|revengans” /home/*/public_html -R | cut -d: -f1 | uniq > /root/scan.txt
Sau đó cat /root/scan.txt
Trên đây chỉ là những cái cơ bản ban đầu, có thể phát hiện các con shell “ăn sẵn”. Muốn tìm tận gốc sẽ có nhiều phương pháp tối ưu hơn, mà tôi sẽ trình bày ở bài tiếp theo.