2009-03-17 28 views
10

Vi-rút thử nghiệm EICAR được sử dụng để kiểm tra chức năng của các chương trình chống vi-rút. Để phát hiện nó như là một virus,Làm thế nào để chương trình Antivirus phát hiện vi-rút Kiểm tra EICAR?

nên các chương trình diệt virus có các định nghĩa virus cho virus thử nghiệm

HOẶC

Các chẩn đoán phát hiện nó như là một mô hình đáng ngờ và phát hiện nó như một loại virus.

(Tôi đã thấy một dịp mà chương trình AV xóa tệp trong khi tải xuống nhưng không xác định vi-rút là vi-rút kiểm tra EICAR. Cũng giống như một đối tượng đáng ngờ -> tức là nếu có định nghĩa nên xác định tên vi-rút, chi tiết ... phải không?)

+0

Chương trình này thậm chí hơi liên quan đến nhau như thế nào? – user73993

+1

Có lẽ anh ấy đang nghĩ về cách viết một hệ thống AV? Tất nhiên, anh ấy có thể suy nghĩ về cách vượt qua một hệ thống như vậy ... – RBerteig

+1

Tôi vừa đọc về cơ chế phát hiện virus và cách triển khai chúng trong các chương trình. Kể từ khi chẩn đoán và pháp y có liên quan với lập trình tôi nghĩ đây là một nơi thích hợp để đặt câu hỏi :) –

Trả lời

30

IMHO, điểm của virus thử nghiệm là có thứ gì đó vừa được biết là vô hại và được chấp nhận là vi-rút để người dùng cuối có thể xác minh rằng phần mềm AV được bật và có thể thấy hiệu quả của việc xác định vi-rút. Nghĩ về máy khoan lửa, cho phần mềm AV.

Tôi sẽ tưởng tượng rằng hầu hết đều có chữ ký cho nó và trực tiếp nhận ra nó như vậy.

Tôi sẽ không ngạc nhiên nếu mẫu bit của thử nghiệm EICAR thực tế xảy ra bao gồm các mẫu bit có mùi giống như mã opcode cho hoạt động đáng ngờ, nhưng tôi không biết nếu đó là trường hợp. Nếu có, thì nó có thể là thử nghiệm hợp lệ của một trình nhận dạng virus heuristic đơn giản. Tuy nhiên, kể từ khi thử nghiệm EICAR đã được khoảng một thời gian dài, tôi cũng sẽ tưởng tượng rằng bất kỳ heuristic lưu trữ nó là không đủ tốt để bắt bất cứ điều gì bây giờ trong tự nhiên.

Tôi không ngờ rằng việc nhận diện EICAR là bằng chứng về bất kỳ khiếu nại nào mạnh hơn "AV được cài đặt và quét những gì được mong đợi quét", và nếu phát triển hệ thống AV, tôi sẽ không cố gắng tuyên bố về nó.

Cập nhật:

Vi-rút thử nghiệm EICAR thực tế là chuỗi sau:

 
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* 

được chế tác một cách cẩn thận (theo Wikipedia article) để có một vài đặc tính thú vị.

Đầu tiên, nó chỉ bao gồm các ký tự ASCII có thể in. Nó thường sẽ bao gồm khoảng trắng và/hoặc một dòng mới ở cuối, nhưng điều đó không ảnh hưởng đến sự nhận biết của nó, hoặc về chức năng của nó.

Làm tăng thuộc tính thứ hai: thực tế đó là chương trình thực thi cho CPU 8086. Nó có thể được lưu (thông qua Notepad, ví dụ) trong một tệp có phần mở rộng .COM, và nó có thể chạy trên MSDOS, hầu hết các bản sao của MSDOS, và thậm chí trong chế độ tương thích MSDOS của dấu nhắc lệnh Windows (bao gồm cả trên Vista, nhưng không phải trên bất kỳ Windows 64 bit nào vì chúng đã quyết định rằng khả năng tương thích với chế độ thực 16 bit không còn là ưu tiên nữa.)

Khi chạy, nó sẽ xuất ra chuỗi "EICAR-STANDARD-ANTIVIRUS-TEST-FILE! " và sau đó thoát ra.

