Неудаляемые папки, защита от вирусов на флешках и все-все-все

gjf

Ассоциация VN
Сообщения
641
Реакции
603
zashita-fleshki-ot-virusa.png

Всем привет!

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

Речь пойдёт о так называемых "иммунизаторах" и "вакцинаторах" флеш-носителей от автозапускаемых вирусов - о том, как они работают, нужны ли они вообще. Ну и конечно мы рассмотрим один из простых способов создания такой "вакцины".

СУПЕР-МЕГА-ЗАЩИТА от авторанов

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

Особую популярность такие программы приобрели после бума Кидо - одним из способов его распространения были именно флешки. Наглость "утилидо-пейсателей" дошла до того, что за программу стали просить деньги, немедленно нашлись "хацкеры", которые эти программы стали ломать - ну и пошло-поехало.

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

ОБНАРУЖЕНИЕ ИНФЕКЦИИ

По сути, большинство программ считает флешку опасной и "обнаруживает инфекцию" по наличию autorun.inf в корне диска. Каждый раз, когда происходит монтирование носителя функция автозапуска системы блокируется, а запускается поиск искомого autorun.inf, а при наличии начинаются крики и стоны.

Особо продвинутые проги умеют анализировать содержимое autorun.inf на наличие open, после чего парсят значение и смотрят - нет ли на флешке файла или папки по такому пути? Если есть - крик будет оглушительным. Совершенно понятно количество фалсов на практически все диски презентаций и инсталляций, в которых autorun.inf находится чуть меньше, чем везде. В особо "продвинутых" программах файлы и папки из open проверяются на аттрибут "скрытый", чтобы снизить фалсы. Это, конечно, высокое достижение!

Совершенно очевидно, что подобные поделки не защитят от файловых вирусов: если на флешке есть программа, заражённая Sality - при запуске она мило заразит Вас в обход всех защит. Нашумевшее дело со Stuxnet отработает без шуму и пыли - там вообще не используется autorun.inf. Короче, печально.

А ВЫ СДЕЛАЛИ ПРИВИВКУ ОТ КОРИ?

Одно из "особых" достоинств обсуждаемых программ для защиты от заражённых флеш-носителй - так называемая "вакцинация" носителя, в результате чего его невозможно заразить. Суть вакцинации - создание в корне папки autorun.inf с известными ошибками файловой системы, в результате чего её невозможно удалить. В этом случае на флешку невозможно записать файл с таким же названием, а значит автозапуск вредоноса будет невозможен.

Увы и ах - этот способ убог априори: даже если autorun.inf и не создастся, все остальные файлы вредоноса благополучно будут скопированы и неискушённый юзверь может их запустить по ошибке или просто, "чтобы понять, что же это такое у меня хранится".

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

А теперь рассмотрим, как нам на практике создать такую "неудаляемую" папку без всяких "вакцинаторов".

ПРАКТИКА

Давным-давно, кажется в прошлую пятницу, когда скорости измерялись в бодах, о Мбит/с никто не слышал, а болтать по телефону и сидеть в интернете было два, совершенно несовместимых занятия, существовала славная заморочка: создавался простейший архив, который умелыми руками, одетыми в hex-редакторы, модифицировался так, чтобы файл в архиве, состоящий из десяти символов "ж" превращался в файл с 10 в стопицотой степени символов "ж". Суть атаки была проста: алгоритм архивирования сжимал такой гомогенный файл очень сильно, но при пересылке электронной почтой, если у клиента стояла автоматическая распаковка, файл-итог забивал полностью слабые тогда носители. В итого - полная искомая "ж". Ведь тогда ещё никто не думал об ограничения файловой системы - подумать только: тогда обладатели 40 Мб винтов считались королями!

Нет, у меня не начался старческий маразм, и вообще я ещё молод и красив (привет, девчонки!), а вспомнил я всё это потому, что наш пример будет очень похож на те древние приёмы.

Итак, нам потребуются:

- архиватор WinRAR. Я использовал версию 3.93, за остальные не ручаюсь.
- архиватор 7-zip. В моём случае - 9.20.04
- ОС Windows XP SP3
- cсистемная библиотека mozg.dll
- драйвер ruki.sys

Итак, что мы делаем. Хорошо известно, что в Windows общая длина пути вместе с именем файла не должна превышать 260 символов. Потому при создании папок с глубоким вложением рано или поздно придётся остановиться. Это хорошо известно людям, которые делают рипы с сайтов с большим вложением - хочешь или нет, но либо имена папок надо сокращать или кросс-ссылки делать. Именно этим ограничением мы и воспользуемся.

Создадим на диске пустую папку с названием autorun.inf и добавим её в rar-архив с помощью WinRar. Открываем архив в WinRar - ну и поехали. Создаём внутри autorun.inf ещё папку, потом ещё и ещё - заполняем искомые 260 символов. ну и в самом конце добавьте в архив что-нибудь - можно даже пустой текстовый файл. Итак, вакцина готова!

Если попытаться распаковать полученный файл WinRar'ом, то архиватор справедливо отругается:


Но вот 7-zip файл отлично распаковывает с сохранением структуры папок. В итого - вуаля!

1. Если общая длина пути с именами папок и именем файла превышает 260 символов, то такая папка будет отображена, однако файл открыть, скопировать или отредактировать не удастся. Папку удалить тоже не получится из-за того, что файл недоступен для системы:



