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

заказать расследование недорого

Эвристики


Эвристика

это одно из многих buzzwords конца XX— начала XXI века, то есть ученое или специальное словечко, способное произвести впечатление на непосвящённого. Это усилительное (часто бессмысленное) слово, используемое в профессиональном жаргоне для придания продукту тех черт, которыми он не обладает, или обладает, но совсем не в той мере.

Идея эвристики уходит корнями в эпоху ранней юности MS-DOS и в общих чертах сводится к выявлению признаков, часто встречающихся в вирусах, но практически никогда — в легальных программах. Тогда это было легко! Код вируса писался на чистом ассемблере и укладывался в линейную структуру, которую легко "переваривал" эмулятор, распознающий ряд заложенных в него шаблонов. Например, если функция FindFist

вызывалась с маской *.com или *.exe, это давало основание предположить, что мы имеем дело с программой внедряющейся в исполняемые файлы. Но стоило зашифровать маску, использовать самомодифицирующийся код или другие хитрые приемы, как эвристик шел лесом. Шаблонный поиск уже не работал, а на полный анализ не хватало вычислительной мощности и хотя существовали эвристики, срабатывающие в 90% случаев (реальных 90%, а не "макетоидных"), большого распространения они не получили, поскольку требовали огромного времени на анализ, а пользователь он, как известно, ждать не любит.

Сейчас вычислительные мощности многократно возросли, но вместе с ними возросла и сложность вирусов. На место ассемблера пришли языки высокого уровня, линейный код распался и вирус превратился в запутанный клубок функций, взаимодействующих друг с другом самым невероятным образом. Сравните структуру вируса Boot/Brain.A, написанного в далеком 1984 году с червем W32/Bagle.AG@mm, созданным десять лет спустя — в 2004.

Эвристики

Рисунок 4 структура вируса Boot/Brain.A, написанного в 1984 году

Эвристики

Рисунок 5 структура червя W32/Bagle.AG, написанного в 2004 году

Даже если антивирусу удастся побороть упаковщик и передать эвристику распакованный код… никаких вирусных признаков ему все равно там ни за что не обнаружить, ну разве что это будет совсем пионерский вирус.
Наличие незашифрованных текстовых строк с ключами реестра, ответственными за автозапуск, имен исполняемых файлов антивирусных программ, команд в стиле "rm -rf /" с высокой степенью указывает на зловредную программу, но… их очень легко зашифровать.

Еще эвристик может анализировать таблицу импорта и аргументы, переедаемые функции GetProcAddress, и, если там встретиться WriteProcessMemory, VirtualAllocEx, CreateRemoteThread

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

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

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

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

Кстати говоря, еще во времена MS-DOS мыщъх носился с идей антивируса, распознающего не вирусы, а… легальные программы! Уже тогда количество существующих вирусов и их модификаций на несколько порядков (не двоичных!) превысило число популярных программ! В антивирусной базе содержатся контрольные суммы легальных программ, рассчитанные по алгоритму MD5, который очень сложно подделать, в результате чего факт заражения распознается влет независимо от алгоритма внедрения, а все неизвестные антивирусы программы попадают в категорию потенциально зараженных.При тесной кооперации разработчиков ПО с антивирусными компаниями, "потенциально зараженных" программ будет немного и это (в основном) будет программы, написанные на коленке неизвестно кем и неизвестно как. Ошибки, допущенные при их создании, зачастую несут ничуть не меньший ущерб чем вирусы. Забавно, но к этой идеи антивирусная индустрия начала подходить только сейчас, предлагая услуги по сертификации ПО, однако, сама сертификация — чисто формальная процедура и даже если цифровую подпись напрямую подделать нельзя (криптография не велит), можно подкупить (ввести в заблуждение) выдающего его человека, то есть круг замыкается.

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


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