Читать книгу Защита систем. Чему «Звездные войны» учат инженера ПО (Адам Шостак) онлайн бесплатно на Bookz (2-ая страница книги)
bannerbanner
Защита систем. Чему «Звездные войны» учат инженера ПО
Защита систем. Чему «Звездные войны» учат инженера ПО
Оценить:
Защита систем. Чему «Звездные войны» учат инженера ПО

3

Полная версия:

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

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

Терминология безопасности

У вас в руках книга об угрозах. Мы все узнаём угрозу, когда слышим: «Гони деньги, не то получишь!» или «Я изменил условия сделки. Молитесь, чтобы… в последний раз». Я использую термин «угроза», имея в виду некоторую будущую проблему, которую часто можно предотвратить, если принять профилактические меры.

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

Исполнение угрозы – это нападение. Каждая угроза, ее проявление и ее воздействие могут вызывать беспокойство. В законе реальная угроза рассматривается как насилие; ударить кого-то – это «избиение» в словосочетании «нападение и избиение». Это может привести к травме. В кибербезопасности мы часто беспокоимся и об угрозе, и о ее результате. Если кто-то совершает взлом под видом законного пользователя (spoofing), возможно образование по цепочке других угроз, таких как фальсификация или раскрытие информации. Особенно на этапе обучения полезно установление конкретной взаимосвязи между механизмом и воздействием. Риск – это количественное уточнение угрозы, и эти количественные измерения часто включают вероятность успеха и объем последствий, выраженный в долларах или в жизнях.

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

В компьютерной безопасности широко используют термин доверие (trust), и он легко может сбить с толку. В обычном языке доверие означает «твердую веру в чью-нибудь надежность, честность или способность». Заслуживающий доверия означает кого-то, кто соответствует этим ожиданиям. В компьютерной безопасности доверенный означает нечто способное нарушить вашу безопасность. Профессор Росс Андерсон из Кембриджского университета приводит пример: «Шпион, пойманный на продаже секретов, был доверенным, но не заслуживающим доверия». Другие указывают на то, что это слово часто используется в пассивном залоге или с оруэлловской интонацией. Выражение доверенная система (trusted system) не может сообщить нам, кто доверяет системе. Галактическая Империя часто помечала системы как «доверенные», чтобы не обсуждать их воздействие на людей, которых они касались.

Афоризмы

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

«Атаки становятся только лучше; они никогда не становятся хуже». Брюс Шнайер утверждает, что так поговаривают в Агентстве национальной безопаснасти (АНБ) США. Хотя защита развернута, уроки атаки никогда не забываются. Инструменты, разработанные для ее проведения, не пропадают. Они оттачиваются и шлифуются.

«Теории безопасности возникают из теорий незащищенности», – сказал Рик Прото из АНБ. Атаки становятся лучше, а совокупность атак определяет то, что мы вообще думаем о безопасности.

«Все модели неправильны; некоторые модели полезны». Слова британского статистика Джорджа Бокса.

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

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

«Безопасность – это системное свойство». Неясно, кто первым это сформулировал. Это справедливое заявление, и означает оно, что безопасность системы часто ограничена слабыми звеньями. Эта книга поможет вам удалить эти слабые звенья.

«Работает то, что доставлено». Это общее изречение в Microsoft. Все новые возможности, которые вы разработали, не имеют никакой ценности, пока не используются вашими потребителями, так что задержка ради добавления нескольких дополнительных возможностей часто неразумна. Аналогично задержка в сдаче разработки в надежде достижения идеальной безопасности означает, что никто не может использовать разработанные вами новые возможности. Я должен сейчас принять такое же решение о сдаче этой книги: я надеюсь, что ее достоинства перевешивают ее недостатки.

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

Как организована эта книга

Эта книга начинается с аббревиатуры STRIDE, которая определяет классическое понимание угроз. STRIDE – это Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Expansion of Authority (спуфинг, вмешательство, отказ от ответственности, раскрытие информации, отказ в обслуживании, расширение полномочий). STRIDE – это мнемонический прием, который помогает запомнить шесть главных групп угроз, которым посвящены первые шесть глав книги. За ними следуют главы о предсказуемости, распознавании и поэтапных кибератаках.

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