Tại sao họ lại cố gắng? Rõ ràng các nhà nghiên cứu muốn một chương trình được biết là an toàn để chạy, một phần để các máy quét trực tiếp có thể được kiểm tra mà không cần phải nắm bắt một loại virus thực sự và có nguy cơ lây nhiễm thực sự. Họ cũng muốn nó dễ dàng được phân phối bởi cả hai phương tiện thông thường và độc đáo.Vì nó chỉ ra rằng có một tập hợp con hữu ích của tập lệnh chế độ thực x86, trong đó mỗi byte đáp ứng giới hạn rằng nó cũng là một ký tự ASCII có thể in được, chúng đạt được cả hai mục tiêu.

Bài viết trên wiki có liên kết đến một blow-by-blow explanation về cách chương trình thực sự hoạt động cũng là một điều thú vị. Thêm vào sự phức tạp là thực tế là cách duy nhất để in ra bàn điều khiển hoặc thoát khỏi chương trình trong chế độ thực DOS là phát hành lệnh ngắt phần mềm, mã opcode (0xCD) không phải là ký tự ASCII 7 bit có thể in được. Hơn nữa, hai ngắt mỗi yêu cầu một tham số ngay lập tức một byte, một trong số đó sẽ cần phải là một ký tự khoảng trắng. Vì quy tắc tự áp đặt là không cho phép không gian, tất cả bốn byte cuối cùng của chương trình ("H + H *" trong chuỗi) được sửa đổi tại chỗ trước khi con trỏ chỉ đến đó để thực thi chúng.

Tháo dỡ và bán phá giá EICAR.COM với lệnh DEBUG tại dấu nhắc lệnh trên hộp XP của tôi, tôi thấy:

 
0C32:0100 58   POP  AX 
0C32:0101 354F21  XOR  AX,214F 
0C32:0104 50   PUSH AX 
0C32:0105 254041  AND  AX,4140 
0C32:0108 50   PUSH AX 
0C32:0109 5B   POP  BX 
0C32:010A 345C   XOR  AL,5C 
0C32:010C 50   PUSH AX 
0C32:010D 5A   POP  DX 
0C32:010E 58   POP  AX 
0C32:010F 353428  XOR  AX,2834 
0C32:0112 50   PUSH AX 
0C32:0113 5E   POP  SI 
0C32:0114 2937   SUB  [BX],SI 
0C32:0116 43   INC  BX 
0C32:0117 43   INC  BX 
0C32:0118 2937   SUB  [BX],SI 
0C32:011A 7D24   JGE  0140 

0C32:0110          45 49 43 41    EICA 
0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV 
0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$ 

0C32:0140 48   DEC  AX 
0C32:0141 2B482A  SUB  CX,[BX+SI+2A] 

Sau khi thực hiện hướng dẫn lên đến JGE 0140, hai giáo huấn cuối cùng đã được sửa đổi là:

 
0C32:0140 CD21   INT  21 
0C32:0142 CD20   INT  20 

hệ thống Hầu hết các hệ điều hành DOS các cuộc gọi đã được phái qua INT 21 với giá trị của AH hoặc AX đăng ký quy định cụ thể chức năng để thực thi. Trong trường hợp này, AH là 0x09, là chức năng chuỗi in, in chuỗi bắt đầu tại offset 0x011C, chấm dứt bằng ký hiệu đô la. (Bạn phải in dấu đô la bằng một mẹo khác trong DOS thuần túy.) Cuộc gọi INT 20 chấm dứt quá trình trước khi bất kỳ byte thừa nào vượt quá điểm đó có thể được thực hiện.

Mã tự sửa đổi là một mẹo vi-rút ban đầu, nhưng ở đây nó được sử dụng để duy trì hạn chế về giá trị byte có thể được sử dụng trong chuỗi. Trong một hệ thống hiện đại, có thể tính năng bảo vệ thực thi dữ liệu sẽ bắt được sửa đổi, nếu điều đó được thực thi trên chế độ tương thích MSDOS đang chạy một tệp COM.

+0

Câu trả lời hay. Đánh giá cao nỗ lực. –

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