Pull to refresh

Panda USB and AutoRun Vaccine — лекарство от autorun-вирусов на флешке

Reading time 5 min
Views 26K
5 марта я написал свою статью о скрипте AUTOSTOP для защиты флешек от autorun-вирусов, получившую немалый отклик. И только я сегодня собрался писать новую статью об альтернативном (более надежном) методе, как на одном из ресурсов, в теме, посвященной обсуждению скрипта, мне подсказали программу Panda USB and AutoRun Vaccine, работающую именно по методу, который я хотел описать. Причем работающую просто блестяще! Файл autorun.inf, создаваемый ею на флешке (дабы предотвратить создание такого файла вирусом) невозможно ни удалить, ни переименовать (в чем была слабость моего скрипта), ни модифицировать, ни открыть.

image

Познакомимся с программой поближе, рассмотрим ее возможности и метод, на котором базируется принцип работы.


МЕТОД


Прежде всего расскажу о методе.

Буквально через несколько дней после опубликования мною статьи, пользователь ЖЖ __x_tra
отписался в моем ЖЖ об альтернативном способе защиты флешки от autorun-вирусов, который он придумал: на флешке создается файл или каталог с названием AUTORUN.INF, и с помощью WinHex этому файлу или каталогу выставляется недопустимый атрибут. Напомню, что согласно FAT32 File System Specification, более известной как FATGEN (мы здесь рассматриваем защиту флешек с FAT):

File attributes:
ATTR_READ_ONLY 0x01
ATTR_HIDDEN 0x02
ATTR_SYSTEM 0x04
ATTR_VOLUME_ID 0x08
ATTR_DIRECTORY 0x10
ATTR_ARCHIVE 0x20
ATTR_LONG_NAME ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID
The upper two bits of the attribute byte are reserved and should always be set to 0 when a file is created and never modified or looked at after that.


В варианте же, придуманном __x_tra предлагалось поставить два верхних бита не в 0, а в 1. Байт атрибутов получался таким: 0xF7 (ATTR_ARCHIVE+ATTR_DIRECTORY+ATTR_SYSTEM+ATTR_HIDDEN+ATTR_READ_ONLY+два старших бита 11). Еще предлагались возможные варианты в виде 0xC7, 0xD7, 0xE7. Я протестировал метод — он оказался рабочим! AUTORUN.INF с присвоенным таким образом атрибутом, невозможно было открыть, переименовать и модифицировать. Меня лишь смущало 2 фактора:
  • Корректность такого способа: как он отразится на работоспособности файловой системы.
  • Повторяемость способа: каким образом объяснить простому пользователю что такое WinHex, и с чем его едят.


ПРОГРАММА


Вернемся теперь к программе Panda USB and AutoRun Vaccine.

image

Напомню что «Panda USB Vaccine currently only works on FAT & FAT32 USB drives». Маленький размер файла (всего 393Kb) и спартанский интерфейс — все продумано, ничего лишнего. Добавлю что программа бесплатная.

Начну с кнопки «Vaccinate USB». Я специально создал заранее на флешке файл autorun.inf с атрибутами RAHS — это никоим образом не помешало программе, при нажатии на упомянутую кнопку, перезаписать его своим одноименным файлом, который, как я говорил в начале статьи «невозможно ни удалить, ни переименовать (в чем была слабость моего скрипта), ни модифицировать, ни открыть». Открываем флешку в WinHex, смотрим атрибут файла autorun.inf. И что же мы видим:

image

Мы видим что аналогично способу __x_tra, изменен атрибут файла: 0х40. В статье FAT12, FAT16 and FAT32 Windows File System находим расшифровку, которой нет в FATGEN:

0x40 Device (internal use only, never found on disk)
0x80 Unused


Т.е. атрибут 0x40 не так уж «некорректен» — он «в рамках спецификаций». Чесно говоря, я очень рад, что ребята из Panda Software реализовали этот способ в крохотной программе, нажатием одной лишь кнопки — не заставляя пользователя прибегать к WinHex.

