Apple внесла подобное изменение в macOS, требуя, чтобы приложения, которые хотят редактировать произвольные файлы, имели разрешение под названием «Полный доступ к диску». В отличие от них, Microsoft наложила это ограничение только на «современные приложения». Эти подходы отражают разные философии и приоритеты: Microsoft ценит совместимость приложений больше, чем Apple. Компания Apple была готова ввести дополнительные ограничения на программное обеспечение для резервного копирования и другие инструменты, требующие более высокого уровня полномочий.
Способности в контексте управления доступом
К сожалению, почти все современные системы используют разрешения и привилегии, а не полномочия и способности, поэтому стоит понимать и то и другое, чтобы вы могли работать с ними и лучше проектировать.
Но! Технологии создаются и перестраиваются с поразительной скоростью, и новые системы могут работать по-новому. Ссылки, ориентированные на использование ключей, могут быть без проблем встроены в новые системы, значительно облегчая реализацию и ее обоснование.
Например, если вы создаете облачные микросервисы, вы, вероятно, создаете их для обращения к API обнаружения сервисов. Эти API обнаружения сервисов могут выбирать, когда возвращать доступ, а когда – нет. Если для изменения конечных точек API используются разрешения, вы получаете что-то похожее на систему способностей. То есть если у меня есть конечные точки RESTful API /1234567/ для чтения календаря Дарта Вейдера и /8ddf8e78/ для записи туда, то мое обнаружение сервисов может выбирать, кто читает, а кто пишет. Если я вызываю /calendar/darthvader/read или /calendar/write/darthvader, то каждый из них должен убедиться, что он реализует правильную узкую точку управления доступом.
Когда мы опираемся в нашем понимании на полномочия, нам легче рассуждать о безопасности того, что мы создаем или развертываем. Ограничение полномочий каждого компонента и использование изоляции и ослабления при делегировании или вызове дополнительных функций делает наши системы более надежными и безопасными.
Заключение
Почему Империя смогла установить на «Тысячелетний сокол» маяк слежения? У панелей нет замков, а подключения к источнику питания доступны повсюду. Может, на корабле всем так удобнее, чтобы можно было быстро сделать ремонт? (Особенно на этом корабле…)
И почему никто не находит этот маяк слежения? Возможно, дело в том, что его сложно найти среди «специальных модификаций», которые сделал Хан Соло. А может быть, в том, что надо срочно добраться до базы повстанцев на Явине до прибытия «Звезды смерти».
Как и «Тысячелетний сокол», современные системы накапливают сложность и не справляются с созданием тщательно проработанной изоляции или защиты, и злоумышленники пользуются этим.
Очень немногие современные программы, работающие на настольных компьютерах, нуждаются в широких и гибких полномочиях, чтобы действовать от имени своих пользователей. Большая часть того, что мы создаем, нуждается в гораздо меньших полномочиях, и даже еще меньших, если мы вдумчиво отнесемся к дизайну. Это означает, что мы можем программировать, думая о защите, аккуратно передавать свои полномочия и поддерживать и то и другое, планируя предотвращение несчастных случаев с помощью техники изоляции. А еще все это означает, что только мы можем осуществлять свои полномочия.
7Предсказуемость и случайность
Инженеры любят предсказуемость. Было бы трудно построить «Звезду смерти», если бы в процессе установки надстройки включилась бы гравитация и сработала, как притягивающий луч. Злоумышленники также любят предсказуемость. Если ваша основная программа выполняет команды, которые хранит в /tmp/setup.sh, то злоумышленник, который может создать такой же файл, получает возможность выполнять свои команды, и он будет в барыше. Если ваша программа игры в сабакк устанавливает порядок карт на основе даты каждую ночь в полночь, то злоумышленник, который обнаружит это, действительно будет при деньгах.
Важно, чтобы вы понимали, когда непредсказуемость или случайность имеют значение, и важно понимать, что они (предсказуемо) различны. У вас могут быть числа, которые трудно предсказать по нескольким примерам, или, например, могут быть случайные числа. Пока давайте определим случайность как событие, означающее, что даже идеальное знание системы не поможет вам предугадать следующий результат. Например, хорошо встряхнутые новые кости дают фактически случайный результат, и когда они используются с тщательно разработанными правилами и процедурами, они могут дать казино предсказуемое преимущество и заработать денег на роскошные здания, такие как в Лас-Вегасе или Канто-Байте.
Компьютеры, однако, предсказуемы. Эта предсказуемость приводит к угрозам, связанным с осознанным угадыванием или использованием метода грубой силы (и проверкой этих догадок), и к некоторым неожиданным истинам о шансах на успех этих догадок. Мы также рассмотрим угрозы самому времени или, по крайней мере, то, как его отслеживают технические системы. Далее мы рассмотрим предсказуемость в конкретных сценариях, средства защиты, включая разрешения и полномочия, большие пространства поиска и важность обеспечения прозрачности.
Угрозы предсказуемости
Нападающие любят подражать императору и хихикать: «Все идет именно так, как я предвидел!» Они могут предсказать имя файла, чтобы записать его раньше вас, порядковый номер в сетевом протоколе, чтобы подделать пакеты, или то, как вы измените свой пароль, увеличив последнюю цифру, чтобы он соответствовал требованиям обновления пароля.
Вспомните обсуждение способностей в главе 6 «Расширение полномочий и изоляция». Способность – это длинное число, которое трудно угадать, например, 67890123 – это способность писать в файл Documents/threatsbook/predictability.docx. Мы можем более конкретно говорить об угрозах для такой системы: они включают в себя как нахождение конкретной способности, так и нахождение любой существующей способности. В шестой главе я использовал выражение «намного длиннее, чтобы нельзя было угадать», и в этой главе мы конкретизируем, как понимать эту фразу.
Если вы хотите получить выкуп за мои файлы в результате вымогательства, вам пригодится любая существующая способность; если вы хотите прочитать именно эту книгу до того, как она будет готова, то вас удовлетворят только несколько моих документов.
Некоторые вещи предсказуемы: какое следующее число в последовательности 1, 4, 9, 16, …? (Это 25.) Другие вещи можно угадать: я думаю о числе от 1 до 5. (Я думаю о числе π.) Что? Почему выбор π – это мошенничество? Это вещественное число от 1 до 5. Привыкайте к тому, что ваши предположения опровергаются. Теперь я думаю о целом числе в диапазоне от 1 до 1 000 000 включительно. Никаких глупых трюков, но я даю вам только одну попытку. Я лично могу обеспечить соблюдение правила одной попытки, но заставить компьютер сделать это может быть непросто.
Каждая догадка занимает некоторое время, как и ее проверка, а это значит, что умные злоумышленники стремятся оптимизировать порядок своих догадок, а умные защитники делают оптимизацию невозможной.
Словари и угадывание
Какой из этих с большей вероятностью может быть чьим-то паролем: RememberAlderaan или dg1298L;dsaf4lt? Хотя мы можем надеяться, что они одинаково вероятны или даже что люди будут избегать предсказуемых паролей, RememberAlderaan кажется более вероятным, чем другая, столь же длинная строка. И, возможно, RememberAlderaan1 или даже RememberAlderaan1! по-прежнему более вероятны, поскольку люди вынуждены выполнять требования, предъявляемые к паролям. Умные злоумышленники будут создавать «словари» – списки возможных ответов, упорядочивать их в соответствии с их пониманием вероятности, использовать их, чтобы структурировать свои догадки, и даже публиковать их в интернете.
Словари возможны благодаря трем вещам: маленькому пространству поиска, отсутствию случайности и человеческой ограниченности. Пространство поиска – это число всех возможностей. Таким образом, замóк с тремя вращающимися циферблатами, каждый из которых настраивается на число от 0 до 9, имеет 1000 возможных комбинаций. Висячий замок на школьном шкафчике с тремя цифрами от 1 до 36 может иметь 36^3 (46 656) возможных комбинаций: кажется, что много. Если вам нужно тестировать их все одну за другой, и вы можете тестировать по одной в секунду, это может занять почти 13 часов, что было бы довольно скучно. (Предположим, что замок одновременно бесшумный, поэтому стетоскоп не поможет, и у него физически высокая устойчивость, поэтому нет никаких шансов, что сработает 32 вместо 33.)
Если говорить более конкретно, под отсутствием случайности я имею в виду то, что распределение ответов неравномерно. Некоторые ответы более вероятны, чем другие. Человеческие ограничения включают в себя память и желание или способность надежно набирать или нажимать длинные случайные строки.
Неинформированное угадывание (грубая сила, брутфорс, метод прямого перебора). Компьютеры отлично справляются со скучной, повторяющейся работой, и 13 часов – это не очень большое пространство для поиска. Криптографические ключи, как правило, имеют длину 128 бит и более, что создает очень большую проблему поиска. (В среднем злоумышленник проверяет половину совершенно случайных ключей, прежде чем найти подходящий для конкретного сообщения. В данном случае это будет 2^127, что дает плюс-минус «триллион триллионов триллионов» – примерно 170 с 37 нулями. (Даже для компьютеров, которые хорошо умеют выполнять повторяющуюся работу, это невозможно, и я более подробно расскажу о том, что это означает, когда мы достигнем «больших пространств поиска» в разделе «Защита».) Такая форма угадывания, при которой каждый ответ равновероятен, называется грубой силой.
Разница между грубой силой и Силой заключается в том, что грубая сила не требует ни магии, ни обширной подготовки. На самом деле, брутфорс обычно выполняется программным обеспечением, которое реализует эту скучную, повторяющуюся работу.