Перейти к содержимому

Зачем нужны компьютерные вирусы

  • автор:

Зачем нужны компьютерные вирусы

Компьютерные вирусы и антивирусы

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

Вирусы могут размножаться, и скрыто внедрять свои копии в файлы, загрузочные сектора дисков и документы. Активизация вируса может вызвать уничтожение программ и данных.. Первая эпидемия произошла в 1986г (вирус «Brain» — мозг по англ.) Всемирная эпидемия заражения почтовым вирусом началась 5 мая 2000г, когда компьютеры по сети Интернет получили сообщения «Я тебя люблю» с вложенным файлом, который и содержал вирус.

Отличительными особенностями компьютерных вирусов являются:

1) маленький объем;

2) самостоятельный запуск;

3) многократное копирование кода;

4) создание помех для корректной работы компьютера.

По масштабу вредных воздействий компьютерные вирусы делятся на:

* Безвредные – не влияют на работу ПК, лишь уменьшают объем свободной памяти на диске, в результате своего размножения;

* Неопасные – влияние, которых ограничивается уменьшением памяти на диске, графическими, звуковыми и другими внешними эффектами;

* Опасные – приводят к сбоям и зависаниям при работе на ПК;

* Очень опасные – приводят к потери программ и данных (изменение, удаление), форматированию винчестера и тд.

По среде обитания компьютерные вирусы бывают:

* Файловые вирусы способны внедряться в программы и активизируются при их запуске

Из ОП вирусы заражают другие программные файлы (com, exe, sys) меняя их код вплоть до момента выключения ПК. Передаются с нелегальными копиями популярных программ, особенно компьютерных игр. Но не могут заражать файлы данных (изображения, звук)

* Загрузочные вирусы передаются через зараженные загрузочные сектора при загрузке ОС и внедряется в ОП, заражая другие файлы. Правила защиты: 1)Не рекомендуется запускать файлы сомнительного источника (например, перед загрузкой с диска А – проверить антивирусными программами); 2) установить в BIOS ПК (Setup) защиту загрузочного сектора от изменений

* Макровирусы — заражают файлы документов Word и Excel. Эти вирусы являются фактически макрокомандами (макросами) и встраиваются в документ, заражая стандартный шаблон документов. Угроза заражения прекращается после закрытия приложения. При открытии документа в приложениях Word и Excel сообщается о присутствии в них макросов и предлагается запретить их загрузку. Выбор запрета на макросы предотвратит загрузку от зараженных, но и отключит возможность использования полезных макросов в документе

* Сетевые вирусы – распространяются по компьютерной сети. При открытии почтового сообщения обращайте внимание на вложенные файлы!

Антивирусная программа – программа, предназначенная для борьбы с компьютерными вирусами.

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

Для нормальной работы на ПК каждый пользователь должен следить за обновлением антивирусов.

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

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

Типы антивирусных программ:

Антивирусные сканеры – после запуска проверяют файлы и оперативную память и обеспечивают нейтрализацию найденного вируса

Антивирусные сторожа (мониторы) – постоянно находятся в ОП и обеспечивают проверку файлов в процессе их загрузки в ОП

Полифаги – самые универсальные и эффективные антивирусные программы. Проверяют файлы, загрузочные сектора дисков и ОП на поиск новых и неизвестных вирусов. Занимают много места, работают не быстро

Ревизоры – проверяют изменение длины файла. Не могут обнаружить вирус в новых файлах (на дискетах, при распаковке), т.к. в базе данных нет сведений о этих файлах

Блокировщики – способны обнаружить и остановить вирус на самой ранней стадии его развития (при записи в загрузочные сектора дисков). Антивирусные блокировщики могут входить в BIOS Setup.

Кто и почему создает вредоносные программы?

Для начала — ответим на самый главный вопрос. Кому это нужно? Почему компьютеры, сети, мобильные телефоны стали носителями не только полезной информации, но зоной обитания разнообразных вредных программ? Ответить на этот вопрос несложно. Все (или почти все) изобретения, технологии массового использования — рано или поздно становились инструментом в руках хулиганов, мошенников, вымогателей и прочих преступников. Как только появляется возможность использования чего-либо в хулиганских или преступных целях — обязательно появляются те, кто применяет новые технологии совсем не так, как было задумано изобретателями этих технологий, а совсем наоборот — в корыстных целях или в целях личного самоутверждения, во вред всем окружающим. Увы — не избежали этой участи и компьютеры, мобильные телефоны, компьютерные и мобильные сети. Как только эти технологии стали массово использоваться — они тут же попали в недоброжелательные руки. Но «криминализация» новинок происходила постепенно.

