Ответ 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 файл.