Это заразно: все о компьютерных вирусах

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

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

Итак, за мной, читатель! Я предлагаю попробовать вместе создать абстрактный вирус. Но начнем с теории. Практически в любом программном обеспечении существуют так называемые уязвимости – недостатки проектирования системы, ошибки программирования или просто ненадежные пароли, которыми может воспользоваться вирус для проникновения внутрь. Он состоит из двух частей: инфектора и непосредственно вредоносного кода. Первый блок использует уязвимости системы – находит подходящее место в заражаемом объекте, а второй всячески нарушает обычную ее работу. Исполняемые файлы – то есть файлы, которые содержат программу в том виде, в котором она будет «понятна» и сможет быть исполнена компьютером (к примеру, с расширением *.exe), – состоят из секций, которые имеют размер 2n байт. Но не все байты в секциях заполнены, порой там образуются пустоты, которые можно использовать в качестве пристанища для нашего вируса. Поэтому надо высчитать свободное место и быть уверенным, что зловредный код помещается туда целиком, – иначе работоспособность инфицируемого объекта будет нарушена, а это позволит быстро выявить вирус. Так что инфектор должен найти лазейку и внедрить туда тело «заразного» кода без вреда объекту. Такого рода лазеек существует несколько: кроме упомянутого «пробела» между секциями, это начало основной кодовой секции исполняемого файла, байтовые отступы между заголовком и началом кодовой секции, собственная секция, которую вирусный код пристраивает в самом конце файла (правда, этот вариант – слишком очевидный для антивирусов). Нашли свободное место и записали туда вирус? Отлично! Однако это всего лишь полдела, не менее сложная задача – правильно запустить код, чтобы он выполнил все нужные действия максимально скрытно и не вызвав подозрений у программ-защитников, антивирусов. Тут вариантов уже чуть меньше: выполнять код до начала работы программы-носителя, между инструкциями или после завершения работы зараженной программы. Исполнение между инструкциями выглядит наиболее перспективным, потому как в случае изящного внедрения и грамотного перехвата управления можно успеть порядочно напакостить еще до тех пор, пока антивирус что-то заподозрит. 

В целом алгоритм заражения может выглядеть так.

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

1. Записываем вирус в выбранное место.

2. Находим код запуска программы-хозяина.

3. Освобождаем место под трамплин, – инструкции, которые передают управление вирусу (обычно это просто команда формата «а теперь иди по такому-то адресу и исполняй код там»), – переносим часть машинных инструкций из кода запуска в конец тела вируса.

4. Записываем в освободившееся место трамплин.

После того, как вирус запустится и сделает все свои грязные дела, он передаст управление обратно коду хозяина. Злой гений торжествует. А уж когда управление передано вирусу, скопировать файл с инфектором и отправить по почте всей адресной книге с заголовком «Смотри, какой котик!» не составит труда. 

А теперь переместимся на другую сторону баррикад и посмотрим, в чем опасность для нас со стороны антивирусов? Для начала, у всех антивирусов есть собственная база уже обнаруженных и идентифицированных вирусов, отсортированных по методу внедрения, перехвату управления, типовому хранению данных и подозрительным действиям. Антивирус при анализе тоже читает весь исполняемый файл, выполняя часть функций инфектора, так что методы атаки и защиты в чем-то очень похожи. Вряд ли неискушенному вирусописателю удастся удивить мировые корпорации. К тому же у вирусологов есть одно мощное оружие – эвристический анализ, смысл которого заключается в гипотезе, что данный объект ведет себя неправильно и потенциально наносит вред исполняемым файлам или другим объектам. Работает по принципу правоохранительных органов в полицейских государствах: мы сейчас вас задержим, а потом разберемся, виноваты вы или нет. Именно поэтому антивирусы так негативно относятся ко всякого рода взломщикам, даже если там нет никаких зловредных компонентов, – ведь взломщики целенаправленно изменяют поведение исполняемого файла, даже если дело касается всего лишь компьютерной игры. По факту, если тело вируса не распознано однозначно, то выяснить, является ли подозрительный код зловредным, можно только на практике. Вот антивирус и гребет в карантин все, что плохо работает, – лучше перебдеть.

 Осенью 2015 года специализированные СМИ заговорили о «рыцаре в сияющих доспехах» – малыше Linux.Wifatch. Он ведет себя точь-в-точь как вирус: заражает роутер, подменяет кое-какие инструкции, выполняет свой код, отличный от стандартной прошивки, – правда, есть одно «но»: внедрившись в устройство, он начинает оберегать роутер от других вирусов. Компьютерный Робин Гуд был обнаружен в 2014 году: он даже не пытался себя скрыть и имел миролюбивые сообщения в коде, напоминая АНБ и ФБР о конституции и правах человека. Вирус сам обновлял свою базу, удалял другой обнаруженный им вредоносный код и закрывал уязвимости роутера – заполнял все «лазейки», которыми могли бы воспользоваться другие хакеры: например, отключал самый уязвимый протокол Telnet, сообщал об этом администратору сети и предлагал обновить прошивку роутера. Тем не менее, специалисты компании Symantec, занимающейся разработкой ПО в области защиты данных и информационной безопасности, заявили, что в самом вирусе есть множество потайных ходов, которые можно использовать для совершения противоправных действий. Кстати, хотя добрый вирус создавался с целью защиты роутеров, исходный код программисты выложили только спустя год после обнаружения, в целях безопасности исключив из общего доступа скрипт сборки, – они опасались, что код сможет использовать «темная сторона силы», внедрив в него какой-то по-настоящему разрушительный элемент. Конечно, слепо верить разработчикам из White Team, как называют свою команду хакеры, не стоит. Они и сами прекрасно понимают, что никогда не войдут в круг доверия, однако дают слово, что не станут использовать вирус во вред.

