Антивирус на помойку


Автор - Крис Касперски.

Защищенная ось без антивирусов и тормозов

Некоторые воспринимают антивирус как неотъемлемую часть операционной системы и просто не мыслят свое существование без защитных пакетов от разных производителей, свободно пропускающих заразу, но вызывающих жуткие тормоза и целый ворох конфликтов, вплоть до выпадения в BSOD. Самый лучший антивирус — это сама ось! Нужно только научиться правильно ею пользоваться!

Терминологические войны

Windows NT (и все производные от нее системы — W2K, XP и частично Vista) изначально проектировалась как защищенная оси, способные постоять за себя и дать вирусам решительный отпор без каких-либо дополнительных средств, в том числе и широко разрекламированного Microsoft Anti-Spy-Ware. Но, чтобы не увязнуть в терминах, необходимо уточнить ряд определений.

Условимся называть вирусами саморазмножающиеся программы, паразитирующие на исполняемых файлах, динамических библиотеках, драйверах и других объектах подобного рода. Эпоха вирусов закончилась вместе с крушением MS-DOS, когда единственным средством добычи новых программ были дискеты товарища или, в лучшем случае, FIDO и BBS. С эпидемиологической точки зрения, все это создавало крайне напряженную обстановку. Копировать программы друг у друга — все равно что ширяться из одного шприца. С другой стороны, антивирус годичной давности считается вполне свежим и актуальным. Основными носителями вирусов были люди, а не файлы, поэтому масштабы эпидемии определялись исключительно интенсивностью копирования программ.

С появлением сети пользователи стали закачивать дистрибутивы программ из инета, а вирусам для размножения перестали требоваться люди. Используя дыры в подсистемах безопасности и ошибки типа переполнения буфера, любой вирус буквально за несколько часов может заразить практически все уязвимые узлы, при этом ему совершенно не обязательно внедряться в исполняемые объекты. Зачем привлекать к себе лишнее внимание, когда можно ограничиться временным проживанием в оперативной памяти. Если заражен хотя бы 1% всех машин в сети, то вирус, умирая при перезагрузке, через незаткнутые дыры будет возвращаться вновь и вновь. Такие вирусы принято называть червями, и это один из наиболее распространенных типов компьютерной заразы на сегодняшний день.

Еще существуют «психологические» вирусы, представляющие собой обыкновенные исполняемые файлы и распространяющиеся через вложения электронной почты, ICQ, web и ftp. Свою историю они ведут от «крэкеров интернета», завлекающих бесплатным доступом в сеть, а на самом деле, форматирующим жесткий диск. Этот подкласс заразы назвали Троянским Конем. Сейчас же времена первобытного варварства остались позади, и большинство троянов не уничтожают информацию, поскольку это сделает их пребывание слишком заметным, а скрыто устанавливают шпионскую закладку, похищающую пароли и содержимое электронных кошельков. Такие компьютеры принято называть зомби или дронами. Собрав огромную армию дронов, хакер может совершать распределенные атаки и делать кучу других антисоциальных вещей. Например, рассылать спам.

Антивирусы — за гранью возможного

Антивирусы в настоящее время практически полностью утратили былую значимость и усиленно пытаются отойти от пропасти, на дне которой они находятся. Вирусы, заражающие исполняемые файлы, за последние несколько лет фактически перевелись, к тому же запретить запись в исполняемые файлы средствами операционной системы намного проще, дешевле, быстрее и надежнее, чем устанавливать антивирусный пакет. И уж совсем бессмысленно пытаться лечить зараженные объекты, ведь в любой момент их можно переустановить с дистрибутивной копии, хранящейся на CD-R/RW или скачанной из сети.

