Что нового

USBProtect - Блокировка USB устройств

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
AutoIt: 3.3.6.1
Версия: 1.1

Категория: Администратирование

Описание: Изначально, я хотел написать что-то вроде программы-прикола, но в результате получилась вполне себе серьезная утилита. Итак, программа состоит всего из одного исполняемого файла "USBProtect.exe" и предназначена для блокировки любых USB накопителей (для простоты, я дальше буду писать просто флешка), таких как флешка, внешний жесткий диск и т.д. Просто запускаем USBProtect и все, все флешки будут "намертво" заблокированы. При попытке открыть их, вы получите сообщение "Access is denied".

Теперь о дополнительных "плюшках". Вы можете запустить программу с ключем "/p" или "/protect". В этом случае, убить процесс через Windows Task Manager уже не получиться, USBProtect вам этого не даст сделать (можете попробывать). Для выгрузки программы из памяти запустите программу с ключом "/u" или "/unload" (естественно, всем об этом говорить не нужно). Далее, вы можете создать неблокируемые (избранные) флешки. Для этого вам нужно сделать следующее:

  • В корне необходимой флешки создайте текстовый файл с именем "Volume.dat".
  • Поместите первой строкой в этот файл уникальный идентификатор, который выдаст вам следующая функция. Этот идентификатор основан на серийном номере файловой системы флешки, поэтому при ее форматировании он изменится, и весь процесс нужно будет повторить заново.

    Код:
    #Include <Crypt.au3>
    
    Func _GetVolumeUniqueID($sVolume)
    
    	Local $Serial = DriveGetSerial($sVolume)
    
    	If @error Then
    		Return ''
    	EndIf
    
    	Local $Hash = StringTrimLeft(_Crypt_HashData($Serial, $CALG_MD5), 2)
    
        If $Hash Then
    		Return StringMid($Hash, 1, 8) & '-' & StringMid($Hash, 9, 4) & '-' & StringMid($Hash, 13, 4) & '-' & StringMid($Hash, 17, 4) & '-' & StringMid($Hash, 21, 12)
        Else
            Return ''
        EndIf
    EndFunc   ;==>_GetVolumeUniqueID

  • Установите для файла "Volume.dat" атрибуты "скрытый" и "только чтение".

Теперь USBProtect не будет блокировать эту флешку, и вы можете спокойно ей пользоваться, в то время, как все остальные флешки будут заблокированы. Чтобы постоянно не проделывать вышеперечисленные действия, я написал небольшую утилиту USBResolve (в архиве), которая делает все тоже самое, но гораздо быстрее и безопаснее. Просто выберите необходимую флешку из списка и нажмите кнопку "Change Status" для ее блокировки/разблокировки. Все это естественно нужно делать при выгруженной USBProtect (в противном случае, флешка будет отсутствовать в списке) или на другом компьютере. И еще, разблокировать можно только те флешки, которые имеют файловую систему FAT32 или NTFS.

Ну и на последок, USBProtect не заносит никакие данные в реестр, они ей собственно и не нужны.

Файл: AU3, EXE

Замечание. Скрипт в исходниках полностью рабочий, но по соображениям безпасности, я исключил из него часть кода, связанную с защитой процесса. Я думаю, что тот, кто напишет что-то такое, для чего действительно понадобится защита процесса, в состоянии будет сам это реализовать.


Используемые библиотеки: WinAPIEx.au3 (v2.9)

Скриншот:


Источник: USBProtect (оффициальный форум)
Автор: Yashied
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Yashied [?]
В этом случае, убить процесс через Windows Task Manager уже не получиться
У меня получилось, я убил дерево процессов, и вместе с wscript убился и процесс утилиты. Это кажется можно избежать перезапустив сам процесс утилиты, но тогда придётся использовать другой метод проверки процесса (не по его PID).

Далее, вы можете создать неблокируемые (избранные) флешки. Для этого вам нужно сделать следующее
А можно это повесить на некий ключ в самой утилите, например: /exclude:L, чтобы при запуске с этим ключом утилита сама создавала файл с идентификатором для указанной буквы флэшки (L в нашем случае)?
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
CreatoR сказал(а):
У меня получилось, я убил дерево процессов, и вместе с wscript убился и процесс утилиты. Это кажется можно избежать перезапустив сам процесс утилиты, но тогда придётся использовать другой метод проверки процесса (не по его PID).
Я не думаю, что те люди, которым мы теоретически хотим ограничить доступ к USB, чего-нибудь поймут из того, что здесь написано.

:smile:

