ычайными ситуациями и реагирования на чрезвычайные ситуации может показаться дорогостоящим, если у вас ее нет. Считается, что Google поддерживает отдельную сеть IRC-серверов, предназначенных для того, чтобы быть устойчивыми, когда все остальное не работает.
Сервисы управления бюджетом являются обязательными для эластичных облачных сервисов. Они могут быть явными, и для небольших облачных сервисов может быть разумно просто отреагировать и умолять о пощаде, если ваш счет подскочит в 10 или 100 раз за месяц.
Как корректная деградация, так и тестирование устойчивости рассматриваются во многих главах превосходной книги Building Secure and Reliable Systems («Построение безопасных и надежных систем») [O’Reilly, 2020].
Заключение
Создание второй «Звезды смерти» как полностью функциональной боевой станции является необычным ответом на тщательные и постоянные атаки типа «отказ в обслуживании» на ее предшественницу. Но корректное накопление функций и свойств для противостояния ожидаемым угрозам может быть столь же важным, как и корректная деградация. Прежде чем перестать хвалить Империю, я хотел бы воспользоваться моментом, чтобы сказать: надеюсь, вы сможете спланировать устойчивость без таких огромных потерь жизней и ресурсов, а также надеюсь, вы не работаете над чем-то, что разрушает планету.
У всех систем есть ограничения, и все ресурсы ограниченны. Проектирование и тестирование означают, что даже если злоумышленники проанализировали вашу защиту и обнаружили слабые места, вы можете сохранить доступность.
6Расширение полномочий и изоляция
«Это не те дроиды, что вы ищете», – говорит Бен Кеноби штурмовикам, которые только что его остановили. Почему они его слушаются? На самом деле, это первый раз, когда нам показали применение джедаями контроля над разумом, потому что, конечно же, это именно те дроиды, которых ищут штурмовики. Кеноби не обладает властью убедить штурмовиков позволить им двигаться дальше. Он использует Силу, чтобы расширить свои полномочия и достичь цели.
В приквелах Кеноби – генерал, но в результате переворота и последующего приказа о ликвидации джедаев за военные преступления был лишен этого звания. Фанаты «Звездных войн» могут пребывать в убеждении, что Кеноби все еще генерал. Так что, с натяжкой, он мог бы отдавать приказы штурмовикам. Несмотря на это, он не использует власть как генерал, а применяет свои джедайские способности. Так что… это не тот аргумент, который вы ищете.
Буква Е в аббревиатуре STRIDE означает «расширение полномочий» (expansion of authority). Исторически оно также означало «повышение привилегий» или «эскалация привилегий». Все версии с привилегиями являются синонимами. Они также более известны, чем определение «расширение полномочий». На протяжении большей части этой главы мы будем рассматривать власть и полномочия в широком смысле и уточним, как все они соотносятся друг с другом, только в конце главы. Если все эти термины для вас в новинку, сосредоточьтесь на идее полномочий. Если вы сталкивались с понятием привилегий, немного подождите. В конце главы я объясню, почему я думаю скорее в терминах полномочий.
Расширение полномочий может восприниматься иначе, чем другие угрозы. Вмешательство или спуфинг могут восприниматься как механизмы или даже цели. Расширение полномочий может выглядеть (или даже быть) больше похожим на эффект или ступеньку. Но все это угрозы: и действие, которое может предпринять злоумышленник, и угроза свойству, которое мы хотим, чтобы система имела. Расширение полномочий – это угроза для системы авторизации.
Полномочия – это «воздействие, которое программа может оказать на объекты, к которым она имеет доступ либо непосредственно по разрешению, либо косвенно через разрешенное взаимодействие с другими программами» [Miller, 2005]. Как правило, существует три способа контроля за использованием полномочий. Это разрешения, ослабление и изоляция.
Разрешения, возможно, наиболее просты для понимания. Например, Unix защищает себя, устанавливая права владения и права доступа к файлам в /etc, /usr/bin, а также во многих других местах, от которых зависит операционная система. Ослабление означает уменьшение или ограничение; процесс входа в систему ослабит свои собственные полномочия, изменив идентификатор пользователя с root перед тем, как запустить оболочку (shell) для обычного пользователя. Таким образом, эта оболочка не наследует права на вызов API setuid или привязку к портам с малыми номерами. Изоляция означает программное или аппаратное обеспечение, которое ограничивает возможности кода. Например, пользователь может отправлять сигналы или подключать отладчик только к своим процессам, а не к процессам других пользователей. Это изоляция, обеспечиваемая ядром.
Если спуститься с уровня ОС Unix к аппаратному уровню, изоляция обеспечивается уровнями выполнения в процессоре (кольцами). А при переходе от автономной системы к сетям изоляцию обеспечивают межсетевые экраны.
Еще один способ представить себе эту защиту заключается в том, что вторая «Звезда смерти», полностью вооруженная и работоспособная боевая станция, может реализовывать разрешения и использовать штурмовиков для их задействования. У нее также есть щит, работающий на маленькой луне, что обеспечивает ее изоляцию. Обо всех трех способах – разрешениях, ослаблении и изоляции – мы поговорим в разделе «Защита».
Расширение полномочий означает переход от одного уровня полномочий к более высокому: от невозможности выполнять код – к способности это делать; от обычного пользователя к корню и ядру; от невозможности устанавливать разрешения к администратору облачного сервиса; от «случайного дроида, попавшего в сеть» до бога эвоков. На рисунке 6.1 показан пример того, как это работает в системе Unix. Процессы Люка могут вмешиваться друг в друга, но не в процессы Леи (и наоборот). Лея могла бы расширить свои полномочия, чтобы иметь возможность запускать код от имени root, и, как генерал, она могла бы претендовать на эту власть над системами повстанцев. Поскольку Лея мудра, она, вероятно, предпочла бы все же использовать ограниченную учетную запись, чтобы уменьшить влияние любых ошибок, которые может совершить. Мы часто говорим о «нижних уровнях» системы, и с этой точки зрения рис. 6.1 перевернут, чтобы соответствовать рамке «более высоких привилегий».
Рис. 6.1. Уровни полномочий
Многие известные атаки и типы атак используют эффект расширения полномочий.
Уязвимость Log4shell приводила к выполнению команды, переданной в строке, предназначенной для журналирования. Уязвимость Shellshock в bash позволяет выполнять как команды то, что записано в переменных окружения. (Между прочим, многие из них содержат сочетание shell в названии, потому что добраться до неограниченного доступа к оболочке – важная веха для злоумышленника.)
Переходя к семействам атак, внедрение SQL-кода позволяет веб-пользователям встраивать SQL-команды в строки, передаваемые веб-парсерами (парсер – синтаксический анализатор). Интерпретатор SQL обрабатывает эти строки как команды. Веб-парсер не предназначен для предоставления веб-пользователю полномочий по созданию SQL-запросов. Межсайтовый скриптинг (XSS) повышает полномочия человека, создающего URL-адрес, чтобы заставить тех, кто использует этот URL-адрес, выполнять команды, запланированные злоумышленником. Атака с переполнением буфера стека приводит к локальному или удаленному выполнению кода.
Локально переполнение буфера стека может эксплуатировать уязвимость в корневой программе, выполняющей команду setuid root, и позволить непривилегированному пользователю выполнять произвольные команды с полными полномочиями root. Программа, принимающая соединения через интернет, позволяет удаленным пользователям, подключенным к интернету, выполнять команды на целевой системе. Подробности о проблемах, допускающих эти расширения полномочий злоумышленника, вы узнаете в главе 8 «Распознавание и порча».
Полномочия предоставляются владельцами систем принципалам, а принципалами – программам. Например, как показано на рисунке 6.2, Джордж Лукас является владельцем системы. Он создает учетную запись george (Джордж) на своем ноутбуке. Пользователь george может установить права доступа к файлу «Империя наносит ответный удар».
Он также может создавать учетные записи для своих коллег Ли Брэкетта (leigh) и Лоуренса Кэздана (lawrence), чтобы они могли войти в его компьютер. Они являются принципалами и они представлены этими учетными записями. Когда они запускают такие программы, как Emacs или vi (очевидно) для редактирования сценария, они неявно предоставляют полномочия этим программам для доступа к любому файлу, к которому может получить доступ пользователь с их ID.
Переходя от локальной системы к сети, полномочия по взаимодействию в различных сетях подразумевают ответственность за идентификацию и категоризацию удаленных соединений. Эти соединения должны иметь только ограниченный доступ к полномочиям принимающей стороны. Эти полномочия включают в себя вызов API операционной системы и действия от имени какого-либо принципала в качестве его представителя. Например, если программа, назовем ее login, создает оболочку от имени пользователя, то эта оболочка обладает огромными полномочиями, включая чтение и запись файлов, их создание и удаление, а также вызов других программ. Другая программа, скажем, simple-httpd, может быть разработана с более ограниченными полномочиями: для чтения файлов.
Рис. 6.2. Предоставление полномочий
По крайней мере, таково должно быть намерение. Программы часто обладают большими полномочиями и могут даже пытаться ослабить или делегировать их различными контролируемыми способами. Простой httpd может понимать, что такое учетные записи, и позволять определенным учетным записям видеть определенные файлы. Результатом этого требования является то, что он должен иметь доступ ко всем этим файлам, по крайней мере в какой-то момент своего выполнения. Он может реализовать код для проверки того, что этот пользователь может получить доступ к этому файлу, или httpd может предоставить этот доступ, присвоив соответствующее значение атрибуту файла «user ID» и отложить проверку на что-нибудь другое.