Rootkit là gì?
. Rootkit cho phép kẻ đột nhập khả năng xâm nhập trở lại máy tính bị cài rootkit và xóa dấu vết về sự tồn tại của nó. Một số rootkit xóa dấu vết bằng cách thay thế các chương trình dùng để quản trị hệ thống bằng các bản sửa đổi có chức năng bỏ qua các hoạt động của kẻ xâm nhập. Chẳng hạn như trên máy tính chạy Unix hay Linux, rootkit có thể thay thế lệnh ls, ps hay các chương trình chịu trách nhiệm lưu vết. Vì vậy, khi người quản trị kiểm tra hệ thống thì không phát hiện thấy gì khả nghi.
Rootkit được công bố đầu tiên trên Windows, NT Rootkit [1] do Greg Hoglund - tác giả của nhiều cuốn sách về bảo mật máy tính, tạo ra năm 1999. Greg Hoglund còn tạo ra website chuyên về rootkit để chia sẻ thông tin về cách tạo, phát hiện, loại bỏ các rootkit và bảo vệ hệ thống chống lại chúng.
Tin tặc có thể dùng rất nhiều cách khác nhau để xâm nhập hệ thống và cài đặt rootkit:
- Lừa một người dùng thực thi mã phá hoại nhúng trong những thứ có vẻ vô hại được tải xuống từ Web như trò chơi, screensaver hay tiện ích.
- Tìm ra những mật khẩu dễ đoán.
- Lợi dụng những lỗ hổng bảo mật chưa
được vá.
- Lợi dụng những hệ thống có cấu hình kém.
Phân loại rootkit
Có nhiều cách phân loại rootkit khác nhau dựa trên khả năng tồn tại của chúng sau khi khởi động lại máy tính hoặc chế độ thực thi, bao gồm:
- Các rootkit bám dai thường được kích hoạt mỗi lần hệ thống khởi động. Vì phải chứa mã để tự động thi hành mỗi khi hệ thống khởi động hay người dùng đăng nhập nên chúng sẽ lưu lại dấu vết ở registry hay hệ thống tệp và tạo ra một phương thức để tự động kích hoạt mà không cần đến người dùng.
- Các rootkit trong bộ nhớ không có mã để lưu lại trong máy và vì thế không thể tồn tại sau khi khởi động lại máy.
- Các rootkit ở chế độ người dùng (user mode): Rootkit có rất nhiều cách để tránh bị phát hiện. Ví dụ như rootkit ở chế độ người dùng chặn tất cả các lệnh gọi tới hàm API FindFirstFile/FindNextFile để loại các tệp do rootkit cài đặt trên máy khỏi danh sách tệp mà các chương trình hiển thị thư mục đưa ra cho người dùng xem. Hiện nay có rất nhiều rootkit thuộc user-mode, ví dụ như Aphex [2], HE4Hook [3], Vanquish [4], và một loại phát tán khá rộng là Hacker Defender [5]. Các loại rootkit này bám dai nhờ chép các tệp vào đĩa cứng và tự động kích hoạt mỗi khi hệ điều hành khởi động lại. Nhược điểm của các rootkit ở chế độ người dùng là chúng có thể bị những chương trình chạy ở chế độ nhân của hệ điều hành phát hiện. Vì vậy, một số tác giả viết rootkit đã nạp kit của mình vào chế độ nhân. Tuy nhiên, việc này cũng có những nhược điểm của nó. Việc tạo ra một kernel-mode rootkit ẩn được trong một thời gian dài là cực kỳ khó khăn vì khi đoạn mã của rootkit bị đổ vỡ, Windows sẽ hiển thị màn hình xanh quen thuộc (BSOD). Các rootkit thuộc kernel-mode thường gây ra rất nhiều những sự cố hệ thống và đó thường là nguyên nhân khiến bộ phận hỗ trợ kỹ thuật của Microsoft tìm ra sự có mặt của chúng trong máy của các khách hàng.
- Các rootkit ở chế độ nhân của hệ điều hành (kernel-mode): Các rootkit ở chế độ nhân của hệ điều hành có khả năng can thiệp rất lớn vì chúng không chỉ chặn các lệnh gọi API ở chế độ nhân mà còn có thể xử lý trực tiếp các cấu trúc dữ liệu của chế độ nhân. Một thủ thuật phổ biến để giấu sự có mặt của tiến trình xấu là loại bỏ nó khỏi danh sách các tiến trình hoạt động của nhân. Vì các hàm API quản lý tiến trình dựa vào nội dung của danh sách đó nên tiến trình phá hoại sẽ không hiển thị trong màn hình của các công cụ quản trị như Task Manager hay Process Explorer. FU [6] là một loại rootkit ở chế độ nhân nhưng không bám dai nên rất khó bị phát hiện. Tuy nhiên, nó lại bị quét sạch sau khi hệ điều hành khởi động lại nên kẻ xâm nhập sẽ buộc phải tìm cách xâm nhập lại.
Phát hiện và loại bỏ rootkit trong Windows như thế nào?
Nếu máy tính chạy chậm hay có dấu hiệu lạ, xuất hiện các cửa sổ lạ khi khởi động hay tắt máy, một số chương trình hay dữ liệu bị thay đổi thì rất có thể là rootkit đã có trong máy. Tuy nhiên, những dấu hiệu đó chưa thể khẳng định sự tồn tại của rootkit. Để phát hiện rootkit, chúng ta cần tới các chương trình chuyên dụng.
Cho tới nay, phát hiện và loại bỏ rootkit vẫn còn là một công việc khá gian nan. Trong nhiều trường hợp, các phần mềm diệt virus và phần mềm gián điệp sẽ không thể phát hiện và loại bỏ được rootkit. Nhưng ngay cả những phần mềm chuyên về rootkit cũng không thể khẳng định 100% là máy tính có bị cài rootkit hay không. Trước đây, chỉ có một số ít công cụ phát hiện rootkit đáng tin cậy như VICE [7], Patchfinder2 [8] và klister. Cũng có nhiều công cụ được viết bởi chính những người tạo ra các rootkit nhưng sẽ thật dại dột nếu tin vào những công cụ đó.
Những công cụ phát hiện rootkit mới nhất và phổ dụng nhất bao gồm Strider Ghostbuster [9], Sysinternals RootkitRevealer [10]. RootkitRevealer so sánh các dịch vụ đang chạy do Windows API trả về với dữ liệu thô ghi trong đĩa cứng (tiện ích này đọc trực tiếp FAT hay NTFS). Điểm yếu của chương trình này là nó không loại bỏ các rootkit bị phát hiện. Người dùng buộc phải tìm kiếm trên Internet cách loại bỏ rootkit. Một công cụ khác hiện vẫn đang được dùng miễn phí là F-Secure BlackLight [11]. Sử dụng BlackLight rất đơn giản vì nó chạy rất nhanh và người dùng không cần biết điều gì đằng sau hoạt động của tiện ích này. Sophos Anti-Rootkit [12] thì cho phép người dùng tương tác nhiều hơn nhưng lại chạy chậm hơn. Các chương trình như Rootkit Hook Analyzer [13], VICE [14] và RAIDE [15] cũng nên dùng thử. Cuối cùng, đừng bỏ qua Malicious Software Removal Tool và Windows Live OneCare của Microsoft.
Dù các công ty có quảng cáo đến đâu đi nữa thì cũng chưa có một công cụ nào có thể phát hiện mọi loại rootkit. Về lâu dài cũng khó xuất hiện một công cụ như vậy. Một lưu ý khác là các công cụ phát hiện rootkit còn có thể cảnh báo nhầm, đặc biệt là với những chương trình hợp lệ nhưng lại thiết lập các liên kết tới mức nhân của hệ điều hành. Vì vậy người dùng thường phải chuẩn bị để phân tích kết quả, tìm hiểu kỹ hơn và quyết định tùy theo từng trường hợp cụ thể.
Phát hiện rootkit đã khó, loại bỏ chúng và những phần mềm phá hoại đi kèm còn khó hơn bội phần. Rootkit có thể can thiệp và ngăn chặn quá trình quét/diệt rootkit. Vì vậy, chúng ta nên lưu trữ các dữ liệu quan trọng trước khi bắt đầu chạy tiện ích loại bỏ rootkit. Rất có thể sau khi loại bỏ rootkit, Windows sẽ không hoạt động được bình thường hay tệ hơn là dữ liệu trên đĩa bị rootkit xóa mất khi “nó” biết sắp bị xử lý. Nói chung, không có cách nào để đảm bảo chắc chắn hệ thống không có rootkit nếu kiểm tra ngay từ máy đó. Rootkit chế độ nhân như RootkitRevealer có thể kiểm soát mọi hành vi của hệ thống, dù đó là thao tác đọc thẳng dữ liệu của FAT/NTFS. Việc so sánh kết quả quét trực tuyến và kết quả quét off-line từ một môi trường sạch như khởi động bằng CD có thể tin cậy hơn nhưng ngay cả cách làm đó cũng có thể bị rootkit vô hiệu hóa. Cuộc chiến giữa những kẻ viết rootkit và các công cụ quét rootkit là một cuộc đuổi bắt không ngừng và người dùng sẽ phải liên tục cập nhật các chương trình quét rootkit.
Để quá trình quét/diệt rootkit thực sự hiệu quả, cần đọc kỹ hướng dẫn của chương trình để biết các bước đặc biệt (nếu có) trước, trong và sau khi quét. Sau khi đã quét xong, hãy khởi động lại máy và quét lại lần nữa để khẳng định các rootkit vừa diệt không quay trở lại. Cuối cùng, nếu muốn đảm bảo hệ thống không còn rootkit thì biện pháp hiệu quả nhất là định dạng lại ổ cứng và cài lại Windows.
Ngăn chặn và phòng ngừa rootkit
Rootkit thực ra là mối đe dọa an ninh thứ phát. Nói một cách khác, hệ thống đã có một số lỗ hổng bảo mật cho phép tin tặc xâm nhập hệ thống, chẳng hạn như cấu hình sai, xác thực yếu hay lỗ hổng bảo mật chưa được vá. Khi rootkit đã được cài vào hệ thống tức là hệ thống đã bị xâm nhập từ trước. Cách tốt nhất để phòng chống rootkit là ngăn chặn khả năng cài đặt chúng bằng chiến lược phòng thủ nhiều lớp. Cụ thể là:
- Cập nhật hệ thống chống antivirus và phần mềm gián điệp.
- Triển khai hệ thống tường lửa mạng và host-based.
- Cập nhật các bản vá cho hệ điều hành và ứng dụng.
- Xiết chặt hệ điều hành.
- Sử dụng phương pháp xác thực mạnh.
- Không bao giờ sử dụng phần mềm từ những nguồn không tin cậy.
Sử dụng RootkitRevealer
(Theo website Microsoft)
RootkitRevealer cần một account có quyền Backup, nạp trình điều kiển và thực hiện các tác vụ duy trì volume. Để tránh những báo động giả, cần chạy RootkitRevealer trong điều kiện hệ thống không thực hiện tác vụ gì.
- Quét thủ công
Gọi RootkitRevealer và nhấn nút Scan. RootkitRevealer thông báo các hoạt động đang thực hiện ở thanh trạng thái phía dưới cửa sổ và đưa các sai khác ra danh sách kết quả. Các tùy chọn có thể thiết lập là:
Hide NTFS Metadata Files: bật mặc định
Scan Registry: bật mặc định
- Quét tự động
RootkitRevealer có nhiều tùy chọn cho quét tự động
Cú pháp: rootkitrevealer [-a [-c] [-m] [-r] outputfile]
-a: Tự động quét và thoát khi hoàn tất
-c: Định dạng kết quả theo dạng CSV
-m: Hiển thị metadata file của NTFS
-r: Không quét Registry.
Nhớ rằng tệp kết quả phải nằm trên cùng volume.
Có thể quét một máy khác bằng cách gọi RootkitRevealer với tiện ích PsExec như sau:
psexec \\remote -c rootkitrevealer.exe -a c:\windows\system32\rootkit.log
- Tìm hiểu kết quả
Khi quan sát màn hình RootkitRevealer phát hiện HackerDefender (trong website Microsoft). Chúng ta có thể thấy các thiết lập của HackerDefender trong Registry được đọc trực tiếp từ đĩa cứng nhưng lại không có trong kết quả do Windows API trả về. Tương tự, các tệp liên kết với HackerDefender có thể bị phát hiện bằng cách đọc trực tiếp hệ thống tệp nhưng không xuất hiện trong danh sách các tệp do Windows API trả về.
Người dùng phải kiểm tra từng sự khác biệt tất cả các sai khác và kiểm tra xem đó có phải là dấu hiệu của rootkit hay không. Tuy nhiên, việc đó không có cách làm cố định cho mọi trường hợp.
Một số trường hợp dưới đây cho thấy điều đó:
Những thông tin ẩn đối với Windows API
Nếu không chọn mục Hide NTFS metadata files, chúng ta sẽ thấy một số tệp bất thường - đó là những metadata file mà NTFS cố tình ẩn đi (ví dụ như $MFT và $Secure). Những tệp đó có mặt trong các NTFS volume tùy theo từng phiên bản và các tính năng của NTFS được sử dụng. Một số công cụ chống virus như Kaspersky Antivirus cũng dùng những công nghệ của rootkit để giấu dữ liệu trong NTFS. Một khả năng khác là có tệp bị xóa trong quá trình quét rootkit.
Việc quét hệ thống tệp bao gồm 3 cấu phần: Windows API, NTFS Master File Table (MFT) và danh sách thư mục NTFS trên đĩa. Việc một số tệp chỉ xuất hiện trong một hay hai danh sách trên có thể là do một số chương trình tạo tệp khi RootkitRevealer đang chạy.
+ Độ dài do Windows API trả không tương ứng với dữ liệu thô của Registry.
Rootkit có thể tự che giấu bằng cách biểu diễn sai độ dài của một Registry value. Chúng ta cần kiểm tra những sai khác kiểu này mặc dù đó có thể là kết quả của việc thay đổi giá trị của các Registry value trong quá trình quét.
+ Sai khác về kiểu giữa kết quả do Windows API trả và đọc từ dữ liệu thô của Registry.
Rootkit có thể giấu dữ liệu bằng cách lưu nó với kiểu REG_BINARY và làm cho Windows API tin đó là một giá trị kiểu REG_SZ (chuỗi kết thúc bằng giá trị 0); nếu giá trị đầu tiên của dữ liệu là 0 thì Windows API sẽ không thể đọc các dữ liệu tiếp theo.
+ Tên khóa chứa các ký tự null.
Windows API coi các tên khóa như các chuỗi kết thúc bằng ký tự 0 nhưng nhân của hệ điều hành lại coi chúng là các chuỗi có độ dài cố định. Vì thế có thể tạo ra các khóa Registry mà hệ điều hành đọc được nhưng các công cụ như Regedit bó tay.
+ Sai khác về kiểu giữa kết quả do Windows API trả và đọc từ dữ liệu thô của Registry.
Sai khác này sẽ xảy ra nếu một giá trị Registry được cập nhật trong lúc RootkitRevealer đang đọc Registry. Các giá trị thường thay đổi là ngày giờ cập nhật, thời gian “sống” của Microsoft SQL Server và lần quét virus cuối.