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

Характеристики отказов в обслуживании

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

Заказной или типовой

Механизмы атаки, такие как zip-бомба или DDoS-атака, не требуют особых знаний о цели. Они распространены, потому что работают. Когда они не работают или недостаточно разрушительны, преданные своему делу злоумышленники разрабатывают индивидуальные атаки специально для вас. Умному злоумышленнику нужно заткнуть только одно узкое место, чтобы свести на нет всю работу. Это узкое место может быть в компонентах от ваших поставщиков или в вашем индивидуальном коде.

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

Злоумышленники могут нацелиться на непопадание в кэш или операции объединения (join) в базах данных. Они могут быть эмпирическими («Это кажется медленным, можем ли мы сделать это медленнее?») или основанными на теории («Держу пари, что, если мы объединим три случайных словарных слова, никто не сделает такой поисковый запрос»).

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

Усиление

Некоторые атаки относительно симметричны: они используют ресурсы злоумышленника с той же скоростью, что и ваши. Другие, такие как zip-бомба, используют усилитель той или иной формы, тогда проблема усложняется. Коэффициент усиления – это отношение потребляемых ресурсов, и чем выше коэффициент, тем больше ценность для злоумышленников. Коэффициенты усиления находятся в диапазоне от 10x до 50x, но могут достигать 51 000x [CERT, 2019].

Сетевые протоколы все еще обладают существенным усилением, а раньше все было намного хуже. В 80-х годах интернет был совсем другим, и во многих Unix-системах существовала служба chargen, которая просто посылала поток символов. Это полезный инструмент отладки, если ваши сети не отличаются высокой устойчивостью. Было забавно отправить пакет со словами «Эй, ты можешь послать много символов?». Будет веселее, если вы отправите его с поддельным широковещательным адресом источника, чтобы каждая машина в сети внезапно получила поток символов. (И то и другое забавно с точки зрения нападающего.) Существует множество современных аналогов. Некоторые из них поступают с серверов, таких как DNS, которые предназначены для обслуживания всех вызывающих абонентов. Другие – это такие системы, как memcache, которые предназначены для выдачи результатов как можно быстрее. Использование UDP, чтобы избежать затрат на установление соединения, и отсутствие аутентификации – отличные свойства, если скорость – это все, что имеет значение. И если нет контроля над тем, кто может вызывать систему, то появляется возможность ее использования для отправки данных в любую систему, чьи UDP-пакеты вы можете подделать.

Кэши по своей природе предназначены для быстрой отправки большого количества данных. Это отлично подходит для злоумышленников, а кэши могут усилить атаки в десятки тысяч раз. То есть злоумышленник отправляет несколько байтов запроса, а система возвращает десятки тысяч байтов.

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

Аутентификация и DoS

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

Эфемерность или персистентность

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

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

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

Прямой или экстренный

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

Те, кто работал со сложными системами, знают, что они демонстрируют внезапно проявляющееся и непредвиденное поведение под нагрузкой, включая каскадное нарастание и раздувание, которые еще и накапливаются. Если некоторая система отправляет много сообщений, потому что не может добраться до какого-либо сервиса, начинают поглощаться ресурсы, особенно сети и памяти. Если многие системы не могут получить доступ к этой службе, их попытки входа и повторного подключения могут усугубить проблему. Это не просто теория. В декабре 2021 года Amazon AWS East-1 продемонстрировал именно такое поведение. И это привело к краху не только AWS, но и огромного количества сервисов, которые от него зависели [Amazon, 2021].

Отказ в обслуживании с конкретными технологиями

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

Услуги аутентификации

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

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

Облако

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