Những thông tin cơ bản về rootkit, một loại phần mềm mã độc nguy hiểm

500px.jpg

Rootkit là một dạng phần mềm độc hại (malware) được xây dựng với mục tiêu chủ yếu là để ẩn giấu các đoạn mã độc có khả năng gây nguy hiểm đến máy tính của chúng ta. Một khi đã được cài đặt, rootkit sẽ “ngụy trang” bản thân sao cho các phần mềm diệt virus thông thường khi quét qua chỉ thấy nó một là một ứng dụng vô hại. Thường thì rootkit càng tồn tại lâu trong một chiếc máy thì nó càng gây nhiều ảnh hưởng nghiêm trọng tới tính bảo mật của thiết bị cũng như đến độ an toàn thông tin của người dùng. Ngoài ra, rootkit còn trở nên nguy hiểm hơn khi nó giấu thêm một malware nào đó, và đây là cách tấn công thường được các tin tặc tận dụng. Bài viết sau mình xin chia sẻ một số thông tin cơ bản về rootkit mà mình tìm hiểu được với các bạn.

Rootkit nguy hiểm như thế nào?

Nếu chỉ nhìn qua mô tả sơ lược, chúng ta có thể thấy rằng rootkit cũng gần gần giống như các loại malware khác, ví dụ như virus, Trojan hay các worm (sâu) máy tính. Tuy nhiên, thực chất rootkit nguy hiểm hơn những thứ kể trên bởi hai tính chất giúp phân biệt nó với các loại malware khác, bao gồm: 1) Khả năng ẩn mình ở các tầng hoạt động thấp và 2) Nhiệm vụ ẩn giấu các mối đe dọa khác. Trong đó, thuộc tính đầu tiên là đặc trưng cho mọi loại rootkit.

Có hai loại rootkit hiện xuất hiện phổ biến trong thế giới công nghệ ngày nay, đó là user-mode rootkit và kernel-mode root kit. Mình xin giải thích thêm một chút về hai cụm từ user-mode và kernel-mode. Đây là chế độ hoạt động trong một hệ thống máy tính. Những phần mềm chạy ở kernel-mode có toàn quyền truy cập đến tất cả các chỉ dẫn của các phần cứng máy tính, và hệ điều hành hoàn toàn “tin tưởng” chúng. Thường những thứ chạy ở kernel-mode liên quan chặt chẽ tới hệ điều hành, ví dụ như tính năng định thời (scheduler), quản lí bộ nhớ ảo, driver thiết bị… Trong khi đó, user-mode thuộc một “tầng” cao hơn và ứng dụng hoạt động ở chế độ này chỉ có thể truy cập giới hạn vào một số chỉ dẫn, thậm chí bị từ chối sử dụng một số phần cứng nhất định. User-mode app có thể kể đến như những ứng dụng văn phòng, trình duyệt, game,…

442px-CPU_ring_scheme.svg.png
Ring 0, mức độ bảo mật cao nhất, các ứng dụng kernel-mode chạy ở đây. Các Ring còn lại của user-mode.

Quay trở lại với rootkit, những con kernel-mode rootkit nguy hiểm hơn, khó bị phát hiện và cũng khó bị diệt vì nó ẩn sau bên trong hệ điều hành. Khi bạn vừa bật máy lên, những con rootkit này sẽ tải bản thân nó lên trước các driver máy tính và tất nhiên là trước luôn cả những biện pháp bảo mật thông thường vốn được tích hợp ở tầng user-mode. Để thực hiện được mục đích của mình, kernel-mode rootkit sẽ tác động vào kernel, bộ nhớ và các thành phần hệ thống khác. Về chức năng, nó có thể làm được những việc sau:

  • Tự ngụy trang bản thân và những phần mềm mã độc khác
  • Nhiễm lại vào hệ thống nếu chúng bị gỡ bỏ
  • Vô hiệu hóa các trình antivirus
  • Từ chối quyền đọc/ghi vào các tập tin có rootkit để chúng không bị xóa
1.png
Kernel-mode rootkit sẽ ẩn dưới hệ điều hành

Với user-mode rootkit, nó hoạt động ở mức cao hơn trong các tầng bảo mật của hệ thống máy tính, cùng tầng với những ứng dụng bình thường khác mà chúng ta hay sử dụng. Chúng có nhiều cách thức tấn công khác nhau và sẽ thay đổi những giao diện lập trình ứng dụng (API). Cụ thể hơn, nó sẽ chỉnh sửa một hàm API sao cho khi một ứng dụng nào đó gọi hàm này, thay vì thực hiện tính năng vốn có, nó sẽ được chuyển hướng để thực thi mã độc trong rootkit. Một số user-mode rootkit sẽ đẩy một tập tin liên kết động (*.DLL trên Windows, *.dylib trên OS X) vào bên trong một ứng dụng/tiến trình nào đó, trong khi vài rootkit khác thì chỉ đơn giản ghi đè lên phần bộ nhớ của ứng dụng khác rồi hoạt động. User-mode rootkit có thể gây các ảnh hưởng như khai thác các lỗ hổng bảo mật hiện có, ngăn chặn việc truyền thông tin,…