Компьютерное хулиганство

Основная масса вирусов и троянских программ в прошлом создавалась студентами и школьниками, которые только что изучили язык программирования, хотели попробовать свои силы, но не смогли найти для них более достойного применения. Такие вирусы писались и пишутся по сей день только для самоутверждения их авторов. Отраден тот факт, что значительная часть подобных вирусов их авторами не распространялась, и вирусы через некоторое время умирали сами вместе с дисками, на которых хранились — или авторы вирусов отсылали их исключительно в антивирусные компании, сообщая при этом, что никуда более вирус не попадёт.

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

Став старше и опытнее, многие из вирусописателей попадают в третью, наиболее опасную группу, которая создает и запускает в мир «профессиональные» вирусы. Эти тщательно продуманные и отлаженные программы создаются профессиональными, часто очень талантливыми программистами. Такие вирусы нередко используют достаточно оригинальные алгоритмы проникновения в системные области данных, ошибки в системах безопасности операционных сред, социальный инжиниринг и прочие хитрости.

Отдельно стоит четвертая группа авторов вирусов — «исследователи», довольно сообразительные программисты, которые занимаются изобретением принципиально новых методов заражения, скрытия, противодействия антивирусам и т.д. Они же придумывают способы внедрения в новые операционные системы. Эти программисты пишут вирусы не ради собственно вирусов, а скорее ради исследования потенциалов «компьютерной фауны» — из их рук выходят те вирусы, которые называют «концептуальными» («Proof of Concept» — PoC). Часто авторы подобных вирусов не распространяют свои творения, однако активно пропагандируют свои идеи через многочисленные интернет-ресурсы, посвященные созданию вирусов. При этом опасность, исходящая от таких «исследовательских» вирусов, тоже весьма велика — попав в руки «профессионалов» из предыдущей группы, эти идеи очень быстро появляются в новых вирусах.

Традиционные вирусы, создаваемые перечисленными выше группами вирусописателей, продолжают появляться и сейчас — на смену повзрослевшим тинейджерам-хулиганам каждый раз приходит новое поколение тинейджеров. Но интересен тот факт, что «хулиганские» вирусы в последние годы становятся все менее и менее актуальными — за исключением тех случаев, когда такие вредоносные программы вызывают глобальные сетевые и почтовые эпидемии. Количество новых «традиционных» вирусов заметно уменьшается — в 2005-2006 годах их появлялось в разы меньше, чем в середине и конце 1990-х. Причин, по которым школьники и студенты утратили интерес к вирусописательству, может быть несколько.

  1. Создавать вирусные программы для операционной системы MS-DOS в 1990-х годах было в разы легче, чем для технически более сложной Windows.
  2. В законодательствах многих стран появились специальные компьютерные статьи, а аресты вирусописателей широко освещались прессой — что, несомненно, снизило интерес к вирусам у многих студентов и школьников.
  3. К тому же у них появился новый способ проявить себя — в сетевых играх. Именно современные игры, скорее всего, сместили фокус интересов и перетянули на себя компьютеризированную молодёжь.

Таким образом, на текущий момент доля «традиционных» хулиганских вирусов и троянских программ занимает не более 5% «материала», заносимого в антивирусные базы данных. Оставшиеся 95% гораздо более опасны, чем просто вирусы, и создаются они в целях, которые описаны ниже.

Мелкое воровство

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

В начале 1997 года зафиксированы первые случаи создания и распространения троянских программ, ворующих пароли доступа к системе AOL (интернет-провайдер America Online). В 1998 году, с дальнейшим распространением интернет-услуг, аналогичные троянские программы появляются и для других интернет-сервисов. Троянские программы данного типа, как и вирусы, обычно создаются молодыми людьми, у которых нет средств для оплаты интернет-услуг. Характерен тот факт, что по мере удешевления интернет-сервисов уменьшается и удельное количество таких троянских программ. Но до сих пор троянцы, ворующие пароли к dial-up, пароли к AOL, ICQ, коды доступа к другим сервисам, составляют заметную часть ежедневных «поступлений» в лаборатории антивирусных компаний всего мира.

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

