понедельник, 18 ноября 2013 г.

Защита флешки от записи новых файлов

Защита флешки от записи новых файлов

Продолжаю развивать тему о защите флешек от вирусов (ранее мною публиковались материалы AUTOSTOP — скрипт для защиты флешки от autorun-вирусов и Panda USB and AutoRun Vaccine — лекарство от autorun-вирусов на флешке — там главным образом речь шла о защите флешки от записи на нее вредоносного файла autorun.inf). Тема интересна тем, что зачистка вирусов на компьютере — это борьба со следствием, а предохранение флешки от вирусов — это меры, направленные на устранение причины.

Защита флешки от записи новых файлов осуществляется путем определения свободного пространства на ней, с последующим полным его заполнением, используя утилиту fsutil. Такой метод отлично подходит, например, для защиты загрузочных флешек (имеющих файл autorun.inf), которые невозможно защитить созданием одноименного каталога AUTORUN.INF.

image
Далее следует описание метода, его анализ, и способ полной автоматизации.

Метод придуман не мной, он подсказан пользователем cook, а позднее найден в нескольких специализированных источниках. Мною же разработан удобный автоматизированный способ его применения, а также (на основании анализа как сильных его сторон, так и уязвимостей) дано более верное название, а именно «защита от записи новых файлов» (в отличии от менее точного названия в других источниках «защита от записи», не полностью отражающего суть метода).

Способ


В оригинале для создания такого файла используется команда:

fsutil file createnew <filename> <length>

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

Такой способ, как выяснилось в результате тестирования, имеет 2 минуса:
  1. FAT32 имеет ограничение на размер файла (2^32 байт, т.е. 4 гигабайта). Соответственно, мало заполненную информацией флешку размером 8 гигабайт (такие флешки сегодня не так уж редки) и больше таким образом уже не защитить
  2. Создание больших файлов занимает несколько минут времени. А если понадобилось удалить защитный файл, дописать что-то на флешку, а потом снова выставить защиту? Снова теряется время на создание большого файла


В моем же автоматизированном варианте используется следующий код (его нужно оформить в виде bat-файла, переписать на флешку и запустить оттуда), свободный от перечисленных недостатков:

@echo off
setlocal enabledelayedexpansion
set /a sizofile=1024 * 1024 * 1024
for /l %%K in (1,1,256) do (
for /f "tokens=3" %%J in ('dir %~d0 /-C') do (set freespace=%%J)
if !freespace! EQU 0 goto ready
if !freespace! GTR !sizofile! (
call :getime
fsutil file createnew "%~d0\[ 1024 Mb ] !randtime!" !sizofile!
) else (
for /l %%K in (1,1,5) do (
for /f "tokens=3" %%J in ('dir %~d0 /-C') do (set freespace=%%J)
set /a sizofilemb=!sizofile! / 1024 /1024 / 2
set /a sizofile=!sizofile! / 2
if !freespace! GEQ 67108864 (
if !freespace! GEQ !sizofile! (
call :getime
fsutil file createnew "%~d0\[ !sizofilemb! Mb ] !randtime!" !sizofile!
)
) else (
if !freespace! EQU 0 goto ready
call :getime
fsutil file createnew "%~d0\[ 1-63 Mb ] !randtime!" !freespace!
goto :EOF
)
)
)
)

:getime
set randtime=!time:~-10!
set randtime=!randtime::=!
set randtime=!randtime:,=!
exit /b


Логика работы кода следующая:
  • определяется количество свободного пространства на флешке
  • если свободного пространства больше 1Gb — создаем файлы размером 1Gb до тех пор, пока это условие выполняется
  • Когда свободного пространства меньше 1 гигабайта — последовательно пытаемся создать файлы размером 512Mb, 256Mb, 128Mb, 64Mb и последний файл размером от 1 до 63Mb


В итоге на флешке создается примерно следующая структура файлов, заполняющая все свободное место (7-значный уникальный код в конце названия каждого файла необходим для избежания ошибки создания файлов с одинаковыми именами):

[ 1-63 Mb ] 7344296
[ 64 Mb ] 7343581
[ 256 Mb ] 6050959
[ 512 Mb ] 6043075
[ 1024 Mb ] 2341570
[ 1024 Mb ] 2353157


После установки на флешку такой защиты, нельзя ничего с нее удалять (включая и упомянутый bat-файл), иначе защита перестанет действовать. Для снятия защиты от записи новых файлов (например, при необходимости записать что-то на флешку), необходимо удалить один или несколько созданных таким образом файлов минимально необходимого размера, и записать свои данные. Восстановление защиты после этого займет минимальное время.

Анализ


Строго говоря, такой метод нельзя считать полным аналогом аппаратного переключателя «read-only», имеющегося на некоторых видах флешек. Даже если флешка защищена от записи новых файлов описанным методом, вирус имеет возможность создать файл autorun.inf на флешке — но вот записать что-либо в этот файл уже не сможет.

Следует также заметить, что вирус имеет возможность поразить потенциально уязвимые файлы, уже содержащиеся на флешке, ввиду остатка свободного места (обусловленного кластерностью) выделенного для хранения файла. Но тенденции развития функционала вирусов позволяют говорить о том, что сегодня вирусы все меньше поражают отдельные файлы, а все больше используют уязвимости операционной системы Windows.

Таким образом, считать такой способ защитой от записи можно только в контексте невозможности создания на флешке непустых новых файлов. Что однако, как показывает практика, является серьезной мерой защиты от autorun-вирусов. Как говорилось выше, этот метод отлично подходит для защиты загрузочных флешек (имеющих файл autorun.inf), которые невозможно защитить созданием одноименного каталога AUTORUN.INF, а также для флешек с личным набором необходимого программного обеспечения, подключаемого к чужим компьютерам.

Хочется сказать еще несколько слов о пресловутой надежности защиты, обеспечиваемой аппаратным переключателем «Read-only». Имел место такой случай.

В фотоаппарате жены (Canon А610) нет возможности показа индикатора заряда батареи. Я нашел альтернативную прошивку, имеющую такую функцию. Записал ее на карту памяти. В инструкции к прошивке говорися, что для того, чтобы она грузилась автоматом (а не руками запускалась после включения фотоаппарата), необходимо переключатель на карте памяти перевести в положение «Заблокировано». Я несколько раз перечитал этот пункт — уж не ошибся ли. Нет — все верно. Ставлю переключатель в положение «Lock», заряжаю карту в фотоаппарат, предчувствуя что сейчас он выругается о невозможности записи, и… И ничего такого не происходит — все снятые кадры прекрасно сохраняются на карту памяти, а неудачные кадры без проблем можно удалить. Выводы делайте самостоятельно.


Конкретная реализация


Код для самостоятельного создания bat-файла приведен выше. Но наиболее удобно использовать новую версию 2.4 моего скрипта AUTOSTOP

image
Она умеет после завершения создания каждого файла выдавать короткий звуковой сигнал через системный динамик, избавляя от необходимости самому каждые несколько секунд поглядывать, не создался ли еще файл (ведь, как известно, «чайник, на который смотришь, никогда не закипит»), а по завершении установки защиты выдает длинный звуковой сигнал.

PS — напомню что защиту флешки методом прав NTFS никто не отменял, но бывают случаи, когда ее применение по каким-то причинам нежелательно.

PPS — спасибо Elroir за помощь в написании кода.

Комментариев нет:

Отправить комментарий