Замечу что средствами программы отменить вакцинацию флешки невозможно. Если уж появилась необходимость создать на флешке свой autorun.inf (например, чтобы сделать ее загрузочной) — то WinHex вам в помощь, или переформатирование (для этой цели, кстати, хорошо использовать HP USB Disk Storage Format Tool).

Вторая кнопка программы «Vaccinate computer». Проверим что она делает:

image

Это знакомый мне (еще до создания скрипта AUTOSTOP, я использовал именно этот метод) придуманный Nick Brown способ:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:DoesNotExist"

SYS:DoesNotExist говорит explorer'у чтобы он не читал параметры запуска из файла Autorun.inf, а читал их из ветки реестра HKEY_LOCAL_MACHINE\SOFTWARE\DoesNotExist, которая не существует. В итоге если внешний носитель содержит файл Autorun.inf — то при подключении носителя к компьютеру, Autorun.inf не запускается. Более того — не запускается он и при двойном клике по букве диска этого носителя в проводнике.

Способ хорош (замечу, что в программе присутствует функция отмены этого действия, на тот случай если авторан пользователю все же понадобится, осуществляемая повторным нажатием на кнопку, надпись на которой будет «Remove vaccine»), но добавлю что для полного отключения автозапуска будет необходимо добавить еще 3 ключа реестра (в приведенном мной синтаксисе они добавлаются через bat-файл):

  • REG ADD «HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\Files» /v "*.*" /d "" /f
    В CancelAutoplay\Files находятся текстовые параметры, содержащие имена файлов, отыскав которые на носителе встроенный AutoRun запускаться не станет и позволит запустить носитель через autorun.inf. Добавляем строковый параметр следующего содержания: *.* (все файлы).
  • REG ADD «HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer» /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f
    С помощью NoDriveAutoRun запрещается загрузка с определенных приводов по их буквенному обозначению, а NoDriveTypeAutoRun запрещает загрузку с определенных приводов по их типу. Поскольку нам авторан вообще не нужен, используем второе.
  • REG ADD «HKLM\SYSTEM\CurrentControlSet\Services\Cdrom» /v AutoRun /t REG_DWORD /d 0 /f
    Cdrom — полное отключение всякой поддержки автозапуска компакт-дисков (даже ручной).


Из дополнительных возможностей программы отмечу следующее: если запустить программу с ключом (кроме этого ключа есть еще несколько — см. страницу программы)

USBVaccine.exe /resident

то она будет висеть резидентно, и при подключении новой флешки, будет предлагать вацинировать ее:

image

ВЫВОДЫ


Из известных мне на сегодняшний день способов защиты флешек с FAT от autorun-вирусов это самый надежный. Понятно что раз такие вещи умеет делать программа от Panda Software, то рано или поздно вирусописатели тоже могут этому научиться — но это вопрос времени, а в данном случае время выиграно, и выигрыш в пользу защиты.

* Интересно что программа Panda USB Vaccine 1.0.0.19 beta вышла 5 марта — в тот же день, когда была написана моя статья о скрипте AUTOSTOP. Возможно в будущем 5 марта назовут международным днем борьбы с autorun-вирусами :)

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

UPD:


В комментариях высказывалась идея о том, что было бы логично сделать создаваемый «Panda USB and AutoRun Vaccine» защищенный файл autorun.inf скрытым (чтобы не попадался на глаза пользователю, и не провоцировал его переформатировать флешку, уничтожив защиту). И вот Inskin нашел изящное решение, которое, в общем-то лежало на поверхности: атрибуты файла — побитовые. Складываем 0x40 (01000000) + 0x01 (00000001) + 0x02 (00000010) + 0x04 (00000100), получаем 0x47 (01000111), и имеем защищенный файл с атрибутами RHS. На рисунке сверху фрагмент строки WinHex, под ней — часть окна FAR:



Я списался с __x_tra, и он любезно согласился помочь.
Модифицированная версия, выставляющая файлу атрибут 0x47 (используйте на свой страх и риск): USBVaccine_47.zip (USBVaccine_47.exe, size — 1 182 464 bytes, размер больше оригинальной версии, т.к. оригинальная сжата UPX, MD5: 5e3eb34bb09b1dda31dae0dfd8cd3521).
Tags:
Hubs:
+92
Comments 115
Comments Comments 115

Articles