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 44
File đính kèm:
- bai_giang_rootkit.pdf