Антивирусный монитор, следящий за всеми создаваемыми/открываемыми файлами и проверяющий их на лету, — это дополнительные тормоза (подчас очень значительные): конфликты, критические ошибки, голубые экраны смерти и прочий ничем не оправданный геморрой. Вся проблема в том, что антивирус может ловить только те вирусы, о которых знает, а вирусы сейчас пишут все кому не лень, так что даже при экстраординарной степени оперативности никакой гарантии, что вся зараза будет распознана, у нас нет. Более того, вирус, упакованный слегка подправленной версией крутого протектора, имеет 100% шансы остаться незамеченным! Сложные протекторы уже не распаковываются на эмуляторе ЦП, и для их снятия требуется статический распаковщик, входящий в «движок» антивирусной базы и справляющийся только со строго конкретными версиями протекторов и очень болезненно относящийся даже к незначительным изменениям структуры упакованного файла. Да что там структура! Обычно бывает достаточно внедрить в точку входа jump на инструкцию, неизвестную эмулятору (например, что-нибудь из набора SSE/SSE2), и антивирус идет лесом, поскольку переменная длина x86 инструкций не позволяет ему определить начало следующей машинной команды!

Впрочем, даже если антивирусу удастся побороть упаковщик и передать эвристику, распакованный код никаких вирусных признаков все равно там ни за что не обнаружит, ну разве что это будет пионерский вирус. Наличие незашифрованных текстовых строк с ключами реестра, ответственными за автозапуск, имен исполняемых файлов антивирусных программ, команд в стиле «rm -rf/» с высокой степенью указывает на зловредную программу, но их очень легко зашифровать. Еще эвристик может анализировать таблицу импорта и аргументы, передаваемые функции GetProcAddress. А если там встретится WriteProcessMemory, VirtualAllocEx, CreateRemoteThread или что-то еще в этом роде, он сделает вывод, что имеет дело с программой, способной внедряться в другие процессы. Верный признак червей и отладчиков. Ситуация сильно осложняется тем, что многие вирусные приемы сейчас активно используются протекторами, и, если эвристик не утихомирить, он отправит в топку добрую половину легальных программ, чего допускать ни в коем случае нельзя! Да и вообще, если создатель вируса неглупый человек, то он многократно прогонит его через различные эвристики, добиваясь их полной и безоговорочной капитуляции.

Что же касается червей (и, в частности, нашумевшего MS BLAST, известного также под кличкой Love San), то это вообще песня. Удаляют его антивирусы, не удаляют — что толку? Пока есть дыра, он словно феникс из пепла будет появляться вновь и вновь. К тому же всегда существует вероятность, что кто-то умный напишет свой собственный shell-код, не имеющий с MS BLAST'ом ничего общего, а потому и не детектируемый никаким антивирусом! Некоторые дыры можно закрыть брандмауэром, но в общем случае для этого необходимо установить заплатку от производителя уязвимого продукта, которым может быть как сама ось, так и один из ее компонентов: IE, FireFox и т.д.

Еще существует такой тип антивирусов, как ревизоры, в задачу которых входит проверка целостности существующих файлов и контроль за вновь созданными. Некоторые ревизоры также контролируют и реестр, особенно ветки, прямо или косвенно ответственные за автоматический запуск программ. Во времена MS-DOS это была очень хорошая штука, но сейчас винчестеры так разжирели, что процедура сканирования отнимает кучу времени, к тому же многие сканеры содержат ошибки, позволяющие заразить файл без изменения его контрольной суммы (см. статью «Как подделывают CRC16/32», опубликованную в «Хакере»), не говоря уже о том, что при правильной политике разграничения доступа сводит актуальность сканеров на нет, тем более, начиная с W2K, система сама контролирует целостность жизненно-важных файлов через механизм SFC. Ну вот, сейчас кто-то скажет, что SFC легко обмануть, особенно если вирус стелсируется на уровне ядра или вообще не внедряется ни в какие объекты файловой системы, существуя лишь в виртуальной памяти какого-нибудь процесса.

Контроль над целостностью виртуальной памяти процессоров берут на себя как антивирусы, так и персональные брандмауэры, распознающие и отсекающие все известные способы внедрения в чужое адресное пространство, да вот только работает этот механизм кое-как. Зловредному коду, запущенному с пониженными привилегиями, доступ к чужим процессам можно запретить средствами самой операционной системы, а код, запущенный с правами администратора, пройдет сквозь все уровни защиты, как нож сквозь масло (при условии, что его писал не пионер, а хотя бы комсомолец). Самое неприятное, что существует множество легальных программ, например, мультимедийных клавиатур и мышей, использующих внедрение в чужое адресное пространство для реализации своих мультимедийных возможностей, поэтому слепой запрет брандмауэра/антивируса приведет к их неработоспособности! Значит, необходимо предоставить пользователю возможность выбора. А сможет ли он отличить честную программу от нечестной? Но даже не это самое страшное. Чем глубже внедряется брандмауэр/антивирус в систему, тем сложнее зловредному коду его обойти, но и тем больше конфликтов и глюков он (брандмауэр/антивирус) вызывает.

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

