2012-06-26 8 views
18

Tôi đang sử dụng trình chống vi-rút ESet và gần đây là giao diện người dùng GUIuiui.exe đã kết thúc và đang chiếm 50% CPU (tức là 100% của một lõi). Thật ngạc nhiên, tôi thấy rằng tôi không thể giết nó, ngay cả với đặc quyền gỡ lỗi được kích hoạt.Chấm dứt quy trình diệt vi-rút được bảo vệ

Bây giờ tôi tò mò: làm thế nào để họ thực hiện việc bảo vệ như vậy, và có cách nào để giết nó ngắn bằng cách viết một trình điều khiển hạt nhân?

Quy trình egui.exe chạy dưới người dùng thông thường (không phải quản trị viên) và tôi cố gắng tiêu diệt theo nhiều cách khác nhau bằng tài khoản quản trị. Đây là những gì tôi đã thử.

  • bạn không thể giết nó từ task manager
  • bạn không thể giết nó bằng cách sử pskill
  • bạn không thể giết nó sử dụng quy trình thám hiểm, cũng không phải bạn có thể đính kèm một debugger để nó

Sau đó, tôi bắt đầu một số chương trình và thấy rằng:

  • dưới người dùng không có đặc quyền, bạn có thể mở nó bằng PROSESS_TERMINA Quyền truy cập TE, nhưng cuộc gọi thực sự tới TerminateProcess() không thành công với lỗi 5.

  • dưới tài khoản quản trị, bạn có thể mở nó bằng bất kỳ quyền truy cập nào (sau khi bật đặc quyền gỡ lỗi), nhưng sau đó gọi đến TerminateProcess(), GetKernelObjectSecurity(), SetKernelObjectSecurity() tất cả các thất bại với lỗi 5.

này chắc chắn chỉ ra một số loại không quan trọng vượt ra ngoài chỉ thiết lập các quy trình DACL, vì nếu Chấm dứt không có tên trong DACL, bạn sẽ không thể mở quy trình với PROCESS_TERMINATE ngay từ đầu. Họ có thực sự chặn các cuộc gọi API Win32 không? Nếu có, thì làm thế nào? Nó đã được một thời gian kể từ khi tôi đã lập trình hệ thống cấp thấp, do đó tha thứ cho sự thiếu hiểu biết của tôi.

+2

Tại sao bạn muốn biết điều đó? :) –

+0

AV thường có các thành phần chế độ lõi. Nếu bạn có thể giết nó chỉ bằng cách cho chính mình những đặc quyền cao nhất, nó sẽ là sự bảo vệ tệ hại. –

+0

Bạn có thể giết nó khi nó chạy bình thường, hoặc là nó chỉ khi nó treo mà bạn không thể giết nó? – nos

Trả lời

6

Nếu bạn có thể nắm giữ "Hệ thống xác minh nguyên tử" từ Joanna Rutkowska, điều này sẽ cung cấp cho bạn ý tưởng khá hay trong đó chúng triển khai móc của chúng. Các công cụ tương tự (bao gồm GMER) có thể được sử dụng để điều tra những gì đang xảy ra trong ruột của hệ thống. Nghe có vẻ kỳ lạ, nhưng đôi khi AV sử dụng các kỹ thuật cũng thường được tìm thấy trong phần mềm độc hại, tức là các kỹ thuật rootkit, nhằm bảo vệ phần mềm của họ không bị lừa.

Có vẻ như SSDT-Hooking và các kỹ thuật tương tự đã được sử dụng để "bảo vệ" quy trình. Ảnh đầu tiên của tôi về điều này sẽ là tạm dừng tất cả các luồng của quá trình. Hầu hết các cơ chế bảo vệ như vậy (phần mềm độc hại và phần mềm độc hại giống nhau) chỉ kích hoạt trên các nỗ lực chấm dứt. Nhưng một khi bạn đình chỉ tất cả các chủ đề (Process Explorer có thể làm điều đó) không ai trong số họ sẽ được lên lịch nữa bởi lịch trình (dẫn đến không sử dụng CPU).

SSDT (đôi khi SDT) là viết tắt của Bảng mô tả dịch vụ hệ thống. Đó là bảng có địa chỉ hàm của các dịch vụ hệ thống (số dịch vụ hệ thống là chỉ mục). Khi bạn gọi một cái gì đó như CreateFile từ ứng dụng Win32 của bạn, nó sẽ kết thúc bằng NTDLL gọi NtCreateFile (== ZwCreateFile trong UM). Từ đó cơ chế (đã thay đổi kể từ Windows 2000/XP) sẽ khác nhau về cách nó chuyển đổi sang chế độ hạt nhân (KM), hay còn gọi là "ring 0". Dù sao, việc thực hiện NtCreateFile trong NTDLL gần như làm như sau: nó di chuyển chỉ mục của dịch vụ hệ thống vào sổ đăng ký và sau đó gọi phương thức được sử dụng để chuyển sang mã KM (sysenter opcode trong các triển khai mới hơn). Đến KM, trình xử lý sẽ kiểm tra chỉ mục, tìm ra địa chỉ hàm từ SSDT và sau đó gọi hàm đó. Có một số kiểm tra nhiều hơn về ngăn xếp UM đang diễn ra ở đây (khi bạn đến từ UM), nhưng đây là quá trình đơn giản. Vì vậy, khi bạn móc chức năng ở cấp độ này, bạn có thể ngăn chặn bất kỳ hệ thống phụ, bao gồm cả hệ thống con Win32 từ làm việc. Tuy nhiên, điều này có một số vấn đề kèm theo (của bạn là ít nhất trong số họ). Hầu hết những người triển khai thực hiện một công việc xấu, có thể thường thấy trong phần mềm độc hại, chẳng hạn như rootkit Sony đã chọn để đưa vào một số đĩa CD âm thanh vào năm 2005. Vì vậy, không thể tìm được sự cố mà không gặp rủi ro khi kiểm tra lỗi và một số mã độc lập Chỉ số SSDT cũng thường sẽ dẫn đến các vấn đề do thiếu thận trọng đối với một số người thực hiện.