В последние годы фиксируется постоянно увеличивающееся число троянских программ, ворующих персональную информацию из сетевых игр (игровую виртуальную собственность) с целью её несанкционированного использования или перепродажи. Подобные троянцы особенно широко распространены в странах Азии, особенно в Китае, Корее и Японии.

Криминальный бизнес

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

Обслуживание спам-бизнеса

Для рассылки спама создаются специализированные «зомби-сети» из троянских прокси-серверов (proxy server — утилита для анонимной работы в сети, обычно устанавливается на выделенный компьютер) или многоцелевых троянских программ с функционалом прокси-сервера. Затем троянские прокси-сервера получают от «хозяина» образец спама и адреса, на которые этот спам рассылать.

В результате ретрансляции спама через тысячи (или десятки тысяч) заражённых компьютеров спамеры достигают нескольких целей:

  • во-первых, рассылка совершается анонимно — по заголовкам письма и прочей служебной информации в письме выяснить реальный адрес спамера невозможно;
  • во-вторых, достигается большая скорость спам-рассылки, поскольку в ней задействовано огромное количество «зомби»-компьютеров;
  • в-третьих, не работают технологии ведения «черных списков» адресов зараженных машин — «отсечь» все компьютеры, рассылающие спам, невозможно, потому что их слишком много.

Распределённые сетевые атаки

Также именуются DDoS-атаками (Distributed Denial of Service — распределённый отказ в обслуживании). Сетевые ресурсы (например, веб-сервера) имеют ограниченные возможности по количеству одновременно обслуживаемых запросов — это количество ограничено как мощностями самого сервера, так и шириной канала, которым он подключён к интернету. Если количество запросов превышает допустимое, то либо работа с сервером значительно замедлится, либо вообще запросы пользователей будут проигнорированы.

Пользуясь этим фактом, компьютерные злоумышленники инициируют «мусорные» запросы на атакуемый ресурс, причём количество таких запросов многократно превышает возможности ресурса-жертвы. Посредством «зомби-сети» достаточного размера организуется массированная DDoS-атака на один или несколько интернет-ресурсов, приводящая к отказу атакуемых узлов сети. В результате обычные пользователи не в состоянии получить доступ к атакованному ресурсу. Обычно под удар попадают интернет-магазины, интернет-казино, букмекерские конторы, прочие компании, бизнес которых напрямую зависит от работоспособности своих интернет-сервисов. Чаще всего распределённые атаки совершаются либо с целью «завалить» бизнес конкурента, либо с последующим требованием денежного вознаграждения за прекращение атаки — этакий интернет-рэкет.

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

Создание сетей «зомби-машин»

Для развёртывания подобных сетей создаются специализированные троянские программы — «боты» (от «robot»), которые централизованно управляются удалённым «хозяином». Этот троянец внедряется в тысячи, десятки тысяч или даже миллионы компьютеров. В результате «хозяин зомби-сети» (или «бот-сети») получает доступ к ресурсам всех заражённых компьютеров и использует их в своих интересах. Иногда такие сети «зомби-машин» поступают на черный интернет-рынок, где приобретаются спамерами или сдаются им в аренду

Звонки на платные телефонные номера или посылка платных SMS-сообщений

Сначала злоумышленником (или группой лиц) создаётся и распространяется специальная программа, осуществляющая несанкционированные пользователем телефонные звонки или отсылку SMS-сообщений с мобильных телефонов. Заранее или параллельно с этим те же лица регистрирует компанию, от лица которой заключается договор с местным телефонным провайдером об оказании платного телефонного сервиса. Провайдер при этом, естественно, не ставится в известность о том, что звонки будут производиться без ведома пользователя. Далее троянец названивает на платный телефонный номер, телефонная компания выставляет счета на номера, с которых шли звонки, — и отчисляет злоумышленнику оговоренную в контракте сумму.

Воровство интернет-денег

