Как антивирусные программы обнаруживают тестовый вирус EICAR? - PullRequest
11 голосов
/ 17 марта 2009

Тестовый вирус EICAR используется для проверки работоспособности антивирусных программ. Чтобы обнаружить его как вирус,

Если антивирусная программа имеет определение вируса для тестируемого вируса

OR

Эвристика обнаруживает его как подозрительный паттерн и обнаруживает его как вирус.

(Я видел случай, когда AV-программа удаляет файл при загрузке, но не идентифицируя вирус как тестовый вирус EICAR. Так же, как подозрительный объект -> т.е. если у него есть определение, он должен идентифицировать имя вируса, подробности и т.д. Не правда ли?)

1 Ответ

33 голосов
/ 17 марта 2009

ИМХО, смысл тестируемого вируса в том, чтобы иметь что-то, что, как известно, безвредно и принято как вирус, чтобы конечные пользователи могли убедиться, что программное обеспечение AV включено, и увидеть влияние вируса. удостоверение личности. Подумайте пожарная дрель, для программного обеспечения AV.

Я бы предположил, что у большинства есть подпись для него, и прямо признал бы это как таковой.

Я бы не удивился, если бы битовый шаблон реального теста EICAR включал битовые шаблоны, которые пахли как коды операций для подозрительной активности, но я не знаю, так ли это. Если это так, то это может быть действительным тестом простого эвристического распознавателя вирусов. Однако, так как тест EICAR длился long , я также мог бы предположить, что любая эвристика, которая кеширует его, недостаточно хороша, чтобы поймать что-либо сейчас в дикой природе.

Я бы не ожидал, что признание EICAR является доказательством любого утверждения, более сильного, чем «AV установлен и сканирует то, что ожидалось отсканировать», и если бы я разрабатывал AV-систему, я бы не стал выдвигать более сильное утверждение об этом.

Обновление:

Фактический тестовый вирус EICAR имеет следующую строку:

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

, который был тщательно обработан (согласно статье Википедии ), чтобы иметь несколько интересных свойств.

Во-первых, он состоит только из печатных символов ASCII. Он часто будет содержать пробел и / или символ новой строки в конце, но это не влияет на его распознавание или его функцию.

Что вызывает второе свойство: на самом деле это исполняемая программа для процессора 8086. Его можно сохранить (например, с помощью Блокнота) в файле с расширением .COM и запустить в MSDOS, большинстве клонов MSDOS и даже в режиме совместимости MSDOS в командной строке Windows (в том числе в Vista, но не на любой 64-битной Windows, поскольку они решили, что совместимость с 16-битным реальным режимом больше не является приоритетом.)

При запуске выдает в качестве вывода строку «EICAR-STANDARD-ANTIVIRUS-TEST-FILE!» и затем выходит.

Почему они пошли на это усилие? Очевидно, исследователи хотели программу, которая, как известно, была безопасна для запуска, отчасти для того, чтобы можно было протестировать живые сканеры без необходимости захвата реального вируса и риска реальной инфекции. Они также хотели, чтобы его можно было легко распространять как обычными, так и нетрадиционными способами. Поскольку оказывается, что существует полезное подмножество набора команд реального режима x86, где каждый байт соответствует ограничению, что он также может быть печатным символом ASCII, они достигли обеих целей.

В вики-статье есть ссылка на подробное объяснение о том, как на самом деле работает программа, что тоже интересно. Кроме того, сложность заключается в том, что единственный способ либо печатать на консоль, либо выходить из программы в реальном режиме DOS - это выполнить инструкцию программного прерывания, чей код операции (0xCD) не является печатаемым 7-битным символом ASCII. Кроме того, каждому из двух прерываний требуется однобайтовый непосредственный параметр, одно из которых должно быть пробелом. Поскольку самонастраиваемое правило состояло в том, чтобы не допускать пробелов, все четыре из последних байтов программы («H + H *» в строке) модифицируются на месте до того, как указатель инструкции попадет туда для их выполнения.

Разборка и выгрузка EICAR.COM с помощью команды DEBUG в командной строке на моем компьютере с XP, я вижу:

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]

После выполнения инструкций до JGE 0140 последние две инструкции были изменены на:

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

Большинство системных вызовов DOS отправлялись через INT 21 со значением регистра AH или AX, определяющим функцию для выполнения. В этом случае AH равно 0x09, что является функцией печати строки, которая печатает строку, начинающуюся со смещения 0x011C, оканчивающуюся знаком доллара. (Вы должны были напечатать знак доллара другим трюком в чистом DOS.) Вызов INT 20 завершает процесс, прежде чем могут быть выполнены любые дополнительные байты после этой точки.

Самомодифицирующийся код был ранним уловкой вируса, но здесь он используется для сохранения ограничения на байтовые значения, которые могут использоваться в строке. В современной системе возможно, что функция защиты от выполнения данных перехватит модификацию, если она применяется в режиме совместимости MSDOS с файлом COM.

...