Никакие, даже самые совершенные антивирусы ни от чего не спасают! При этом они стоят немалых денег, пожирают сетевой трафик частыми обновлениями, вызывают конфликты и тормозят работу системы, между тем система вполне может справиться с вирусами и сама — никакие дополнительные костыли ей не нужны!

Разграничение доступа — попробуй пробей

В отличие, например, от BSD, Windows NT не является многопользовательской операционной системой, поскольку только один пользователь может работать с компьютером в любой момент времени, и прежде чем переключиться на другого, необходимо завершить текущий сеанс, закрыв все приложения, и лишь потом… А вот в BSD все очень просто: нажал Alt-F#, переключился на соседнюю консоль — и все! В Windows XP наконец-то появилась возможность переключения сеансов разных пользователей без завершения, но механизма взаимодействия между пользователями как не было, так и нет.

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

Идея противостояния вирусам заключается в выборе правильной политики разграничения доступа, тогда вирус (или другая зловредная программа) просто не сможет напакостить и нанести значительный урон. А для этого все потенциально опасные программы нужно запускать в своеобразной песочнице. В идеале — на виртуальной машине типа VMware, но про VMware мы уже неоднократно писали, а вот про разграничение доступа материалов практически нет.

Начнем с того, что никогда, ни при каких обстоятельствах не следует постоянно сидеть под «администратором», поскольку любая запущенная программа может делать с системой все, что ей вздумается. Под администратором следует заходить в систему только для выполнения «ремонтных» работ — установки новых драйверов, изменения параметров конфигурации и т.д. А все остальное время проводить под «опытным пользователем» или просто «пользователем» с ограниченным доступом. Чем меньше у вас привилегий, тем меньше их и у каждой запущенной вами программы, однако под обыкновенным пользователем многие программы работать отказываются, поскольку требуют записи в каталог Program Files или в другие «злачные» места. Зато потом наступает тишь да гладь — ни вирусов, ни другого малваре.

Необходимость в периодическом резервировании, естественно, до сих пор существует. Надежнее всего резервироваться на CD-R/RW, DVD-RW, ZIP, стримеры и прочие внешние носители информации, однако это непроизводительно, неудобно, да и надежность у винчестеров все же повыше будет, чем у того же CD-RW. Поступим так. Создадим нового пользователя с администраторскими правами (Пуск -> Панель Управления -> пользователи и пароли -> Имя -> Пароль -> Другой -> Администраторы), назовем его, к примеру, «backup», зайдем под его именем в систему, создадим каталог general-stores (то есть общее хранилище) и скопируем туда все, что необходимо. Затем, щелкнув по каталогу правой кнопкой мыши, в появившемся контекстом меню выбираем вкладку «свойства», а там — «безопасность» со списком допущенных лиц. По умолчанию каталог доступен для всех, что никак не входит в наши планы, поэтому удаляем «всех» напрочь, предварительно сбросив галочку «переносить наследуемые от родительского объекта разрешения на этот объект». Все!!! Теперь этот каталог недоступен никому, даже системе! И только владелец, создавший его (то есть «backup»), может войти в раздел «безопасность» и вернуть «всех» на место. Внимание! Администратор не сможет этого сделать! Ну вообще-то, чтобы так не извращаться, после удаления «всех» можно добавить пользователя «backup», делегировав ему полный доступ к каталогу. Все же остальные пользователи, включая членов группы, добраться до этого каталога не смогут. Хорошая защита от вирусов и прочих деструктивных программ, неправда ли? Кстати говоря, задумаемся, а что произойдет, если случайно (преднамеренно) удалить пользователя «backup»? Ведь тогда доступ к архиву не сможет получить никто! К счастью, штатная утилита chkdsk распознает такую ситуацию, и, если видит подобный каталог-зомби, она автоматически возвращает «всех», воскрешая информацию из небытия.

