Макровирусы – это будущее компьютерных вирусов. Все вирусы, которые быстро распространяются по Интернету, – это макровирусы. Лучшие из вирусов используют психологические приемы, побуждающие пользователя установить, запустить или размножить их.
Антивирусное программное обеспечение – это более выгодный бизнес, чем написание вирусов. (Я полагаю, это очевидно: за вирусы никто денег не платит.) Большинство антивирусных программ сканируют файлы, выискивая вирусы. В программах есть база данных, содержащая «отпечатки пальцев» вирусов – фрагменты кода, про которые известно, что они являются частью вирусов. Когда программа находит такой же отпечаток, она получает информацию, что файл заражен, и, чтобы «дезинфицировать» его, удаляет вирусный код. Метод сканирования «отпечатков» работает только после того, как компания, создавшая антивирусную программу, выделила вирус в лаборатории и включила в список новый отпечаток. Поэтому усовершенствование антивирусного программного обеспечения – бойкий бизнес.
Все вирусы, которые встречались до сих пор, были направлены против крупных вычислительных машин, а не против периферийных или встроенных систем. Однако можно написать вирус на языке PostScript. Он мог бы распространяться от документа к документу. Он мог бы воздействовать на принтеры. Можно создать вирус, заражающий сотовые телефоны и распространяющийся по сотовой сети. Нам уже встречался вирус, специализирующийся на устройствах WebTV. Можно создать вирус, заражающий практически любую компьютерную систему. Если его еще нет, то только потому, что люди, которые обладают необходимыми знаниями и не отягощены строгой моралью, до сих пор не удосужились его создать.
Чтобы обнаружить ранее не известные вирусы, полиморфные вирусы (видоизменяющиеся при каждом инфицировании) и зашифрованные вирусы (скрывающие свои «отпечатки» при помощи криптографии), некоторые антивирусные программы тестируют компьютерную систему, выискивая подозрительное поведение. (Обычные программы поиска вирусов довольно глупы – чтобы их обмануть, иногда достаточно просто изменить какую-нибудь мелочь.) Такие программы работают довольно хорошо, однако они перекладывают на пользователя бремя принятия решения: вирус это или ложная тревога?
«Лекарства» от вирусов не существует. Математически доказано, что всегда можно написать вирус, который не сможет нейтрализовать ни одна из существующих антивирусных программ. (Даже модель Белла-Лападулы не предохраняет от вирусных атак.) Я не буду вдаваться в подробности, но основная идея в том, что если создатель вируса знает, что именно ищет антивирусная программа, он всегда имеет шанс разработать свой вирус, незаметный для нее. Конечно, после этого программисты, борющиеся с вирусами, могут усовершенствовать свою программу, которая будет определять уже и новый вирус.
Червями называют те разрушительные программы, которые специализируются на компьютерах, подключенных к сети. Это самовоспроизводящиеся программы, которые, в отличие от вирусов, не прячутся в других программах. Они существуют самостоятельно, блуждают по компьютерным сетям, причиняя повреждения.
Роберт Т. Моррис (Robert T. Morris) «выпустил» самого известного червя в 1988 году. Это был интернет-червь, который вывел из строя более 6000 компьютеров: 10% всех серверов Интернета. Червь появлялся на одной машине. Затем он предпринимал попытку проникнуть по сети в другие машины, используя несколько основных приемов. Когда это удавалось, червь засылал на новый компьютер копию своего кода. А затем эта копия повторяла весь процесс, пытаясь проникнуть в очередную машину. Обычно черви работают именно так. Тот червь мог бы причинить более крупные неприятности, если бы не счастливая ошибка. Изначально не планировалось, что 6000 зараженных компьютеров будут выведены из строя; червь должен был заразить их тайно, не привлекая всеобщего внимания. Ошибка в программе червя вызвала повреждение зараженных компьютеров. В главе 13 я более подробно расскажу о том, как работал тот червь и в чем конкретно заключалась ошибка.
Еще один червь известен под названием Pretty Park. Эта программа, функционирующая в среде Windows, приходит по электронной почте как вложение в сообщение. Если вы запускаете эту программу, она рассылает свои копии всем адресатам вашей записной книги в Outlook Express. Кроме того, она пытается подсоединиться к серверу IRC (Internet relay chat)[31] и отправить сообщения участникам чата. Автор червя может к тому же использовать это соединение, чтобы получать информацию из вашего компьютера. ILOVEYOU и все его варианты по сути своей – тоже черви.
Троянские кони – это разрушительные фрагменты, которые встроены в какие-то «нормальные» программы, чтобы одурачить пользователя, который будет думать, что это нечто полезное. Помните, откуда появилось это название? Греки десять лет осаждали Трою, но она не сдавалась. То ли от отчаяния, то ли от скуки Одиссей приказал греческим воинам построить большого деревянного коня, внутри которого могли бы спрятаться несколько человек. Этот сюрприз греки оставили троянцам как признание поражения, а затем сделали вид, что уплывают. Троянцы привезли деревянного коня в город – все художники изображают коня стоящим на платформе с колесами, – несмотря на предсказание Кассандры о том, что это приведет к гибели Трои. Ночью греки вылезли из коня, открыли ворота и впустили внутрь остальную греческую армию. После этого греки истребили троянцев, варварски разграбили и сожгли город. (По крайней мере, Гомер все описал именно так. Никто не знает, правда это или нет. Даже сам город считали мифом, пока Генрих Шлиман не обнаружил Трою в конце XIX века.)
Аналогично, цифровой троянский конь – это код, преднамеренно помещенный в вашу систему, который маскируется под безвредную (или полезную) программу, но делает что-то неожиданное или нежелательное. (С формальной точки зрения код, который вы сознательно размещаете в вашей системе, – это троянский конь, а код, который вводит в вашу систему кто-то другой, называют логической бомбой). Программист вписывает такой код в крупное программное приложение, которое в результате может начать работать неправильно, если, например, программист будет исключен из платежной ведомости. Тимоти Ллойд (Timothy Lloyd), диспетчер сети в Omega Engineering, в 1996 году установил логическую бомбу, которая подорвала производственные мощности его бывших работодателей и обошлась им более чем в 12 миллионов долларов.
Троянским конем может быть программа, которая тайно устанавливается в вашем компьютере, следит за буфером клавиатуры до тех пор, пока не обнаружит нечто, напоминающее номер кредитной карты, – правильное количество цифр, совпадение контрольной суммы, – и посылает этот номер кому-нибудь при помощи TCP/IP. Это также и приложение Java, которое прерывает соединение вашего модема и соединяет вас с 900 номерами в Молдавии (такой троянский конь на самом деле существовал).
Атака троянского коня коварна и опасна, поскольку вы можете и не догадываться о его работе. Один из популярных троянских коней для Microsoft Windows называется Back Orifice. Если он имеется на вашем диске, удаленный пользователь может эффективно подсоединиться к вам через Интернет и хозяйничать в вашем компьютере. Он может загружать себе ваши файлы, а вам – свои, удалять файлы, запускать программы, изменять конфигурации, захватывать управление клавиатурой и мышью, видеть все, что отображается на экране сервера. Тот же удаленный пользователь может вести более разрушительную деятельность: перезагружать компьютер, показывать произвольные диалоговые окна, включать и отключать микрофон или камеру, перехватывать нажатия клавиш (и пароли). А кроме того, существует расширяемый язык, позволяющий писать модули. (Я все жду, что кто-нибудь распространит модуль, который будет автоматически выискивать и записывать закрытые ключи PGP или последовательности регистрации для Всемирной паутины.)
31
Глобальная система, посредством которой пользователи могут общаться друг с другом в реальном времени. – Примеч. перев.