Bài giảng Rootkit
Rootkit là gì?
Rootkit là một "kit" gồm các chương trình nhỏ và
hữu dụng cho phép attacker duy trì việc truy xuất
đến root (user có quyền lực nhất trên máy tính).
Rootkit là một tập chương trình cho phép duy trì
sự hiện diện lâu dài và chắc chắn trên máy tính
mà không bị phát hiện bởi các phương tiện quản
trị và an ninh thông thường.
Các dịch vụ được cung cấp bởi Rootkit
Command and Control (C2)
Surveillance (giám sát thu thập)
Concealment (che giấu)

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Rootkit", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Rootkit
ROOTKIT
1
Rootkit là gì?
Rootkit là một "kit" gồm các ch ươ ng trình nh ỏ và
hữu dụng cho phép attacker duy trì vi ệc truy xu ất
đế n root (user có quy ền lực nh ất trên máy tính).
Rootkit là một tập ch ươ ng trình cho phép duy trì
sự hi ện di ện lâu dài và ch ắc ch ắn trên máy tính
mà không bị phát hi ện bởi các ph ươ ng ti ện qu ản
tr ị và an ninh thông th ườ ng.
2
Các dịch vụ đượ c cung cấp bởi Rootkit
Command and Control (C2)
Surveillance (giám sát thu th ập)
Concealment (che gi ấu)
3
Rootkit là Post-Intrusion Tool
4
Rootkit ho ạt độ ng nh ư th ế nào?
Rootkits làm vi ệc dựa trên ph ươ ng th ức sửa đổ i.
Xác đị nh và s ửa đổ i các ph ần mềm khi ến cho
chúng đư a ra các quy ết đị nh sai lầm.
Có nhi ều ch ỗ có th ể s ửa đổ i trong ph ần mềm.
5
Patching
Software logic có th ể bị thay đổ i nếu các data
byte bị sửa đổ i. Kỹ thu ật này đượ c gọi là patching
Byte patching là một trong nh ững kỹ thu ật chính
đượ c dùng bởi các ho ạt độ ng bẻ khóa ph ần
mềm.
6
Easter Eggs
Sự thay đổ i software logic có th ể đượ c thi ết lập một
cách cố ý từ đầ u.
Ng ườ i lập trình có th ể đặ t một back door trong
ch ươ ng trình do họ vi ết ra.
Back door này không đượ c trình bày trong tài li ệu và
nó là đặ c tính bị gi ấu.
Dạng này đượ c gọi là Easter Egg.
Có th ể đượ c dùng nh ư ch ữ ký
7
Spyware Modifications
Một ch ươ ng trình sẽ sửa đổ i ch ươ ng trình khác
để chèn vào một spyware. Ví dụ spyware theo
dõi các website là ng ườ i dùng truy cập.
Khó phát hi ện spyware
Ví dụ: spyware đánh lừa các trình duy ệt hay
shell, rất khó xóa chúng.
8
Source-Code Modification
Ng ườ i lập trình có th ể chèn vào mã ngu ồn các
dòng mã độ c.
Một back door đượ c th ực hi ện nh ư một bug trong
ph ần mềm. Ví dụ một ch ươ ng trình bị cài một lỗ
hổng buffer overflow.
Khó phát hi ện vì xem nh ư một bug
9
Sử a đổ i trong User Mode
10
Sử a đổ i trong Kernel Mode
11
Cá c thủ thuậ t thông thườ ng
Mu c̣ đi ch́ sau cu ng̀ la ̀ đă ṭ va ò bô ̣ nh ớ code hay data
Sử a Data
• Call Tables
• Kernel Objects
Sử a Code có sẵ n
• In-Place Patching
• Detour Patching
Đệ trì nh Code mớ i
• Filter Drivers
• Hypervisors
• DLL & Thread Injection
12 • COM & BHO Objects
Call Tables
Là mả ng củ a cá c con trỏ hà m (function pointers)
13
Kernel Objects
Không ph ải đố i tượ ng nh ư trong lập trình hướ ng
đố i tượ ng
Là sự tr ừu tượ ng hóa tài nguyên hệ th ống
Đượ c hi ện th ực nh ư một cấu trúc trong C
Ví dụ: nt!_EPROCESS, nt!_DRIVER_OBJECT,
nt!_TOKEN
Có th ể ki ểm tra bằng kernel debugger
14
In-Place Patching
Có thể thay đổ i code mà không phả i thay đổ i hướ ng thự c thi
Thay je SHORT $LN2@routine (đó là 0x74 0x24)
bở i NOP NOP (đó là 0x90 0x90)
Code ở trong ngoặ c luôn đượ c thự c thi!
15
Detour Patching
Trampoline là tấ m bạ t che giấ u
16
Filter Drivers (1/2)
Filter driver đượ c chè n và o mộ t stack hiệ n hữ u
17
Filter Drivers (2/2)
Can thiệ p và sử a đổ i cá c IRP (I/O Request Packet)
đi qua chú ng
18
DLL & Thread Injection
Cá ch hiệ u quả , Microsoft đã cà i đặ t cá c chứ c n ăng
chố ng lạ i nh ư UIPI*
19
Nh ững gì không ph ải là rootkit
Rootkit không ph ải là Exploit
Rootkit không ph ải là Virus
Virus Problem
Các virus áp dụng công ngh ệ rootkit, do đó càng
khó phát hi ện và ng ăn ch ặn
20
Mộ t số giả i phá p chố ng rootkit
21
Kernel bị xâm hại nh ư th ế
nào?
22
Các thành ph ần tr ọng yếu của
Kernel
Process management
File access
Security
Memory management
23
Process management
Các process cần CPU time Kernel có code làm
công vi ệc cấp phát CPU time.
Nếu OS có dùng threads, kernel sẽ lập lịch cho
mỗi thread.
Cấu trúc dữ li ệu trong bộ nh ớ theo dõi tất cả các
thread và process bằng cách sửa đổ i các cấu
trúc dữ li ệu này, attacker có th ể ẩn một process.
24
File access
Các device driver đượ c nạp để ki ểm soát các hệ
th ống file khác nhau, nh ư FAT32, NTFS.
Kernel cung cấp một giao ti ếp nh ất quán cho các
hệ th ống file bằng cách thay đổ i code trong
ph ần này của kernel, attacker có th ể gi ấu các file
hay th ư mục một cách dễ dàng.
25
Security
Kernel ch ịu trách nhi ệm sau cùng trong vi ệc áp
đặ t các qui tắc gi ữa các processes
Trên UNIX và MS-Windows, kernel áp đặ t quy ền
và dải bộ nh ớ cho mỗi process ch ỉ một vài sửa
đổ i code trong ph ần này có th ể vô hi ệu tất cả các
cơ ch ế an ninh này.
26
Memory management
Trong một số nền tảng ph ần cứng, một đị a ch ỉ
bộ nh ớ có th ể đượ c ánh xạ sang nhi ều vị trí vật lý
(hai process đượ c ánh xạ khác nhau).
Khai thác cách th ức làm vi ệc này có th ễ 3 rất hữu
dụng để ẩn data đố i với các trình debug hay ph ần
mềm truy tìm ch ứng cứ (forensic software).
27
Ti ếp tục sinh tồn với Reboot
Rootkit driver ph ải đượ c nạp khi system boot.
Cũng có nhi ều thành ph ần ph ần mềm đượ c nạp
khi system boot
Mi ễn là rootkit đượ c gắn với một trong các sự
ki ện trong quá trình boot đượ c li ệt kê trong 7
slide kế ti ếp, nó cũng sẽ đượ c nạp.
28
Dùng run key
Run key (và các bi ến th ể của nó) có th ể dùng để
nạp bất kỳ ch ươ ng trình nào vào lúc boot.
Ch ươ ng trình đượ c nạp có th ể gi ải nén và nạp
rootkit.
Rootkit có th ể ẩn run-key value một khi nó đã
đượ c nạp để không bị phát hi ện.
29
Dùng một Trojan hay file bị nhi ễm
Bất kỳ t ập tin .sys hay executable nào đượ c nạp
vào lúc boot đề u có th ể b ị thay th ế, hay loader
code có th ể đượ c chèn vào theo cách t ươ ng tự
nh ư virus nhi ễm vào một file.
Một trojan DLL có th ể đượ c chèn vào search path
Một DLL hi ện hữu có th ể b ị thay th ế m ột cách
đơ n gi ản.
30
Dùng các tập tin .ini
Các tập tin .ini có th ể bị thay đổ i khi ến cho các
ch ươ ng trình đượ c ch ạy.
Nhi ều ch ươ ng trình có các tập tin kh ởi độ ng có
th ể ch ạy các lệnh và ch ỉ ra các tập tin DLL để
nạp.
31
Đă ng ký nh ư một driver
Rootkit có th ể tự đă ng ký nh ư một driver đượ c phép
nạp vào lúc boot máy.
Điều này yêu cầu tạo một registry key, tuy nhiên key
này sẽ ẩn một khi rootkit đã đượ c nạp.
32
Đă ng ký nh ư một add-on
của một ứng dụng hi ện hữu
Để b ổ sung một ch ức n ăng mở r ộng vào các trình
duy ệt web
Ch ức n ăng mở r ộng đượ c nạp khi ứng dụng nạp
Ph ươ ng pháp này khá hi ệu qu ả để n ạp rootkit.
33
Sửa đổ i kernel ngay trên đĩ a
Kernel có th ể bị sửa đổ i một cách tr ực ti ếp và
đượ c lưu trên đĩ a
Ph ải thay đổ i một vài th ứ trong boot loader sao cho
kernel sẽ bỏ qua th ủ tục ki ểm tra tính toàn vẹn theo
checksum (checksum integrity check)
Kernel sẽ bị thay đổ i vĩnh vi ễn và không có dirver
nào ph ải đă ng ký.
34
Sửa đổ i boot loader
Boot loader có th ể bị sửa đổ i để áp đặ t các bản
vá vào kernek tr ướ c khi nạp.
Ưu điểm là kernel file không có bi ểu hi ện bị thay
đổ i nếu hệ th ống đượ c phân tích offline.
Vi ệc sửa đổ i boot-loader hoàn toàn có th ể bị phát
hi ện bởi các công cụ thích hợp.
35
Đệ trình code vào Kernel
Một cách đệ trình code vào kernel là dùng một
module có th ể n ạp, đượ c gọi là device driver hay
kernel driver.
Hầu hết các hệ điều hành hi ện đạ i đề u cho phép
các ch ức năng mở rộng của kernel đượ c nạp (hỗ
tr ợ cho các nhà ch ế tạo ph ần cứng th ứ ba)
Bất kỳ code nào đề u có th ể đượ c đệ trình thông
qua một driver (không ph ải ch ỉ cho thi ết bị ngo ại
36 vi) full access to computer
Module tiêu bi ểu
Linux-loadable module
int init_module(void)
{
}
void cleanup_module(void)
{
}
Trong Windows device driver, entry point ph ải
đă ng ký function callbacks
NTSTATUS DriverEntry( ... )
{
theDriver->DriverUnload = MyCleanupRoutine;
}
NTSTATUS MyCleanupRoutine()
{
37 }
Xây dựng Windows Device Driver
38
Device Driver đơ n gi ản
#include "ntddk.h"
NTSTATUS DriverEntry( IN PDRIVER_OBJECT
theDriverObject,
IN PUNICODE_STRING theRegistryPath )'
{
DbgPrint("Hello World!");
return STATUS_SUCCESS;
}
39
Bộ công cụ phát tri ển Device Driver
Driver Development Kit (DDK)
Windows 2003 DDK.
Can build drivers for Windows XP, using this
version of the DDK
The DDK provides two different build
environments: the checked and the free build
environments
40
Unload Routine
Khi tạo một driver, tham số theDriverObject đượ c
truy ền vào hàm main của driver. Nó ch ỉ đế n một cấu
trúc dữ li ệu ch ức các con tr ỏ hàm. Một trong các con
tr ỏ này đượ c gọi là "unload routine."
Nếu unload routine đượ c set thì driver có th ể đượ c
unload kh ỏi bộ nh ớ.
Ng ượ c lại, không th ể unload driver kh ỏi bộ nh ớ, cần
ph ải boot lại.
41
Th ủ t ục set con tr ỏ unload routine
Tr ướ c hết cần tạo một hàm unload function, sau đó cài đặ t
con tr ỏ unload:
VOID OnUnload( IN PDRIVER_OBJECT DriverObject )
{
DbgPrint("OnUnload called\n");
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT
theDriverObject,
IN PUNICODE_STRING theRegistryPath)
{
DbgPrint("I loaded!");
// Initialize the pointer to the unload function
// in the DriverObject
theDriverObject->DriverUnload = OnUnload;
42 return STATUS_SUCCESS;}
Loading và Unloading một Driver
PnPUtil
Thêm một gói driver vào kho driver
Li ệt kê các gói driver trong kho
Xóa gói driver
43
HẾT
44File đính kèm:
bai_giang_rootkit.pdf

