ИМХО, цель тестового вируса состоит в том, чтобы иметь что-то, что известно как безвредное и принимаемое как вирус, чтобы конечные пользователи могли проверить, что антивирусное программное обеспечение включено, и увидеть эффект идентификации вируса. Подумайте о пожарной тренировке для программного обеспечения 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. Кроме того, каждое из двух прерываний требует непосредственного однобайтового параметра, один из которых должен быть пробелом. Поскольку добровольное правило не допускало пробелов, все четыре последних байта программы («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-файл.
person
RBerteig
schedule
17.03.2009