Песочница — не только детская радость

Нашей следующей задачей будет постройка «песочницы» для всех тех программ, что могут быть атакованы из сети, к числу которых принадлежит IE, Fire Fox, Outlook Express, The Bat, ICQ и другие. Каждая из них должна быть запущена из-под ограниченного пользователя, не имеющего доступа ни к каким каталогам, кроме тех, которые явно нужны самой программе. В принципе, можно завести одного ограниченного пользователя на всех, обозвав его, к примеру, «sandbox» (то есть песочница), однако в этом случае червь, пробравшийся через IE, сможет разрушить почтовую базу, накопленную за многие годы, что будет обидно. Поэтому лучше всего дать каждой программе по пользователю (конечно, это увеличивает потребности системы в памяти, но не столь радикально).

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

Попробуем запустить в песочнице, например, Firefox. Создаем ярлык с firefox.exe (если только это не сделал инсталлятор), щелкаем по нему правой клавишей, идем в «свойства», затем — в «дополнительно» и там взводим галочку «запускать от имени другого пользователя». Говорим «ОК» и запускаем. Появляется грозное диалоговое окно, требующее ввода имени и пароля. Вводим. И… Горящий Лис не запускается! Между прочим, в Linux/BSD подобная операция протекает без каких бы то ни было проблем (в XP и выше проблем с конкретной Firefox также не возникает. — Прим. редактора). А здесь нужен бубен или более конкретно — файловый монитор Марка Руссиновича, показывающий, на каких именно файловых операциях программа обламывается (вот так, значит, разработчики относятся к сообщениям об ошибках). Качаем файловый монитор: www.sysinternals.com/Utilities/Filemon.html (он, кстати, занимает меньше двухсот килобайт и распространяется совершенно бесплатно). Запускаем из-под администратора: создаем ярлык и взводим уже известную нам галочку «запускать от…»! В данном случае файловый монитор запускается, потому что запрограммирован правильно, и мы быстрым спортивным шагом идем в Options -> Filter/Highlight или нажимаем <CTRL-L>. В появившемся диалоговом окне взводим все галочки, кроме «Log Successes», поскольку мониторить успешные операции нам незачем! Нам нужны ошибки! Нажимаем «OK» и перезапускаем программу (фильтр будет действовать только после запуска). Вновь запускаем Горящего Лиса. Что мы видим? Сначала идут ошибки поиска динамических библиотек в тех каталогах, где их нет — это нормально. А вот дальше Горящий Лис пытается создать папку Mozilla прямо в каталоге WINNT (в ней он хранит свои настройки, кэш страниц и т.д.), куда его, естественно, не пускают, и он тихо умирает.

Да… задача. Пробуем утилиту командной строки runas, запустив ее так: «runas /user:sandbox firefox.exe» (при этом firefox.exe должен быть в текущей директории). Нас деловито спрашивают пароль и… ничего! Теперь Горящий Лис лезет в Document n SettingDefault User, куда ему также нет доступа! В чем же дело?! В чем причина?! А в том, что для корректной работы большинства программ необходимо загрузить еще и профиль пользователя, от имени которого мы их запускаем, поэтому правильный вариант выглядит так: «runas /profile /user:sandbox firefox.exe». Теперь запуск проходит без проблем!

А вот Опера хранит кэш не в профиле пользователя, а непосредственно в своем каталоге (впрочем, это зависит от ее настроек), поэтому sandbox'у необходимо присвоить права на запись в «program filesopera».

Остальные программы «распутываются» аналогичным образом. Если не помогает файловый монитор, то качаем монитор реестра (www.sysinternals.com/Utilities/Regmon.html) и смотрим, в каких ветвях нуждается программа. Маленький подводный камень: перенаправить ввод с клавиатуры на файл, увы, не удастся, и пароль придется каждый раз вводить вручную, что напрягает. Впрочем, программисты запросто напишут программу, лишенную этих недостатков. Нам же главное — создать кучу пользователей, распределив права доступа так, чтобы зловредные программы не имели никаких шансов ни для размножения, ни для шпионской деятельности.

Заключение

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

http://www.inattack.ru/article/537.html

Обновлено: 11.03.2015