Хроника вирусов и антивирусов
Недавно, передали в новостях о первом мобильном вирусе, который приходит через, хорошо известную каждому, SMS-ку.
Сообщения об обнаружении очередного вируса поступают практически каждый день. По данным различных источников, в прошлом году коммерческие организации понесли ущерб от вирусов на сумму примерно $55 млрд. долларов, что в два раза больше, чем в 2002 году, и в четыре раза больше по сравнению с 2001 годом. Уже сейчас приблизительно на сто писем одно попадается зараженное. Редкий пользователь не устанавливает на свой компьютер антивирус и хотя бы раз в неделю не обновляет антивирусные базы, но все равно это не помогает, и вирусы благополучно проникают на наш компьютер. На большинстве компьютеров постсоветского пространства стоит что-то из стандартного набора Kaspersky, Dr.Web, UNA. В прошлом году я задался вопросом: если от антивирусов так мало толку, стоит ли за них платить, может, антивирусы у нас не те? А может, вообще необходим принципиально другой подход?
Мне, признаться, всегда нравились вирусы и люди, их написавшие. Нет, не тем, что они сделали (в этом ничего хорошего и не может быть), а тем, как они это реализовали. Написать вирус может сейчас любой, было бы желание, благо есть специальные конструкторы, практически не требующие от пользователя наличия знаний, в том числе и языка программирования. Но вот долго такой вирус не протянет (хотя бывают и исключения). Мало того, что конструкторы все известны работникам антивирусных компаний, а код, выработанный ими, наверняка проанализирован и добавлен в базы. Вирус должен уметь выживать! Иначе он не достигнет главной цели — заражения максимального количества компьютеров.
Поговаривают, что первые вирусы были написаны программистами Bell AT&T Laboratories. Игра у них была такая — Memory War называлась. Операционная система не обеспечивала тогда защиты областей памяти выполняющихся программ, поэтому одновременно запускалось несколько программ, задача которых — найти все остальные и уничтожить их, выжив. Чтобы выиграть, некоторые из них прятались в областях памяти, исследуя алгоритм работы соперника, другие же вели бомбардировку нулями областей памяти, третьи размножались, пытаясь затереть другие программы. Даже чемпионаты проводились — кто кого. Некоторые решения появлялись затем в журналах.
Потом пришел MS DOS, в котором было все, что нужно для выживания вирусов никакой защиты памяти, никакого ограничения доступа к файлам, исполняемые corn-файлы имели удобный и понятный формат (пока наступила эра экзешников, умельцы уже научились прятать вирус куда угодно), использование резидентных TSR-программ, располагающихся в памяти и т.п, а еще и пользователи, которые обменивались дискетами (а где еще тогда можно было нужную программу найти) и которых не интересовало происхождение записанного ПО. Вдобавок, не было никакого контроля за boot-сектором, что позволяло занести в него весь необходимый код, а сам сектор подчас выкидывался куда-то на диск.
Потихоньку, либо сканируя диск в поисках исполняемых файлов, что выдавало присутствие вируса по чрезмерной активности, либо находясь в оперативке и отслеживая обращения к таким файлам, вирус старался заразить максимальное количество файлов, отдавая предпочтение в первую очередь дискетам. Почему дискетам? А все потому, что вирусу надо выжить. Именно поэтому, попав на компьютер, вирус не сразу начинал разрушительную деятельность (зачем себя выдавать),
а устанавливал счетчик успешно зараженных файлов И только тогда, когда на счетчике устанавливалось нужное значение, вирус начинал действовать. Были такие, что просили еще памяти (пирожок и т. п. ) и пока пользователь не вводил нужное слово (иногда его нужно было еще и угадать), экран блокировался. Чаще, впрочем, случались шутки, просто мешающие в работе. Мне попался однажды вирус, который при обнулении счетчика блокировал компьютер с 18.00 до 09.00, мотивируя это тем, что нужно работать в рабочее время. Из курьезов в одной из историй, вычитанных мной в Интернете, рассказывалось, как вирус на экран вывел сообщение «Нажмите одновременно L+A+M+ E+R+Fl+Alt». Оператор нажал. Тогда выскочило предупреждение о том, что таблица разделов стерта с диска и загружена в оперативную память, и если оператор отпустит хотя бы одну кнопку, то с данными может проститься, а если просидит так 1 час, то все будет ОК. Через час оказалось, что это шутка.
Распространение персональных компьютеров (все же мы должны благодарить за это Microsoft) привело к появлению случайных людей, которых интересовал не сам процесс, а его результат. Изменились у них и шутки: начали форматироваться диски, стираться или кодироваться важная информация, даже были и такие, что выстраивали лучи монитора в одну точку, прожигая его (а надежность всего оборудования тогда оставляла желать лучшего) или ломали жесткие диски, гоняя считывающую головку. В процессе размножения вирусов возникла проблема, как не заразить файл дважды. Поначалу использовали метку времени создания файлов, которой отводились значения от 0 до 63. Скажите, у кого на часах больше 59 минут (военные не в счет). Вот и использовали оставшиеся значения для пометки зараженных файлов. Но «индустрия» вирусов вынудила быстро отказаться от этой методики, т. к. заразить файл мог только первый из попавших на компьютер, другие же, прочитав значение, думали, что файл уже заражен.
Для распознавания «своих» зараженных файлов стали вводить определенные комбинации, которые пытался найти перед заражением вирус. Применялись и другие методы — и все для того, чтобы скрыть свое пребывание от появившихся антивирусов.
Первым антивирусам было легко! Сказывалась относительно малая скорость распространения файловых вирусов (с Интернетом был тогда напряг), да и антивирусы писали сами создатели вирусов (за некоторую сумму, конечно). Очень хорошо было. Создал вирус, затем мужественно его же и поборол, и сразу вырос в глазах ничего не понимающего начальства. К тому же, кроме поиска по известным сигнатурам, антивирусы сканировали память в поисках притаившихся приложений, а также контролировали прерывания (20h—27h, да еще и I3h) если при обращении к одному из них вдруг всплывала неизвестная программа, то она сразу же ставилась под подозрение. Впрочем, и здесь нашелся выход появились вирусы, которые кодировали себя (некоторые причем каждый раз по-разному — полиморфные вирусы), из-за чего найти их становилось труднее. Также заносили резидентные вирусы в буфер DOS, который помечался как занятый, и т.д. Игра Memory War продолжалась.
Тесные рамки DOS все больше затягивались вокруг вирусов, и казалось, скоро наступит долгожданная победа. Но случилось непоправимое — миру была представлена совершенно новая ОС от Microsoft, которую разработчики называли Gicago, а пользователи узнали как Windows 95. Помимо явных удобств вроде многозадачности, позволявшей выполняться нескольким приложениям одновременно, или дружелюбного графического интерфейса пользователя, приведшего к тому, что последний не обязан был разбираться в работе компьютера, появилась нормальная поддержка работы с сетью (наконец-то БГ понял, что будущее за Сетью). Все хорошо, но была и Windows NT, у которой убрана защита (плюс некоторые переделки кода). Появилось большое количество API, которые стало труднее контролировать, пользователь получил, в угоду удобству, ничем не ограниченные права в системе, также возникла куча других факторов, которые разработчики, спеша выпустить новый продукт, не успевали учитывать.
Вирусописатели опять получили непочатый край работы (от себя признаюсь, что вирусы под Windows мне стали неинтересны — слишком уж все просто).
А что же Unix? В этой системе все было немного по-другому. Нет, были, конечно, и файловые вирусы, но у Unix было то, чем не могла похвастаться DOS — сеть. Именно сетевыми вирусами прославилась Unix в этот период развития компьютерных систем. Имя этим вирусам — червь. Главный принцип любого вируса — выжить любой ценой — здесь оставался в силе. Только заражение осуществлялось не копированием на дискеты, а через сеть, которая тогда держалась исключительно на Unix. Довольно подробное описание первых червей можно найти в документе The Internet Worm Program an Analysis.
До некоторых пор их как-то не воспринимали слишком серьезно, большей частью исследователям был интересен сам механизм размножения. Заговорили о червях только после 2 ноября 1988 года, когда студент Корнельского университета Роберт Моррис (Robert Morris) запустил своего червя, вошедшего в историю под именем его создателя. Описание его работы можно сейчас найти на многих сайтах. Вкратце остановимся на механизмах размножения этого вируса, которые актуальны и на сегодняшний день.
Попав на компьютер, он пытался разослать себя по сети, используя для получения информации конфигурационные файлы и системные утилиты вроде netstat. А попадал на компьютер, используя дыру в sendmail, в котором разработчики оставили отладочный режим, позволявший запускать код, а также переполнение буфера в fingerd и основную уязвимость в rsh (remote shell) — удаленной оболочке, позволяющей удаленно запускать задачи и использующей доверенные узлы, те узлы, требующие аутентификации для работы. Запустившись, червь старался спрятаться, стирая исполняемый файл, шифруя тело, и убирал информацию о себе в таблице процессов. Если заразить компьютер не получалось, червь полностью удалял себя, и компьютер помечался как незаражаемый. А вот чтобы получить доступ к учетным записям пользователей, осуществлялся подбор паролей, ведь файл /etc/passwd был тогда доступен для чтения всем. При этом в качестве пароля выбирался пустой пароль, логин пользователя, двойной логин пользователя, логин пользователя наоборот, имя и фамилия (эти поля есть в файле) пользователя в нижнем регистре, если же такие варианты не проходили, то из составленного Моррисом словаря, содержащего наиболее употребительные слова, наугад выбирались десять. Таким образом удалось заразить около 6 тысяч машин.
То, что произошло, повергло всех в шок. Нет, вирусы и ранее гуляли по сети, но заразить каждый десятый компьютер до сих пор не удавалось никому. Были срочно пересмотрены требования к безопасности систем, созданы институты вроде CERT (Computer Emergency Responce Team), занимавшиеся безопасностью компьютеров. Эх, случись это все хотя бы лет так на пять-шесть раньше, когда еще зарождались протоколы, мы бы, наверное, имели сейчас немного другой Интернет. Но было уже поздно, теперь оставалось только исправлять! Шума было столько, что журналы вроде 2600 или Phrack, прежде рассказывавшие о том, как позвонить по междугородке за счет соседа, вмиг переключились на компьютерную тему.
Сайт компьютерного и сладкого