А именно — создание, распространение и обслуживание троянских программ-шпионов, направленных на воровство денежных средств с персональных «электронных кошельков» (таких как e-gold, WebMoney). Троянские программы данного типа собирают информацию о кодах доступа к счетам и пересылают ее своему «хозяину». Обычно сбор информации осуществляется поиском и расшифровкой файлов, в которых хранятся персональные данные владельца счёта.

Воровство банковской информации

В текущее время — один из самых распространённых видов криминальной деятельности в интернете. Под ударом оказываются номера кредитных банковских карт и коды доступа к обслуживаемым через интернет персональным (а если «повезет» — то и корпоративным) банковским счетам («интернет-бэнкинг»). В случае подобных атак троянцы-шпионы используют более разнообразные методы. Например, выводят диалоговое окно или показывают окно с изображением, совпадающим с веб-страницей банка — и затем запрашивают от пользователя логин и пароль доступа к счету или номер кредитной карты (похожие методы также используются в фишинге — рассылках спама с поддельным текстом, напоминающим информационное сообщение от банка или другого интернет-сервиса).

Для того чтобы заставить пользователя ввести персональные данные применяются различные психологические махинации, обычно — выводится какой-либо текст, сообщающий, что если не ввести свой код, то произойдёт что-либо плохое (например, интернет-банк прекратит обслуживание счёта) или не произойдёт что-то очень хорошее («на Ваш счёт хотят перечислить много-много денег — пожалуйста, подтвердите свои реквизиты»).

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

Воровство прочей конфиденциальной информации

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

Также известно о случаях, когда для атаки использовались легальные сетевые приложения. Например, в систему скрытно внедрялся FTP-сервер или также скрытно устанавливалось файлообменное («Peer-to-Peer» — P2P) программное обеспечение. В результате файловые ресурсы компьютера становились открытыми для доступа извне. По причине многочисленных инцидентов, связанных со злоумышленным использованием P2P-сетей, в 2006 г. они были официально запрещены во Франции и в Японии.

Кибер-шантаж

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

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

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

Разработка «средств доставки»

Для обслуживания описанных выше видов криминальной деятельности в интернете кибер-преступниками разрабатываются и распространяются сетевые черви, которые становятся причиной многочисленных интернет-эпидемий. Основной задачей таких червей является установка криминальных троянских программ на максимально большое количество компьютеров в глобальной сети. Примерами таких червей являются нашумевшие в 2004 году Mydoom и Bagle, а в 2006 году — почтовый червь Warezov.

Не исключено, что в некоторых случаях задача «максимального покрытия» не стоит — а наоборот, количество зараженных машин принудительно ограничено, видимо, для того, чтобы не привлекать излишне большого внимания правоохранительных органов. Внедрение в компьютеры-жертвы в этих случаях происходит не при помощи неконтролируемой эпидемии сетевого червя, а, например, через зараженную веб-страницу. Злоумышленники в состоянии фиксировать количество посетителей страницы, число удачных заражений — и удалять троянский код при достижении необходимого числа зараженных машин.

Точечные атаки

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

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

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

Прочие виды криминальной деятельности

Существуют и другие виды преступного компьютерного бизнеса, которые пока не получили достаточно широкого распространения. Например, это воровство (сбор) обнаруженных на заражённых машинах электронных почтовых адресов — и продажа их спамерам. Это поиск уязвимостей в операционных системах и приложениях — и продажа их другим компьютерным преступникам. Это также разработка и продажа троянских программ «на заказ», и так далее. Весьма вероятно, что с развитием существующих и появлением новых интернет-сервисов будут появляться и новые методы совершения интернет-преступлений.

Полулегальный бизнес

Помимо студентов-вирусописателей и откровенно криминального бизнеса в интернете существует также деятельность на грани закона — бизнес «полулегальный». Системы навязывания электронной рекламы, утилиты, периодически предлагающие пользователю посетить те или иные платные веб-ресурсы, прочие типы нежелательного программного обеспечения — все они также требуют технической поддержки со стороны программистов-хакеров. Данная поддержка требуется для реализации механизмов скрытного внедрения в систему, периодического обновления своих компонент, разнообразной маскировки (чтобы защитить себя от удаления из системы), противодействия антивирусным программам — перечисленные задачи практически совпадают с функционалом троянских программ различных типов.

Принудительная реклама (Adware)

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

