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

gjf

Ассоциация VN
Разработчик
Сообщения
646
Реакции
643
Баллы
478


Всем привет!

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

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

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

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

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

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

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

По сути, большинство программ считает флешку опасной и "обнаруживает инфекцию" по наличию 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

Ассоциация VN
Разработчик
Сообщения
646
Реакции
643
Баллы
478
И с поиском в Active Setup? Ну-ну... Надеюсь, что "праздники" закончатся и обещанный новый билд со всеми исправлениями выйдет.
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,615
Реакции
1,656
Баллы
593
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 символов по определению
 

gjf

Ассоциация VN
Разработчик
Сообщения
646
Реакции
643
Баллы
478
Карантин у меня не проходил в реале, а в BC проходил успешно. Проблема была в удалении.
в прочем как обычно у зайцева....
+100500
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,615
Реакции
1,656
Баллы
593
только что опять заявил что баг исправлен.. обновляйте базу перезапускайте AVZ и будет вам щасте :D:D:D
 
Сверху Снизу