Защита систем. Чему «Звездные войны» учат инженера ПО — страница 55 из 68

. Они тесно связаны: если вы можете войти на Unix-сервер как shostack, вы можете запускать код от моего имени. Но если вы можете войти в мой банк как shostack, вы можете делать что-то как я, но мой банк не позволяет мне загружать код и запускать его. (В этом месте злоумышленник победил аутентификацию или авторизацию и таким образом может подделать или расширить свои полномочия.)

Цепочки атак на сервер

Когда я говорю «сервер», я имею в виду систему, в которой в основном работают демоны или сетевые приемники и которая имеет ограниченное интерактивное использование. Аппаратное обеспечение не имеет значения – это может быть Raspberry Pi, дорогая стоечная система или виртуальная система в чужом дата-центре. Если она используется также в качестве локального настольного компьютера, все атаки, которые я упоминал, рассказывая о цепочках атак на настольные компьютеры, актуальны и для нее.

Цепь сетевых приемников

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

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

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

Цепочка атаки на сетевой приемник выполняет перечисленные ниже действия.

1. Разведка. Найдите сервер, который слушает, а также доступную информацию о программном обеспечении, которое он использует.

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

3. Доставка. Отправка эксплойта.

4. Применение эсплойта. Если эксплойт удался, он получает полномочия, часто из-за проблемы с синтаксическим анализатором.

5. Установка. Программное обеспечение устанавливается в интересах злоумышленника.

6. Управление и контроль. Программное обеспечение получает команды, такие как «поиск номеров кредитных карт» или «поиск криптографических ключей».

7. Целевое действие. Злоумышленник использует свои недавно украденные полномочия для достижения целей.

На рисунке 9.1 показаны шаги 1–4 цепочки атаки на сетевой приемник. Шаги 5–7 являются общими для других цепочек и поэтому не показаны на этой схеме. (Далее в этой главе вы увидите, как диаграммы сочетаются друг с другом, и эти общие части показаны с различными способами достижения их злоумышленниками.)

Цепочка атаки для внедрения SQL-кода (пример) Атака с внедрением SQL-кода имеет несколько иную цепочку атаки, чем обычная серверная модель, пропускающая этапы установки, управления и контроля.


Рис. 9.1. Цепь атак на демон сетевого приемника (сервер)


Этап разведки может быть незаметным. Найдите веб-сайт, который, вероятно, использует базу данных, и исследуйте его, отправляя запросы, которые, скорее всего, расскажут что-то о SQL-коде. Вставка ‘ OR ‘1’=’1 в веб‐формы стала классической формой разведки из-за того, что выражение всегда истинно. Это не дает злоумышленнику того, чего он хочет, но показывает, что дальнейшее расследование, вероятно, будет плодотворным.

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

Этап применения эксплойта заключается в том, чтобы использовать оружие против реальной цели. Целью может быть использование или продажа извлеченных вами данных либо что-то еще, что злоумышленник хочет сделать.

Цепочки атак для настольных компьютеров

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

Эти пять цепочек атак приводят к компрометации настольного компьютера. В этот момент злоумышленник получает доступ к вашим полномочиям. Он может запускать код от вашего имени, сосредоточившись на своей цели. Как выглядят цепочки, показано ниже.

1. Через клиент, такой как веб-браузер.

2. Через слушающий демон.

3. Через локально установленный код, уже присутствующий.

4. Установка нового кода.

5. Атаки через сообщения.

Первые четыре (клиенты, серверы и уже установленный или новый код) относительно просты. Последняя – атаки, осуществляемые сообщениями, – является мостом к атакам на клиентов или краже учетных данных.

Браузеры и другие клиентские цепи

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

1. Разведка (recon): найдите сервер, к которому, по вашему мнению, может подключиться ваша цель. (Слово Reconnaissance часто сокращается до recon, потому что кто может правильно написать французские слова?)

2. Вооружение:

а) скомпрометировать сервер (см. «Цепочки атак на сервер»);

б) создать оружие для доставки к конкретным целям.

3. Доставка: используйте сервер для доставки оружия.

4. Применение эксплойта:

а) для браузеров это оружие может быть нацелено непосредственно на клиентское программное обеспечение, на плагин, вызвать целую дополнительную программу и ее синтаксический анализатор (например, Word или PDF) или попытаться загрузить файл, а затем запустить его;

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

5. Атака через скачанный файл. (См. отдельную цепочку.)

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

На рисунке 9.2. показаны ключевые звенья этой цепи.

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

Некоторые клиенты подключаются к очень небольшому количеству серверов: службы обмена сообщениями, такие как iMessage или Facebook Messenger, подключаются только к серверам Apple или Facebook* (соответственно). Почтовый клиент подключается к нескольким серверам, каждый из которых выбирается пользователем на этапе настройки. При этом клиент подвергается риску, если один из этих серверов решит атаковать его. А еще есть веб-браузеры.


Рис. 9.2. Цепочка атаки клиентского программного обеспечения (выдержка)


Обычно мы думаем, что веб-браузеры следуют инструкциям человека, использующего их для посещения веб-сайтов. Многие протоколы имеют прослойки перенаправления на клиентском уровне, и это подставляет клиента под дополнительные атаки. Например, когда я направляю свой браузер на https://nytimes.com, в дополнение к контенту New York Times есть ссылки на nyt.qualtrics.com, www.nytco.com, www.tbrandstudio.com, www.googletagmanager.com и, возможно, другие. Браузеры охотно переходят по таким ссылкам из соображений удобства использования. Таким образом, браузер подвергается атакам с серверов, о которых вы можете не знать.

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