После принятия несколькими штатами США антирекламных законов, разработчики Adware были фактически выведены за рамки закона (а почти все они — американские компании). В результате, некоторые из них максимально легализовали свои разработки: теперь Adware поставляется с инсталлятором, видна иконка на системной панели и есть деинсталлятор. Но представить себе человека, который в здравом уме и трезвой памяти добровольно установит на компьютер рекламную систему трудно, и поэтому легальные Adware стали навязывать вместе с каким-либо бесплатным софтом. При этом инсталляция Adware происходит на фоне инсталляции этого софта: большинство пользователей нажимают «OK», не обращая внимания на тексты на экране, — и вместе с устанавливаемыми программами получают и рекламные. А поскольку зачастую половина рабочего стола и системной панели заняты самыми разнообразными иконками, то иконка рекламной программы теряется среди них. В результате де-юре легальный Adware устанавливается скрытно от пользователя и не виден в системе.

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

Порнографический бизнес, платные веб-ресурсы

Для привлечения пользователей на платные веб-сайты часто также используются различные программы, которые де-юре не попадают в разряд вредоносных, поскольку они никак не скрывают своего присутствия, а на платный ресурс пользователь попадает, только положительно ответив на соответствующий вопрос. Однако такие программы часто устанавливаются в систему без ведома пользователя, например, при посещении веб-сайтов сомнительного содержания. Затем они настойчиво предлагают пользователю посетить тот или иной платный ресурс.

Ложные анти-шпионские (Anti-Spyware) или антивирусные утилиты

Это достаточно новый вид бизнеса. Пользователю «подсовывается» небольшая программа, которая сообщает о том, что на компьютере обнаружено шпионское программное обеспечение или вирус. Сообщается в любом случае, вне зависимости от реальной ситуации — даже если на компьютере кроме ОС Windows больше ничего не установлено. Одновременно пользователю предлагается за небольшую сумму приобрести «лекарство», которое, на самом деле, почти ни от чего не лечит.

Публикации на схожие темы

Скрытный DoubleFinger помогает GreetingGhoul охотиться за вашей криптовалютой

Вирусы. Вирусы? Вирусы! Часть 1

Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

Мы поговорим о компьютерных вирусах, как о коде, который способен порождать собственные копии, изменяясь от поколения к поколению. Которому, как и его биологическим собратьям, необходим файл-носитель, работоспособный, и остающийся работоспособным, чтобы давать жизнь новым поколениям вируса. Которому для размножения необходима благодатная среда, много вкусных исполняемых файлов, а также, много глупых и активных пользователей, чтобы они их запускали. Так что название «вирус» не просто красивый ярлычок для описания вредоносной программы, компьютерный вирус, в его классическом понимании, является сущностью весьма близкой к его биологическому аналогу. Человечество, как это не раз доказывалось, способно создавать весьма изощренные решения, особенно когда дело касается создания чего-нибудь наносящего вред другим людям.

Итак, давным-давно, после того, как DOS пришел к людям, и у каждого программиста появилась своя маленькая вселенная, где адресное пространство было единым, а права на файлы были всегда rwx, появилась мысль о том, может ли программа копировать сама себя. «Конечно, может!», – сказал программист и написал код, который копирует собственный исполняемый файл. Следующая мысль была «а могут ли две программы объединиться в одну?». «Конечно, могут!», – сказал программист и написал первый инфектор. «Только вот зачем?» – подумал он, и это стало началом эпохи компьютерных вирусов. Как оказалось, гадить на компьютере и всячески пытаться избежать обнаружения очень весело, а создание вирусов является очень интересным с точки зрения системного программиста делом. Кроме того, появившиеся на рынке антивирусы предоставляли создателям вирусов серьёзный вызов их профессионализму.

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

Анатомия вируса

Мы будем говорить о вирусах, живущих в исполняемых файлах форматов PE и ELF, то есть о вирусах, тело которых представляет собой исполняемый код для платформы x86. Кроме того, пусть наш вирус не будет уничтожать исходный файл, полностью сохраняя его работоспособность и корректно инфицируя любой подходящий исполняемый файл. Да, ломать гораздо проще, но мы же договорились говорить о правильных вирусах, да? Чтобы материал был актуальным, я не буду тратить время на рассмотрение инфекторов старого формата COM, хотя именно на нем были обкатаны первые продвинутые техники работы с исполняемым кодом.