Существует множество способов организации материала в такого рода книгах. Я рассматриваю разные вычислительные модели, и те пути, какими на них воздействуют разного рода угрозы. Эти модели включают интернет вещей (Internet of Things, IoT), мобильные вычисления, облачные вычисления и ИИ / машинное обучение. Подробности в соответствующих разделах служат дополнением к более широким утверждениям главы, а не заменой им: тот факт, что компьютер имеет форму плюшевого мишки, не значит, что остальная часть главы неприменима. Несколько таких разделов в других главах снабжены дополнительными подразделами, потому что природа угроз обладает интересными свойствами в специфических сценариях, которые стоит обсудить.

Единственная из развивающихся технологий, которая осталась не затронутой, – это квантовые вычисления. Большинство угроз из STRIDE будут работать для систем, окружающих квантовое ядро, и, вероятно, для самого ядра тоже. Например, потребляемая мощность зеркал в квантовой криптографии ведет к раскрытию важной для атак информации. (Квантовое криптование использует информацию о спи´не, чтобы распространять криптоключи так, что это очень сложно подслушать, но часто полагается на оптику между сайтами. Это очень отличается от использования квантовой механики для вычислений.) Первичный ранний эффект квантовых вычислений – высокая вероятность взлома большей части классической ассиметричной криптографии: перспектива вычисления секретных ключей с помощью квантовых компьютеров создает угрозу раскрытия информации. Если вам интересны квантовые вычисления, книга Law and Policy for the Quantum Age («Закон и политика квантового века») [Hoofnagle and Garfinkel, 2021] будет отличным введением в предмет.

Другой важный выбор в организации материала – это постоянное возвращение к перечню угроз. Исходя из моего опыта преподавания, когда кто-то встречает информацию в первый раз, она не сразу усваивается. Часто помогает возвращение к этой информации, чтобы посмотреть на нее под другим углом.

Стиль и условности

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

Несколько слов от мастера джедая

Йода. …мощь джедая идет от Силы. Но бойся темной Силы. Гнев, страх, агрессия – темная сторона Силы это. Легко они приходят, дают в битве поддержку. Раз ступишь на темную тропу – навсегда она твою судьбу определит. Поглотит тебя она, как ученика Оби-Вана.

Люк. Вейдера… Темная сторона сильнее?

Йода. Нет, нет, нет. Проще и притягательней.

Люк. Но как отличить хорошую сторону от плохой?

Йода. Ты поймешь… когда ты тих, светел, спокоен. Джедай Силу использует для защиты и знания, никогда для нападения.

Темный путь – это путь игнорирования безопасности. Все легко, код льется рекой. Но как только вы вступили на этот путь, он будет вечно определять вашу судьбу. Игнорировать безопасность и сосредоточиться только на возможностях, которые будут доступны потребителям, – это легкий выбор. Современные языки позволяют выполнить полный статический анализ за счет ограничения некоторых соблазнительных возможностей указателей. За это приходится платить: темная сторона языка C – это более быстрый код, но он будет вечно доминировать над вашими рекомендациями безопасности. И двадцать лет назад, когда безопасность значила меньше, это был выбор, который сделали многие компании, часто бездумно. Это был выбор, который сделал Microsoft в зените славы.

Но Йода был прав: «Поглотит тебя она». Я работал в Microsoft почти десять лет, и я питаю огромное уважение к моим коллегам, которые вколачивали безопасность в MS Office и MS Windows, заменяя отдельные куски их внутренностей. Они достигли гораздо большего, чем, я думал, возможно таким образом достичь. Однако очень отличающиеся внутренности IoS и ChromeOS позволяют этим конкурентам сегодня двигаться быстрее.

Наконец, для вас открыт еще один путь добиться успеха в области безопасности – путь атак. Этот путь очень яркий. Он мощный: «Давайте я вам покажу, как могу получить контроль над вашей системой». И если вы хотите пойти этим путем, моя единственная просьба – делайте это этично, используя свои навыки и знания для выполнения санкционированных атак, чтобы построить более прочную защиту. Мой собственный путь начался с обнаружения уязвимости, но в последнее время я сосредоточился на создании более надежных систем. Этот путь гораздо тяжелее, но его воздействие в долгосрочной перспективе может быть гораздо большим.

1

Спуфинг и аутентичность

Вскоре после того как мы первый раз встречаемся с Люком Скайуокером, он чистит своих только что приобретенных дроидов, а R2-D2 проигрывает ему фрагмент сообщения, которое предназначается только для Оби-Вана Кеноби. Откуда R2-D2 знает, кто такой Оби-Ван Кеноби? Как он принимает решение воспроизвести запись принцессы Леи Оби-Вану, а не Люку? Как я упоминал во введении, эти вопросы затрагивают много аспектов. Давайте углубимся в проблему имен и аутентичности.