Казалось бы, идея на миллион – заселить сеть «добрыми» вирусами, которые уничтожали бы вредителей и облагораживали киберпространство. Идея, кстати, отнюдь не новая: еще на заре Интернета, в 1994 году программистом Веселином Бончевым (Vesselin Bontchev) был представлен доклад на тему «хороших» вирусов, программ, которые должны упрощать жизнь рядового пользователя, беря на себя часть рутинных функций. Например, в обязанности классического вируса-антивируса, которым является Wifatch, входит нахождение известных ему вредоносных программ, их уничтожение, закрытие «дыр» в программном обеспечении и уведомлении пользователя в некоторых особых случаях. Одной из старейших идей является вирус-архиватор, который бы сжимал файлы перед их заражением, сохраняя свободное место на диске (правда, с появлением террабайтных винчестеров размер файла перестал играть какую-либо значимую роль). Еще одним помощником мог бы стать вирус-шифровальщик, который шифрует зараженные файлы, чтобы доступ к ним мог получить только текущий пользователь системы – таким образом, содержимое файлов окажется недоступным для злоумышленников. Совсем простые вирусы поддержки, которые производили бы рутинные задачи – например, удаление временных файлов, индексацию и дефрагментацию диска, – тоже могли бы быть очень полезными. Однако есть множество «но», которые вдребезги разбивают идею создать сеть с развитой культурой «добрых» вирусов. 

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

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

Специфика современного информационного пространства такова, что каждое устройство стремится в сеть, обмениваться данными и инструкциями. Каждое интернет-соединение – даже открытое с мирными намерениями – несет в себе потенциальную угрозу, поэтому лучшая защита от вирусов – полная изоляция как от всемирной сети, так и от людей. Мифы про абсолютную безопасность Linux или MacOS – не более чем неправильно интерпретированная статистика: подавляющее большинство компьютеров работает под Windows (по данным за сентябрь 2015 года – более 85 % всех PC), поэтому затраты на написание вирусов под другие системы неоправданны для обычных преступников. Ну а если бюджет бесконечен и цель очень сладка, то вирус можно написать и для более экзотических систем (помните Иран?). Так что будьте бдительны, боритесь с искушением «скачать бесплатно, без смс, без регистрации» и фильтруйте сообщения с незнакомых адресов. И кстати, вам еще не пришло мое письмо про котиков? 

История болезни 

Первым вирусом, вызвавшим компьютерную эпидемию, стал Brian, написанный братьями Амджатом и Базитом Алви (Amdjat и Basit Faroog Alvi) в 1986 году. На фоне компьютерных вирусов последних лет Brian выглядит весьма безобидно, однако в свое время он наделал шума, выведя из строя более 18 тысяч американских компьютеров. Brian распространялся на дискетах и действовал по методу стелс-вирусов, скрывающих свое присутствие в системе, – при попытке чтения зараженного сектора он «подставлял» незараженный оригинал.

Однако Brian был призван всего лишь наказать местных пиратов, которые воровали программное обеспечение у братьев Алви, а вот настоящий массовый обвал компьютерных систем из-за зловредного кода случился гораздо позже – в 1988 году, по вине знаменитого «червя Морриса». Роберт Тэппэн Моррис написал простую самокопирующуюся программу, которая своим безудержным размножением смогла вывести из строя порядка 6000 компьютеров и парализовать работу сети ARPANET Министерства обороны США – общие убытки, нанесенные «червем», составили 96 миллионов долларов.

В 1999 году настала эпоха легендарного вируса «Чернобыль», в оригинале CIH, по инициалам своего создателя Чэнь Ин Хао (Chen Ing Hau). Вирус попадал в компьютер с дискет, CD, по электронной почте или прятался внутри других программ, а потом «сидел в засаде», чтобы в годовщину аварии на Чернобыльской АЭС – 26 апреля 1999 года – запуститься и стереть все данные на зараженном компьютере, а в некоторых случаях даже повредить его материнскую плату. Ущерб тогда составил до 80 миллионов долларов.

После CIH были многие другие страшные эпидемии. Например, Code Red в 2001 году перехватывал управление сайта, выводя его из строя, и начинал DDoS атаку на определенные адреса. Ущерб составил 3 миллиарда долларов.

В 2004 году мир сотрясся от атаки сразу трех глобальных «червей»: Bagle, MyDoom и Sasser. Все три распространялись по почте и наносили разной степени вред, но результат всегда был ошеломляющим. Помимо неисчислимого в миллиардах долларов ущерба, «черви» достигли и других рекордов: MyDoom увеличил загрузку Интернета на 10 %, а Sasser вызвал отключение спутниковой связи некоторых французских новостных агентств и отмену нескольких рейсов Delta Airline.

А годами позже началась настоящая эпоха кибервойн – с поврежденными центрифугами в Иране и доменными печами в Германии, а также взрывами на нефтепроводах в Турции.

Это новость от журнала ММ «Машины и механизмы». Не знаете такого? Приглашаем прямо сейчас познакомиться с этим удивительным журналом.

Наш журнал ММ