CreatoR сказал(а):
А можно это повесить на некий ключ в самой утилите, например: /exclude:L, чтобы при запуске с этим ключом утилита сама создавала файл с идентификатором для указанной буквы флэшки (L в нашем случае)?
Можно, но зачем? Моя идея заключалась в следующем: есть несколько офисных компьютеров за которыми сидят любители втыкать в USB все, что не попадя, и запускать все, что только можно запустить (я с такими почти каждый день сталкиваюсь, естественно, слово процесс или PID для них китайская грамота). Мы устанавливаем под админом на эти компьютеры USBProtect, прописываем его в автозагрузку в HKEY_LOCAL_MACHINE и даем доступ к этому разделу только на чтение. Далее, на своем боссовском компьютере маркируем "нужные" флешки или переносные жесткие диски. Вот и все. Теперь этот народ может использовать только то, что "доктор прописал", а свои насквозь пропитанные вирусами флешки пусть открывают дома. Я у себя на работе уже поставил USBProtect, подожду результатов. Раньше, я в среднем раз в месяц восстанавливал (спасибо Acronis True Image) несколько компьютеров по причине убийства их вирусами. Сейчас подожду и посмотрю, что будет...

А так, если в автозагрузку прописать букву диска, то может так случиться, что эта буква окажется у другого устройства.



Добавлено:
Сообщение автоматически объединено:

А вообще, если кто этим заинтересуется, пишите сюда, будем думать, что можно улучшить или добавить. Можно вообще заблокировать все, что не несъемные жесткие диски. Таким образом, из вне уже ничего не проникнит (интернет я в расчет не беру, это отдельная тема).
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Yashied [?]
те люди, которым мы теоретически хотим ограничить доступ к USB, чего-нибудь поймут из того, что здесь написано
Ну просто ты бросил вызов (“можете попробывать”), вот я долго не думал и прибил всё дерево :smile: (у меня Process Explorer, там оно сразу видно).

Можно, но зачем?
Чтобы не мучаться со скриптом. И ещё, а что если твою прогу будет использовать кто-то у кого нет аутоита, и кто не имеет к нему никакого отношения (погуглил и попал на эту тему), ему будет проще запустить прогу с соответствующим ключом чем скачивать AutoIt и запускать скрипт.
Upd: Впрочем утилита «USBResolve» это и делает.

даем доступ к этому разделу только на чтение
Утилита это делает? насколько я понял она полностью разблокирует флэшку после добавления файла «Volume.dat».

если в автозагрузку прописать букву диска, то может так случиться, что эта буква окажется у другого устройства.
Ты меня не понял, в автозагрузку не нужно писать этот ключ, он нужен для одноразового запуска, чтобы утилита сама поместила файл «Volume.dat» на флэшку, т.е чтобы она разблокировала её для дальнейшей работы утилиты.
 

Guezt

Продвинутый
Сообщения
335
Репутация
81
"Наши непобедимы", пробовал все с USB делать когда работал с "любителями повтыкать" )) Помогает лишь одно Полная блокировка через реестр доступа к дискам и отключение автозапуска с них а так же блокировка на запуск: "Выполнить...", "диспетчер задач" и открытие\редактирование реестра... убить можно было только "извращенным" способом - создать текстовый файл на рабочем столе переименовать его в *.bat и запустить ( там я прописывал Killtask на свой exe блокировки ) ну и нуб же я тогда был но работало, а так уставал просто морально каждый раз слушать У МЕНЯ НЕТ ВИРУОСВ на ФЛЕШКЕ У МЕНЯ АНТИВИРУС ДОМА!... блокирующего скрипта не осталось но его написать сейчас для меня да и вас 10-15 минут с отладкой и проверкой на работу в автозагрузке... а вот одно из моих первых "творений" с GUI по конкретной блокировке и ограничению доступа к дискам где-то есть там нубо-код в лоб ))) мне даже стыдно его выкладывать ))) я так и не смог придумать алгоритм хотя точно знаю что он где-то на XOR Bit - овом уровне и не просто есть а очень очень простой )))
вот так выглядит
если это достойно попасть в готовые примеры то я выложу "код "влоб""
)))
просто когда узнал что аналог данной проги стоит 40 евро - был рад что выложил бесплатно, но когда узнал что данная опция идет в XPTweaker - который так же бесплатный - расстроился )) Но в итоге вообще забыл про это все до прочтения данной темы )))
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Guezt, если твоя утилита работает, то выкладывай конечно, почему бы и нет. Но у меня стояла задача оставить работоспособными некоторые флешки, а не все скопом отрубить.