Рассматривая это взаимодействие, я буду считать дроидов компьютерами. Поэтому мы можем задавать вопросы типа «Как компьютер идентифицирует человека?». Это один из нескольких ключевых типов аутентификации. Мы также можем спросить, как человек идентифицирует компьютер или один компьютер идентифицирует другой. «Звездные войны» полны проблем, которые возникают из задачи идентификации человека человеком. Почему в приквелах члены Совета джедаев не осознают, что канцлер – это также лорд ситхов Дарт Сидиус?

Аутентичный означает нечто подлинное, настоящее. R2-D2 хочет показать видео только настоящему, аутентичному Оби-Вану, а не любому, кто подойдет и попросит об этом. Чтобы добиться этого, нужны идентификаторы и аутентификаторы. Угрозы спуфинга – это нарушение аутентичности; вы получаете кого-то или что-то, отличное от того, что ожидаете. «Звезда смерти» не в состоянии аутентифицировать R2-D2, когда он подключается к системе, это общая проблема в мире «Звездных войн». В нашем мире ложные (spoofed) коды аутентификации – это тоже общая проблема: мы называем их украденными паролями. Но это не просто фейковые личности; это также фейковые веб-сайты для фишинга и других видов мошенничества.

Идентификаторы и аутентификация

Для аутентичности сначала требуется идентификатор: заявление о том, кто вы такой. Это может быть именем (Хан Соло) или ролью (штурмовик). И то и другое может быть подлинным или фальшивым, и, с учетом риска самозванства, недоразумений или лжи, мы прибегаем к факторам аутентификации, таким как удостоверение личности (ID), пароль или униформа, чтобы оценить, является ли идентификатор аутентичным, и предоставить доступ (или отказать в нем). В этой главе мы начнем с идентификаторов как для человека, так и для техники. Мы, естественно, коснемся аутентификации, когда будем разбирать различные конкретные способы, которыми подменяется идентичность человека или устройства, а затем углубимся и узнаем больше подробностей позже в этой главе. Существует много разных форм аутентификации, в зависимости от того, кем эта аутентификация выполняется, человеком или компьютером, и к кому применяется, к человеку или к компьютеру. Далее мы посмотрим на различные сценарии спуфинга, на использованные механизмы и на защиты. Эта глава длиннее, чем те, что идут за ней, потому что спуфинг очень сильно отличается в ситуациях, когда самозванцем выступает человек, а когда – компьютер, и способы проверки различны, когда выполняются людьми и когда компьютерами.

Как показано на рисунке 1.1, средства аутентификации различаются в зависимости от того, какая сущность пытается доказать свою идентичность, и от того, какая сущность выполняет проверку.


Рис. 1.1. Способы аутентификации


Рис. 1.2. Сложность аутентификации


Откровенно говоря, некоторые из методов, показанных на рисунке 1.1, не очень надежны. Например, компьютер перед вами аутентифицируется его физическим положением: вы доверяете ему свой пароль, поскольку вводите в него пароль. Иногда такая слабая аутентификация проходит, в иных случаях сторона, проверяющая другую сущность, хочет более сильной аутентификации (рис. 1.2).

Технические идентификаторы

Существует множество типов технических идентификаторов, включая идентификаторы для сервисов, машин, файлов, процессов и пользователей. Некоторые предназначены для людей, например threatsbook.com, другие предназначены для компьютеров, например 172.18.19.20. Конечно, есть инструменты для того, чтобы преобразовывать одно в другое. Как это делается – очень важно, потому что каждое преобразование – это вырисовывающаяся возможность для того, чтобы вкрались ошибки или возникли угрозы, влияющие на вашу систему.

Фактически всякий раз, когда есть преобразование некоторого реального объекта в представление этого объекта, может возникнуть путаница. Вызовы вроде listen(socket) и open(file) чреваты угрозами, когда вы преобразовываете имя файла в дескриптор файла.

Идентичность машины или сервиса включает имя, например rebelbase.threatsbook.com. Пространство имен компьютеров обычно уникально в некоторых пределах. Идеально было бы, если rebelbase.threatsbook.com было уникальным глобально, но может существовать много компьютеров с доменным именем (DNS) rebelbase.local – один на Явине, другой на Хоте, третий – в вашей локальной сети.

Сервис можно подменить с помощью похожего имени, rebe1base. Если это веб-сайт и вы ввели там имя пользователя и пароль, операторы этого сайта могут зарегистрироваться в настоящем rebelbase, таким образом выдав себя за вас. Почти все соединения, которые уязвимы для спуфинга, обладают этой уязвимостью в обоих направлениях, последствия атаки испытывают разные участники взаимодействия.