Vì vậy, việc tạm dừng chủ đề có vẻ là một khả năng, mặc dù câu hỏi này tất nhiên là kiểu mở (không biết chi tiết về (các) trình điều khiển ESET). Nếu, tuy nhiên, họ ngăn chặn điều đó cũng như bạn thực sự nên xem xét chuyển đổi sản phẩm. Tôi đặt cược rằng bất lợi cho sự ổn định hệ thống của các sản phẩm đó lớn hơn sự bảo vệ "bổ sung" mặc dù chúng (ESET) sẽ cho bạn biết cách khác.

Một phương pháp khác có thể là để chèn mã (ví dụ: thông qua một DLL) và có quá trình tự gọi là ExitProcess. Điều này cũng phụ thuộc vào việc móc của họ có cho phép lỗ hổng này hay không.

+0

Cảm ơn! Tôi đã cố gắng đình chỉ các chủ đề (và quá trình như toàn bộ) trong Process Explorer, đó là vô hiệu hóa quá. Tuy nhiên, tôi có thể cho nó một ưu tiên Nhàn rỗi. Tôi sẽ kiểm tra các công cụ bạn đã đề cập: Tôi không biết về SSDT-hooking, tôi nghĩ rằng đây chính xác là những gì tôi đang tìm kiếm. –

+0

Tôi có thể sai nhưng tôi nghĩ rằng tôi nhớ đọc ở đâu đó mà bạn không thể sửa đổi SSDT trong Vista/W7 nữa: bạn nhận được một bluescreen. –

+1

@Cicada: không hoàn toàn đúng, nhưng có một cơ chế được gọi là Patchguard, đáng chú ý nhất trong các phiên bản x64. Có nhiều cách để giải quyết vấn đề này, và thậm chí còn có nhiều cách để ISV làm những việc mà bạn thường không thể làm là "chỉ là chết". Authentium tìm thấy một cách xung quanh Patchguard trong thời gian của Vista vẫn còn, mà dường như nhắc MS để tạo ra những cách khác cho ISV. – 0xC0000022L

1

Có thể có trường hợp khác nhau, nói:

  1. Nếu một thread con của quá trình bạn đang cố gắng để giết được chờ đợi vào một số đối tượng hạt nhân, nó sẽ không được chấm dứt cho đến khi chờ đợi đã kết thúc. Điều này có thể khiến ứng dụng ngừng phản hồi. Bất kỳ chủ đề nào trong quá trình được đánh dấu để chấm dứt - đó là một trong các bước chấm dứt quá trình;
  2. Phần mềm thông minh như tường lửa, AV và các công cụ liên quan đến bảo mật khác luôn cài đặt móc hạt nhân (còn gọi là chặn các cuộc gọi API, tin nhắn hoặc sự kiện được chuyển giữa các đối tượng hạt nhân hoặc thành phần phần mềm). Họ luôn luôn có một lá chắn để bảo vệ agaist các lực lượng bên ngoài.

Bạn đang nhận ERROR_ACCESS_DENIED. Tôi không biết bạn đã đi qua những bước nào, nhưng tôi có thể đề xuất điều này:

  1. Mở Trình quản lý tác vụ và chuyển đến tab quy trình;
  2. Nhấp chuột phải vào egui.exe và nhấp vào Thuộc tính;
  3. Nhấp vào tab Bảo mật và sau đó nhấp vào Chỉnh sửa.
  4. Trên cửa sổ Quyền kiểm tra thông tin đăng nhập của bạn;
  5. Thêm người dùng và/hoặc đặt toàn quyền.

Bạn có thể chơi xung quanh nó, bởi vì ngay cả khi bạn phân tích ứng dụng của bạn (đó là những gì bạn đã cố gắng làm), nó sẽ sử dụng thông tin đăng nhập của tài khoản của bạn.

+0

Làm thế nào để họ cài đặt móc hạt nhân? Bạn cần tìm từ khóa nào? Đối với phần còn lại của các đề xuất của bạn: đó là Windows XP, không có "bảo mật" trong trình quản lý tác vụ. Process Explorer hiển thị danh sách các nhóm có cờ "MANDATORY" bên cạnh mỗi nhóm, nhưng đó là chỉ đọc và tôi không chắc điều đó có nghĩa là gì. Những nỗ lực của tôi khi đọc DACL cho quá trình không thành công, vì vậy tôi không thấy lý do tại sao họ sẽ thành công hơn :) Tôi có nhiều tài khoản trên máy, ứng dụng "terminator" mà tôi đã viết chạy dưới tài khoản quản trị, ví dụ: , Tôi sẽ không thể thiết lập SeDebugPrivilege. –

+0

Bạn có thể thử điều này: [link] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644959 (v = vs.85) .aspx) – Oleg

+0

Đây là những móc chế độ người dùng –