Эксплойты
Программы, будь то игры, вебсайты или приложения под смартфоны, пишут программисты. А программист, насколько бы хорошим он ни был, прежде всего человек. Как сказал Цицерон, каждому человеку свойственно ошибаться… Вот и программисты при разработке делают ошибки в коде. Иногда из-за таких ошибок программа некорректно себя ведет или просто падает, а иногда ошибка (далее будем называть ее уязвимостью) позволяет выполнить некий привилегированный набор команд.
Например, червь Морриса эксплуатировал переполнение буфера утилиты finger, изначально предназначенной для удаленного определения времени подключения пользователя к рабочей станции, а написан он был аж в 1988-м. 34 года спустя переполнение буфера – до сих пор одна из самых распространенных уязвимостей. Хотя описание работы этой атаки выходит за рамки данной книги и скорее относится уже к специализированной технической литературе, попробую объяснить кратко и понятно для человека, далекого от программирования.
Программы работают с разными порциями данных, под которые в оперативной памяти выделяются участки, называемые буферами. Эти данные могут приходить из сети, от ввода пользователя с клавиатуры, с диска и т. д. Уязвимость появляется тогда, когда разработчик забывает проверить размер полученных данных, т. е. если данных получено больше, чем размер буфера. При грамотном использовании атаки переполнение позволяет вставить в программу вредоносный код, который, например, может скачать с удаленного компьютера вирус и запустить на вашей машине.
Как всё это использовать злоумышленнику в реальности? В первую очередь нас интересуют уязвимости в браузерах. Да, браузеры пишут тоже люди, и ошибок в них хватает. А для использования этих ошибок и появляются эксплойты.
Эксплойты (exploits) – подвид вредоносных программ. Термин связан с английским глаголом to exploit, означающим «эксплуатировать, применять в своих интересах».
Для пользователя основную опасность, как я уже писал выше, представляют эксплойты под различные браузеры. Такой набор эксплойтов называют связкой.
Как работает заражение компьютеров при просмотре сайтов в интернете? Злоумышленник взламывает чужие сайты (в основном также из-за наличия уязвимостей) и устанавливает на них свой вредоносный код – связку эксплойтов. При каждом посещении сайта вредоносный код активируется, подбирает к конкретному браузеру и операционной системе нужный эксплойт – код, который использует конкретную уязвимость конкретного браузера под конкретную операционную систему. В случае успешного срабатывания эксплойта в ваш браузер или набор команд выполняется внедренный злоумышленникам код. Обычно это команда скачать и запустить трояна-загрузчика. Троян-загрузчик позже может загружать к вам на систему произвольные исполняемые файлы. На черном рынке такая успешная загрузка и запуск файла называется установкoй (от английского install).
На практике всё чуточку сложнее. Конечно же, на каждый взломанный сайт не копируют связку эксплойтов. Обычно сама связка располагается на отдельном хостинге[28]. А на взломанных сайтах просто ставят фреймы со ссылками на связку. Такой вариант куда проще и элегантнее. Отсюда вытекает и другое следствие: злоумышленники могут просто покупать фреймовый трафик[29]. Т. е. внутри основного HTML[30] сайта вставляется очень-очень маленькое окно фрейма размером 1 на 1 пиксель, в котором загружается вредоносный URL[31] на связку эксплойтов. Очень часто такой трафик продают сайты «для взрослых» – учтите это, если захотите посетить подобные ресурсы.
Тут мы плавно перешли к разделению труда на черном рынке киберкриминала. Есть некий образ хакера, навязанный нам массмедиа и Голливудом. Некий криминальный гений, способный сломать любую защиту и украсть что угодно у кого угодно. Обычно же люди, кoтopые пишут связки эксплойтов, банковскиe трояны, продают загрузки или трафик, – это разные персонажи.
Пишут эксплойты и трояны, безусловно, хакеры. Для создания такого вредоносного кода нужно хорошо разбираться в программировании и конкретно врубаться в то, как функционирует компьютер на низком уровне. Слово Hacker как раз и произошло от английского глагола to hack – врубаться.