Основными частями кода вируса являются infector и payload. Infector – это код, который ищет подходящие для заражения файлы и внедряет в них вирус, стараясь максимально скрыть факт внедрения и при этом не повредить функционалу файла. Payload – это код, который выполняет собственно необходимые вирмейкеру действия, например, рассылает спам, DoS-ит кого-нибудь, или просто оставляет на машине текстовой файлик «Здесь был Виря». Нам совершенно непринципиально, что там внутри payload, главное, что вирмейкер всячески старается скрыть его содержимое.

Начнём со свойств кода вируса. Чтобы код удобней было внедрять, разделять код и данные не хочется, поэтому обычно используется интеграция данных прямо в исполняемый код. Ну, например, так:

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

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

Исполняемый файл (PE или ELF) состоит из заголовка и набора секций. Секции – это выровненные (см. ниже) буферы с кодом или данными. При запуске файла секции копируются в память и под них выделяется память, причем совсем необязательно того объёма, который они занимали на диске. Заголовок содержит разметку секций, и сообщает загрузчику, как расположены секции в файле, когда он лежит на диске, и каким образом необходимо расположить их в памяти перед тем, как передать управление коду внутри файла. Для нас интересны три ключевых параметра для каждой секции, это psize, vsize, и flags. Psize (physical size) представляет собой размер секции на диске. Vsize (virtual size) – размер секции в памяти после загрузки файла. Flags – атрибуты секции (rwx). Psize и Vsize могут существенно различаться, например, если программист объявил в программе массив в миллион элементов, но собирается заполнять его в процессе исполнения, компилятор не увеличит psize (на диске содержимое массива хранить до запуска не нужно), а вот vsize увеличит на миллион чего-то там (в runtime для массива должно быть выделено достаточно памяти).

Флаги (атрибуты доступа) будут присвоены страницам памяти, в которые секция будет отображена. Например, секция с исполняемым кодом будет иметь атрибуты r_x (read, execute), а секция данных атрибуты rw_ (read,write). Процессор, попытавшись исполнить код на странице без флага исполнения, сгенерирует исключение, то же касается попытки записи на страницу без атрибута w, поэтому, размещая код вируса, вирмейкер должен учитывать атрибуты страниц памяти, в которых будет располагаться код вируса. Стандартные секции неинициализированных данных (например, область стека программы) до недавнего времени имели атрибуты rwx (read, write, execute), что позволяло копировать код прямо в стек и исполнять его там. Сейчас это считается немодным и небезопасным, и в последних операционных системах область стека предназначена только для данных. Разумеется, программа может и сама изменить атрибуты страницы памяти в runtime, но это усложняет реализацию.

Также, в заголовке лежит Entry Point — адрес первой инструкции, с которой начинается исполнение файла.

