TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN–TRUYỀN THÔNG
BM. MTT & TT
LUẬN VĂN TỐT NGHIỆP
ĐẠI HỌC
Đề tài:
Xây Dựng Bộ Công Cụ(Driver) Theo
Dõi Hành Vi Mạng Chạy Trên
Windows 7
GV hướng dẫn:
Sinh viên thực hiện:
TS. Lê Văn Lâm
Lai Quốc Đạt(1101728)
HỌC KỲ 2 – 2013 - 2014
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
LỜI CẢM ƠN
Tôi xin chân thành cám ơn các thầy, các cô Khoa Công nghệ thông tin & Truyền
thông trường Đại học Cần Thơ đã cung cấp cho tôi những nền tảng kiến thức hữu
ích và giá trị để tôi có thể hoàn thành được đề tài của mình.
Tôi xin được gửi lời cảm ơn chân thành đến TS.Lê Văn Lâm, thầy đã hướng
dẫn và chỉ bảo tôi rất nhiệt tình cũng như khơi gợi cho tôi rất nhiều ý tưởng trong
suốt quá trình thực hiện đề tài luận văn này.
Tôi cũng xin gửi lời cảm ơn đến những người bạn của tôi. Các bạn đã giúp đỡ
tôi rất nhiều trong việc tìm kiếm tài liệu, lời khuyên hữu ích và hướng dẫn tôi trong
việc lập trình có hiệu quả.
Cuối cùng, tôi xin cám ơn đến gia đình và người thân đã luôn tiếp thêm nguồn
động và tinh thần cho tôi, giúp đỡ và chăm sóc tôi trong suôt quá trình học tập và
thời gian thực hiện luận văn này.
Cần Thơ, ngày 16 tháng 05 năm 2014
Sinh viên
LAI QUỐC ĐẠT
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
1
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
MỤC LỤC
LỜI CẢM ƠN .......................................................................................................... 1
MỤC LỤC ................................................................................................................ 2
PHỤ LỤC BẢNG .................................................................................................... 6
PHỤ LỤC HÌNH ẢNH .......................................................................................... 7
CHÚ THÍCH TIẾNG ANH .................................................................................. 8
CHƯƠNG MỘT: TỔNG QUAN ............................................................................. 9
I. ĐẶT VẤN ĐỀ ............................................................................................................... 9
II. MỤC TIÊU - PHẠM VI ĐỀ TÀI .............................................................................. 9
1. Mục Tiêu ................................................................................................................... 9
2. Phạm Vi Đề Tài ...................................................................................................... 10
CHƯƠNG HAI: CƠ SỞ LÝ THUYẾT................................................................. 11
I. TỔNG QUAN VỀ DRIVER ...................................................................................... 11
1. Driver là gì? ............................................................................................................ 11
2. Các Loại Driver Trong Windows ......................................................................... 12
II. TỔNG QUAN VỀ WINDOWS 7 KERNEL MODE DRIVERS ......................... 14
1. Windows Driver Foundation (WDF) ................................................................... 14
1.1 WDF Object Model ........................................................................................... 15
1.2 Driver framework .............................................................................................. 17
1.3 Driver Object và Device Object ......................................................................... 18
1.3.1 Driver Object .............................................................................................. 18
1.3.2 Device Object .............................................................................................. 19
1.4 Driver Stack và Devie Stack.............................................................................. 20
1.4.1 Device Node và Device Stack ..................................................................... 20
1.4.2 Driver Stack ................................................................................................ 21
2. Kernel Mode Driver Framework (KMDF).......................................................... 22
2.1 Những thành phần của KMDF ........................................................................ 22
2.2 Device object và vai trò của driver.................................................................... 23
2.2.1 Function driver và Function Device Object ............................................... 23
2.2.2 Filter driver và Filter device objects .......................................................... 24
2.2.3 Bus driver và Physical device objects ......................................................... 24
2.3 I/O Request Handle........................................................................................... 26
2.3.1 I/O Request Flow ........................................................................................ 26
2.3.2 I/O Queues .................................................................................................. 27
2.3.3 Retrieving Buffers from I/O Request ........................................................... 28
2.3.4 I/O Targets .................................................................................................. 29
2.3.5 Creating Buffers for I/O Request ................................................................ 30
2.3.6 Canceled & Supended Requests.................................................................. 30
2.4 Completing I/O Request .................................................................................... 32
2.5 I/O Transfer Type.............................................................................................. 33
2.5.1 Buffered I/O ................................................................................................ 33
2.5.2 Direct I/O .................................................................................................... 33
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
2
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
2.5.3 Neither Buffered nor Direct I/O .................................................................. 33
3. I/O REQUEST PACKET ...................................................................................... 33
3.1 Cấu Trúc IRP .................................................................................................... 33
3.2 I/O Stack Location ............................................................................................ 36
3.3 IRP Major Function Code ................................................................................ 37
3.4 Xử Lý IRP.......................................................................................................... 39
3.4.1 Tạo IRP ....................................................................................................... 39
3.4.2 Chuyển Tiếp IRP Đến Dispatch Routine .................................................... 40
3.4.3 Hoàn Thành IRP ......................................................................................... 40
III. NHỮNG KIẾN THỨC HỖ TRỢ ........................................................................... 42
1. Đồng Bộ Hoá........................................................................................................... 42
1.1 IRQL Là Gì?...................................................................................................... 42
1.2 Spin Lock và Mutex .......................................................................................... 43
1.3 Các Đối Tượng Đồng Bộ Hoá .......................................................................... 44
2. Memory Pool .......................................................................................................... 45
3. Input/Output Control (IOCTL) ........................................................................... 46
IV. WINDOWS FILTERING PLATFORM(WFP) .................................................... 47
1. Kiến Trúc Tổng Quan Của WFP .......................................................................... 47
2. Các thành phần của WFP ..................................................................................... 48
3. Trình điều khiển Windows Filtering Platform Callout: ..................................... 49
3.1 Giới thiệu Windows Filtering Platform Callout. ............................................. 49
3.2 Các bước để phát triển một trình điều khiển WFP Callout: ........................... 50
3.3 Những điều cần lưu ý khi viết một chương trình Callout Driver:.................. 51
4. Xây dựng một trình điều khiển WFP Callout: .................................................... 52
4.1 Một số định nghĩa trong trình điều khiển WFP Callout:................................ 52
4.1.1 Callout: ....................................................................................................... 52
4.1.2 Callout Driver:............................................................................................ 52
4.1.3 Callout Function: ........................................................................................ 52
4.1.4 Filter: .......................................................................................................... 52
4.1.5 Filter Engine: .............................................................................................. 53
4.1.6 Filtering Layer:........................................................................................... 53
4.2 Defining and Exporting New GUIDs: ............................................................. 53
4.3 Thực thi một Callout Driver: ............................................................................ 54
4.3.1 Khởi tạo một Callout Driver: ..................................................................... 54
4.3.2 Xử lý Notify Callouts: ................................................................................. 60
4.3.3 Xử lý Classify Callouts: .............................................................................. 63
4.3.4 Xử lý Delete Flow Callout: ......................................................................... 65
4.3.5 Gở bỏ một Callout Driver: ......................................................................... 66
4.4 Xác định Callout Classify cho Callout Driver: ................................................ 68
V. CÔNG CỤ LẬP TRÌNH DRIVER VÀ HỖ TRỢ .................................................. 71
1. Cài Đặt Visual Studio 2008 và Visual DDK/WDK ............................................. 71
1.1 Visual Studio 2008 ............................................................................................ 71
1.2 Visual DDK/WDK ............................................................................................. 72
2. Build Driver ............................................................................................................ 73
3. Install Driver .......................................................................................................... 74
4. View Driver Output ............................................................................................... 74
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
3
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
5. WinDbg và VMWare ............................................................................................. 75
CHƯƠNG BA: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU.............................. 78
I. CÁCH VIẾT MỘT DRIVER ĐƠN GIẢN ............................................................... 78
1. Tạo và Giải Thích Tập Tin Makefile.................................................................... 78
2. Tạo và Giải Thích Tập Tin SOURCES ................................................................ 78
3. Tạo và Giải Thích Tập Tin .c ................................................................................ 79
3.1 Vai Trò và Phân Loại Header File................................................................... 80
3.2 DriverEntry Routine ......................................................................................... 81
3.3 UnloadDriver Routine....................................................................................... 83
II. YÊU CẦU ĐỀ TÀI .................................................................................................... 83
III. XÂY DỰNG CALLOUT DRIVER CONNECTMONITOR............................... 84
1. Kiến trúc mạng và mô hình OSI trên Windows.................................................. 84
1.1 Physical layer: ................................................................................................... 84
1.2 Data Link Layer ................................................................................................ 85
1.3 Network Layer ................................................................................................... 85
1.4 Transport Layer................................................................................................. 85
2. Callout Driver ConnectMonitor ........................................................................... 86
2.1 Giới thiệu ConnectMonitor: ............................................................................. 86
2.2 Sự kiện mong muốn của Driver Callout ConnectMonitor: ............................ 86
2.3 Cách thức hoạt động của ConnectMonitor: .................................................... 87
2.3.1 DriverEntry: ................................................................................................ 87
2.3.2 HpcConMonitorRegisterCallouts: .............................................................. 88
2.3.3 HpcConMonitorRegisterALEClassifyCallouts ........................................... 90
2.3.4 HpcConMonitorRegisterTransportCallouts ............................................... 91
2.3.5 HpcConMonitorALEConnectClassify ......................................................... 92
2.3.6 HpcConMonitorALEConnectNotify ............................................................ 94
2.3.7 HpcConMonitorALERecvAcceptClassify ................................................... 94
2.3.8 HpcConMonitorALERecvAcceptNotify....................................................... 96
2.3.9 HpcConMonitorTransportClassify ............................................................. 96
2.3.10 HpcConMonitorTransportNotify .............................................................. 98
2.3.11 HpcConMonitorUnregisterCallouts ......................................................... 98
2.3.12 UnloadDriver ............................................................................................ 98
2.4 Kết Quả Hoạt Động Của Callout Driver ConnectMonitor. ............................ 99
IV. PHỤ LỤC CÁC THỦ TỤC & CẤU TRÚC SỬ DỤNG TRONG LẬP TRÌNH
DRIVER ........................................................................................................................ 101
1. Phụ Lục Các Thủ Tục .......................................................................................... 101
1.1 RtlInitUnicodeString....................................................................................... 101
1.2 RtlUnicodeStringCat ....................................................................................... 101
1.3 RtlUnicodeStringCatString............................................................................. 102
1.4 RtlUnicodeStringCopy .................................................................................... 102
1.5 ObQueryNameString ...................................................................................... 103
1.6 IoCreateDevice ................................................................................................ 104
1.7 IoCreateSymbolicLink .................................................................................... 105
1.8 PsLookupProcessByProcessId........................................................................ 105
1.9 ObOpenObjectByPointer ................................................................................ 106
1.10 ZwQueryInformationProcess ....................................................................... 107
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
4
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
1.11 MmGetSystemRoutineAddress ..................................................................... 108
2. Phụ Lục Các Cấu Trúc ........................................................................................ 109
2.1 Cấu trúc DEVICE_OBJECT.......................................................................... 109
2.2 Cấu Trúc FAST_IO_DISPATCH .................................................................. 114
CHƯƠNG BỐN: KẾT LUẬN - HƯỚNG PHÁT TRIỂN ................................. 118
I. KẾT LUẬN ............................................................................................................... 118
II. HƯỚNG PHÁT TRIỂN ......................................................................................... 118
TÀI LIỆU THAM KHẢO................................................................................. 118
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
5
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
PHỤ LỤC BẢNG
Bảng 01. KMDF object type được sử dụng phổ biến ................................. 17
Bảng 02. Các thành phần của KMDF .......................................................... 22
Bảng 03. Một số IRP major function code .................................................. 38
Bảng 04. Một số routine dùng cho Spin Lock ............................................. 43
Bảng 05. Kernel dispatch objects ................................................................. 44
Bảng 06. Một số routine dùng cho event ..................................................... 44
Bảng 07. Một số routine dùng cho timer ..................................................... 45
Bảng 08. Một số routine liên quan đến bộ nhớ ........................................... 45
Bảng 09. Một số hành động và kết quả để kiểm tra ConnectMonitor...... 99
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
6
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
PHỤ LỤC HÌNH ẢNH
Hình 01. Mối quan hệ giữa Application, OS và Driver................................... 11
Hình 02. Yêu cầu được giải quyết qua nhiều driver ........................................ 11
Hình 03. Sofware driver................................................................................... 12
Hình 04. Sơ đồ mô tả sự tương tác giữa user-mode và kernel-mode .............. 13
Hình 05. Các loại driver trong kernel-mode ................................................... 13
Hình 05. Windows Driver Foundation và Driver Life Cycle .......................... 14
Hình 07. Standard routines that driver must have .......................................... 18
Hình 08. Mối quan hệ giữa device object và I/O manager ............................. 20
Hình 09. Device stack trong kernel-mode ....................................................... 21
Hình 10. Driver stack....................................................................................... 22
Hình 11. Luồng xử lý IRP ................................................................................ 26
Hình 12. Mối quan hệ song song gữa driver và I/O stack location ................ 36
Hình 13. Quá trình xử lý IRP tiêu chuẩn ......................................................... 39
Hình 14. Kiến trúc của WFP ........................................................................... 47
Hình 15. cài đặt DDK/WDK ............................................................................ 73
Hình 16. OSR Loader....................................................................................... 74
Hình 17. DebugView ........................................................................................ 75
Hình 18. Tuỳ chọn khi khởi động máy ảo ........................................................ 77
Hình 19. Mô hình tham khảo OSI .................................................................... 84
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
7
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
CHÚ THÍCH TIẾNG ANH
Viết tắc
Driver
Driver object
Device
Device object
OS
Filter
Filter Engine
Filter Layer
Network
Connect
Receive
Transport
Chú Thích
Trình điều khiển
Đối tượng trình điều khiể
Thiết bị
Đối tương thiết bị
Hệ điều hành
Lọc
Bộ Lọc
Lớp lọc
Mạng
Kết nối
Nhận
Vận Chuyển
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
8
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
CHƯƠNG MỘT: TỔNG QUAN
I. ĐẶT VẤN ĐỀ
Khi người sử dụng dùng trình duyệt web để truy cập đến các trang web trên
mạng Internet, trình duyệt web sẽ nối kết đến các máy phục vụ web (web server),
yêu cầu tải nội dung mà người dùng yêu cầu và hiển thị nội dung yêu cầu. Tuy
nhiên, nếu người dùng truy cập vào các trang web độc hại (malicious web pages),
ngoài những thông tin mà người dùng yêu cầu, trình duyệt web có thể nhận được
những mã lệnh độc hại, thực thi mã lệnh này trên máy tính người dùng. Quá trình
này được gọi là drive-by-download. Kết quả của quá trình này có thể là máy tính
của người sử dụng sẽ bị cài đặt một cách tự động các chương trình virus máy tính
hoặc các chương trình gián điệp. Nguy hiểm hơn, máy tính người dùng có thể trở
thành một nút trên một hệ thống phân tán tấn công từ chối dịch vụ(DDos) được
điều khiển từ xa.
Một trong các phương pháp để phát hiện và phân tích tấn công drive-bydownload là sử dụng High-interaction Client honeypot. Trong phương pháp này,
người ta xây dựng một số hệ thống người dùng đầu cuối với hệ điều hành và các
ứng dụng cụ thể trên đó. Ngoài ra, người ta xây dựng và các chương trình theo
dõi các thông số trong hệ thống trên các hệ thống đầu cuối này. Sau đó, các hệ
thống người dùng đầu cuối sẽ được điều khiển để chạy ứng dựng duyệt web, nối
kết đến các trang web cần kiểm tra tính nguy hiểm. Các thông số theo dõi trên hệ
thống sẽ được phân tích và cho ra kết quả để đưa ra quyết định là các trang web
đó có xảy ra tấn công drive-by-download hay không.
Một trong các công cụ High-interaction client honeypot được sử dụng phổ biến
nhất hiện nay là Capture-HPC của Đại học Victoria, Welllington, New Zealand. Tuy
nhiên, ứng dụng này được xây dựng chạy trên nền tảng của Windows XP – Một
hệ điều hành khá phổ biến trong thời gian trước đây. Nhưng hiện tại số Microsoft
đã chính thức khai tử Windows XP và khuyên người dùng chuyển sang sử dụng
các Hệ điều hành mới hơn. Mặc khác, xu hướng của người dùng hiện tại đang
chuyển dần sang sử dụng Windows 7. Chính vì vậy, việc chuyển đổi ứng dụng
Capture-HPC để có thể chạy trên Windows 7 là một yêu cầu cấp thiết phục vụ cho
nghiên cứu tấn công drive-by download. Đề tài này sẽ thực hiện một trong các
bước khá quan trọng trong quá trình chuyển đổi: Xây dựng các bộ công
cụ(Driver) theo dõi hành vi chạy trên nền Windows 7.
II. MỤC TIÊU - PHẠM VI ĐỀ TÀI
1. Mục Tiêu
Nhằm cung cấp một cái nhìn tổng quát về Driver cũng như các đặt điểm cơ
bản và cách thức hoạt động của nó trên môi trường Windows nói chung và
Windows 7 nói riêng, giúp cho mọi người tiếp cận Driver một cách thuận tiện và
dễ dàng hơn.
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
9
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Thêm vào đó là giới thiệu các nền tảng để xây dựng một Driver trên
Windows 7 bao gồm mô hình phát triển Driver thế hệ tiếp theo của Microsoft
Windows Driver Foundation(WDF) và nền tảng phát triển Driver Network
Windows Filtering Platform (WFP), thay thế cho công nghệ Transport Driver
Interface (TDI) chỉ có trên Windows XP và các phiên bản trước.
Với sự hỗ trợ của Phần mềm Visual Studio 2008 và bộ công cụ Visual
DDK/WDK, cùng với những kiến thức được giới thiệu ở trên chúng ta sẽ bắt
đầu xây dựng một Driver đơn giản chạy trên Windows 7.
Mục tiêu quan trọng nhất của đề tài này là phải xây dựng được các bộ công
cụ(Driver) theo dõi hành vi chạy trên nền Windows 7. Đề tài này chúng em sẽ
phát triển các Driver theo dõi hành vi của tiến trình(Process), thanh
ghi(Registry), hệ thống tập tin(File System) và dữ liệu mạng(Network).
2. Phạm Vi Đề Tài
Nghiên cứu về các nền tảng để xây dựng một Driver gồm có Windows
Driver Foundation(WDF) và Windows Filtering Platform (WFP).
Nghiên cứu về Driver và cách tạo một Driver cơ bản.
Xây dựng các bộ công cụ theo dỗi hành vi trên Windows 7 bao gồm các
Driver sau:
Process Driver: theo dõi việc tạo(Create) hoặc đóng(Close) một tiến
trình trên Windows 7
Registry Driver: theo dõi các sự kiện liên quan đến thanh ghi như:
mở một key(OpenKey), tạo(CreateKey), xóa(DeleteKey)…
File System Driver: theo dõi hệ thống tập tin cũng như các sự kiện
xảy ra trên tập tin đó.
Connect Driver: theo dõi các gói tin và các thông tin về nó như là địa
chỉ IP, cổng, các giao thức mạng, và các ứng dụng,… Đồng thời xác
định được trạng thái của gói tin đó(Connect, Receive hay Transport).
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
10
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
CHƯƠNG HAI: CƠ SỞ LÝ THUYẾT
I. TỔNG QUAN VỀ DRIVER
1. Driver là gì?
Hầu hết những định nghĩa về driver là “A driver is software that allows your
computer to communicate with hardware or devices” – Driver là một phần mềm
cho phép máy tính (hoặc OS) của bạn giao tiếp với phần cứng hoặc thiết bị.
Ví dụ, một ứng dụng cần đọc một vài dữ liệu từ một thiết bị. Ứng dụng gọi
một hàm được thực thi bởi hệ điều hành, và hệ điều hành gọi một hàm được
thực thi bởi driver. Driver thì được viết bởi cùng công ty thiết kế và sản xuất
thiết bị. Sau khi driver lấy dữ liệu từ thiết bị, nó trả dữ liệu về cho hệ điều hành,
hệ điều hành trả dữ liệu về ứng dụng.
Hình 01. Mối quan hệ giữa Application, OS và Driver
Lưu ý:
Không phải tất cả driver đều được viết bởi cùng công ty thiết kế và
sản xuất thiết bị. Trong một số trường hợp, thiết bị được thiết kế theo
tiêu chuẩn chung nên driver có thể được viết bởi Microsoft.
Không phải tất cả driver đều giao tiếp trực tiếp với thiết bị. Yêu cầu
xuất phát từ ứng dụng có thể được giải quyết qua nhiều driver trong
một ngăn xếp thiết bị như hình bên dưới.
Hình 02. Yêu cầu được giải quyết qua nhiều driver
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
11
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Driver trong ngăn xếp giao tiếp trực tiếp với thiết bị được gọi là
Function Driver; Driver mà thực thi những xử lý phụ thì được gọi là
Filter Driver.
Một vài Filetr Driver theo dõi và ghi chép lại thông tin về I/O request
nhưng mà không tham gia tích cực trong việc xử lý. Ví dụ, những filter
driver xác định thì hành động như là xác nhận để đảm bảo cho những
driver khác trong ngăn xếp xử lý chính xác I/O request.
Tuy nhiên định nghĩa về driver như bên trên thì chưa đầy đủ vì một số driver
thì không kết hợp với bất kỳ thiết bị phần cứng nào. Ví dụ, bạn cần truy cập vào
cấu trúc dữ liệu của lõi OS và chỉ truy cập được khi chạy trong chế độ hạt
nhân–kernel mode. Bạn có thể làm điều này bằng cách tách thành hai phần.
Phần đầu tiên chạy trong chế độ người dùng và mô tả giao diện người dùng,
phần này được gọi application - ứng dụng. Phần thứ hai chạy trong chế độ hạt
nhân và truy cập đến cấu trúc dữ liệu của lõi OS, phần này được gọi là software
driver và không kết hợp với bất cứ thiết bị phần cứng nào.
Hình 03. Sofware driver
2. Các Loại Driver Trong Windows
Có hai loại driver Microsoft Windows cơ bản:
User-mode driver thực thi trong chế độ người dùng, giữ vai trò cung cấp
một giao diện giữa một ứng dụng Win32 và kernel-mode driver hoặc các thành
phần khác hệ điều hành.
Kernel-mode driver thực thi trong chế độ hạt nhân như một phần của điều
hành, nó bao gồm những thành phần hệ điều hành chế độ hạt nhân mà điển
hình là quản lý I/O, Plug and Play memory, processes và threads, security.
Kernel-mode driver thường phân lớp. Nói chung, driver cấp cao hơn thường
nhận được dữ liệu từ các ứng dụng, lọc dữ liệu, và gửi nó để một driver cấp
thấp hơn có hỗ trợ chức năng thiết bị.
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
12
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Windows Applications Windows
Services
Win32 API
user-mode
kernel-mode
Windows I/O System
I/O Manager
Power Manager
PnP Manager
Hình 04. Sơ đồ mô tả sự tương tác giữa user-mode và kernel-mode
Riêng đối với kernel-mode driver, có ba loại driver khác nhau thể hiện ba
mức độ trong một driver stack: highest-level, intermediate-level và lowest-level.
Và tầng bên trên bao giờ cũng nhận sự hỗ trợ từ những tầng thấp hơn nó.
Hình 05. Các loại driver trong kernel-mode
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
13
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Highest-level driver bao gồm những trình điều khiển hệ thống tập tin (File
system drivers - FSDs) hỗ trợ hệ thống tập tin như là: NTFS, File allocation
table (FAT), CD-ROM file system.
Intermediate-level driver được chia nhỏ hơn và bao gồm:
Function driver điều khiển các thiết bị ngoại vi cụ thể trên một chuyến
xe I/O.
Filter driver thêm nó trên hoặc dưới function driver.
Sofware bus driver trình bày một tập hợp các thiết bị con mà tầng cao
hơn có thể gắn vào.
Lowest-level driver điều khiển một I/O bus mà thiết bị ngoại vi được kết nối.
Kernel Mode Driver Framework (KMDF) hỗ trợ những tính năng được yêu
cầu bởi Windows và được phổ biến đến tất cả các trình điều khiển chế độ hạt
nhân.
II. TỔNG QUAN VỀ WINDOWS 7 KERNEL MODE
DRIVERS
1. Windows Driver Foundation (WDF)
Microdoft Windows Driver Foundation (WDF) là một mô hình phát triển trình
điều khiển thế hệ tiếp theo của Microsoft. WDF bao gồm một bộ các thành phần
hỗ trợ cho sự phát triển, triển khai, và duy trì cho cả hai trình điều khiển chế độ
hạt nhân và người dùng. Hình 05 mô tả những thành phần của WDF làm việc
với những công cụ phát triển trình điều khiển hiện có để xử lý chu kỳ sống trình
điều khiển hoàn toàn:
Hình 05. Windows Driver Foundation và Driver Life Cycle
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
14
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Driver model hỗ trợ việc tạo trình điều khiển hướng đối tượng, hướng sự
kiện. Bằng cách sử dụng WDF, người viết trình điều khiển có thể tập trung vào
phần cứng thiết bị của họ, chứ không phải là hệ điều hành. Trình điều khiển
WDF có thể được viết cho một trong hai chế độ hạt nhân hoặc chế độ người
dùng .
Framework và Windows Driver Kit (WDK). WDF định nghĩa một mô hình
trình điều khiển đơn và bao gồm framework cho sự phát triển trình điều khiển
cả hai chế độ hạt nhân và người dùng. Framework cung cấp cơ sở hạ tầng cơ
bản để hỗ trợ các mô hình WDF. Họ thực hiện tính năng phổ biến, cung cấp
mặc định thông minh và quản lý hầu hết các tương tác với hệ điều hành.
User Mode Driver Framework (UMDF) cung cấp sự hỗ trợ chức năng
tương tự như trong KMDF, nhưng trình điều khiển có khả năng cho một số loại
thiết bị chạy trong chế độ người dùng thay vì trong chế độ hạt nhân.
Tất cả các trình điều khiển WDF được xây dựng bằng cách sử dụng các
WDK xây dựng môi trường .
Tracing and static analysic tools. Cả KMDF và UMDF đã được xây dựng
sẵn mã xác minh và hỗ trợ tích hợp theo dõi thông qua Event Tracing cho
Windows (ETW). Các dấu vết được tạo ra có thể giúp đỡ trong việc gỡ lỗi trình
điều khiển trong quá trình phát triển và trong việc chẩn đoán các vấn đề trong
những trình điều khiển tung ra thị trường. Trình điều khiển WDF cũng làm việc
với người xác minh điều khiển hiện tại. Ngoài ra, công cụ xác minh trình điều
khiển thời gian biên dịch, chẳng hạn như PREfast và Static Driver Verifier
(SDV).
Driver Signing. Trình điều khiển WDF được ký kết trong cùng một cách như
trình điều khiển WDM .
Driver insallation tools.Trình điều khiển WDF được cài đặt bằng cách sử
dụng các tập tin INF và làm việc với các công cụ cài đặt trình điều khiển hiện
có, bao gồm công cụ Driver install framewotk (DIFx).
Versioning. WDF hỗ trợ versioning để một nhị phân điều khiển duy nhất có
thể chạy trên bất kỳ phiên bản của hệ điều hành và sử dụng cùng một phiên
bản của khuôn khổ mà nó đã được xây dựng và thử nghiệm.
1.1 WDF Object Model
Mô hình này định nghĩa một tập các object - đối tượng đại diện cho
cấu trúc điều khiển thông thường, chẳng hạn như các thiết bị, hàng đợi,
I/O requests, và trình điều khiển riêng của mình. Các đối tượng có các
thuộc tính, phương pháp, và các sự kiện .
Properties - thuộc tính mô tả đặc điểm của đối tượng. Mỗi thuộc tính
được kết hợp với những phương pháp mà get và set giá trị của thuộc
tính.
Methods – phương pháp thực hiện hành động trên các đối tượng.
Có giá trị trả về.
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
15
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Events - sự kiện là những điều kiện mà một trình điều khiển cần để
hành động.
WDF xác định các sự kiện có thể cho từng đối tượng và xác định
những hành động mặc định cho hầu hết chúng. Trình điều khiển bao gồm
mã để xử lý các sự kiện cho các hành động mặc định không phù hợp
hoặc không đầy đủ cho các thiết bị của nó. Thông báo đến trình điều khiển
về sự thay đối trạng thái. Khi sự kiện xảy ra, WDF gọi những callback.
Trình điều khiển WDF tạo ra các instance – thể hiện của các đối
tượng mà nó đòi hỏi để phục vụ thiết bị của nó và điều chỉnh những thể
hiện cho phù hợp với những yêu cầu của nó. Đối với mỗi thể hiện, trình
điều khiển cung cấp những callback cho các sự kiện. Callbacks gọi các
phương thức trên đối tượng để thực hiện bất kỳ hành động bổ sung.
Đối tượng được tổ chức phân cấp. WDF driver object là đối tượng
gốc; tất cả các đối tượng thì phụ thuộc vào đối tượng gốc. Đối với hầu hết
các loại đối tượng, một trình điều khiển có thể xác định parent - cha khi nó
tạo ra đối tượng. Nếu trình điều khiển không xác định đối tượng cha khi
tạo đối tượng, framework sẽ thiết lập đối tượng cha là WDF driver object
như mặc định. Tuy nhiên, một số loại đối tượng đã được xác định trước
đối tượng cha và không thay đổi khi được tạo ra. Khi đối tượng cha bị xoá
thì đối tượng con sẽ tự động bị xoá nhưng phải theo qui tắc “Đối tượng
con xoá trước, sau đó tới đối tượng cha”.
Driver tương tác với WDF object thông qua Device Driver Interface
(DDIs) và thông qua giao diện đó mỗi bên thực hiện những hành động
riêng của mình lên đối tưọng:
Driver actions
Tạo object.
Định nghĩa callback routine để xử lý sự kiện cho mỗi object.
Định nghĩa loại và sự cấp phát tài nguyên.
Đòi hỏi DDIs trên object khi trả lời sự kiện.
WDF actions
Quản lý quan hệ cha/con của object.
Quản lý thời gian sống của object.
Gọi callback routine mà driver đã định nghĩa trước đó khi sự kiện
xảy ra.
Thực hiện hành động mặc định khi driver không xác định được
callback.
Mặc dù mô hình đối tượng áp dụng cho cả các KMDF và UMDF,
WDF object được thực hiện khác nhau trong hai framework. Kernel-mode
object Trình điều khiển không bao giờ truy cập trực tiếp thể hiện của
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
16
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
KMDF object. Thay vào đó, trình điều khiển tham chiếu đến thể hiện của
đối tượng bằng handle. Những hành động như read, write trên một đối
tượng, trình điều khiển gọi một method - phương thức trên đối tượng và
gửi đến handle.
KMDF định nghĩa hơn 20 loại đối tượng. Bảng 01 liệt kê một số loại
thông dụng nhất.
Bảng 01. KMDF object type được sử dụng phổ biến
Object Type Name
WDFDRIVER
WDFDEVICE
WDFQUEUE
WDFINTERRUPT
WDFREQUEST
WDFMEMORY
WDFIOTARGET
Description
Đại diện driver object
Đại diện device object
Đại diện một hàng đợi của I/O requests
Đại diện một interrupt resource
Mô tả một I/O request
Mô tả một bộ đệm cho một I/O request
Đại diện cho I/O target của một I/O request
KMDF object không được quản lý bởi Windows object manager và do
đó không được thao tác bằng cách sử dụng chức năng ObXxx của hệ
thống. Chỉ có framework và WDF driver có thể tạo ra và thao tác chúng.
Tương tự như vậy, KMDF event không liên quan đến các kerneldispatcher event mà Windows sử dụng như cơ chế đồng bộ hóa. Một trình
điều khiển không thể tạo, thao tác, hoặc chờ đợi vào một sự kiện WDF.
Thay vào đó, driver đăng ký callback cho sự kiện này và WDF gọi trình
điều khiển khi sự kiện xảy ra.
User-mode object
UMDF object được dựa trên component object model (COM). UMDF sử
dụng một tập hợp con nhỏ của COM cho giao diện truy vấn và tính tham
khảo tính năng. Handle là không cần thiết bởi vì các giao diện là các lớp
cơ sở trừu tượng và xác định đối tượng.
Các UMDF xác định đối tượng ít hơn KMDF vì trình điều khiển chế độ
người dùng không thể truy cập trực tiếp phần cứng và do đó không thực
hiện truy cập bộ nhớ trực tiếp (DMA) hoặc xử lý ngắt quãng.
1.2 Driver framework
Framework cung cấp cơ sở hạ tầng cơ bản cho driver và thực hiện
các dịch vụ sau cho WDF driver:
Quản lý thời gian sống của object.
Cung cấp DDIs để driver gọi các thao tác trên object.
Cung cấp sự thực thi phổ biến các tính năng mà driver thường yêu
cầu, chẳng hạn như Plug and Play, power manager, synchronizaion,
I/O queue, truy cập vào registry.
Quản lý luồng của I/O request và PnP từ hệ điều hành đến driver.
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
17
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Thay vì gọi trực tiếp hệ điều hành, driver tương tác với các framework
phù hợp cho hầu hết các dịch vụ. Các framework quản lý hầu hết các
tương tác với hệ điều hành thay mặt cho driver.
1.3 Driver Object và Device Object
1.3.1 Driver Object
I/O manager tạo ra một driver object cho mỗi driver mà được cài đặt
và nạp vào OS. Driver object được mô tả bởi cấu trúc
DRIVER_OBJECT. Khi I/O manager gọi thủ tục DriverEntry, nó cung
cấp địa chỉ cho driver object. Và driver object chứa sự lưu trữ cho các
entry point cho nhiều thủ tục tiêu chuẩn của driver. Driver có trách
nhiệm điền vào các entry point.
Hình 07. Standard routines that driver must have
Mỗi thủ tục tiêu chuẩn với một dấu sao bên cạnh tên của nó nhận
một IRP là đầu vào và cũng nhận được một con trỏ đến device object
mục tiêu cho I/O request.
I/O manager xác định loại driver object và sử dụng các driver object
để đăng ký và theo dõi thông tin về những hình ảnh của driver được tải
vào OS. Lưu ý các entry point (DDDispatchXxx và DDDispatchYyy) trong
hình trên tương ứng với major function code(IRP_MJ_XXX).
Người lập trình driver phải biết về một số thành phần của một driver
object để khởi tạo một driver cũng như tháo dỡ driver. Các thành phần
dưới đây có thể truy cập đến driver .
PDEVICE_OBJECT DeviceObject
Trỏ đến driver object được tạo ra bởi driver. Thành phần này được
tự động cập nhật khi driver gọi IoCreateDevice thành công. Một driver
có thể sử dụng thành phần này và thành phần của NextDevice của
DEVICE_OBJECT để bước qua một danh sách của tất cả các device
object mà driver tạo ra.
PDRIVER_EXTENSION DriverExtension
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
18
Luận Văn Tốt Nghiệp
GVHD: TS. Lê Văn Lâm
Trỏ tới driver extension. Chỉ có thể truy cập thành phần của driver
extension là DriverExtension->AddDevice, thủ tục DriverEntry lưu trữ
thủ tục AddDevice.
PUNICODE_STRING HardwareDatabase
Trỏ đến đường dẫn Registry\Machine\Hardware để thông tin cấu
hình phần cứng trong registry.
PFAST_IO_DISPATCH FastIoDispatch
Trỏ đến một cấu trúc định nghĩa các entry point fast I/O của driver.
Thành phần này chỉ được sử dụng bởi FSDs và network transport
driver - trình điều khiển giao thông mạng.
PDRIVER_INITIALIZE DriverInit
Entry point cho thủ tục DriverEntry, được thành lập bởi I/O manager .
PDRIVER_STARTIO DriverStartIo
Entry point cho thủ tục StartIo của driver, được thiết lập bởi thủ tục
DriverEntry khi driver khởi tạo, nếu driver không có thủ tục StartIo thành
phần này là NULL.
PDRIVER_UNLOAD DriverUnload
Entry point cho thủ tục Unload của driver, được thiết lập bởi thủ tục
DriverEntry khi driver khởi tạo. nếu driver không có thủ tục StartIo thành
phần này là NULL.
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION 1]
Một bảng dispatch bao gồm một mảng các entry point cho thủ tục
DispatchXxx của driver. Giá trị của chỉ số của mảng là những giá trị
IRP_MJ_XXX đại diện cho mỗi IRP major function code. driver phải
thiết lập entry point trong mảng này cho các IRP_MJ_XXX request mà
driver xử lý, xem Writing Dispatch Routine.
1.3.2 Device Object
Hệ điều hành mô tả các thiết bị bởi các device object - đối tượng
thiết bị. Một hoặc nhiều device object được kết hợp với mỗi thiết bị. Các
device object phục vụ như là mục tiêu của tất cả các hoạt động trên
thiết bị.Trình điều khiển kernel-mode phải tạo ra ít nhất một device
object cho mỗi thiết bị.
Một số device object không đại diện cho physical device - thiết bị vật
lý, xử lý I/O request không được gửi đến phần cứng, nhưng vẫn phải
tạo ra một device object, xem Creating device object để biết thêm về cách
tạo ra device object.
Device object có những đặc điểm như sau:
Được mô tả bởi cấu trúc DEVICE_OBJECT.
Được tổ chức trong một device stack – ngăn xếp thiết bị.
Xây Dựng Driver Theo Dõi Hành Vi Mạng Trên Windows 7
19
- Xem thêm -