Theo chuyên gia bảo mật Dave Marcus và Thom Sawicki đến từ McAfee và Intel, Rootkit có thể tấn công vào bất kì hệ thống nào, từ các máy chủ cơ sở dữ liệu cho đến những máy tính bán hàng, từ thiết bị di động cho đến những thiết bị điện tử trên các xe hơi. Những rootkit hiện đại sẽ thường sử dụng phương pháp ẩn giấu những malware khác (gọi là payload) như virus hay trojan, từ đó chúng có thể trộm mật khẩu, thông tin thẻ tín dụng, dữ liệu cá nhân, dữ liệu bí mật trong các công ty,… Để thực hiện được việc này, rootkit sẽ thay đổi nhiều thiết lập của hệ thống hoặc tự tạo ra một chính sách bảo mật có khả năng làm suy giảm tính bảo mật của máy, từ đó tạo ra nơi trú ẩn cho các payload, khiến hệ điều hành lẫn các phần mềm bảo mật chạy ở user-mode không phát hiện ra. Nguy hiểm hơn nữa là khi rootkit lây nhiễm từ máy nhân viên vào hệ thống máy tính của công ty, nó sẽ truy ngược và lấy ra được dữ liệu nhạy cảm, cũng như theo dõi được luồng thông tin di chuyển trong nội bộ tổ chức,

Khi sử dụng kết hợp giữa hai loại rootkit kernel-mode và user-mode, tin tặc có thể lấy được các quyền truy cập vào lõi của hệ điều hành để giấu việc tấn công, đồng thời can thiệp vào những tính năng ở cấp người dùng. Vì thuộc tính tàng hình mà ảnh hưởng từ sự tấn công của rootkit có thể phải mất một thời gian dài người dùng hoặc doanh nghiệp mới nhận ra, có thể đến tận vài năm. Ngoài ra, rootkit còn sở hữu đặc tính tự nhân, do đó nếu chúng ta xóa được nó ở nơi này thì nó hiện diễn lại ở chỗ khác. Các thành phần còn sót lại sau khi rootkit bị gỡ bỏ không hoàn toàn vẫn có khả năng chạy lệnh và liên hệ với một “trung tâm” để khởi động lại quy trình tấn công.

Một con sâu máy tính nổi tiếng mang tên Stuxnet bị phát hiện trong các máy tính Windows của hãng Siemes vào năm 2010 đã tận dụng rootkit để tấn công vào hệ thống điều khiển, quản lí, thu thập thông tin (SCADA). Các biến thể của Stuxnet đã tấn công thêm 5 công ty Iran khác, trong đó có một cơ sở làm giàu Uranium. Siemens cho biết vụ việc không ảnh hưởng gì đến khách hàng của họ, nhưng cơ sở hạt nhân của Iran thì bị tổn hại khá nhiều.

Koutodoor và TDSS, hai loại rootkit thầm lặng

Nếu như những con rootkit như Stuxnet hay một biến thể là DuQu nhận được nhiều sự quan tâm của giới công nghệ thì hai dòng rootkit Koutodoor và TDSS nhắm đến thực hiện các vụ tấn công không quá ầm ĩ, nhưng hậu quả thì có thể lớn hơn nhiều so với Stuxnet. Theo số liệu của McAfee, Koutodoor hiện đang chiếm 21% trong tổng số rootkit hiện có.

Koutodoor hoạt động theo nhiều giai đoạn, bao gồm việc cài đặt Trojan như là một rootkit, cài một malware khác tải từ các trang web. Sau đó, các malware mới cài này sẽ gửi thông tin về kết nối của người dùng đến các địa chỉ web cụ thể, từ đó tạo ra các cú click chuột giả trên banner quảng cáo hay bộ đếm traffic. Chính vì thế, nó mang lại doanh thu cho các hacker. Con rootkit này có nhiều thuộc tính rất thông minh. Nó tự biến đổi mình thành nhiều “dạng” khác nhau để tránh bị phát hiện, đồng thời thay đổi giá trị thực thi cũng như quyền đọc/ghi để không bị các phần mềm antivirus xóa mất. Nó còn đổi tên tập tin chứa rootkit trong mỗi lần máy khởi động. Ngoài ra, Koutodoor còn vô hiệu hóa những ứng dụng bảo mật khác trong hệ thống.

Một kiểu rootkit khác, TDSS, đại diện cho hơn 37% các rootkit hiện có và nó là bằng chứng cho thấy gia đình rootkit có thể biến đổi như thế nào để chống lại các biện pháp antivirus. Gần đây có một con rootkit dòng TDSS đã thay đổi giá trị trong Master Boot Record khiến hệ thống tải nó lên trước khi tải driver và giải pháp chống phần mềm mã độc, cho phép rootkit này vô hiệu hóa các phần mềm antivirus. TDSS rootkit còn có khả năng sống “kí sinh” lên các tập tin hiện có, tự tạo một file system riêng được mã hóa để chứa các malware phụ. TDSS có thể đánh cắp mật khẩu hay dữ liệu mà chúng ta không hề hay biết.

