Dân webmaster có lẽ ít nhất cũng một vài lần giật mình và điên đầu khi vào site của mình thấy có dòng chữ hacked by hoặc checked by … Nguyên nhân thì có vô vàn lý do. Ngay cả đến google, microsoft cũng còn không dám tự tin là không ai xâm nhập được mà. Với những “dân đen” như tụi mình, khi mà hosting đa số là sử dụng shared hosting thì rủi ro lại càng cao hơn khi mà mình không thể chủ động bảo vệ mình.

Ngày nay, việc xây dựng một website, diễn đàn hay Blog cá nhân là rất dễ dàng vì có nhiều mã nguồn mở được xây dựng sẵn như WordPress, Joomla, Nuke Viet, Blogger, vBulletin, Xenforo,… Hay những Framework mạnh mẽ như CodeIgneter, Laravel, YI giúp việc tạo ra một trang Web trở nên đơn giản hơn rất nhiều.

Các mã nguồn, template, Plugin, Extentions được chia sẻ rộng rãi trên mạng, nơi tiềm ẩn rất nhiều rủi ro. Và việc ai đó cố tình cài cắm vài “con sâu” vào mã nguồn họ share rồi sau đó từ đấy họ điều khiển lấn quyền chiếm tài nguyên của bạn là việc không thể nói là không có.

Nếu như bảo nói quá thì mình cũng phải chấp nhận bị gạch đá rằng có tới 40-50% các “webmaster” dùng mã nguồn share trên mạng về thay đổi sửa chữa để làm web cho mình (lưu ý mình nói hàng share khác hẳn với việc dùng mã nguồn mở nhé). Rất nhiều trong số đó cay đắng nhận ra rằng thi thoảng site của mình cứ tự nhiên bị deface. Mà một nguyên nhân cốt yếu là những code được share đó đã có sẵn Shell Script – một thuật ngữ chỉ những tệp tin đã được lập trình sẵn để có thể quản lý, thực thi các lệnh trên máy chủ (server). Shell thường được chèn vào code được share dưới các dạng sau:

[list style=”check”] [li]Giấu nguyên con Shell vào một thư mục rất … sâu xa (tất nhiên sẽ không để nguyên ngoài thư mục root cho các bạn xem rồi).[/li] [li]Chèn một đoạn Shell Code vào một tệp nào đó ít phổ biến mà các bạn ít phải động đến trong quá trình sửa chữa.[/li] [li]Chèn Shell Code trong cơ sở dữ liệu (trường hợp này thường gặp ở mã nguồn xây dựng Diễn đàn vBulletin).[/li] [/list]

Với kinh nghiệm non trẻ của Biên Thùy thì dưới đây là một số cách mà mình khuyên các bạn hãy thực hiện để loại trừ khả năng shell được chèn vào website của bạn. Việc này hoàn toàn có thể làm trên máy của bạn, nên bạn hãy tải toàn bộ mã nguồn cũng như data về máy của bạn, để trên Desktop chẳng hạn.

Phương pháp 1: Tìm theo từ khóa

Phương pháp này Biên Thùy sẽ dùng phần mềm Fileseek để tìm, đây là phần mềm khá hay. Có hai phiên bản, miễn phí và trả phí. Mình từng dùng phần mềm này đã lâu và khuyên các bạn chỉ cần dùng bản miễn phí là đủ rồi, không cần mua bản có phí đâu. Bạn có thể tải bản miễn phí tại trang chủ của Fileseek:

https://yyen.info/K1PfJobg45

Sau khi cài đặt, các bạn mở FileSeek lên và nhìn vào hình bên dưới Biên Thùy sẽ hướng dẫn chi tiết.

Cách tìm và loại bỏ shell trong mã nguồn
Cách tìm và loại bỏ shell trong mã nguồn

1, Các bạn chọn Browse để chọn thư mục chứa mã nguồn cần tìm Shell.
2, Nhập vào danh sách các tệp tin chúng ta sẽ scan. Có thể một vài bạn cho rằng chỉ cần search những file .php, nhưng như hình trên các bạn thấy Biên Thùy cho search tất cả các file PHP, Java Script và HTML. Lý do sẽ không nói ở bài này, nhưng tin mình đi, không thừa đâu :D
3, Từ khóa cần tìm, ở bên dưới mình sẽ liệt kê một số từ khóa “hot” mà các bạn nên tìm.
4, Nhấn vào đó để nó search.
Quá trình tìm kiếm diễn ra cực nhanh nhé.
Danh sách những từ khóa mà các bạn có thể sử dụng để tìm:

