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

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


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

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




Рисунок 3  голубой экран смерти, вызванный антивирусным монитором

Реально, антивирусы могут отлавливать только не модифицированные версии Троянских Коней, да и то с оговорками. Просто смешно видеть, как на какой-нибудь файлопомойке типа www.download.ru пишут: "все программы проверены последними версиями антивирусов X и Y". Вы либо доверяете своему поставщику, либо нет. Как нельзя быть чуть-чуть беременной, так и нельзя доверять наполовину. Если разработчик (или дистрибьютор) задастся целью внедрить закладку — будьте уверены, он внедрит ее так, что никакой антивирус не поможет. Запускайте программы, полученные только из надежных источников, и только с минимально необходимым уровнем привилегий. Криво спроектированная программа, запущенная с администраторскими привилегиями, способна уронить всю систему так, что "ремонт" последней (в плане времени) обойдется дороже полной переустановки, но… никакого отношения к вирусам такая программа не имеет, поэтому антивирус скромно пропускает ее между ног, а вот правильно настроенная ось способна предотвратить свое обрушение, причем совершенно бесплатно и без тормозов!

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

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


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

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

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


Содержание раздела