Các biện pháp phát hiện rootkit

Hiện các công ty bảo mật đang sử dụng nhiều cách để phát hiện được rootkit, trong đó có thể kể đến như việc phát hiện các dấu hiệu mà rootkit để lại, kiểm tra chữ kí kĩ thuật số để so sánh xem rootkit có thay đổi gì hay không, phát hiện các hành vi nghi ngờ. Với kernel-mode rootkit, việc tìm ra chúng phải qua nhiều công đoạn phức tạp hơn và phải điều tra kĩ lưỡng System Call Table (nơi lưu những tiến trình hệ thống) để phát hiện những hàm mà rootkit dùng để “móc” vào. Thậm chí chúng ta còn phải quét qua RAM (hoặc bộ nhớ ảo) để xem có tiến trình nào đang chạy ẩn hay không. Chi tiết một số cách thức detect rootkit:

  • Sử dụng một thiết bị đáng tin cậy khác: Chiếc máy bị nghi ngờ nhiễm rootkit sẽ được tắt đi, sau đó boot bằng những thiết bị như đĩa CD, ổ đĩa USB rồi quét rootkit. Đây là cách hữu hiệu để quét kernel-mode rootkit vì rootkit không ẩn mình tốt nếu nó đang không chạy.
  • Dựa trên các hành vi của rootkit: Các phần mềm chống rootkit sẽ theo dõi hệ thống để phát hiện những tác vụ nghi ngờ hoặc có những hành vi tương tự rootkit. Ví dụ: sự khác biệt về thời gian và tuần suất gọi hàm API, mức độ tiêu thụ CPU tăng cao, các hành động lạ trong công cụ phân tích gói dữ liệu mạng, tường lửa… Cách này phức tạp và thường cho ra nhiều kết quả dương tính nhưng thật chất lại không phải như thế. Con rootkit như Alureon thậm chí còn đánh sập Windows khi một lỗ hổng bên trong nó bị phơi bày bởi bản cập nhật bảo mật.
  • Dựa trên signature (tạm dịch là chữ kí): Phương pháp này hữu dụng để chống các rootkit phổ biến. Khi chương trình chống virus đang chạy, một công cụ nhận dạng có thể được dùng để phát hiện xem rootkit nào đang cố ẩn mình và có những biện pháp gỡ bỏ thích hợp. Tuy nhiên, với những con rootkit được tùy biến cao thì hệ thống signature không còn hiệu quả nữa.
  • Kiểm tra tính toàn vẹn: Biện pháp này sẽ tạo ra một chữ kí điện tử, hay một “dấu tay” có thể giúp phát hiện những thay đổi trái phép với các thư viện mã trên ổ lưu trữ. Hạn chế của việc này đó là nó chỉ có thể kiểm tra tính toàn vẹn từ dữ liệu của người đã tạo ra thư viện đó, còn bất kì thay đổi nào sau đó thì không biết được. Chữ kí điện tử này cũng cần phải được tạo lại sau khi cập nhật bản vá lỗi bảo mật hay các gói Service Pack.
  • Xem xét bộ nhớ hoặc kernel: việc ép buộc tạo một bản trích xuất của bộ nhớ ảo (dùng khi bộ nhớ thật là RAM bị hết dung lượng) hoặc kernel rồi đem đi giám định sẽ cho phép phân tích kĩ hơn sự hiện diện của rootkit, bởi phần mềm mã độc này không thể ẩn mình đi. Kĩ thuật này mang tính chuyên dụng cao và có thể cần phải truy cập vào phần mã nguồn vốn không được công bố.

Phần mềm chống và gỡ bỏ rootkit

Screen Shot 2012-11-25 at 2.32.13 PM.png

Các phần mềm chống rootkit trên hệ điều hành Unix có thể kể đến như Zeppoo, chkrootkit, rkhunter, OSSEC. Còn trên Windows, một số phần mềm quét rootkit là Microsoft Sysinternals RootkitRevealer, Avast! Antivirus, Sophos Anti-Rootkit, F-Secure, Radix, GMER, WindowsSCOPE, mới đây có thêm McAfee Deep Defender. Tuy nhiên, thường thì những người tạo rootkit sẽ kiểm tra kĩ tác phẩm của mình để nó có thể thoát được những biện pháp phát hiện của những công cụ kể trên. Do đó, người dùng cần cập nhật thường xuyên cơ sở dữ liệu của phần mềm chống rootkit cũng như dùng các phiên bản mới nhất với kĩ thuật chống rootkit đang được phát triển từng ngày. Nếu không sử dụng những phần mềm kể chuyên dụng, việc gỡ bỏ rootkit khó hơn rất nhiều. Các chuyên gia bảo mật xem việc xóa rootkit thủ công là không thực tế, ngay cả khi chúng ta đã biết được tính chất và đặc điểm của nó. Cài lại hệ điều hành từ một thiết bị khác (ví dụ CD, DVD, ổ USB) cũng là một cách gỡ rootkit hữu hiệu.

Theo Intel & McAfee, Symantec, Symantec (2), InfoWorld