Добавлено:
Сообщение автоматически объединено:

CreatoR сказал(а):
Утилита это делает?
Это делаешь ты, как администратор отдельно взятого компьютера.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Yashied [?]
Это делаешь ты, как администратор отдельно взятого компьютера.
Не понял, тогда зачем мне утилита? было бы неплохо иметь в ней возможность исключать из блокировки отдельные флэшки, но позволять с них только чтение.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
CreatoR сказал(а):
Не понял, тогда зачем мне утилита? было бы неплохо иметь в ней возможность исключать из блокировки отдельные флэшки, но позволять с них только чтение.
Не, я имел в виду "только чтение" для раздела реестра, чтобы нельзя было убить автозагрузку программы из реестра.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Обновил программу до версии 1.1.

Список изменений:
  • USBProtect теперь работает только в Windows Vista и выше (тестировал на Windows 7). Это связано с тем, что в Windows XP FSCTL_LOCK_VOLUME работает только с правами администратора, что в свою очередь сводит на нет всю концепцию программы. USBResolve работает во всех системах.
  • Убран ключ "/p". Теперь доступ к процессу USBProtect.exe будет автоматически закрыт, если текущий пользователь не входит в группу администраторов. Выгрузить программу в этом случае можно только с помощью ключа "/u".
  • Теперь программа блокирует не только USB, а вообще, любые съемные диски, подключаемые к компьютеру.
  • Добавлен ключ "/c" или "/cd". Если запустить USBProtect с этим ключом, то при старте программы будут заблокированы все внутренние CD/DVD/BD-ROM'ы, и пока программа будет находиться в памяти, доступ к этим устройствам будет полностью закрыт.
  • Небольшие изменения в GUI USBResolve.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Обновил программу, версия осталась прежней.

Список изменений:
  • Улучшен алгоритм обнаружения и блокировки подключаемых устройств.
 

Guezt

Продвинутый
Сообщения
335
Репутация
81
Yashied [?]
любители втыкать в USB все, что не попадя, и запускать все, что только можно запустить
OffTopic:
А где вероятность того, что "разрешенная" флешка или другое USB устройство не побывает в другом USB порту вообще не пойми какого устройства включая ПК о котором ты можешь только догадываться?! что-то Вроде "-Вот! эта флешка читается у меня на рабочем компе, а другие "почему-то" нет давай скинь на нее... ну а дальше ты сам понял да? :smile: Извини за оффтоп но столько труда убивает простая наивная "почему-то" наших "любимых" пользователей :smile:
 

net7wolf

Новичок
Сообщения
7
Репутация
0
Yashied , я конечно чайник, но прога очень заинтересовала. Только, очень охота ,чтобы работала под ХР. и для тех кто в танке был отдельный ехе для выгрузки.


PS. хотя бы для ХР. очень надо.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
USBProtect может работать под XP только с правами администратора. В этом случае, вы потеряете возможность блокировки процесса в "Диспетчере задач". Только так.
 

net7wolf

Новичок
Сообщения
7
Репутация
0
Yashied , мне сайдёт и такая. она же будет работать если ехе файл переименовать, а там как вариант найти в msconfig в автозагрузке не очень нужную прогу и подсавить туда наш файлик с её именем.

Скинь ехе под ХР, и что там нужно куда сделать для выгрузки программы, тоже было бы не плохо.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711

Futurebear

Знающий
Сообщения
29
Репутация
6
Yashied , очень полезная штука. Я к сожалению её еще не успел оттестировать.
1 Как онасебя поведет если в комп до загрузки вставить флеш? Или если используются usb-ключи?
2 Возможно ли добавить в папку volume, помимо кода, еще и что-то вроде контрольной суммы файлов или даты обращения к флешки ?
(Что бы протект сверял это значение с реальным значение флешки и если оно не совпадает, то стирал volume, если совпадает, то стирал только это значение и разрешал работу флешки. При правильном извлечении флешки с ПК вновь записывал данный маркер. Это помогло бы ограничить пользование флешками только на ПК на которых установлен протект)
 

net7wolf

Новичок
Сообщения
7
Репутация
0
Yashied

слушай, пользуюсь твое USBProtect давно. Мне нравится отучил всех на работе Флешки таскать.

есть только 1 проблема (флешки под FAT нельзя разрешить) а очень надо. можешь помочь?


Добавлено:
Сообщение автоматически объединено:

Futurebear
1C ключи не трогает , если перед загрузкой все равно потом заблокирует.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
FAT16?
 
Верх