Прочитав статью rattlersnake А твой антивирус ловит запароленные архивы? я прошел стадии от неверия через сомнение к разочарованию и обратно к пониманию.



Как вполне правильно отмечают в комментариях, получение содержимого запароленного архива без знания пароля невозможно, следовательно, невозможна и проверка. Но значит ли это, что детект вируса невозможен? Как мне кажется, я разобрался, почему такое возможно и почему такой метод имеет право на жизнь.

Желание проверить правильность описанной в статье ситуации и разобраться, как такое возможно, побудили меня провести небольшой эксперимент.

Проверяемый файл info.exe был найден по хэшу с VirusTotal и запакован архиватором WinRar в три архива: zip, rar и rar версии 5.

На все архивы был установлен сложный пароль для исключения его подбора антивирусом либо использования стандартных паролей. К моему удивлению, антивирус Fortinet сработал на архивах zip и rar, но не сработал на rar5!



В комментариях к статье была версия, что это — «false positive, ложное срабатывание». Но эта версия неправдоподобна, так как это ложное срабатывание выдает тот же самый детект, что и незапакованный вирус. Более того, при использовании разных паролей полученный архив должен значительно отличаться. Тут должен работать какой-то другой механизм, но какой?

Пытясь понять, что влияет на срабатываение антивируса, я изменил один байт в файле и снова запаковал его в архивы с паролем. После проверки меня ждал другой сюрприз – хотя детект вируса в архиве пропал (0/53), пропал детект этим антивирусом и неупакованного файла, хотя большинство остальных антивирусов продолжали его видеть (35/52)!

И тут мне в голову пришла отличная идея:

  • Смотрим, какие свойства файла доступны в архиве – и видим контрольную сумму CRC32:



  • Создаем пустой файл такого же размера, например командой fsutil file createnew info.exe 450362
  • Подгоняем его CRC32 под значение у оригинального файла (например, так: py.exe forcecrc32.py info.exe 0 76718968) или просто устанавливая значение первых четырех байт в 67 EE C6 57:



  • Запаковываем его в архив с паролем и проверяем CRC32 — совпадает
  • Проверяем полученный архив на VirusTotal

Бинго! Fortinet теперь считает, что в архиве находится вирус (1/52).



Проверяем на всякий случай и получившийся exe файл – и видим странный результат – Fortinet продолжает находить в файле вирус. Похоже, он детектит его исключительно по CRC32!



Да, похоже, чудес не бывает и настоящий детект вируса в запароленом архиве невозможен.

С другой стороны, учитывая что Fortinet занимается программно-аппаратными комплексами сетевой безопасности, и цель — не пропустить писмо с вредоносным вложением, то такой подход имеет право на жизнь.

Если мы знаем CRC32 вредоносного файла, будет не лишним предупредить пользователя, когда такой файл найдется в архиве с паролем.

Комментарии (34)


  1. rattlersnake
    08.02.2016 19:33
    +3

    Благодарю за интерес к моему скромному эксперименту. Жаль, что меня за него так жестко заминусовали(.
    Я в своем топике предложил отправить запрос ко второму участнику эксперимента, разработчику NANO Антивируса и отчитаться о том, как они прокомментируют полученный результат. Собственно, уже это и сделал. Посмотрим, что они скажут.