Компьютеры часто обладают DNS-именами вроде rebelbase.threatsbook.com. Этот адрес может относиться к одной или нескольким физическим машинам, но это не единственные имена, которые может иметь физический компьютер. Он может иметь UNC-имя, как в Windows, и другие имена. Имя может относиться к более чем одной машине через, скажем, круговую систему (round-robin) DNS, а могут быть слои отображения с каноническими именами (cnames) и другие системы косвенной адресации.

Сходным образом файлы могут иметь и имена, и технические идентификаторы, такие как номера inode, которые файловая система использует для эффективности.

Идентичность процесса часто может быть представлена файлом, или портом, или даже некоторым исполняемым именем. Например, кто-то может ожидать, что то, что слушает порт 25, – это почтовый сервер, или первый процесс с именем Chrome – это наш веб-браузер. Процессы могут менять имена в таблице процессов, а зловредный код часто будет пытаться изменить имена процессов, чтобы замаскироваться под что-то безобидное.

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

Идентификаторы для человека

В «Звездных войнах» Люк и Хан прикидываются штурмовиками. Один из них, очевидно, штурмовик TK‐421. Имя другого штурмовика мы так и не узнаем, но это не имеет значения: у него есть роль, позиция охранника, и этого достаточно для некоторых целей аутентификации. Бен Кеноби притворяется, что он не Оби-Ван Кеноби, и по ходу лжет Люку, что его отец Энакин убит Дартом Вейдером. Принцесса Лея делает вид, что она не предводитель повстанцев, и это еще только первые тридцать минут «Звездных войн».

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

Многие люди используют больше одного имени. Персонаж «Симпсонов» может быть Жирным Тони или Марионом Д’Амико, а некоторые люди будут его называть дядя Тони. Уильям становится Биллом. Я и вы имеем в виду разное, когда говорим «мама», и в мире есть много людей по имени Джон Смит. Люди обычно справляются с этим. Компьютеры не такие гибкие. Им нужны уникальные, управляемые пространства имен для идентификаторов и аккаунтов. Того же хочет и Империя, поэтому у бедного FN-2187 нет другого имени, пока По Дэмерон не даст ему прозвище Финн в эпизоде «Пробуждение силы».

Подделка человеческих идентификаторов имеет давнюю и интересную традицию, начавшуюся задолго до интернета. Притвориться кем-то другим, притвориться, что ты – это не ты, присвоить титул или роль, которые тебе не принадлежат, – все это есть уже у Шекспира, но кто его помнит… Важно, что эти подделки предшествовали технологиям. Они все реализуются на человеческом уровне.

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

Аутентификация людей людьми

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

Бен Кеноби начинает действовать, когда некто, кого он никогда не видел, шлет ему голограмму, говорящую: «Много лет назад во время войны клонов вы служили моему отцу». Разве они не должны были использовать какую-то условную фразу?

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

Аутентификация людей компьютерами

В отличие от «Ромео и Джульетты», где тема идентичности и самозванства в мире людей заканчивается трагически, «Звездные войны» дают нам примеры того, как взаимодействуют люди и технологии. Как Бен Кеноби аутентифицируется у R2-D2, чтобы увидеть голограмму Леи? Когда R2-D2 подключается к системе «Звезды смерти», чтобы найти, где ее держат, какой идентификатор пользователя используется для его SQL-запроса?

(Между прочим, ваш первый ответ, что R2-D2, вероятно, обладает разумом, недостаточен. Лея не знает, что этот конкретный R2 знал Кеноби, поэтому как она могла прописать правило контроля доступа?)

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

Различные типы информации могут учитываться при принятии решения о подлинности (authentication decision). Ниже приведены наиболее часто используемые факторы и примеры каждого из них.

 Знание: комбинация сейфа.

 Объект, который у вас есть: ключ к депозитной ячейке или ID-карточка.

 Биометрия: ваше физическое тело, измеренное или оцененное различными способами (включая фотографию).

 Местоположение: непосредственно перед компьютером.

 Канал, который вы используете: интернет, телефон или личное присутствие.

 Люди, которых вы знаете: доверенные лица и попечители.

Факторы также обладают силой: обычно паспорт рассматривают как более сильное доказательство идентичности, чем читательский билет. Пароль secret не такой сильный, а пароль u8fdFN288jerfskla-#$d очень хорош.

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

bannerbanner