Как антивирусные программы обнаруживают тестовый вирус EICAR?
-
19-08-2019 - |
Вопрос
Тестовый вирус EICAR используется для проверки функциональности антивирусных программ.Для того, чтобы обнаружить его как вирус,
Должна ли антивирусная программа содержать определение вируса для тестируемого вируса
или
Эвристика обнаруживает это как подозрительный шаблон и распознает как вирус.
(Я видел случай, когда AV-программа удаляла файл во время загрузки, но без идентификации вируса как тестового вируса EICAR.Просто как подозрительный объект -> т.е. Если у него есть определение, он должен идентифицировать название вируса, детали и т.д., Не так ли?)
Решение
ИМХО, смысл тестового вируса в том, чтобы иметь что-то, что одновременно известно как безвредное и принимается за вирус, чтобы конечные пользователи могли убедиться, что программное обеспечение AV включено, и могли видеть эффект идентификации вируса.Подумайте о пожарной тренировке для программного обеспечения AV.
Я бы предположил, что у большинства из них есть подпись для этого, и они непосредственно распознают это как таковое.
Я бы не удивился, если бы битовый шаблон фактического теста EICAR случайно включал битовые шаблоны, которые пахли как коды операций для подозрительной активности, но я не знаю, так ли это.Если это так, то это может быть валидный тест простого эвристического распознавателя вирусов.Однако, поскольку тест EICAR существует уже в течение длинный время, я бы также предположил, что любая эвристика, которая кэширует это, недостаточно хороша, чтобы поймать что-либо сейчас в дикой природе.
Я бы не ожидал, что признание 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 для печати.Кроме того, для каждого из двух прерываний требуется однобайтовый параметр immediate, один из которых должен быть символом пробела.Поскольку самоналоженное правило состояло в том, чтобы не допускать пробелов, все четыре последних байта программы ("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, который является функцией print string, которая печатает строку, начинающуюся со смещения 0x011C, заканчивающуюся знаком доллара.(В чистом DOS вам пришлось напечатать знак доллара с помощью другого трюка.) INT 20
вызов завершает процесс до того, как могут быть выполнены какие-либо дополнительные байты после этой точки.
Самоизменяющийся код был ранней уловкой вируса, но здесь он используется для сохранения ограничения на значения байтов, которые могут быть использованы в строке.В современной системе возможно, что функция защиты от выполнения данных перехватила бы изменение, если бы это было применено в режиме совместимости MSDOS при запуске COM-файла.