Клиент, скорее всего, имеет несколько уровней парсера: есть парсер, который обрабатывает канал, и, вероятно, набор других парсеров, которые обрабатывают сообщения, передаваемые по этому каналу. Каждый из них подвержен нападению.
Системы обмена сообщениями
Клиенты обмена сообщениями получают сообщения от одного или нескольких серверов, но эти серверы собирают сообщения от кого угодно. Доставленное сообщение может атаковать клиента или представлять собой атаку с целью кражи учетных данных. Эти классические фишинговые сообщения охватываются цепочкой «Получение или использование учетных данных». Сообщение также может содержать клиентскую атаку, включая URL‐адреса или вредоносные вложения, переходящие в это дерево.
Термин «фишинг» превратился из «электронного письма, предназначенного для кражи ваших учетных данных» во «вредоносное сообщение любого типа». Многие из этих терминов были созданы отделами маркетинга и сосредоточены на небольших изменениях в механизмах доставки, таких как вишинг (vishing) для голосового звонка или смишинг (smishing) с помощью текстовых сообщений (sms).
Управление этими серверами обмена сообщениями может быть различным. Некоторые из них, например, корпоративные почтовые серверы, находятся под вашим контролем; другие, такие как Gmail, управляются третьей стороной. Некоторые поддерживают открытые протоколы, такие как протокол электронной почты; другие используют проприетарные форматы. Но во всех этих случаях они в широком смысле принимают сообщения для доставки.
Когда они действуют как серверы, то уязвимы как серверы, но здесь мы сосредоточимся на том, как сообщения, которые они передают клиентам, угрожают этим клиентам.
На рисунке 9.3 показана цепочка атаки для сообщений. Все начинается с разведки, сбора адресов, а затем с вооружения. Первый контакт со злоумышленником происходит, когда он присылает сообщение. Этот шаг может привести к атаке на клиент, например веб-браузер, или инициировать кражу учетных данных, каждая из которых имеет свои собственные цепочки атак. Обмен сообщениями также может продолжаться в цепочке атаки против клиента обмена сообщениями с эксплойтом или файлом (см. раздел «Цепочка загруженного файла» или «Цепочка „Пожалуйста, установите код“»).
Рис. 9.3. Цепочка атаки для сообщений
Сетевые приемники на настольном компьютере
Вероятно, на вашем настольном компьютере есть набор сетевых приемников. Компьютер, на котором я набираю этот текст, имеет примерно пятнадцать приемников: для печати, SSH, bonjour и плагин виртуальной камеры. Несмотря на то что система представляет собой настольный компьютер, эти приемники уязвимы. (Как оказалось, примерно половина из них ограничивается прослушиванием закольцованных соединений, то есть соединений из локальной системы.)
Цепочка атаки на сервер применима к любому из этих пятнадцати приемников или к любому другому приемнику, имеющемуся на данном настольном компьютере. Той половине, которая ограничивает свои соединения закольцованными, просто требуется другая цепочка. Возможно, это «взлом учетной записи с низкими полномочиями на целевом компьютере», или подделка серверного запроса, или атака на удаленное включение файлов, которая превратит его в прокси-сервер.
Атака на локальный пакет ПО
Давным-давно многие локальные программные пакеты не содержали сетевого кода. Вспомните о традиционных версиях Microsoft Office или какой-нибудь игры. Если они обрабатывали файлы, то те были локальными или полученными через сетевые протоколы файловых систем (SMB, NFS). Многие из этих программ не ожидали, что будут атакованы, поэтому они являются уязвимыми звеньями в цепочках атак на клиента или на сообщения.
1. Разведка. Найдите уязвимость в локальном пакете программного обеспечения.
2. Вооружение. Cоздайте надежный эксплойт из нижеперечисленных:
а) атаки на парсеры;
б) атаки, использующие функции (макросы и т. д.);
в) атаки, использующие встроенные функции (сценарии оболочки).
3. Доставка. Отправьте эксплойт таким образом, чтобы достичь цели.
Далее применение эксплойта, установка, управление и контроль, а также целевое действие происходят аналогично цепочкам, которые вы видели.
Шаг «использовать встроенные функции» означает использование существующих программ, предназначенных для выполнения другого кода, такого как оболочки, интерпретаторы или системы сборки. Поскольку эта локальная цепочка программного обеспечения короче, я не даю наглядное представление.
Цепочка загруженного файла
Опасность, исходящая от файла, осознается, когда файл вызывается каким-либо образом. Цепочек несколько. Каждая из них начинается с шага «доставить файл». Мы рассмотрим цепочку для исполняемых файлов, охватывающую как скрипты, так и скомпилированные двоичные файлы, а затем, после обсуждения, цепочку для библиотек.
Цепочка ниже – в случае, если файл является исполняемым.
1. Эксплойт. Убедите пользователя открыть его.
2. Уклонитесь от защиты (опционально):
а) притворитесь, что файл является документом, с помощью иконки и имени, возможно, используя сокрытие расширения;
б) сожмите файл.
3. Управление и контроль. Файл может состоять только из локальных инструкций или обращаться к серверу за инструкциями.
4. Совершите целевое действие с полномочиями, предоставленными программе.
Из соображений производительности многие антивирусные программы пропускали сжатые файлы. Сегодня, чтобы ослабить защиту, сжатые файлы также шифруются и отправляются с паролем. Когда файл является библиотекой, на которую можно ссылаться, вопросы упорядочения ссылок становятся актуальными. (Они обсуждались в главе 2 «Вмешательство и целостность».)
Шаг «Уклонение от защиты» – это отклонение от семиступенчатой цепочки, которую мы видели во введении. Эта цепочка (разведка, вооружение, доставка, применение эксплойта, установка, управление и контроль, целевое действие) является полезной моделью, и, как и все модели, она несовершенна. Добавление таких шагов, как обход защиты, является такой же нормальной частью работы аналитика, как и удаление шагов (как мы сделали для внедрения SQL-кода).
Добавление абстрактных шагов, таких как уклонение от защиты, позволяет нам задаться вопросом: «Есть ли другой способ, которым злоумышленник может это сделать?» Часто инженеры, которые хорошо знают свои системы, могут использовать эти знания для поиска подобных вариантов способами, недоступными экспертам по безопасности с менее специальными системными знаниями.
Цепочка типа «Пожалуйста, установите»
В каком-то смысле самый простой способ установить код – побудить авторизованного пользователя сделать это за вас, сказав ему, что в коде есть какая-то полезная функция. Код может заявлять одну функцию, а делать что-то другое, или же он может действительно выполнять заявленную цель и тайно делать больше. Их иногда называют троянскими конями.
Злоумышленники проникали в компании-разработчики программного обеспечения, чтобы установить вредоносный код, который будет доставлен клиентам этих компаний. В качестве примера можно привести налоговое программное обеспечение M.E Doc, использованное в печально известной атаке NotPetya и SolarWinds, все они поставили измененный код своим клиентам [GAO, 2021; Goodin, 2017]. Злоумышленники также захватывали репозитории с открытым исходным кодом. Разработчики проектов как-то даже решили, что устали от того, что компании используют их работу безвозмездно, и вставили код для атаки [Sharma, 2022].
Существует множество цепочек, которые включают в себя шаг «Злоумышленник доставляет программное обеспечение жертве». Шаги, которые приводят к доставке, сильно различаются, как обсуждалось ранее. В результате программное обеспечение злоумышленника теперь имеет полномочия учетной записи, которая его вызвала. Это относится к традиционным настольным компьютерам и серверам, а также к мобильным устройствам, но в меньшей степени.
Возможно, злоумышленникам не придется уговаривать вас установить код. Кода и полномочий, которыми вы обладаете, может быть достаточно для них, и они могут просто попросить вас использовать их от их имени. Такие вещи часто называют социальной инженерией, и обычно они включают в себя какой-то повод, по которому предпринять эти шаги – это якобы нормально. Создание систем, защищающих от социальной инженерии, является сложной задачей. В моей книге «Моделирование угроз» есть глава, посвященная пригодной для этого безопасности, и я был техническим редактором книги You Can Stop Stupid («Вы можете остановить глупость») [Winkler, 2020], в которой рассказывается о процессах, ведущих к этой цели. (Большинство книг на эту тему сосредоточены на том, как манипулировать людьми, а не на том, как защититься от угрозы.)
Достижение целей через выполнение кода
Многие цепочки атак сходятся в точке, где злоумышленник получает доступ, достаточный для запуска произвольного кода. Маршруты, по которым сюда можно добраться, различны, как и способы отправки команд. Возможно, злоумышленник авторизуется через SSH или RDP и выполняет команды в интерактивном режиме. Возможно, его код обращается к командно-контрольному серверу. Иногда этот код является широко распространенным вредоносным ПО, иногда разработан для некоторой конкретной атаки.
Многие из цепочек, которые мы наблюдали до сих пор, сходятся на традиционных настольных компьютерах. У них есть клиенты, которые получают сообщения и выполняют другую работу, а также передают сообщения парсерам огромной сложности и разнообразия, включая воспроизведение видео, отображение и редактирование документов в различных форматах и многое другое. У них часто есть слушающие демоны, и их код часто плохо изолирован и обладает высокими полномочиями. Ими часто управляют перегруженные работой любители. Так и подмывает сказать, что если бы нужно было спроек