Необходимо упомянуть и о таком важном для вирмейкеров свойстве исполняемых файлов, как выравнивание. Для того чтобы файл оптимально читался с диска и отображался в память, секции в исполняемых файлах выровнены по границам, кратным степеням двойки, а свободное место, оставшееся от выравнивания (padding) заполнено чем-нибудь на усмотрение компилятора. Например, логично выравнивать секции по размеру страницы памяти – тогда ее удобно целиком копировать в память и назначать атрибуты. Даже вспоминать не буду про все эти выравнивания, везде, где лежит мало-мальски стандартный кусок данных или кода, его выравнивают (любой программист знает, что в километре ровно 1024 метра). Ну а описание стандартов Portable Executable (PE) и Executable Linux Format (ELF) для работающего с методами защиты исполняемого кода – это настольные книжки.

  • основная кодовая секция (перезапись вирусом начала исполняемого кода начиная прямо с Entry Point).
  • padding между окончанием заголовка и первой секцией. Там ничего нет и вполне можно уместить там небольшой вирус (либо его загрузчик) не сломав файл.
  • новая секция, которую можно дописать в заголовок и разместить в файле после всех остальных. В этом случае никакие внутренние смещения не поломаются, и с местом проблем тоже нет. Правда последняя секция в файле, в которой разрешено исполнение, конечно же, обратит на себя внимание эвристика.
  • padding между окончанием содержимого секции и ее выровненным концом. Это намного сложнее, так как сначала надо этот самый «конец» найти, и не факт, что нам повезет и места будет достаточно. Но для некоторых компиляторов это место можно обнаружить просто по характерным байтам
  1. JMP на тело вируса замещает первые байты, находящиеся в Entry Point файла. Затёртые байты вирус сохраняет в своём теле, и, по окончании собственной работы, восстанавливает их и передает управление на начало восстановленного буфера.
  2. Способ, похожий на предыдущий, но вместо байтов вирус сохраняет несколько полных машинных инструкций в Entry Point, тогда он может, ничего не восстанавливая (проследив только за корректной очисткой стека), выполнить их после окончания собственной работы и передать управление на адрес инструкции, следующей за «сворованными».
  3. Как и в случае с внедрением, есть способы и похитрее, но мы их тоже рассмотрим ниже, или отложим до следующей статьи.
  • поставить указатель точно на начало какой-нибудь инструкции (просто так взять рандомное место в исполняемой секции и начать дизассемблирование с него нельзя, один и тот же байт может быть и опкодом инструкции, и данными)
  • определить длину инструкции (для архитектуры x86 инструкции имеют разные длины)
  • переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
  • повторять, пока не решим остановиться
  1. Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
  2. Читаем свой код (код тела вируса).
  3. Берем несколько первых инструкций из файла-жертвы.
  4. Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
  5. Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
  6. Создаем новую секцию, записываем туда код вируса и правим заголовок.
  7. На место этих первых инструкций кладем переход на код вируса.

Анатомия детектора

Вдруг, откуда ни возьмись, появляется рыцарь на белом компе, в левой руке у него отладчик, а в правой – дизассемблер, программист антивирусной компании. Откуда он там взялся? Вы, конечно, догадались. С большой долей вероятности, он появился там из «смежной области». Антивирусная область в плане программирования весьма уважаема теми, кто в теме, ибо возиться этим ребятам приходится с весьма изощренными алгоритмами, причем в довольно стеснённых условиях. Сами посудите: у вас на входе сотня тысяч экземпляров всякой заразы и исполняемый файл, работать вы должны практически в реальном времени, а цена ошибки весьма высока.

Для антивируса, как и для любого конечного автомата, принимающего бинарное решение «да/нет» (инфицирован/здоров), существует два типа ошибок – false positive и false negative (ошибочно признал файл заразным, ошибочно пропустил зараженный). Понятно, что общее число ошибок надо снижать в любом раскладе, но false negative для антивируса куда более неприятна, чем false positive. «После скачивания торрента, перед установкой игры отключите антивирус» — знакомо? Это и есть «false positive» – crack.exe, записывающий что-то в исполняемый .exe файл для достаточно умного эвристического анализатора (см. ниже), выглядит как вирус. Как говорится: «лучше перебдеть, чем недобдеть».

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

Итак (рассматриваем классические вирусы), на входе имеем исполняемый файл и один из сотни тысяч потенциальных вирусов в нем. Давайте детектировать. Пусть это кусок исполняемого кода вируса:

Сразу хочется просто взять пачку опкодов (68 2F 2F 73 68 68 2F 62 69 6E 8B DC B0 11 CD 80) и поискать эту байтовую строку в файле. Если нашли – попался, гад. Но, увы, оказывается эта же пачка байт встречается и в других файлах (ну мало ли кто вызывает командный интерпретатор), да еще и таких строк для поиска «стотыщ», если искать каждую, то никакая оптимизация не поможет. Единственный, быстрый и правильный способ проверить наличие такой строки в файле – это проверить ее существование по ФИКСИРОВАННОМУ смещению. Откуда его взять?

  • вирус внедряется в padding между заголовком и началом первой секции. В этом случае можно проверить существование этой байт-строки по смещению
    «длина заголовка» + N (где N – число байт от начала вируса до байт-строки)
  • вирус лежит в новой, отдельной секции. В этом случаем можно проверить существование байт-строки от начала всех секций с кодом
  • вирус внедрился в padding между концом кода и концом кодовой секции. Можно использовать отрицательное смещение от конца секции, типа «конец кодовой секции» — М (где M — число байт от конца байт-строки до конца кода вируса) – «длина байт-строки»
  • вирус записал свои инструкции прямо поверх инструкций в Entry Point. В этом случае ищем байт строку просто по смещению «Entry Point» + N(где N – число байт от начала вируса до байт-строки)
  • вирус записал в Entry Point JMP на свое тело. В этом случае надо сначала вычислить куда смотрит этот JMP, а потом искать байт-строку по смещению «адрес перехода JMP» + N(где N – число байт от начала вируса до байт-строки)
  1. ID вируса
  2. флаги, указывающие откуда считать смещение (от EP, от конца заголовка, от конца первой секции, от начала всех секций, от адреса перехода инструкции JMP в EP и т.п.)
  3. смещение (offset)
  4. длина сигнатуры (Lsig)
  5. CRC32 сигнатуры (CRCsig)

