EICAR-Test-File

EICAR (или EICAR-Test-File — от European Institute for Computer Antivirus Research) — стандартный файл, применяемый для проверки, работает ли антивирус. По сути вирусом не является; будучи запущенным как COM-файл DOS, всего лишь выводит текстовое сообщение и возвращает управление DOS. Программа работает в средах, поддерживающих выполнение 16-битного ПО для DOS, таких как MS-DOS, OS/2, Windows 9x и 32-битные Windows NT. Под 64-битными версиями Windows файл не запускается.

Хотя COM-файлы в общем случае являются двоичными, EICAR содержит только символы ASCII. Поэтому любой пользователь может убедиться в работоспособности своего антивируса, набрав в текстовом редакторе (например, в Блокноте) тестовую строку длиной 68 байт[1] и сохранив её с расширением .EXE или .COM. Символы CR/LF, которые редактор может добавить в конец файла, не влияют на работу EICAR. Обычно, если резидентный монитор антивируса включен, уже после нажатия кнопки «Сохранить» выводится предупреждение.

Реакция антивирусов править

Антивирус, обнаруживший объект длиной 68…128 байтов, состоящий из данной строки и пустых символов в конце (TAB=09, LF=0A, CR=0D, конец файла=1A, пробел=20), должен поступить в точности так же, как и при обнаружении реального вируса. Поэтому о том, что тревога учебная, антивирус обычно сообщает в названии вируса:

Если объект длиннее 128 байтов, или строка где-то в середине, антивирус его пропускает. Потому вы можете спокойно смотреть данную страницу, несмотря на тело «вируса» в ней.

Крайне редко встречаются антивирусы, которые не реагируют на этот тест.

Для чего предназначен править

Разумеется, EICAR не проверяет, насколько оперативно разработчики реагируют на вирусы и насколько качественно излечиваются заражённые файлы — для этого нужен «зоопарк» свежих вирусов. Его задача другая: продемонстрировать работоспособность антивирусной системы и указать, какие объекты проверяются антивирусом, а какие — нет. Например:

  • Есть подозрение, что компьютер заражён. Действует резидентный монитор, или вирус сумел его отключить?
  • Обычный почтовый червь наподобие VBS.LoveLetter должен для заражения пройти несколько стадий: прийти на почтовый сервер по протоколу SMTP; загрузиться на компьютер по протоколу POP3; записаться в базу почтового клиента; по команде пользователя распаковаться во временный файл и запуститься. На какой стадии он будет замечен?
  • Существует много способов «протащить» вредоносную программу мимо «глаз» антивируса: закодировать в Base64, вложить в OLE-объект Microsoft Word, в RAR, JPEG, сжать упаковщиком наподобие UPX. Что из этого антивирус распакует?
  • Кроме того, антивирусы бывают не только локальные, но и сетевые — проверяющие сетевой трафик; при ошибке конфигурирования они будут либо загружать сервер излишней работой, либо, наоборот, пропускать вредоносные файлы.
  • Просто чтобы увидеть реакцию антивируса: так, в старых версиях антивируса Касперского при обнаружении вируса был громкий свиной визг[2].

Для того, чтобы проверить, какова будет реакция антивируса, конечно, можно применить и «живой» вирус — но это «как поджигание урны для проверки пожарной сигнализации».[3] Для этого и был предложен стандартизированный файл, не несущий вредоносной нагрузки.

COM-файл править

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

Третий байт здесь латинское O, не ноль.

Этот COM-файл при запуске выводит сообщение:

EICAR-STANDARD-ANTIVIRUS-TEST-FILE!

после чего возвращает управление DOS.

Устройство файла править

Несмотря на длину 68 байт, программа нетривиальна и представляет собой самомодифицирующийся код[4].

COM-файл загружается по фиксированному адресу 0100.

0100: 58       pop ax

Это особенность загрузчика COM-файлов, связанная ещё с совместимостью с CP/M — на стеке всегда есть слово 0000, и одной командой retn можно выйти из программы (в префиксе программы по адресу 0 есть код выхода)[5]. Таким образом, AX=0000, стек пуст. Здесь и далее числа шестнадцатеричные.

0101: 354F21   xor ax, 214Fh
0104: 50       push ax
0105: 254041   and ax, 4140h

Теперь AX=0140 (адрес для самомодификации), на стеке 214F.

0108: 50       push ax
0109: 5B       pop bx

Адрес перекинут в BX: AX=0140, BX=0140, стек 214F.

010A: 345C     xor al, 5Ch
010C: 50       push ax
010D: 5A       pop dx

Собран адрес строки EICAR: BX=0140, DX=011C, стек 214F.

010E: 58       pop ax
010F: 353428   xor ax, 2834h
0112: 50       push ax
0113: 5E       pop si

Вытягиваем из стека 214F и получаем константу для расшифровки и номер функции прерывания 21: AX=097B, BX=0140, DX=011C, SI=097B, стек пуст.

0114: 2937     sub [bx], si
0116: 43       inc bx
0117: 43       inc bx
0118: 2937     sub [bx], si

Расшифровываем две двухбайтовых команды по адресам 0140 и 0142: AX=097B, DX=011C, [0140]=CD 21 CD 20.

011A: 7D24     jge 0140

Действительно 2A48 ⩾ 097B, и делаем переход на расшифрованные команды по адресу 011C+24 = 0140. Для снижения количества релокаций условные переходы имеют 1-байтовые адреса относительно того IP, который будет после команды.

011C:          db 'EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$'

Строка для печати по адресу 11C — этот адрес в DX.

0140: 482B
0142: 482A

Это зашифрованные команды: к сожалению, байты CD и 20 не годятся для тестовой строки. После расшифровки здесь будет…

*0140: CD21    int 21
*0142: CD20    int 20

Исполняем прерывание 21 функцию 9 (AH=09, DX=адрес) — напечатать строку. Затем прерывание 20 — прервать исполнение программы.

Примечания править

  1. https://www.virusbtn.com/pdf/magazine/2003/200306.pdf
  2. Архивированная копия. Дата обращения: 25 июля 2017. Архивировано из оригинала 13 апреля 2018 года.
  3. Сайт EICAR. Дата обращения: 30 декабря 2009. Архивировано 7 января 2010 года.
  4. Anatomy of the EICAR Antivirus Test File. – NinTechNet. Дата обращения: 14 сентября 2023. Архивировано 17 апреля 2023 года.
  5. Why does MS-DOS put an int 20h at byte 0 of the COM file program segment? - The Old New Thing. Дата обращения: 14 сентября 2023. Архивировано 30 мая 2023 года.

См. также править