Дмитрий Артимович – Искусство цифровой самозащиты (страница 5)
На определение авторства ушло время. Есть версия, согласно которой отец 23-летнего парня рекомендовал ему самому рассказать о себе властям. Походит на правду, учитывая пост Морриса-старшего и его непосредственную связь с правительством и нацбезопасностью.
Механизмы распространения
Все механизмы («векторы атаки») распространения червей делятся на две большие группы:
• Использование уязвимостей и ошибок администрирования в программном обеспечении, установленном на компьютере. Червь Морриса использовал известные на тот момент уязвимости в программном обеспечении – а именно в почтовом сервере sendmail, сервисе finger – и подбирал пароль по словарю. Такие черви способны распространяться автономно, выбирая и атакуя компьютеры в полностью автоматическом режиме.
• Средства так называемой социальной инженерии провоцируют запуск вредоносной программы самим пользователем. Чтобы убедить пользователя в том, что файл безопасен, могут подключаться недостатки пользовательского интерфейса программы – например, червь VBS.LoveLetter (рассмотренный выше вирус ILOVEYOU) использовал тот факт, что Outlook Express скрывает расширения файлов. Данный метод широко применяется в спам-рассылках, социальных сетях и т. д.
Иногда встречаются черви с целым набором различных векторов распространения, стратегий выбора жертвы, и даже эксплойтов под различные операционные системы.
Структура
Черви могут состоять из различных частей.
Часто выделяют так называемые резидентные черви, которые могут инфицировать работающую программу и находиться в ОЗУ, при этом не затрагивая жесткие диски. От них можно избавиться перезапуском компьютера (и, соответственно, сбросом ОЗУ). Такие черви состоят в основном из «инфекционной» части: эксплойта (шелл-кода) и небольшой полезной нагрузки (самого тела червя), которая размещается целиком в ОЗУ. Специфика заключается в том, что они не загружаются через загрузчик, как все обычные исполняемые файлы, а значит, могут рассчитывать только на те динамические библиотеки, которые уже были загружены в память другими программами.
Также существуют черви, которые после успешного инфицирования памяти сохраняют код на жестком диске и принимают меры для последующего запуска этого кода (например, путем прописывания соответствующих ключей в реестре Windows). От таких червей можно избавиться только при помощи антивирусного программного обеспечения или подобных инструментов. Зачастую инфекционная часть таких червей (эксплойт, шелл-код) содержит небольшую полезную нагрузку, которая загружается в ОЗУ и может «догрузить» по сети непосредственно само тело червя в виде отдельного файла. Загружаемое таким способом тело червя (обычно отдельный исполняемый файл) теперь отвечает за дальнейшее сканирование и распространение уже с инфицированной системы по локальной сети, а также может содержать более серьезную, полноценную полезную нагрузку, целью которой может быть, например, нанесение какого-либо вреда (к примеру, DoS-атаки).
Большинство почтовых червей распространяются как один файл. Им не нужна отдельная «инфекционная» часть, так как обычно пользователь-жертва при помощи почтового клиента или интернет-браузера добровольно скачивает и запускает червя целиком.
Эксплойты
Программы, будь то игры, вебсайты или приложения под смартфоны, пишут программисты. А программист, насколько бы хорошим он ни был, прежде всего человек. Как сказал Цицерон, каждому человеку свойственно ошибаться… Вот и программисты при разработке делают ошибки в коде. Иногда из-за таких ошибок программа некорректно себя ведет или просто падает, а иногда ошибка (далее будем называть ее уязвимостью) позволяет выполнить некий привилегированный набор команд.
Например, червь Морриса эксплуатировал переполнение буфера утилиты finger, изначально предназначенной для удаленного определения времени подключения пользователя к рабочей станции, а написан он был аж в 1988-м. 34 года спустя переполнение буфера – до сих пор одна из самых распространенных уязвимостей. Хотя описание работы этой атаки выходит за рамки данной книги и скорее относится уже к специализированной технической литературе, попробую объяснить кратко и понятно для человека, далекого от программирования.
Программы работают с разными порциями данных, под которые в оперативной памяти выделяются участки, называемые буферами. Эти данные могут приходить из сети, от ввода пользователя с клавиатуры, с диска и т. д. Уязвимость появляется тогда, когда разработчик забывает проверить размер полученных данных, т. е. если данных получено больше, чем размер буфера. При грамотном использовании атаки переполнение позволяет вставить в программу вредоносный код, который, например, может скачать с удаленного компьютера вирус и запустить на вашей машине.
Как всё это использовать злоумышленнику в реальности? В первую очередь нас интересуют уязвимости в браузерах. Да, браузеры пишут тоже люди, и ошибок в них хватает. А для использования этих ошибок и появляются эксплойты.
Эксплойты (exploits) – подвид вредоносных программ. Термин связан с английским глаголом to exploit, означающим «эксплуатировать, применять в своих интересах».
Для пользователя основную опасность, как я уже писал выше, представляют эксплойты под различные браузеры. Такой набор эксплойтов называют связкой.
Как работает заражение компьютеров при просмотре сайтов в интернете? Злоумышленник взламывает чужие сайты (в основном также из-за наличия уязвимостей) и устанавливает на них свой вредоносный код – связку эксплойтов. При каждом посещении сайта вредоносный код активируется, подбирает к конкретному браузеру и операционной системе нужный эксплойт – код, который использует конкретную уязвимость конкретного браузера под конкретную операционную систему. В случае успешного срабатывания эксплойта в ваш браузер или набор команд выполняется внедренный злоумышленникам код. Обычно это команда скачать и запустить трояна-загрузчика. Троян-загрузчик позже может загружать к вам на систему произвольные исполняемые файлы. На черном рынке такая успешная загрузка и запуск файла называется установкoй (от английского install).
На практике всё чуточку сложнее. Конечно же, на каждый взломанный сайт не копируют связку эксплойтов. Обычно сама связка располагается на отдельном хостинге[28]. А на взломанных сайтах просто ставят фреймы со ссылками на связку. Такой вариант куда проще и элегантнее. Отсюда вытекает и другое следствие: злоумышленники могут просто покупать фреймовый трафик[29]. Т. е. внутри основного HTML[30] сайта вставляется очень-очень маленькое окно фрейма размером 1 на 1 пиксель, в котором загружается вредоносный URL[31] на связку эксплойтов. Очень часто такой трафик продают сайты «для взрослых» – учтите это, если захотите посетить подобные ресурсы.
Тут мы плавно перешли к разделению труда на черном рынке киберкриминала. Есть некий образ хакера, навязанный нам массмедиа и Голливудом. Некий криминальный гений, способный сломать любую защиту и украсть что угодно у кого угодно. Обычно же люди, кoтopые пишут связки эксплойтов, банковскиe трояны, продают загрузки или трафик, – это разные персонажи.
Пишут эксплойты и трояны, безусловно, хакеры. Для создания такого вредоносного кода нужно хорошо разбираться в программировании и конкретно врубаться в то, как функционирует компьютер на низком уровне. Слово Hacker как раз и произошло от английского глагола to hack – врубаться.
Используют связки эксплойтов люди, обычно далекие от программирования, – загрузчики (так их называют на теневых форумах). И пытаются они выжать из вашего ПК максимум. Поэтому я и написал, что эксплойт устанавливает у вас на машине трояна-загрузчика. После чего загрузки (установки другого вредоносного ПО) продаются во много рук. Так что не удивляйтесь, что ваш компьютер начал слать спам, ддосить, да еще и вымогать у вас деньги одновременно. Скорее всего, это три разных трояна.
Эксплойты бывают не только для браузеров, а еще для:
• операционных систем (например, для обхода UAC в Windows);
• прикладного программного обеспечения (например, вирус ILoveYou эксплуатировал ошибки безопасности в почтовом клиенте Microsoft Outlook);
• веб-сервисов (например, уязвимости в популярном движке создания блогов WordPress);
• аппаратных компонентов.
Антивирусы
I’m the Creeper: catch me if you can.
«Я Creeper: поймай меня, если сможешь». 1971 год, эта фраза стала появляться перед глазами изумленных пользователей компьютеров, входящих в сеть ARPANET[32]. Что же означает эта фраза?
Это была визитная карточка Creeper – первого компьютерного вируса в истории, разработанного Бобом Томасом, программистом из BBN Technologies. Хотя сообщение и смущало, но намерения Томаса были безвредными. Его цель состояла в том, чтобы создать программу, которая могла бы сама перемещаться между компьютерами. И он этого добился.
После заражения компьютера Creeper выводил свое сообщение на экране или печатал на принтере. Не успев закончить печать, переходил к следующему компьютеру в сети, исчезая с предыдущего.