Ура, вот наш первый антивирус. Он достаточно крут, так как при помощи достаточно полной базы сигнатур, нормально подобранных флагов и хорошей оптимизации этот детектор способен очень быстро ловить 95% всяких зараз (подавляющее большинство современного malware это просто исполняемые файлы, без всякой способности к мутации). Далее начинается игра «кто быстрее обновит базы сигнатур» и «кому раньше пришлют новый экземпляр какой-нибудь гадости».

Сбор и каталогизация этой «гадости» является задачей весьма нетривиальной, но совершенно необходимой для качественного тестирования детектора. Сбор эталонной базы исполняемых файлов задача непростая: попробуйте найти все экземпляры зараженных файлов (для сложных случаев в нескольких экземплярах), каталогизировать их, перемешать с «чистыми» файлами и регулярно гонять по ним детектор с целью выявления ошибок детектирования. Такая база собирается годами, и является очень ценным активом антивирусных компаний. Возможно, я ошибаюсь, и её реально достать (всякие сервисы online-проверок на вирусы вполне в состоянии предоставить некоторый её аналог), но, когда я занимался этим вопросом, ничего похожего достать было нельзя (по крайней мере, под Linux).

Эвристический анализатор

  • некорректный (испорченный вирусом, но работоспособный) заголовок файла
  • JMP прямо в точке входа
  • «rwx» на секции кода

Межвидовое взаимодействие и эволюция

  • сокрытие кода самого вируса;
  • сокрытие его точки входа.

Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

Гораздо более подробно некоторые алгоритмы таких движков и детектора мы посмотрим во второй статье, которую я планирую написать в ближайшее время.

Параллельно с развитием вирусных движков и противостоящих им детекторов активно развивались коммерческие защиты исполняемых файлов. Появилось огромное количество небольших коммерческих программ, и разработчикам нужны были движки, позволяющие взять EXE-файл и «завернуть» его в некоторый «конверт», который умеет защищенным образом генерировать валидный серийный номер. А кто у нас умеет скрывать исполняемый код, и внедрять его в исполняемые файлы без потери работоспособности? Правильно, те самые разработчики из «смежной области». Поэтому написание хорошего полиморфного вируса и навесной защиты исполняемого файла – это очень похожие задачи, с использованием одних и тех же алгоритмов и инструментов. Так же схожи и процесс анализа вирусов и создания сигнатур и взлом коммерческого ПО. В обоих случаях надо добраться до истинного кода и либо создать сигнатуру, либо достать из него алгоритм генерации серийного номера.

В интернетах существуют несколько страниц по теме «классификация компьютерных вирусов». Но мы же договорились, вирус – это то, что умеет само себя воспроизводить в системе, и чему необходим файл-носитель. Поэтому всякие трояны-руткиты-malware – это не вирусы, а тип payload-кода, который вирус может таскать на себе. Для описываемых в статье технологий классификация компьютерных вирусов может быть только одна: полиморфные и неполиморфные вирусы. То есть меняющиеся от поколения к поколению, либо нет.

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

зачем нужны компьютерные вирусы

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

Есть еще теория, что некоторые вирусы пишутся разработчиками антивирусов. В принципе гепотиза смысла не лишена, но немного параноидальна.

А, да, есть вирусы, которые выуживают деньги (типа, отключи меня за смс) или перекидывающие пользователя на определенную страницу в интернете (например, порно-сайт).. . Но в основном, вирусы — это баловство.
Другие ответы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *