Как антивирусные программы обнаруживают тестовый вирус EICAR?

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

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

ИЛИ

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

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

Ответ 1

IMHO, точка тестового вируса должна иметь то, что, как известно, является безвредным, и принято как вирус, чтобы конечные пользователи могли убедиться, что программное обеспечение AV включено, и может видеть эффект вируса идентификация. Подумайте о том, как выполнить просвет для программного обеспечения AV.

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

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

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

Update:

Фактический тестовый вирус 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, они достигли обеих целей.

В статье wiki есть ссылка на пояснение об удалении о том, как работает программа, которая также интересна для чтения. Добавление к сложности заключается в том, что единственный способ либо распечатать на консоль, либо выйти из программы в реальном режиме 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 файл.