Пример файла тут, описанное наблюдается при распаковке в корень любого NTFS-раздела.

2. Если общая длина пути с именами папок превышает 260 символов даже не считая имени файла, то Вы просто не сможете увидеть сам файл - Вы до него не доберётесь ни Проводником, ни файловыми менеджерами. ну и все вкусняшки п.1 в придачу :)

Пример файла тут, описанное наблюдается при распаковке в корень любого NTFS-раздела.

ПЛЮСЫ И МИНУСЫ

Плюсы от подобного - знание и понимание! А вот минусов бесконечно много :) Потому как подобная "защита" легко обходится. Я не буду грузить техническими деталями, уверен, что те, кому они понятны, давно не читают эту статью, а пьют пиво и грузят техническими деталями других :) , проще говоря - если мы используем более низкий доступ в системе, то прекрасно можем работать как с папками, так и со скрытыми файлами.

Это легко увидеть по старому-доброму IceSword:



Этот антируткит великолепно видит всю структуру папок, а команда force delete их удаляет в один ход.

IceSword более не поддерживается, но китайцы не сдаются и очень, на мой взгляд, удачно перехватывают эстафету с помощью неблагозвучного для русского уха антируткита XueTr:



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

Да на самом деле много чем увидеть можно - я просто выбрал два примера, что ближе всего лежали.

Отдельно стоит обратить внимание на ситуацию, когда в нашей неудаляемой папке прячется не обычный текстовик, а зловред. Антивирус Касперского с успехом проверяет содержимое папки, это легко проверить, распаковав содержимое этого архива (внутри - не текстовик, а eicar) и проверив полученную папку.

А вот что касается популярной среди жителей СНГ утилиты AVZ, используемой в ручном лечении заражённых компьютеров - тут интереснее.

Я попробовал закарантинить и удалить файл с помощью следующего скрипта AVZ (использовался уже упомянутый архив test1.rar):

Код:
begin
SearchRootkit(true, true);
SetAVZGuardStatus(True);
 QuarantineFile('D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt','');
 DeleteFile('D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt');
 BC_ImportAll;
ExecuteSysClean;
 BC_LogFile(GetAVZDirectory + 'boot_clr.log');
 SaveLog(GetAVZDirectory+'avz_log.txt');
 BC_Activate;
 RebootWindows(true);
end.

В итого прямые команды карантина и удаления не сработали:

Ошибка карантина файла, попытка прямого чтения (D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt)
Карантин с использованием прямого чтения - ошибка
Ошибка карантина файла, попытка прямого чтения (D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt)
Карантин с использованием прямого чтения - ошибка
Удаление файла:D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt
]]]Для удаления файла D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt необходима перезагрузка

После автоматической перезагрузки сработал BootCleaner, который сделал благополучный карантин, но вот удалить всё равно не смог:

Quarantine path: \??\D:\AWZ\Quarantine\2011-01-27\
QuarantineFile \??\D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt - succeeded
QuarantineFile \??\D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt - succeeded
DeleteFile \??\D:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov.txt - failed (0xC0000043)
-- End --

Таким образом, зловреда мы скопировали, а вот удалить и обезвредить не смогли. Так что думаю, Олегу Зайцеву ещё есть над чем работать :)

ВЫВОДЫ

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

Если же Вы действительно заинтерсованы в обеспечении защиты от подобного рода угро з -рекомендую попросту отключить автозапуск любых носителей на Вашей системе. Это можно сделать необратимо (потому что мне лень вспоминать параметры по умолчанию в реестре :) ), добавив реестр информацию этого файла, или же обратимо, воспользовавшись специфическими программами, например Autorunsettings от Uwe Sieber.
 
Последнее редактирование:
gjf, он заявил что уже!!! то есть обновляешься проверяешь.

Добавлено через 15 часов 19 минут 43 секунды
в прочем как обычно у зайцева....
На виртуальной машине должно работать?
AVZ 4.35 база от 28.01.2011 21:50
У меня результат отрицательный, на deletefile - failed (0xC0000043)

Ещё при эксперименте со вторым тестовым файлов, я сократил текстовое имя файла и получился такой скрипт:
Код:

Код:
begin
SearchRootkit(true, true);
SetAVZGuardStatus(True);
QuarantineFile('C:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\260_simvolov.txt','');
DeleteFile('C:\autorun.inf\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\Mozhno_nazvat_kak_hotite_lish_by_bylo_ochen_dlinno_i_v_itoge_summa_papki_i_faila_poluchilas_bolee_260_simvolov\260_simvolov.txt');
BC_ImportAll;
ExecuteSysClean;
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
SaveLog(GetAVZDirectory+'avz_log.txt');
BC_Activate;
RebootWindows(true);
end.


После этого машина при загрузке падает в BSOD, пробовал раз 5 под 2-мя виртуальными машинами, установленных на 2-х разных физических машинах. Виртуальная машина - Microsoft Virtual PC 2007. При выполнении на реальной машине, она не хочет уходить в перезагрузку, просто пишет, что скрипт выполнен без ошибок.

Добавлено через 1 час 6 минут 57 секунд
по сообщению зайцева
Падает оно за счет QuarantineFile (я не пробовал карантинить файл). Причина банальна - имя файла записывается в INI файл, а там при записи в INI для имени файла используется тип ANSI_STRING, у которой длинна не может быть 260 символов по определению
 
Назад
Сверху Снизу