eval(
base64_encode(
base64_decode(
gzinflate(base64_decode(
gzinflate(str_rot13(base64_decode(
str_rot13(gzinflate(base64_decode(
$_F=__FILE__;
readdir(
ini_get(‘disable_functions’)
ini_get(‘safe_mode’)

Nhìn vào danh sách này thì đa số là các từ khóa decode, vì các con shell muốn ít bị antivirus phát hiện ra thì đa số nó phải encode. Nhưng riêng 3 từ khóa cuối cùng thì lại không liên quan tới encode hay decode. Điều đáng bàn là hầu hết các con Shell muốn can thiệp vào hệ thống thì đều phải dùng hàm này. Các bạn có biết tại sao lại không tìm thêm với từ khóa MD5 encoder không? Đơn giản là vì MD5 Hashing là mã một chiều, không thể bị dịch ngược.

Biên Thùy sẽ chúc mừng bạn nếu bạn search mà như hình bên trên, các bạn nhìn thanh trạng thái dưới cùng, Matches found là 0. Tuy nhiên vẫn chưa phải là an toàn tuyệt đối và đảm bảo là không có Shell đâu nhé.

Ngoài các từ khóa trên thì các bạn cũng nên tìm với từ khóa https:// hoặc là www. vì có thể files Shell nó được remote từ một tệp tin nằm ngoài mã nguồn đó.
Nếu mà có Shell, Fileseek sẽ liệt kê ra danh sách các files có từ khóa đó để cho bạn kiểm tra thủ công lại một lần nữa và cách giải quyết là ở bạn.

Phương pháp 2: Tìm theo tên Shell

Phương pháp này thì mình lại dùng phần mềm khác, đó là phần mềm Everything. Đây là phần mềm miễn phí khá tốt, bạn có thể tải tại liên kết này:

https://yyen.info/DRaEPOPFtC

Với dung lượng cực kỳ nhỏ, chỉ hơn 300KB, nhưng nó là một tiện ích hạt tiêu, với tốc độ tìm kiếm cực nhanh. Sau khi cài đặt, lần chạy đầu tiên nó sẽ khởi tạo cơ sở dữ liệu các tệp tin và thư mục trên máy của bạn. Trung bình thời gian index này mất khoảng dưới 5 phút (với các máy rùa nhất), còn không thì chỉ 30 giây. Việc tìm kiếm thì vô đối, có khi chưa đến 1 giây đã cho kết quả.
Cấu trúc tìm kiếm là Đường dẫn đến thư mục cần tìm kiếm + dấu cách + tên file cần tìm. Ví dụ Biên Thùy sẽ tìm trên Desktop những file r57, c99, c100 … và kết quả có 1 file r57 hiện ra như hình bên dưới:

Cách tìm và loại bỏ shell trong mã nguồn
Cách tìm và loại bỏ shell trong mã nguồn

Đây là danh sách tên các con shell các bạn nên thử qua :D :

r57|c99|c100|byg|shell|telnet|alucar

Nếu may mắn thì bạn sẽ thấy everything không tìm được gì, còn nếu trong mã nguồn bị chèn Shell thì bạn sẽ thấy kết quả giống như hình bên trên của mình.

Như mình nói ở trên, việc kết hợp cả hai phương pháp cộng với việc tìm kiếm các liên kết ra bên ngoài (tìm các file có nội dung chứa https:// hoặc www.), và thêm một thủ thuật nhỏ nữa là tìm tất cả các file ảnh, mở nó ra bằng bất cứ chương trình bạn dùng để viết code nào (như mình đang dùng là Notepad ++ hoặc EditPlus …) nếu thấy trong đó có các hàm logic lập trình ví dụ như if else thì liên tưởng ngay tới shell được chèn vào ảnh đó. Xóa thẳng cổ nó đi thôi.

Còn một số tiểu tiết để tìm Shell nữa Biên Thùy muốn dành cho các bạn tự tìm hiểu.
Có gì thắc mắc cứ comment bên dưới, mình sẵn sàng chia sẻ.

4.8/5 - (4655 bình chọn)

2 thoughts on “Cách tìm và loại bỏ shell trong mã nguồn

  1. Hoàng says:

    Em đang định cài một theme nulled,em thì không biết về code. kiểm tra plugin TAC thì báo một số lỗi sau, các bác xem giúp em đây có phải mã hóa shell, …… nguy hiểm không ạ.
    Trong archive.php
    $setup42_searchpagemap_style = base64_encode( strip_tags( $setup42_searchpagemap_style ));

    Trong category.php
    $setup42_searchpagemap_style = base64_encode( strip_tags( $setup42_searchpagemap_style ));

    Trong search.php
    $setup42_searchpagemap_style = base64_encode( strip_tags( $setup42_searchpagemap_style ));

    • Biên Thùy says:

      Phải xem cả file mới biết được bạn ơi, ví dụ xem cái $setup42_searchpagemap_style nó là gì?
      Nhưng có lẽ chắc không phải shell đâu.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *