2013-05-22 29 views
5

Tôi đã xem xét File System Filter Drivers của Windows. Tôi bắt đầu với "FsFilter" ví dụ này:Cách bẫy các lần truy cập tệp bằng trình điều khiển bộ lọc (hạt nhân) và hộp thoại cung cấp để cho phép/từ chối (người dùng)?

http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial

Với nỗ lực, tôi quản lý để có được nó được xây dựng và ký kết trong các phiên bản mà làm việc trên tất cả mọi thứ từ 64-bit Win8 đến 32-bit WinXP. (Vâng, miễn là tôi chạy Bcdedit.exe -set TESTSIGNING ON để cho phép nó chấp nhận chứng chỉ thử nghiệm của tôi, vì tôi đã không chú Microsoft $ 250 ký file .sys tôi: -. /)

Bây giờ tôi muốn thay đổi FsFilter. Tôi muốn ghi quyền truy cập vào một số loại tệp nhất định bị bộ lọc bẫy. Sau đó tôi muốn người dùng nhận được một hộp thoại, trong đó họ có thể cho phép truy cập hoặc từ chối nó.

Có lẽ hiển nhiên ... mã chế độ lõi không thể hiển thị giao diện người dùng. Nó sẽ phải báo hiệu một số quá trình chế độ người dùng, mà sẽ (sau một khoảng thời gian tùy ý tiềm ẩn) báo hiệu lại mong muốn của người dùng cho người lái xe. Tôi đã nhìn một chút qua User-Mode Interactions: Guidelines for Kernel-Mode Drivers (đây là Google's Cache as HTML, thay vì .DOC)

Tôi không biết cách tốt nhất để tấn công này là gì. Ví dụ duy nhất mà tôi chưa tìm thấy là SysInternals FileMon. Trình điều khiển nó cài đặt dữ liệu tập hợp trong bộ đệm, được định kỳ theo yêu cầu bởi .EXE theo vòng WM_TIMER:

// Have driver fill Stats buffer with information 
if (! DeviceIoControl(SysHandle, IOCTL_FILEMON_GETSTATS, 
      NULL, 0, &Stats, sizeof Stats, 
      &StatsLen, NULL)) 
{ 
    Abort(hWnd, _T("Couldn't access device driver"), GetLastError()); 
    return TRUE; 
} 

Tôi có nên sử dụng kỹ thuật tương tự không? Có lẽ trình điều khiển lọc, khi nhận được yêu cầu mà nó muốn kiểm tra, có thể đặt một bản ghi để theo dõi yêu cầu trong bộ đệm có chứa hai HEVENT. Sau đó nó sẽ WaitForMultipleObjects trên hai HEVENT này, đại diện cho một tín hiệu "CÓ" hoặc "KHÔNG" từ chế độ người dùng về việc có cho phép truy cập hay không.

Định kỳ quy trình giám sát (chạy trong chế độ người dùng) sẽ thăm dò ý kiến ​​trình điều khiển từ một chuỗi khác bằng cách sử dụng IOCTL tùy chỉnh. Trình điều khiển bộ lọc sẽ trả về thông tin yêu cầu ... cũng như hai HEVENT mà yêu cầu đang đợi. Màn hình sẽ chờ phản hồi của người dùng và khi có tín hiệu có sẵn, sự kiện thích hợp.

Tôi cũng có thể đảo ngược mô hình này. Mã chế độ người dùng có thể sử dụng IOCTL tùy chỉnh để chuyển vào dữ liệu ... chẳng hạn như HEVENT có thể được báo hiệu bởi trình điều khiển và chỉ thực hiện một số loại giao thức an toàn. Điều này sẽ loại bỏ nhu cầu bỏ phiếu.

Về cơ bản, chỉ cần tìm hướng dẫn về phương pháp hoặc ví dụ hoạt động trên web! Tôi cũng muốn được biết những gì cơ học sẽ được trên một truy cập tập tin không đồng bộ. Tôi giả sử có một cách để một khách hàng thực hiện một cuộc gọi async đang được kiểm tra có thể tiếp tục chạy và chỉ được tổ chức khi họ chờ yêu cầu kết thúc ...?


(Lưu ý: Dọc theo cách để nhận được các bộ lọc được xây dựng và sửa lỗi, tôi đã học có một số kỹ thuật hiện đại hơn qua "miniFilters" - đó là một phần của một cái gì đó gọi là Filter Manager Model Nhưng đối với thời điểm hiện tại,. Tôi không quan tâm đến điều đó miễn là mô hình cũ được hỗ trợ. Tuy nhiên, có vẻ như tương tự.)

+0

Sẽ vẫn đề xuất xem xét các bộ lọc nhỏ có nhiều cách đơn giản để làm việc. Tóm lại, bạn có thể yêu cầu từ hạt nhân để chặn người dùng để kiểm tra quyền truy cập và sau đó cho phép/không cho phép truy cập. – Rohan

+0

@Rohan Ah ... bằng cách nào đó tôi đã bỏ lỡ [điểm nói chuyện cuối cùng] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff538896%28v=vs.85%29.aspx) trong Ưu điểm: * "Trình quản lý bộ lọc cung cấp chức năng chung cho các dịch vụ chế độ người dùng và các chương trình điều khiển hoạt động với các trình điều khiển minifilter. Bộ lọc chế độ người dùng bộ lọc, Filterlib.dll, cho phép liên lạc giữa dịch vụ chế độ người dùng hoặc chương trình điều khiển và Filterlib.dll cũng cung cấp giao diện cho các công cụ quản lý. "* Có thể chính xác những gì tôi muốn, tôi sẽ xem xét nó! – HostileFork

Trả lời

0

Bạn (aka I) đã liệt kê khá nhiều khả năng. Hãy thăm dò ý kiến ​​của FileMon, hoặc vượt qua một sự kiện. Việc vượt qua sự kiện có thể dễ xảy ra lỗi hơn một chút và nếu bạn không phải là một chuyên gia luồng thì có thể có nhiều khả năng xảy ra lỗi hơn. Nhưng nếu bạn có xu hướng mắc nhiều lỗi thì trình điều khiển thiết bị có thể không dành cho bạn ... nhảy dù có thể là một lựa chọn tồi.

Tôi sẽ xem xét dự án này, nhưng xin lưu ý những tuyên bố từ chối trách nhiệm trong README. (Nó chỉ là một thử nghiệm và điều tra):

https://github.com/hostilefork/CloneLocker

Và vâng, đến mức mà Microsoft và mô hình điều khiển của họ là trở thành một cái gì đó một nỗi lo về, miniFilters là sự lựa chọn tốt hơn những ngày này.

Các vấn đề liên quan