EICAR-Test-File (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 года.

См. также[править | править код]