Kitobni o'qish: «Защита систем. Чему «Звездные войны» учат инженера ПО»
© Беленкович В. М., перевод на русский язык, 2025
© Манжавидзе Д. Ю., иллюстрация на обложку, 2025
© Оформление. ООО «Издательство «Эксмо», 2025
Об авторе
Адам Шостак – ведущий эксперт по моделированию угроз. Он также является дизайнером игр, выступает в роли консультанта и судебного эксперта. Много лет он посвятил разработке безопасных продуктов и систем. В мире бизнеса диапазон его опыта охватывает самые разные области, от основания стартапов до почти десяти лет работы в Microsoft.
Ниже перечислены некоторые из его достижений.
• Помог создать CVE (Common Vulnerabilities and Exposures, база данных общеизвестных уязвимостей информационной безопасности); в настоящее время является почетным членом ее консультативного совета.
• Исправил автозапуск для Windows XP и Vista.
• Руководил разработкой и реализацией инструмента моделирования угроз Microsoft SDL (v3).
• Создал игру по моделированию угроз Elevation of Privilege и участвовал в создании игры Control-Alt-Hack.
• Автор книги Threat Modeling: Designing for Security («Моделирование угроз: проектирование для обеспечения безопасности») и соавтор книги The New School of Information Security («Новая школа информационной безопасности»).
Помимо консультирования и преподавания, Шостак выступает в качестве советника многих компаний и академических учреждений. Он является аффилированным профессором в Школе компьютерных наук и инженерии имени Пола Г. Аллена при Вашингтонском университете.
Подробнее о нем можно узнать на сайте shostack.org.
Благодарности
Эта книга была бы совершенно иной, если бы Джордж Лукас не придумал свой потрясающий и многогранный мир и если бы команда и актерский состав «Звездных войн» не воплотили его в жизнь. Если бы эта первая команда не вникала в детали, мы могли лишиться очень многого.
Эта книга – результат пятилетней миссии «Как объяснить инженеру, что такое безопасность». В 2017 году один джентльмен из Купертино задал мне простой вопрос: «Где я могу узнать больше об этих угрозах?» Я не записал его имя, но, если вы читаете этот текст, спасибо за вопрос, и извините, что так долго не отвечал.
В процессе исследований я говорил с сотнями людей о том, что «должен знать каждый инженер». Я хочу поблагодарить их всех за вклад в создание этой книги. А все ошибки, которые остались, принадлежат мне.
Моя замечательная команда преподавателей из Shostack + Associates (Валерий Берестецкий, Джейми Дикен и Кэролайн Эммотт) также прочитала весь черновик (иногда не по одному разу) и помогла убедиться, что многое из того, чему мы научились у наших студентов, вошло в книгу и что на многие вопросы, которые они задавали, даны ответы.
Параллельно с написанием книги я также работал над набором курсов в LinkedIn Learning. С командой, в которую в том числе входили Алисса Пратт, Рэй Хойт и Эндрю Проберт, у нас сложились теплые отношения, они поддерживали и наставляли меня на протяжении всего этого времени. Работа с ними над набором курсов по STRIDE одновременно с работой над книгой помогла улучшить и то и другое.
Лорен Конфельдер сделала больше, чем просто создала мнемоническую схему STRIDE (вместе с Преритом Гаргом), которая легла в основу этой книги. Она также прочитала бóльшую часть этой книги в черновом варианте, и я высоко ценю наши долгие беседы о деталях, а также о структуре.
Дин Триббл и Джонатан Шапиро напомнили мне о работе Марка Миллара «Власть» (Authority) как о способе выхода из беспорядочных размышлений о привилегиях и разрешениях. Этот ужас мог положить конец всей затее. Точно так же глава о синтаксическом анализе стала намного понятнее и богаче, когда я прочитал работу сообщества LangSec. Джефф Уильямс вдумчиво просмотрел первые черновики. Изар Тарандах внимательно прочитал текст, хотя его книга отчасти конкурирует с моей. Джим Белл объяснил, как космические аппараты на Марсе отслеживают время.
Некоторые из первых улучшений относились к тексту, который изменился настолько, что эти улучшения больше не видны. Я чрезвычайно благодарен этим людям, потому что они помогли книге не очень заметным, но очень важным образом: Майкл Ройтман предложил форматы дат для устойчивости канонизации, и их гораздо легче анализировать, чем мои примеры URL-адресов. Ким Вуйтс помог с определением предсказуемости и ее воздействии на неприкосновенность частной жизни.
Спасибо также Джону Калласу, Крису Энгу, Марку Френчу, Тому Гэлхагеру, Шону Эрнану, Джеффу Джармоку, Аррону Джонсону, Кристофу Клаассену, Лаки Манро, Даниэлю Остермайеру, Яну Пойнтеру, Джону Пулену, Моргану Роману, Ананту Шривасте, Пелеусу Ули, Таре Уилер и Чарльзу Уилсону.
Дуг Барнс, адвокат и киберпанк, был тем другом, который написал фразу «Включать в свои протоколы этап „а потом появляются полицейские“ – это сомнительная идея», цитируемую в главе об отказе от ответственности. Предложение и абзац были сложными, и поэтому я благодарю его здесь.
Неоднократно авторы использовали «Звездные войны» для иллюстрации своих теорий: The Ultimate Star Wars and Philosophy («Путеводитель по „Звездным войнам“ и философия») [Wiley, 2015], «Звездные войны. Психология киновселенной» (Star Wars Psychology) [Sterling, 2015] и «Мир по „Звездным войнам“» (The World According to Star Wars) [Sunstein, 2016]. Я многому научился у каждого из них и использую «Звездные войны» более целенаправленно и детально благодаря тому, что они указали мне путь. Келлман Мегу отметил, что в сцене перед появлением Дарта Вейдера имперские войска проводят довольно серьезное совещание по реагированию на вторжение, но я не нашел способа включить это в текст. И, говоря о содержании «Звездных войн», я особенно хочу поблагодарить читателей, которые не очень с ним знакомы: они отметили места, где я переусердствовал с погружением в тему. Они предпочли остаться анонимными, хотя ни в чем меня не подвели.
И последнее, но не менее важное: я хочу поблагодарить мою команду в издательстве Wiley. Джима Минателя за то, что он снова и снова задавал провокационные вопросы, пока я не сообразил, что пишу что-то не то, а затем советовал, как написать книгу, которая опирается на любимую вселенную. Келли Тэлбот – фантастический редактор проектов, принимавшая все проблемы с юмором. Ким Уимпсетт тщательно отредактировала все, что было необходимо, и исправила то, что не стоит называть. Кстати, о неназванных: было много людей, с которыми мне так и не довелось встретиться. Подобно безымянным повстанцам, которые так часто появляются на заднем плане, вы помогли сделать общее дело.
Адам Шостак
Предисловие
Откуда R2-D2 знает, кто такой Бен Кеноби? Как он принимает решение воспроизвести запись принцессы Леи Бену, а не Люку? Как принцесса Лея сообщает R2 о своих намерениях? Эти три вопроса затрагивают фундаментальные аспекты безопасности: аутентификацию, авторизацию и дизайн пользовательского интерфейса (usability). (Фанаты узнаю´т ответ на первый вопрос из приквелов, но Лея его не знает.) Более того, использование компьютеров и технологий в мире «Звездных войн» может стать знакомой основой для изучения работы технологий в нашем мире.
Я был фанатом «Звездных войн» до того, как написал первую строку кода, и задолго до того, как взломал первую систему. Когда я стал экспертом по компьютерной безопасности, мне стало ясно, что мы в силу своей деятельности много лучше пишем код, чем истории, и хотя так и подмывает сказать: «Потому-то у нас ничего не получается», рассказывать истории получше – не единственная наша надежда. Когда я думал о «Звездных войнах», я понял, что сразу после титров камера показывает нам корабль принцессы Леи, который преследуют из-за… украденной запись с данными! Я понял, что «Звездные войны» – это не только история героического путешествия Люка и его взросления, но также история о раскрытии информации и последствиях этого. Последние десять лет я использовал «Звездные войны», чтобы рассказывать истории о компьютерной безопасности, потому что эпические истории дают нам опорные точки и иллюстрируют важные проблемы.
В этой книге почти все ссылки – на оригинальную трилогию. Есть материал, для которого я мог бы использовать и «Изгой-один», и приквелы, и сиквелы, и телевизионные сериалы, книги и так далее. Но я предполагаю, что большинство читателей смотрели и пересматривали только три эпизода оригинальной трилогии: «Звездные войны: Новая надежда», «Империя наносит ответный удар» и «Возвращение джедая».
Как Cила является свойством каждого живого существа, так и безопасность – это свойство всех технологических систем. И так же, как Cила имеет две стороны – светлую и темную, у безопасности есть защита и атаки. Эта книга в основном про атаки, угрозы, проблемы. Вы должны понимать, в чем угроза, прежде чем выберете подходящую защиту. Сцена, когда император Палпатин пускает в Люка Скайуокера фиолетовые молнии Cилы, очень драматична, но, если бы Люк был лучше подготовлен, он бы мог распознать угрозу и понять, как лучше от нее защититься. Ни межсетевой экран, ни список доступа не блокируют молнии Cилы.
Если вы хотите сделать свой дом безопасным, вам необходимо подумать о множестве вещей, которые могут причинить вред. Некоторые из них природного происхождения (наводнение), некоторые могут быть и природными, и рукотворными (пожар), а некоторые (воровство) являются действиями разумных существ.
У нас есть неявные модели того, что такое дом, типы домов и общие типы проблем. Эти проблемы могут немного отличаться: на Великих равнинах США – торнадо, в Юго-Восточной Азии – муссоны, на Ближнем Востоке – песчаные бури. Можете попросить список у вашего страховщика. (Они будут в разделах «Дополнительные услуги» и «Исключения».)
Наши неявные модели того, как устроены технические системы, слабее. Технологии разнообразнее и меняются быстрее, чем наши дома или офисные здания. Трехуровневая архитектура не похожа на микросервисы. Развертывание микросервисов в облаке отличается от виртуальных машин, созданных всего лишь лет десять тому назад.
У создателей и защитников технологий есть недостаток: очень трудно не думать о том, как заставить систему работать. Мы все знаем, что сделать это непросто. Что есть уступки и компромиссы, на которые приходится идти, чтобы заставить код работать, доставить его клиентам и даже развернуть его.
В области безопасности есть традиционный призыв: «Думай как злоумышленник!» А это непросто. Я же призываю людей думать как профессиональный шеф-повар, который планирует рассадку сотни обедающих этим вечером. Многие из нас не представляют, с чего начать. Однако мы не обязаны думать как злоумышленники, чтобы получить различные точки зрения на системы, над которыми работаем.
Безопасность также отличается от других потенциальных проблем, потому что нападающие разумны, они умеют учиться и адаптироваться. Представим действия человека, который планирует украсть ваш музыкальный центр. Он может проникнуть за закрытую дверь самыми разными способами: выбить дверь, отжать язычок замка, подобрать отмычку или просто украсть ключ. Некоторые злоумышленники используют уязвимости: у замка может быть слабая наружная накладка, которую легко просверлить из-за дефекта литья. Некоторые используют ошибки проектирования: у замка всего несколько штифтов, поэтому подобрать отмычку легко. Воры могут обойти нашу защиту и залезть в окно. В технологических системах диапазон атак кажется бесконечным и, возможно, непознаваемым – далее в книге мы решим эту проблему.
Одна из причин того, что нам не удается создать защищенные системы, заключается в том, что нападающие обладают огромными преимуществами. Они могут изучить объект нападения, запланировать атаки и запускать их только тогда, когда чувствуют себя уверенно. Они могут делать что захотят, чтобы получить контроль над системой, заставить ее вести себя неправильно или поставить в неловкое положение ее создателя. И кое-что из того, что делают нападающие, действительно очень умно, и все, что они делают, – неожиданно. Это крайне важно. В прекрасном небольшом видео The Death Star Architect Speaks Out («Архитектор „Звезды смерти“ высказывается») архитектор говорит: «Этот выстрел был буквально невозможен без приложения магических сил. Если бы кто-то сказал мне учитывать космических волшебников при проектировании газоотводной шахты, возможно, у нас все еще была бы „Звезда смерти“».
Он дело говорит. Слишком часто исследователи безопасности становятся известными из-за того, что указывают недостатки в уже готовых системах… как инженеры, не знающие, что торпеда не может просто так пролететь сотни миль по трубопроводам – турбулентность собьет ее с курса. Как будто бы эксперты по безопасности тебя судят и на каждый вопрос отвечают, закатывая глаза и повторяя: «Прислушайся к своим ощущениям». Но в этой книге мы сосредоточимся на важных угрозах.
Эксперт по безопасности и писатель Брюс Шнайер однажды признался: «Когда я посещал Агентство национальной безопасности (АНБ), я попросил сотрудников показать мне „Большую книгу атак“. Они мне ответили, что нет одного такого места, где все атаки были бы описаны». Упущение, которое мы намерены исправить. Это важно, потому что «атаки» легче понять, если есть их заранее подготовленный список. Это не попытка классифицировать каждую атаку или сделать список исчерпывающим. Подобное могло бы вас удивить или даже обеспокоить. Однако реальность такова, что проблемы безопасности – это нарушения требований безопасности. Требования для разных систем разные. Следует ли мне учитывать нарушения требований к ядерным бомбам или к печати денег? («Активировать систему может менее двух человек» или «Другой потребитель может использовать такое же бумажное сырье».) Такая полнота не позволит сразу выявить наиболее распространенные атаки и затруднит быстрое определение угроз, которые могут вдохновить вас, позволить вам рассуждать по аналогии и обнаружить атаки на ваши собственные системы. Вся загвоздка в понимании угроз, и до сих пор понимать их было непросто.
Кто-то однажды написал: «Все интересные системы удивляют своего создателя». Это свойство, которое переводит их из полезных в интересные. Проблемы безопасности – это часто сюрпризы. Они используют не только существующие ошибки, но и неспособность архитекторов разработать защиту.
Внимание человека – это суровый хозяин. Трудно воспринять то, чего ты не замечаешь. Мое намерение каталогизировать общие проблемы – это попытка показать, на что нужно обращать внимание. Что нужно рассмотреть, собрать, организовать и представить, чтобы получить некоторую ясность, как выглядит набор вещей, которые «нужно учитывать». Если то, о чем написано в этой книге, проигнорировано, вероятно, следует говорить об ошибке инженера. Это не значит, что мы провозглашаем: «Все остальное игнорировать можно». Точно так же, как пилот должен посадить самолет, а не просто выполнить все пункты обязательных инструкций, или хирург должен вылечить пациента, а не сделать все по порядку, так и то, что следует учитывать, не ограничивается содержанием страниц этой книги.
Внимание человека – и правда суровый хозяин. Даниэль Канеман, лауреат Нобелевской премии и основатель поведенческой экономики, в своей чудесной книге «Думай медленно, решай быстро» (Thinking Fast and Slow) использует один единственный акроним: WYSIATI. What You See Is All There Is (Что ты видишь, то и есть). Важность того, что прямо перед нами, так велика, что она вытесняет наши попытки «оставаться в курсе» и «держать в уме». И все же, как инженер, вы должны делать именно это – держать в уме надежность, производительность, дизайн интерфейсов, эксплуатационные характеристики и великое множество других свойств. У нас есть набор инструментов для того, чтобы управиться с такими вещами, включая автоматизацию, контрольные списки и оценку команд специалистов разного профиля.
При написании этой книги я иду на определенный компромисс и предполагаю, что методы защиты известны и понятны или, по крайней мере, могут быть поняты, как только вы поймете угрозы. Поэтому я сосредоточусь на угрозах и защиты буду касаться только вскользь. Я вынужден пойти на это, чтобы сделать книгу короче и доходчивее.
Введение
Очень многому я учусь у моих студентов. Когда я слышу вопросы, которые они задают, и читаю работы, которые они сдают, я узнаю´, с какими трудностями они встретились, обеспечивая безопасность своих систем. Тому, что я знаю об угрозах, я обязан десятилетиям карьеры, нескольким мудрым учителям и множеству совершённых ошибок. Как я упоминал в разделе «Благодарности», появление этой книги простимулировано простым вопросом «Где я могу узнать больше об этих угрозах?».
Подобно тому, как говорят: «Я чувствую, что в нем есть что-то хорошее» – я чувствовал этот вопрос во многих разговорах. За словом «безопасность» скрывается немало сложностей и нюансов. Я собрался было сказать, что мы узнаём об угрозах благодаря постепенному осознанию, но это неправда. Мы скорее узнаём об угрозах, когда что-нибудь идет не так. Даже когда это «что-нибудь» размером меньше, чем «Звезда смерти», уроки часто бывают травматическими, иногда меняющими карьеру. Трагедия – плохой учитель.
Если мы хотим систематического исследования угроз нашим продуктам, мы должны структурировать то, как мы узнаём об угрозах и как мы учим этому.
Для кого эта книга
Эта книга – для каждого инженера.
Она будет наиболее полезна тем, кто строит или использует сложные системы, насыщенные программным обеспечением. В инжиниринге иногда приходится идти на тяжелые компромиссы, которые становятся еще тяжелее, когда цели обеспечения безопасности неясны или расплывчаты. Книга сфокусирована на системах, которые включают код, но где его нет в наше время? Инженеры, которые работают в более традиционных отраслях (аэрокосмическая, химическая, гражданское строительство, машиностроение), обнаруживают, что элегантные механические системы прежних времен сейчас вытесняются. Ваши системы теперь просто обязаны иметь дело с кодом, и вы должны заниматься его безопасностью.
За последние несколько десятилетий профессия разработки программного обеспечения и эксплуатации систем изменилась. Мы поняли, что надежды со временем дооснастить системы свойствами доступности, надежности и удобства использования дорого нам обходятся и что необходимо внедрять эти свойства с самого начала. С безопасностью то же самое. Выбор, сделанный во время разработки системы, имеет последствия. Необходимо более раннее и целостное решение проблем безопасности.
Эта книга – для профессионалов и энтузиастов в сфере безопасности. Есть множество направлений в разных отраслях, которые ориентированы на безопасность и взломы. Не во всех из них существует обширная структура, помогающая организовать поток информации об угрозах, уязвимостях и эксплойтах, с которыми вы можете столкнуться. Я надеюсь, что моя книга будет полезна и в таких случаях.
Это книга – для каждого инженера, даже если он не поклонник научной фантастики, а если поклонник, то все равно, к какому фандому он принадлежит. Когда я рассказываю о своей книге, поклонники «Звездного пути» выглядывают из туманностей, чтобы спросить: «Почему?» Я тоже люблю «Путь». Мне нравится оптимистический взгляд на будущее, уважительное отношение создателей сериала к науке и профессиональной компетентности, а также сценарий и развитие характеров. Изначально в рукописи было посвящение «Смело защищать то, что еще не защищал ни один человек!» как дань уважения «Звездному пути». Моя команда сказала, что это слишком резко для начала книги, и они были правы.
Какую пользу принесет вам эта книга
Безопасность.
Более конкретно, вы достигнете понимания безопасности такими способами, которые позволят вам строить и эксплуатировать системы, способные работать несмотря на происки врагов. Подобно тому, как понимание силы (в смысле массы, умноженной на ускорение) позволяет нам думать о различных частях мира и применять ее в своих проектах, эта книга обеспечивает вас долговечной основой для прогнозирования угроз.
По традиции здесь приводят бесконечный список просчетов в безопасности в надежде мотивировать читателей. Не похоже, что это помогает, так что я даже не буду начинать. В 2023 году главный вопрос безопасности больше не «Почему?». Теперь это «Что?» и «Как?».
Несколько слов для неинженеров
Эта книга написана для инженеров: людей, которые строят или эксплуатируют сложные технические системы, в особенности алгоритмы, микросхемы, датчики и исполнительные механизмы этих систем. Она написана так ясно, насколько это возможно в разумных пределах, и, если вы не технарь и просто ищете рекомендации, я хочу посоветовать вам сделать три вещи.
Во-первых, включите автоматические обновления для всего, особенно для устройств, операционных систем и веб-браузеров. Подготовленные инженерами обновления очень часто исправляют проблемы безопасности, которые могут быть использованы автоматически. Если ваш поставщик смешивает функциональные изменения и исправления, касающиеся безопасности, громко жалуйтесь. Но этот шаг – решающая защита от подобных уязвимостей.
Во-вторых, используйте менеджер паролей и доверьте ему создавать для вас сложные произвольные пароли. Одна из разновидностей нарушения безопасности – это когда с веб-сайта крадут ваш адрес электронной почты и пароль. Организаторы атак собирают эти списки и торгуют ими, а также проверяют эти комбинации на каждом сайте, до которого могут дотянуться. Они также перебирают варианты. Они знают, что мой пароль для Amazon может быть adamamazon или amazonas1, а компьютеры очень хороши в подборе такого типа комбинаций, наряду с amazon-feb и другими, о которых вы могли подумать. Используйте длинные произвольные последовательности в качестве паролей. Между прочим, я использую в качестве менеджера паролей 1Password компании Agilebits и могу его рекомендовать. (У нас нет деловых отношений с этой компанией.)
В-третьих, доверяйте вашим ощущениям. Если вы чувствуете, что сайт небезопасен, покиньте его. Найдите компанию с помощью поиска или закладки. Если вы думаете, что адрес электронной почты подозрителен, позвоните человеку или организации, от имени которой послано письмо. Используйте номер телефона на обратной стороне вашей банковской карты, чтобы позвонить в банк. В каждом из этих случаев вы сохраняете контроль и используете ресурсы, на которые атакующие не могут повлиять.
Возможно, злоумышленники смогут даже подменить банковскую карту в вашем бумажнике. Если они такие умные, обратитесь за профессиональной помощью. Это не сарказм. Если против вас шпионское агентство, у которого достаточно времени и энергии, чтобы подделать карту и засунуть ее в ваш бумажник, эти советы вас уже не спасут.
Еще два возможных шага, если хотите дополнительной безопасности. Во-первых, заведите особые адреса электронной почты для особых отношений. Заведите адрес типа hiufd-suapre8wafdsjkf@gmail.com и используйте его для банка или всех ваших банков. Это защитит вас, если атакующие завладеют вашим главным почтовым аккаунтом, и поможет отсортировать почту с фишингом. Если вы используете этот адрес только для вашего банка, то любое сообщение от банка в основном аккаунте автоматически становится подозрительным. Смотрите выше замечание о том, что стоит доверять ощущениям.
Наконец, я использую отдельный браузер и профиль пользователя в браузере для онлайн-банкинга. Программное обеспечение браузеров в наше время достаточно надежно, но со всеми этим атаками я чувствую себя более защищенным, используя для этого малоиспользуемый браузер. (В настоящее время один из моих браузеров – Firefox, а другой – Chrome. Когда-то это были два разных аккаунта в Firefox с очень разным визуальным оформлением.)
Это все. Вот мои советы. Спасибо за то, что купили эту книгу. Буду рад, если вы ее прочитаете или передадите технарю или начинающему технарю, которого знаете. В любом случае я буду предполагать, что мой читатель технически подкован, поэтому мы будем говорить на двоичных языках, которые пронизывают ткань как далекой-далекой галактики, так и нашего собственного мира.
Позвольте привлечь ваше внимание к принципу, который лежит в основе этих советов: изоляция. Менеджер паролей изолирует сайты друг от друга, то же самое делает использование двух разных почтовых аккаунтов или двух браузеров. Уход с сайта или звонок в банк позволяют покинуть место атаки. Эта изоляция, отделение частей системы друг от друга, – также причина того, что у нас есть разные учетные записи компьютеров, файрволы и другие методы защиты.
Конечно, за каждый уровень изоляции нам приходится платить удобством. Если вы не позволяете программному обеспечению беспрепятственно взаимодействовать друг с другом, это означает, что вам придется предпринимать определенные усилия, чтобы оно взаимодействовало, и злоумышленникам нужно будет как-то обманом заставить вас сделать это.
Печально, но этот совет вы услышите не от каждого. Нам недостает информации о коренных причинах и истории инцидентов, которые помогли бы нам расставить приоритеты. Об этой проблеме я пишу в другом месте и не буду углубляться в нее в этой книге.
Терминология безопасности
У вас в руках книга об угрозах. Мы все узнаём угрозу, когда слышим: «Гони деньги, не то получишь!» или «Я изменил условия сделки. Молитесь, чтобы… в последний раз». Я использую термин «угроза», имея в виду некоторую будущую проблему, которую часто можно предотвратить, если принять профилактические меры.
В отрасли безопасности слово угроза используется по-разному. Мы называем злоумышленника угрозой или носителем угрозы. В той части отрасли, где занимаются защитой от вредоносного программного обеспечения, угрозой называют каждый вирус или фрагмент вредоносного кода.
Исполнение угрозы – это нападение. Каждая угроза, ее проявление и ее воздействие могут вызывать беспокойство. В законе реальная угроза рассматривается как насилие; ударить кого-то – это «избиение» в словосочетании «нападение и избиение». Это может привести к травме. В кибербезопасности мы часто беспокоимся и об угрозе, и о ее результате. Если кто-то совершает взлом под видом законного пользователя (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 очень хорош.
Намного лучше использовать более одного типа факторов, и это называется многофакторной аутентификацией. Термин «многошаговая» обычно обозначает то же самое, но смещает акцент на шаги, через которые проходит личность, а не на их силу.
Традиционные факторы обозначают как «Что вы знаете», «Что у вас есть» и «Кто вы такой». Они были дополнены такими факторами, как «Где вы находитесь», «Как вы связываетесь» и «Кого вы знаете». Фактор «Где вы находитесь» использовался по умолчанию в эпоху первых компьютеров (рядом со стеклянной комнатой с центральной ЭВМ), потом вышел из употребления на какое-то время и недавно снова появился, включая использование сигналов GPS, а также наносекундный тайминг в часах компании Apple для отпирания ассоциированного с ними компьютера. Канал, который вы используете для связи, может подвергать вас риску (личному) или быть неудобным для самозванца. Звоня по телефону, я рискую обнаружить, что не говорю на языке вуки.
«Кого вы знаете» может включать ваш новый пароль, выданный вашему менеджеру или системе социальной аутентификции, чтобы понять, знаете ли вы своих друзей, чтобы вернуться в соцсеть, или просьбу для доверенных лиц установить подлинность вашей личности, чтобы вернуться на какой-то другой аккаунт. Эти социальные аутентификаторы не так распространены, но, если вам интересно, я обсуждаю возникающие для них угрозы в главе 14 «Учетные записи и идентификация» моей книги Threat Modeling: Designing for Security («Моделирование угроз: проектирование для обеспечения безопасности»).
Традиционные факторы аутентификации часто пародируются как «Что вы забыли, что вы потеряли и каким вы были, когда были моложе и здоровее». Эти проблемы означают, что нам нужны резервные методы аутентификации.
Резервную аутентификацию именуют по-разному: «Забыл пароль», «Восстановление пароля» или «Восстановление учетной записи». Последний вариант наиболее точный: никому дела нет до восстановления своего пароля; все просто хотят получить доступ к учетной записи. Мне вообще не нужно, чтобы я когда-либо знал ваш дурацкий пароль, чтобы получить доступ к некоторой возможности, и вообще-то это не обязательно должна быть моя учетная запись. Это не мелочные придирки, понимание проблемы – ключ к ее надежному решению. Эти резервные системы аутентификации лучше всего работают, если они используют секреты, известные как можно меньшему количеству людей. («Где вы использовали вашу кредитную карту последние три раза?» известно только вам, вашему банку, процессинговой компании кредитных карт, торговым точкам и их агентствам маркетинговых исследований, в то время как «В какую школу вы ходили?» известно всем вашим друзьям в соцсетях и друзьям ваших друзей.)
Иногда дополнительные шаги или факторы выполняются как часть авторизации: вы можете зарегистрироваться (log in) с помощью некоторого пароля, но, чтобы добавить получателя платежа, может потребоваться что-то большее. Такой шаблон обеспечивает некоторое удобство использования (usability), за которое платишь конфиденциальной информацией вроде ваших последних транзакций, которая используется для такой сильной аутентификции. Или, в некоторых случаях, это делается ценой безопасности учетной записи, когда эта конфиденциальная информация используется, несмотря на ее раскрытие. Мы подробнее коснемся полномочий и авторизации в главе 6 «Расширение полномочий и изоляция».
Вредоносные программы все чаще имитируют человека, и появился новый аспект в аутентификации людей, а именно аутентичные жесты. Они улавливаются локальной операционной системой на низком уровне и используются для разблокировки хранилищ паролей и тому подобного. Они устроены так, чтобы гарантировать, что «обычное вредоносное программное обеспечение» не сможет имитировать личность. Однако они полагаются на то, что оборудование заслуживает доверия, так что злоумышленник, который дает вам новую мышь, может быть в состоянии обойти аутентичные жесты.
Аутентификация компьютеров людьми
Трудно сказать, когда впервые был создан фальшивый экран для ввода логина и пароля: вероятно, в те времена, когда телетайпы заменили на электронные терминалы. Легко было написать программу, которая бы вывела на экран LOGIN:, приняла бы и сохранила имя и пароль, вывела бы Login incorrect (Неправильный логин) и отключилась бы, позволив выполняться настоящей программе для ввода логина и пароля.
Вот почему комбинация Ctrl+Alt+Delete помогала держать ваш компьютер в безопасности: она возвращала вам заведомо настоящую экранную страницу входа. Аналогично кнопка Home на вашем телефоне не может быть перехвачена какой-либо программой, и в идеальном случае это верно для жестов, которые заменяют физические кнопки. Фишинг – это разновидность такого подхода, просто компьютер, которому вы шлете свою аутентифицирующую информацию, находится дальше. Современные схемы фишинга будут запрашивать у вас код, посланный смской на ваш телефон или отправленный на вашу электронную почту. Аналогично мошенники сфальсифицируют информацию о вызывающем (Caller ID), чтобы это выглядело так, будто вам звонят из учреждения, которому вы доверяете: ваш банк или Имперское бюро безопасности Галактической Империи.
Человеку трудно аутентифицировать удаленные компьютеры. Обычно мы верим, что наш локальный компьютер хорошо понимает, что мы имеем в виду, и отвечает так, что мы правильно его интерпретируем. (Я отношусь к этому еще более скептически, чем прозвучало, но проблема невероятно сложна.)
Можем ли мы понять, с каким компьютером общаемся? Конечно, с определенной точки зрения. Большинство веб-сайтов, которыми мы пользуемся, полагаются на некоторую комбинацию независимо управляемых компьютерных систем: веб-сервер, сеть распространения контента (CDN) или различные инструменты рекламы, трекинга и анализа. Когда это так и задумано, мы не размышляем об этом как о проблеме, за исключением, возможно, приватности, но я упомянул об этом, чтобы проиллюстрировать, что большинство людей не задумываются, с каким компьютером они общаются. Уверенность в подлинности удаленного компьютера наиболее важна, когда он запрашивает информацию для аутентификации или другие конфиденциальные данные: мы хотим, чтобы наше мысленное представление было достаточно точным, даже если наше понимание ограничено.
Мы можем распознать C-3PO из-за характерного голоса и манерности, которую создал Энтони Дэниэлс. К сожалению, большинство компьютеров не так легко опознать. Существует множество инструментов, которые облегчают распознавание компьютера, и они часто меняются, чтобы злоумышленникам было легче сбить вас с толку относительно того, что вас ждет сегодня. Подождите, я не думаю, что это делается специально, но это реальный эффект изменений. Инструменты часто меняются в надежде справиться с новыми атаками. Чтобы обезопасить себя от всего этого, нужно взять ситуацию под контроль: нажмите Ctrl+Alt+Delete, откройте сохраненную вами страницу вашего банка, позвоните по номеру, указанному на обратной стороне вашей банковской карты. Это работает гораздо лучше, когда организации упрощают для вас доступ к нужному человеку или человеку с нужной информацией, когда вы берете под контроль процесс аутентификации.
Аутентификация компьютеров компьютерами
Аутентификация важна всякий раз, когда у вас есть вызов, например listen(socket_id). То, что находится по другую сторону этого сокета, должно быть идентифицировано. Когда R2-D2 подключается к сокету, «Звезда смерти» позволяет выполнять всевозможные запросы, возвращая чрезвычайно важную информацию о местонахождении заключенных. Учитывая конфиденциальность полученных данных, мы можем только надеяться, что учетная запись не была guest или rebelscum (гнусный повстанец), но что это было и как R2-D2 доказал возможность использовать эту учетную запись?
Каждая аутентификация может иметь некоторую многоуровневую комбинацию технических и человеческих идентификаторов. Например, у удаленного хоста, вероятно, есть IP-адрес. Он может предоставлять какую-либо форму идентификатора клиента, например файл cookie или токен OAuth. Кроме того, он может иметь идентификаторы человека или сервиса.
Когда клиент инициирует подключение к серверу, любая из сторон может потребовать аутентификацию. Сложности возникают, когда на акт подключения может влиять другой компьютер или когда эта аутентификация осуществляется от имени человека. Простейшим случаем может быть использование Telnet для подключения к IP‐адресу: это происходит в ответ на ввод человеком команды, на которую трудно повлиять. Но чуть более сложные примеры, такие как отправка электронной почты, подвержены влиянию. Если я попытаюсь отправить электронное письмо адресату luke@threatsbook.com, мой почтовый клиент подключится к моему почтовому серверу, который будет использовать DNS для поиска записи MX для threatsbook.com и подключения к этому сайту. DNS-сервер для threatsbook.com может влиять на то, куда будет подключаться мой почтовый сервер.
Спуфинг может произойти, когда ваш код прямо или косвенно вызывает метод listen(). В случае косвенного вызова, возможно, веб-сервер вызывает listen(), разбирает сообщения TLS и HTTP и передает что-то более «уточненное». Код по-прежнему должен идентифицировать вызывающую сторону. Веб-сервер может выполнять часть этой работы, и даже в этом случае вам вполне может потребоваться сопоставить таблицу учетных записей сервера с таблицей, используемой в ваших базах данных. Например, я могу войти в систему как adam@threatsbook.com и иметь customer_id 1234.
Компьютеры часто идентифицируют друг друга, используя сочетание криптографических сертификатов и идентификаторов, удобочитаемых для человека. Например, если darthvader@threatsbook.com отправляет почту anakin@threatmodelingbook.com, то почтовый сервер threatsbook должен найти домен threatmodelingbook и принять решение о доверии сертификату TLS, который предоставляет сайт. Почтовый сервер threatmodelingbook должен принимать решения о почте, поступающей от threatsbook, и решать, заслуживает ли этот сервер доверия. На многих этапах этого процесса есть криптографический ключ, подписанный так называемым сертификатом, и инструмент, который предоставляет политику, согласно которой этому сертификату следует доверять. Как правило, они относятся либо к корневому центру сертификации, подписавшему сертификат, либо к его персистентности. Персистентность означает, что ключ был ранее авторизован для использования в сочетании с именем хоста. SSH демонстрирует хорошую схему подсказок при представлении нового ключа, подчеркивая, изменился ли он по сравнению с тем, что было представлено ранее.
Спуфинг-атаки
В этой главе спуфинг рассматривался как нарушение подлинности. Я хочу, чтобы вы подумали о нем шире: думайте о спуфинг-атаках как о разрыве или запутывании связи между идентификатором и объектом.
Во многих из них злоумышленник намеренно вводит эту путаницу. Но если мы думаем о спуфинге как о нарушении подлинности, мы можем оказаться в неожиданных местах. Например, если почтовый клиент автоматически заполняет адрес электронной почты, это может быть несоответствием между намерением, действием и подлинным соответствием этого автозаполнения намерению. Может показаться странным относить это к спуфингу, но в контексте подлинности (аутентичности) это разумно.
Спуфинг файлов
Путаница в том, какой именно файл представлен некоторым именем, может быть результатом человеческой неточности или подмены файла злоумышленником. И, в отличие от C-3PO, большинство компьютеров не спрашивают: «Какие планы? О чем ты говоришь?» Люди дают файлам самые ужасные имена и сохраняют файлы в нескольких каталогах, но угрозы возникают там, где злоумышленник может подменить файл.
Открытие файлов
Идентификатор файла – это имя файла. Оно может быть подделано, когда файл указан недостаточно определенно (open «config.txt»). Если файл содержит удаленную ссылку, такую как http://example.com/config.txt, связь с example.com может быть подделана.
Простейшей формой поддельных файлов является невозможность получить файл, когда вы его открываете. Например, какой файл открывает fd = open («./file.txt»)?
Если вы скажете своему компьютеру open(«~/.ssh/id_rsa»), то файл, который вы в результате получите, зависит от реализации open() и от эффективного либо реального UID-процесса. Было бы ошибкой уделять здесь слишком много внимания определению «угрозы спуфинга». Гораздо важнее, чтобы ваш код обрабатывал эти потенциальные неточности или неоднозначности безопасным, надежным и защищенным способом. Что еще более важно: если вы не уверены в том, какой именно ресурс вы собираетесь получить или как он сопоставляется с вашими ожиданиями и историей с этим файлом, существуют риски безопасности, с которыми должен справиться ваш код, читающий этот файл.
Полный путь является лучшим подтверждением идентичности. Вы можете быть уверены, когда вызываете open(«/etc/passwd») или когда добавляете тщательно проверенный префикс (/usr/local). Но это не всегда позволит вам получить тот файл, который вы ожидаете!
Например, /tmp/file.txt может принадлежать любому пользователю системы и иметь удивительное содержимое. Добавление случайных чисел не защищает вас; open(«/tmp/file2345.txt») требует только, чтобы злоумышленник создал 10 000 файлов (или символических ссылок), чтобы гарантировать, что они контролируют файл, который вы открываете.
Открытие неожиданного файла становится более неприятным, когда открытый файл интерпретируется как код, например, когда open заменяется на dlopen или LoadLibrary. (Открытие файла и его неожиданная интерпретация как кода еще более неприятны, это описано в главе 8 «Распознавание и порча».) Каждая функция загрузки библиотеки имеет путь поиска, и на этот путь поиска можно повлиять. В Unix-системах LD_LIBRARY_PATH и другие переменные окружения влияют на то, что открывается, создавая проблему, особенно для setuid-кода. В Windows набор путей для поиска библиотек по умолчанию уже давно включает текущую папку (.), и это создает проблемы для кода, выполняемого из общей папки загрузок. Все, что нужно сделать злоумышленнику, это найти библиотеку, которая есть не во всех системах, а затем загрузить ее в папку для загрузок, и любые программы, запущенные оттуда, будут послушно использовать эту библиотеку. Это часто называют проблемой «попутной загрузки», но на самом деле это проблема поддельной библиотеки.
Введение новой библиотеки в «доверенные» каталоги может изменить поведение уже установленных программ. Конечно, существуют и другие способы открытия программы, такие как семейство вызовов exec, все они могут быть вызваны с помощью неспецифических путей. Существует вариант, в котором нужный файл имеет имя типа npm: leftpad или BigBankValidationLibrary. Многие системы сборки также имеют путь поиска, и поэтому будут искать BigBankValidationLibrary всякий раз, когда ищут пакеты, такие как NPM или Maven. И оказывается, что ответ меняется, так что, если вчера эта библиотека была в приватном репозитории, а сегодня есть версия в публичном репозитории, что ж, мы должны взять публичную версию, верно? (В 2021 году исследователь безопасности Алекс Бирсан (Alex Birsan) создал впечатляющую демонстрацию этого с помощью различных трюков, чтобы показать, что запускаются именно его библиотеки, чтобы он мог собирать вознаграждения за обнаруженные ошибки [Montalbano, 2021].)
Природа пути к файлу становится еще более непростой, когда имя сформировано не от корня локальной машины. Один из пределов сложности образуют URL-адреса, которые обсуждаются в главе 8. Может случиться так, что указание файла через URL-адрес сделает указатель более конкретным, или добавит безопасности за счет TLS. Но это также может усложнить синтаксический анализ, привести к сбоям или возможностям для атаки, даже если URL-адрес является статической строкой в коде. Сложность добавляется тем, что библиотека должна взять путь file:///etc/passwd, распознать, что это URL-адрес файла, и следовать соответствующей ветке кода. При вызове удаленных компьютеров появляются дополнительные режимы сбоя. Если вы ссылаетесь на файл как на https://example.com/style.css, есть вероятность, что этот файл стилей будет недоступен или вы получите либо старую, либо искусно вставленную кэшированную версию. Если вы владеете доменом example.com и лично поддерживаете его, этот риск снижается. И наоборот, становится выше по мере ослабления вашего контроля. Существуют также вредоносные режимы сбоя, которые также более подробно рассматриваются в главе 8. А пока представьте, что кто-то взломал www.example.com и заменил файл, на который вы полагаетесь. Разумно предположить, что такой инцидент больше соответствует определению «подделки», но примеры, когда хост подделывается, более сложны для объяснения и рассматриваются в разделе «Спуфинг машин».
Подделка файлов
Другой способ подмены файла – заставить кого-то открыть файл, который, по его мнению, аутентифицирован. Злоумышленник может сделать это, захватив компьютер, чтобы предложить поддельные файлы, изменить цифровые подписи или воспользоваться слабостями в схемах аутентификации. Например, возможно, когда R2-D2 открывает файлы на «Звезде смерти», эти файлы поступают из приманки (сервера-ловушки), и именно поэтому так легко удается найти, где содержится принцесса Лея.
Атаки на схемы цифровой подписи могут происходить из-за того, что алгоритм, используемый для подписи, слаб или даже сломан, из-за того, что ключ слишком короткий, плохо сгенерирован, украден или подменен, или из-за проблем с кодировкой, когда части файла не подписаны. Они также могут возникать, когда используется надежный алгоритм с хорошо сгенерированным и хорошо защищенным ключом, но система, проверяющая подпись, отображает недостаточную информацию о подписи. Эта недостаточность может быть такой же, как просто сказать «подпись валидирована» или «подпись валидирована как подпись Адама Шостака», вместо того чтобы сказать, какой ключ использовался, когда использовался и почему этот ключ считается доверенным. (Информации может оказаться много, и сделать ее понятной может быть непросто.)
Кроме того, можно изменить файл, не нарушая схему подписания. Это более распространено, чем вы могли бы ожидать. Например, в Windows можно добавить дополнительную информацию в подписанный файл и выполнить его. (Детали сложны, но вариантам проблемы были присвоены идентификаторы CVE-2012-0151 и CVE-2013-3900.)
Спуфинг процессов
Файлы – это не единственное пространство имен на компьютере. Процессы также имеют имена и способы обращения к ним. Многие протоколы локальной межпроцессной связи предполагают, что только правильный код может прослушивать определенный порт или файловый сокет. Точно так же в коде часто предполагается, что владельцем удаленного процесса должен быть root, потому что он прослушивает порт с номером меньше 1024.
После того как R2-D2 был похищен джавами, ему удается избежать контроля со стороны «блокиратора», который они установили, и продолжить свою миссию по доставке сообщения Оби-Вану Кеноби. Возможно, он запустил виртуальную машину и позволил блокиратору перенастроить ее, а не свою основную систему? Или, может быть, я слишком много об этом думаю. (На эту двусмысленность впервые указал Джим Дэвис.)
Спуфинг машин
Начнем с простой модели коммуникации между двумя машинами: назовем исходную машину SRC, а целевую машину – DST, как показано на рисунке 1.3. SRC отправляет пакет, и он прибывает к DST. Волшебно, правда? И до тех пор, пока SRC и DST находятся в сети, свободной от угроз, это легко! Но в интернете может быть более одной машины с именем DST. Могут быть DST.example.org и DST.example.com, а также могут быть другие машины, которые отправляют или получают пакеты, выдавая себя за то или иное. Это полезная и распространенная мысленная модель того, как машины общаются, и, как и все модели, она неверна. Злоумышленник может отправлять пакеты, различными способами утверждая, что они исходят от машины с именем SRC. Многие системы, которые авторизуются на основе IP-адреса, такие как rsh, устарели и были выведены из обращения, но другие, например межсетевые экраны, продолжают широко использоваться.

Рис. 1.3. Простая модель коммуникации
Имена машин подвержены подмене на каждом уровне сетевого стека и при каждом взаимодействии между такими именами. Рассмотрим «простой» запрос на dst.threatsbook.com/index.html и уточним потоки данных, поддерживающие этот запрос. Как показано на рисунке 1.4, создается множество соединений, каждое из которых подвержено спуфингу.
На каждом уровне и при каждом переходе злоумышленник может подделать адрес отправителя, чтобы создать впечатление, что пакет исходит от авторизованной машины.

Рис. 1.4. Множество соединений, поддерживающих запрос
Возможно, машина, которой притворяется взломщик, авторизована для отправки почты или для разрешения входа в систему без многофакторной аутентификации. Поддельные адреса отправителя часто ломают авторизацию, связанную с отправителями, или могут использоваться для обеспечения дополнительных уровней сбоя аутентификации. Когда поддельное сообщение является IP- или UDP-пакетом, вы можете подделать его «вслепую». Фальшивый источник будет получать ответы, но у вас нет необходимости управлять порядковыми номерами или другими вещами. Это становится все труднее сделать, если вы находитесь на расстоянии значительного количества сетевых переходов, так как многие сети теперь реализуют фильтрацию адресов источника и не будут пересылать пакеты, которые не должны были исходить из их сетей.
Будем считать, что это только что загруженный ноутбук, подключенный к физической локальной сети Ethernet. Каждый уровень подвержен угрозам. Например, возможно, DHCP-сервер выдал нам плохой DNS-сервер, или, возможно, он был неправильно настроен вручную. Причины обозначаются заглавной буквой, их следствия – строчной. Таким образом, D означает угрозы, которые неправильно направляют IP-пакеты, а d – пакеты, отправляемые не туда. Смотрите таблицу 1.1.
Таблица 1.1. Действия и угрозы

Вы могли бы думать о TCP-кадре, содержащем строку GET http://dst.threatsbook.com/index.html HTTP/2.0. Но этот кадр не перемещается сам по себе. Он инкапсулирован в IP, который может проходить через Wi-Fi для первого перехода, кабельный модем для следующего и через что угодно в качестве магистрали. Обычно мы игнорируем инкапсуляцию и декапсуляцию, но это может иметь значение, потому что угрозы возможны на каждом уровне стека и в каждой системе, которая добавляет, удаляет или изменяет уровень. На рисунке 1.4 показано сообщение, идущее от SRC к DST, с маршрутизатором посередине, и это часто полезная модель. Но эта модель позволяет легко забыть, что при каждом переходе пакет транслируется. Возможно, первый переход – это Wi-Fi, и точка доступа принимает пакет и добавляет заголовок Ethernet для отправки его на кабельный модем. Кабельный модем отбрасывает кадр Ethernet и добавляет заголовок docsis, и так далее. Как показано на рисунке 1.5, дейтаграмма IP остается неизменной для каждого прыжка, но изменяется локальная инкапсуляция. Каждая из этих систем – это машина в роли обезьянки посередине, и мы либо надеемся, что она добросовестно выполняет свою работу, либо добавляем средства защиты, чтобы гарантировать, что так и будет.

Рис. 1.5. Инкапсуляция пакетов, переходы
Таким образом, для любой из угроз D из таблицы 1.1 маршрутизатор может посылать пакеты (IP, TCP, HTTP) на фактическую spoofed.example.com и изменять ответы, или он может отправлять пакеты на альтернативную машину, настроенную так, чтобы притворяться, что она и есть spoofed.example.com. Другая инфраструктура маршрута обладает такой же способностью, и некоторые из ее элементов, такие как балансировщики нагрузки, размещаются там именно для выполнения этой технической фальсификации, часто с благими намерениями.
Распространение этого набора атак на вариант HTTPS с использованием украденного или выданного не тому запрашивающему сертификата или самозаверенного сертификата, принятого проверяющим, оставим в качестве упражнения для читателя.
Спуфинг в конкретных сценариях
Угрозы спуфинга не исчезнут из-за того, что ваше устройство маленькое. Существуют угрозы при аутентификации устройств, а также возможности использования встроенных датчиков. Мобильные телефоны могут быть оплотом выдачи желаемого за действительное вместо строгого анализа, и поэтому мы рассмотрим несколько распространенных проблем. Наконец, мы рассмотрим спуфинг в технологиях блокчейна.
Интернет вещей
Проектировщики должны учитывать, кто является законным пользователем и как он будет проходить аутентификацию на устройстве. Мы также должны подумать о том, как аутентифицировать устройство для других устройств, включая Wi-Fi, облачные серверы и т. д.
Многие простые устройства имеют одного пользователя, и простого присутствия может быть достаточно для аутентификации. Например, у телевизоров есть один локальный пользователь, а пульты дистанционного управления телевизором использовали инфракрасный свет, что было приятно, потому что стены блокировали его. Даже если вы не думаете, что вашему устройству потребуется несколько учетных записей, наличие более чем одной учетной записи, вероятно, пригодится, а то, что код не запускается от имени суперпользователя, является важным применением принципа минимальных привилегий, и это легко, если вы применяете его с самого начала.
Мир часто бывает удивительно сложным. Например, мы разместили этот телевизор в отеле, где продается контент для взрослых, и ему внезапно понадобился способ контролировать доступ к этому контенту для одних пользователей, но не для других, а отелю нужен способ сбрасывать PIN-код при выезде гостя.
Точно так же на некоторых телефонах теперь есть рабочие учетные записи и детские учетные записи. Модные автомобили поставляются с ключами парковщика.
Некоторые устройства, особенно развернутые на предприятиях, нуждаются в интеграции со службами каталогов Active Directory/LDAP. Хорошим примером является оснащение конференц-зала. Вам нужно будет выбрать безопасный процесс инициализации, помня о том, что злоумышленник может сбросить настройки устройства.
Безопасная аутентификация на новом устройстве может быть сложной задачей. Для многих устройств пароль был легко найден с помощью Google, потому что он является общим для всех устройств, сделанных производителем, или, что еще хуже, это что-то вроде admin и работает у разных производителей. Это электронный эквивалент двери без замка с табличкой «Только уполномоченный персонал». У злоумышленников в голове есть списки распространенных паролей и инструменты для подбора тысяч паролей по умолчанию, которые собираются и публикуются. Для других устройств паролем является что-то вроде Ethernet-адреса устройства, доступного любому пользователю локальной сети. Во многих юрисдикциях это уже недопустимо, и для каждого устройства требуется уникальный пароль. Вам нужно будет решить, будет ли он виден гостям, официантам и другим лицам, у которых может быть доступ к устройству.
Голосовой доступ означает, что физическое местоположение менее ограничено, чем вы думаете. Открытые окна похожи на открытые двери, или вы можете попросить Siri открыть их для вас. (Мы рассмотрим клонирование голоса в разделе «Атаки на фактор „Кто вы такой“» далее в этой главе.) Устройства могут быть размещены не в домах и частных офисах, а в магазинах, где персонал или клиенты могут быть мотивированы атаковать их, или в Airbnb, где у злоумышленника есть значительное время на атаку если он того пожелает.
Сегодня многие устройства с голосовым управлением не имеют учетных записей или аутентификации. Когда они их получат, вполне вероятно, что они будут настроены благодушно, чтобы уменьшить разочарование. Это не должно быть похоже на фильм «Тихушники» (Sneakers), где потребовалось много усилий, чтобы записать на пленку (!) голос Стивена Тоболовски, который говорит: «Мой голос – это мой паспорт. Подтвердите». Скорее всего, ваш голос будет представлять собой имя пользователя и пароль, объединенные в одно целое, и, скорее всего, его можно будет подделать.
Небольшие устройства, как правило, имеют ограниченный пользовательский интерфейс, что затрудняет ввод секретов, таких как пароли. Некоторые устройства решают эту проблему, проверяя подлинность устройства в облаке и предоставляя пользователю инструменты для связывания его учетной записи с учетной записью устройства. В этой архитектуре есть две важные проверки подлинности и важный и сложный набор авторизаций. Авторизация должна включать в себя как добавление учетной записи, так и ее удаление. Хорошие сценарии, которые стоит рассмотреть, включают парковщика, паркующего вашу машину, гостя Airbnb, устройство, проданное на дворовой распродаже, и сложный развод супругов.
Эти ограниченные пользовательские интерфейсы также затрудняют отображение индикаторов безопасности или данных, которые могут быть использованы при принятии решений о безопасности, включая URL-адреса. Существует веский аргумент в пользу того, что просить людей анализировать URL-адреса – это пустая трата времени и усилий [Herley, 2010], и этот аргумент подкрепляется ограничениями как IoT, так и мобильных телефонов.
Мобильные телефоны
Проблема малых пользовательских интерфейсов также проявляется на телефонах, где пространство экрана ограничено, а обеспечить привычные пользователю элементы пользовательского интерфейса затруднительно. Интуитивно понятно, что было бы логично, если бы приложения могли отправлять сообщения приложению магазина приложений. Например, игра может отправить сообщение в магазин приложений, а магазин приложений может взять с меня несколько долларов за волшебный меч. Как узнать, что я нахожусь в магазине приложений, а не в поддельном пользовательском интерфейсе, который выглядит похоже? Как узнать, что я передаю свою кредитную карту нужному приложению, а не поддельному? Я ожидаю аналогичных угроз спуфинга для голосовых приложений и устройств с голосовым управлением.
Пара распространенных заблуждений заключается в том, что телефоны сопоставляются один к одному с людьми и что телефонные номера являются хорошими аутентификаторами. Многие люди верят в глубоко демократический принцип «один человек – один телефон», но это не так. Некоторые люди имеют более одного телефона или более одной SIM-карты, особенно за пределами США.
Некоторые телефоны используются более чем одним человеком: подумайте о родителях, одалживающих телефон ребенку, или о партнерах, которые отвечают на звонки друг друга. Пары (особенно пожилые) могут пользоваться общим телефоном, в то время как молодые могут иметь полный доступ к телефонам друг друга. Есть также люди, у которых нет телефонов из-за их жизненных обстоятельств. Бедные люди (особенно в менее развитых странах) могут быть не в состоянии позволить себе современный мобильный телефон с большой пропускной способностью. Пожилые люди могут отказаться от телефонов из-за проблем со слухом; у детей может еще не быть телефонов.
С другой стороны, телефонные номера легко найти в небольших количествах и не так уж трудно получить в больших количествах. В первом случае достаточно любого крупного магазина, а во втором случае создайте бизнес и покупайте линии оптом.
Мобильные телефоны также имеют много проблем, связанных с другими мелочами, особенно когда дело доходит до ввода секретов, таких как пароли или ключи. Они также стали иметь решающее значение для многих способов аутентификации и, таким образом, являются заманчивыми целями для злоумышленников, которые либо используют эту технологию, либо пытаются обманом заставить человека раскрыть аутентификационную информацию.
Облако
Многие облачные системы поддерживают сложное многоуровневое делегирование полномочий. Текст «Терминология и понятия организаций» одного из поставщиков облачных услуг начинается с обсуждения «базовой организации, состоящей из пяти учетных записей, которые организованы в четыре организационные единицы под корнем». Существует управляющая учетная запись, которая обладает бóльшими полномочиями, а также возможность назначать разрешения этим учетным записям в политиках. Если существует более одной учетной записи и человек их регулярно использует, скорее всего, возникнет путаница. (Хочу подчеркнуть: сложность быстро растет!)
Если образ компьютера в облаке содержит пароли или криптографические ключи, то каждый запущенный экземпляр будет иметь одни и те же аутентификаторы, и любой, кто украдет образ компьютера, также будет иметь копии. Современная практика, как правило, заключается в том, что машина запрашивает или регистрирует случайные ключи в секретном хранилище той или иной структуры. У каждого крупного облачного провайдера есть рекомендации по безопасной начальной загрузке этих ключей.
Соображения по аутентификации в организациях
Нам регулярно приходится удостоверять свою личность в организациях, включая наши банки, школы, коммунальные компании и тому подобное. Нам также необходимо подтверждать свои свойства, такие как кредитоспособность, трудоспособность или возраст для покупки алкоголя.
Когда люди отвечают за проверку информации о незнакомцах, удивительно трудно определить, что такое «хорошо», и претворить это в жизнь нормальным образом. Трудно сопоставить человека с маленькой фотографией, сделанной много лет назад и напечатанной как часть удостоверения личности. Когда свойство – это «коллега по работе в крупной организации», социальное давление, заставляющее сказать «ОК», может оказаться высоким. Злоумышленники будут изучать руководства целевой организации, чтобы говорить как их жертвы. Люк и Хан знают, что у них нет хорошего ответа на вопрос «Ваш боевой номер?», когда они притворяются штурмовиками, поэтому им приходится сделать вид, что их рация неисправна.
Есть много нюансов. Например, мое удостоверение личности университета штата является «удостоверением личности государственного образца», но оно, вероятно, не позволит мне сесть в самолет. Уровень требуемых доказательств, как правило, должен уравновешивать требования безопасности и бизнеса, то есть быть достаточно хорошим, чтобы можно было сказать: «Мы честно старались соблюсти правила», – и не растерять при этом слишком много клиентов. Многие свойства этих проверок подлинности являются общими с проверкой подлинности на компьютерах; люди, как правило, справляются с исключениями, но компьютер менее гибок, хорошо это или плохо. Точно так же требования к обширной документации должны быть сбалансированы с потребностями клиентов, которые могут посчитать ее чрезмерно навязчивой. Безопасность является одной из нескольких важных составляющих в этих расчетах.
Мы также должны регулярно подтверждать, что тот, кто обратился к нам, действительно представляет организацию, которую он якобы представляет. Ваш банк, налоговая, магазин с проблемами доставки… откуда мы знаем, что это они? Мой вам совет: возьмите разговор под свой контроль, начав новое взаимодействие с подтвержденного адреса. Другими словами, позвоните по номеру телефона, указанному на вашей карте, войдите в систему, используя закладку, чтобы связаться с подлинным банком, или иным образом убедитесь, что вы попали в нужное место. Часто бывает трудно достучаться до человека, который знает о вашей проблеме. Большинство организаций могли бы справляться с этим гораздо лучше.
Механизмы спуфинговых атак
Мы говорили о подмене файлов и процессов на компьютере, подмене между узлами в сети и подмене людей. Я хочу обратить ваше внимание на некоторые общие черты в механике, а не в жертве.
Используемые механизмы включают ложную репрезентацию, воровство, захват, путаницу в пространстве имен, использование отображений между уровнями и сбивание с толку представителей. Существует также обширный набор атак на техники аутентификации.
Ложная репрезентация
Ложная репрезентация – это просто утверждение другой идентичности. Я мог бы в электронном письме назваться Люком Скайуокером, но никто не примет меня за мастера-джедая только поэтому. В конце концов, у джедаев нет электронной почты. Но я при этом и не предлагаю точной информации о себе. У меня может быть учетная запись «инструктора по моделированию угроз», которая является точной, но это не указано в моем удостоверении личности. Обычно я не считаю это ложной репрезентацией. Люди должны иметь возможность называть себя так, как они хотят, если только они не делают это для того, чтобы обмануть, и правила, пытающиеся ограничить их «настоящими именами», почти всегда вызывают больше проблем, чем они того стоят.
Существуют слои, в которых может иметь место ложная репрезентация. Я могу установить отображаемое имя Билл Гейтс; возможно, я получу адрес электронной почты billg59@example.com. Я мог бы зарегистрировать домен, gatesfoundation.com или gatesfoundat1on.com, который, по мнению кого-то, представляет Фонд Гейтса (и его несуществующую лотерею).
Иногда происходит прямая ложная репрезентация: «Я нигерийский принц», в других случаях подразумевается, что подобные выводы сделает сам адресат. А еще бывает, что утверждение может быть и правдивым, и вводящим в заблуждение: существует не один Гейтс с фондом, но только один приходит на ум.
Существует также ложная репрезентация, когда текст показывает не то, что, по вашему мнению, он показывает. Например, легко узнаваемая строка Υοda не совпадает с, казалось бы, идентичной строкой Yoda. Если вы посмотрите на рис. 1.6, вы увидите следующие символы (обозначенные здесь их номерами в Юникоде). Левая строка состоит из греческой прописной буквы ипсилон (03a5), греческой строчной буквы омикрон (03Bf), кириллической строчной буквы д для языка коми (0501) и, где наша не пропадала, латинской строчной буквы a (0061). В правой строке используются латинские буквы: прописная Y (0059), строчная o (006F), строчная d (0064) и строчная a (0061). Юникод называет такие начертания «ведущими к путанице» и имеет хороший инструмент для генерации списка с «ведущими к путанице» текстами. Но на этом веселье не заканчивается.

Рис. 1.6. Подмена Йоды
Когда вы читаете это, вы читаете слева направо, но не все языки работают таким образом. Многие языки читаются справа налево, поэтому текстовым процессорам часто нужен способ обозначить изменение направления. Добавление его в общий набор путаницы (для создания ложного текста) означает, что исходный код, отображаемый редактором, может не совпадать с кодом, который анализирует компилятор. Среди способов использования этого – ранний вызов return, превращение явно исполняемого кода в комментарии и многое другое [Anderson, 2021].
Воровство
Злоумышленник может украсть и использовать как статические аутентификаторы (пароли, одноразовые URL-адреса), так и криптографические ключи.
Поддельные сайты часто используют украденный HTML-код. Даже если спуфер не обновляет свою версию вашего сайта, люди не могут не доверять: они знают, что мир интернета включает в себя почти постоянные незначительные изменения, и поэтому небольшие расхождения неотличимы от последних правок, внесенных вашей командой поддержки бренда.
Захват
Возможно, мне не понадобится ложная репрезентация, если я смогу использовать вашу учетную запись для выполнения действий, которые люди приписывают вам или на которые вы имеете право. Для этого я обхожу факторы аутентификации, защищающие вашу учетную запись, или нарушаю целостность системы, которую вы используете для входа. Я могу сделать это с помощью вредоносного ПО, инструментов управления системами или другого кода или скриптов.
Имена, сопоставления и канонизация
Конечно, «роза пахнет розой, хоть розой назови ее, хоть нет», но вы не можете позвонить флористу, заказать цветы под каким-то другим именем и ожидать, что вам привезут розы. Мы используем имена для обозначения вещей, и общность имен, которые мы с вами используем, является полезным и трудным свойством. Имена людей имеют свободную форму, не претендуют на уникальность. В компьютерах имена часто контролируются какой-либо инстанцией, целью которой является обеспечение уникальности для всех, кто принимает пространство имен. Некоторые пространства имен являются локальными; /etc/passwd ссылается на разные файлы на каждой машине. Другие, такие как IP-адрес, адрес электронной почты или доменные имена, – глобальными. Но не все адреса являются глобальными и не все системы маршрутизации будут учитывать глобальную природу адреса. Пространство IP-адресов, как правило, глобально до тех пор, пока вы не дойдете до адресов типа 10.0.0.2, но это не означает, что каждый маршрутизатор будет направлять 1.2.3.4 в одно и то же место. Если я управляю вашим маршрутизатором, я могу легко написать специальные таблицы маршрутизации, которые отправляют пакеты, адресованные этой машине, в любое место, какое захочу. Скорее всего, я отправлю их какому-нибудь прокси-серверу, который скажет вам, что это 1.2.3.4, и притворюсь вами на этой машине.
Интуитивно предполагается, что адреса электронной почты сопоставляются с человеком, но на самом деле это не так. Подумайте о noreply@bank.com или support@bank.com. Мы считаем, что доменные имена сопоставляются с IP-адресом, который сопоставляется с машиной, и все, кто обращается к www.google.com, попадают в одно и то же место. То, что мы получаем на самом деле, отличается от того, что мы ожидаем, и злоумышленники часто скрываются в этих различиях. Такое сопоставление между слоями является еще одним источником путаницы и атак. Если мы вернемся к предыдущему примеру dst.threatsbook.com в разделе «Подмена машин», мы увидим, что многие атаки происходят в точке сопоставления, но, как вы обнаружите, многое зависит от вашей точки зрения.
Мы надеемся, что канонизация уменьшит эти проблемы. Интуитивно понятно, что, чем проще форма имени, тем лучше. Если вы канонизируете до тех пор, пока выходные данные функции канонизации будут совпадать с входными данными, которые вы ей задали, у вас гораздо меньше шансов столкнуться с проблемами. Но, допустим, вы создаете каноническую форму для file://../../.././////etc/passwd, которая должна сократиться до file:/etc/passwd. Вы можете сделать это преобразование перед тем, как проверить, хотите ли вы разрешить доступ к этому файлу. Очень полезное действие. Но этого может быть недостаточно для безопасности. Допустим, вы упрощаете до file:///10.0.0.1:/etc/passwd. Это нормально для доступа? Твои канонические друзья не могут спасти тебя сейчас.
Атаки на механизмы аутентификации
От Бена Кеноби, говорящего штурмовикам, что им не нужны документы Люка, до современных трюков, таких как фишинг или печать поддельных отпечатков пальцев, механизмы аутентификации подвергаются атакам. Они подвергаются атакам, потому что, если злоумышленник может выдать себя за другого человека, он может делать все, что разрешено его жертве. Давайте посмотрим на механизмы, которые повторяются.
Повторное воспроизведение
Существует множество атак, которые полагаются на то, что аутентификатор является статическим и, следовательно, многократно используемым. Если строка stink,TheSithDo аутентифицирует логин Йоды, то злоумышленник может воспроизвести эту строку, если система не продумана тщательно для предотвращения атак повторного воспроизведения. Так происходит в том случае, если Йода использует один и тот же пароль в нескольких системах. Это остается проблемой, даже если строка зашифрована. Удивительный факт: плохо, если все зашифровано с помощью хорошего криптографического алгоритма, но таким образом, что злоумышленник может воспроизвести зашифрованный пакет или сообщение. Например, если последовательность входа всегда одна и та же (логин, пароль), то, если у меня есть зашифрованный пароль для Йоды, я могу просто воспроизвести его. Защита здесь начинается с отправки случайных чисел (nonces), которые включаются в сообщения.
Отражение
При добавлении криптографии в систему, даже при использовании алгоритмов с открытым ключом, сообщения, как правило, шифруются с помощью симметричного алгоритма. Результатом такого выбора в пользу эффективности является то, что пакеты могут быть расшифрованы любой конечной точкой протокола.
Атаки, отражающие сообщения обратно к отправившей их стороне, раньше были удивительно эффективными, особенно если кодировки либо очень плотно упаковывались для работы через медленные соединения, когда протоколы сложны, либо когда декодеры были разработаны так, чтобы быть нетребовательными в том, что они принимают. Сегодняшние кодировки, как правило, используют метки данных. Например, плотно упакованная кодировка может быть 1,Leia,16,74, в то время как кодировка с метками будет {«id»:1, «name»: «Leia», «role»: «princess», «role»: «general»}.
Сбитые с толку люди
Людей легко запутать. Мы совершаем ошибки и отвлекаемся, даже когда на нас не нападают. Эти проблемы эксплуатируются злоумышленниками множеством способов, и при многофакторной аутентификации совершенно необходимо учитывать то, как можно обмануть человека, чтобы он сам помог злоумышленнику обойти подобную систему.
Один и тот же тип атаки работает против многих привычных форм расширенной аутентификации, таких как приложения для аутентификации или текстовые сообщения с кодом. Человек с радостью введет лишний код на фишинговом сайте. Злоумышленники также добиваются успеха, говоря: «Ой, я ввел неверный номер телефона; не могли бы вы прислать мне код, который только что получили от моего банка?» Для подобных подходов нужно, чтобы злоумышленник атаковал в реальном времени, а не сохранял учетные данные, чтобы использовать их позже.
Люди также радостно проинструктируют свои менеджеры паролей, что github.com и github.io эквивалентны. Но нет. Подумайте о том, почему нет и почему разница важна для безопасности. Большинство людей предполагает, что ими управляют разные организации, но это не так. Оба управляются GitHub. Домен io используется для пользовательского контента. Таким образом, ввод пароля сильно отличается [Burnett, 2017].
Атаки на сбитых с толку представителей
Представитель – это программа, которая в некотором смысле работает от вашего имени как доверенное лицо. «Сбитый с толку представитель» – это когда программа использует свои привилегии пользователя от имени злоумышленника, у которого этих привилегий нет. Скажем, веб-сайт направляет ваш браузер на запрос ресурса при подделке межсайтового запроса, например, <img src=»//192.168.1.1/password.cgi?change=secret»>. Ваш браузер является вашим представителем, и он, будучи сбит с толку, действует от имени злоумышленника, который перенаправляет его, чтобы изменить пароль на вашем локальном маршрутизаторе.
Угрозы типам аутентификации
Каждый тип фактора аутентификации («Что у вас есть», «Что вы знаете» и др.) может подвергаться угрозе способами, уникальными для данного фактора. Кроме того, многие системы аутентификации полагаются на датчики. Эти датчики могут быть атакованы отдельно от атак на различные факторы или механизмы. Датчики – это компьютеры или периферийные устройства, которые измеряют некоторые физические свойства, например сканер отпечатков пальцев или чип GPS. Датчики часто удалены от тех, кто им доверяет, и подвергаются таким атакам, как воздействие на реальный датчик или его подмена (утверждение, что датчиком является какой-то другой компьютер или устройство). Например, я могу подменить сканер отпечатков пальцев в своем ноутбуке или подключить собственное устройство через USB. То, как хранилище базы данных биометрической системы отображает фактор аутентификации в учетную запись, уязвимо для раскрытия информации, фальсификации и отказа в обслуживании. Эти атаки различаются в зависимости от типа датчика, и экономические аспекты развертывания датчиков часто означают, что устойчивые датчики или пакеты датчиков, которые труднее обмануть, заменяются более уязвимыми.
Атаки на фактор «Что вы знаете»
Пароли являются наиболее традиционной формой того, что вы знаете, но в последнее время наблюдается рост альтернативных форм, в том числе различных систем, предназначенных для решения проблемы того, что люди часто забывают пароли.
Фактор «Что вы знаете» атакуют двумя способами: угадыванием и воровством, но он может быть взломан и бóльшим количеством способов. Бывают невинные сбои таких систем, когда меняются предпочтения, подводит память, не совпадает написание и так далее. Также случаются сбои, когда нет паролей, паролей по умолчанию, хорошо известных паролей или предсказуемых паролей. Предсказуемые пароли включают в себя использование имени пользователя, даты рождения, адреса Ethernet, IMEI, номера паспорта или аналогичных элементов, которые являются «широко известными секретами».
Угадывание
Угадывание работает, потому что запоминать случайные сочетания сложно, поэтому людям нужны запоминающиеся пароли, и список подходов, которые они применяют, не такой длинный. В него включены: запоминающиеся слова или последовательности клавиш, а также приемы для удовлетворения требований к виду пароля – добавление 1 или! месяца, названия сайта и тому подобного.
Злоумышленники создают словари вероятных паролей: secret, letmein, qwertyui и password – все это вечно любимые пароли. Пароли также могут быть вероятными относительно конкретной жертвы. Эта вероятность будет, скорее всего, основана либо на утечке паролей, либо на основании личной информации о жертве. Личная информация, используемая в паролях, включает дни рождения, имена детей, спортивную команду, отсылки к «Звездным войнам» и многое другое.
Существуют основанные на знаниях системы аутентификации, которые ограничивают список возможных ответов очень небольшим набором, например «Какого цвета твои глаза?» или «Какая твоя любимая начинка для пиццы?». Хотя эти системы и могут замедлять злоумышленников (за счет того, что клиентам нужно звонить и, возможно, использовать еще одну плохую систему аутентификации), настойчивый атакующий, например сталкер, который ведет заметки, все равно может исчерпать пространство поиска. Если вы взламываете аккаунт Лэндо Калриссиана, то можете поспорить, что его любимая птица, скорее всего, сокол, а не орел или ястреб.
Атаки на каждый фактор аутентификации можно разделить на онлайн- и офлайн-атаки. Онлайн-режим означает, что атака направлена на действующую систему, включая средства защиты, которые обнаруживают проблемы и реагируют на них, например, экспоненциально замедляясь при реагировании на попытки входа в систему в рамках одного сеанса TCP. Общее стремление состоит в том, чтобы можно было ограничить частоту атак, подбирающих пароли, по IP-адресу. Оказывается, существует код, который определит ваши ограничения скорости и настроит атаки так, чтобы они происходили со скоростью чуть меньше лимита.
Офлайн-атаки – это атаки, которые отключают некоторые из этих средств защиты, например использование украденной копии базы данных аутентификации или отключенного устройства, такого как ноутбук с выключенным Wi-Fi. Мы вернемся к онлайн- и офлайн-атакам в главе 7.
Воровство
Злоумышленники могут украсть ответы у любого, кто их знает. Для пароля это ваш собственный сайт или другие сайты, на которых пользователь использует тот же пароль. Для секретных вопросов это любой, у кого есть доступ к тем же данным. (В этом смысле использование SSN, номера социального страхования, в качестве аутентификатора – это гарантированная катастрофа.) В число людей, которые знают ответы, входит человек, данные которого нас интересуют и которого можно обмануть с помощью «игр» типа «Ваше имя в книжках о Гарри Поттере», спрашивающих об улице, на которой вы выросли. Злоумышленники также создают сайты, предлагающие что-то ценное с бесплатной регистрацией. Они зеркально отражают секретные вопросы более популярных сайтов и таким образом собирают ответы от тех, кто отвечает честно. Профессор Карлтонского университета Пол ван Орсхот (Paul van Oorschot) в своей замечательной книге Internet Security: Tools and Jewels («Безопасность в интернете: инструменты и cокровища») [Oorschot, 2019] называет этот вариант атакой с чередованием. Эти атаки с чередованием являются расширением классической MITM-атаки, но они менее привязаны к обычному нахождению «посередине». Учетные данные также могут быть украдены, когда людей обманом заставляют предоставить свои права программе, которой их не положено иметь. Это может быть фишинг, локальные копии ssh или sudo или поддельный экран входа в систему. Таким образом, существует тесная связь между спуфингом и раскрытием информации.
Учетные данные могут быть украдены при передаче, при их изменении или объединении (федерировании), а также из хранилища на сервере, клиенте, сервере распространения ключей или сервере каталогов или третьей стороны, где также используются учетные данные. Схемы криптографических учетных данных могут уменьшить уязвимость, храня секрет на локальной машине, а валидатор – на удаленной. Эти схемы отлично подходят для тех случаев, когда вам не нужно поддерживать произвольных людей на произвольных устройствах с произвольным программным обеспечением, а значит, вам неизбежно нужны пароли.
Одной из наиболее богатых сбоями систем передачи учетных данных является система мобильной связи, где «что вы знаете» интерпретируется как «что было отправлено на ваш номер телефона». Она полна отказами настолько, что мне почти не хватает слов. Существуют всевозможные атаки, в том числе атаки на маршрутизацию и атаки, использующие инструменты повседневного использования. Маршрутные атаки включают в себя перенос номера, когда кто-то убеждает телефонную компанию в том, что вы хотите перенести свой номер к ним. Затем все сообщения (и звонки) направляются на «вашу» новую телефонную компанию. С ними тесно связаны атаки с подменой SIM-карты, когда кто-то убеждает вашу телефонную компанию, что он – это вы и ему нужна новая SIM-карта. Они работают внутри телефонной компании. Даже если ваша телефонная компания или SIM-карта не меняются, кто-то, кто может убедить вашу мобильную компанию в том, что вы находитесь в роуминге, может получить ваши сообщения. Это встречается реже. Кроме того, современные средства коммуникации хотят упростить чтение текстовых сообщений, поэтому Outlook, iMessage, Google Voice и другие будут загружать ваши текстовые сообщения в вашу электронную почту, так что любой, кто может прочитать вашу электронную почту, сможет прочитать ваши текстовые сообщения.
Атаки на фактор «Кто вы такой»
Использование фактора аутентификации «Кто вы такой» требует не только вашего физического присутствия, но и некоторой сохраненной информации о вас, которая используется для последующей аутентификации. Информация может быть простой, как фотография, или сложной для измерения, как ДНК. Это называется словом «биометрия», которое происходит либо от латинского «измерение жизни», либо от голландского «мармеладный мишка». В целом существуют угрозы для процесса регистрации, когда либо измеряется не тот человек, либо записываются неправильные измерения. Существуют угрозы для хранения измеренных данных, наиболее важными из которых являются фальсификация и отказ в обслуживании, но в зависимости от данных или того, кто их хранит, раскрытие информации может иметь значение. («Объясните мне, мистер Корлеоне, почему полицейские были так взволнованы вашими отпечатками пальцев?») Наконец, существуют угрозы проверки биометрических данных, обманывающие либо приборы, либо интерпретатора. Конечно, интерпретатор может и соврать.
Давайте поговорим о некоторых угрозах конкретнее. Возьмем для начала фотографии. Люди плохо сопоставляют фотографию с лицом незнакомца, стоящего перед ними. Даже если мы отлично распознаем лица людей, которых мы знаем, сопоставить лица незнакомцев с их маленькими фотографиями сложно, и подавляющее большинство людей, на которых вы смотрите, будут иметь совпадающие идентификаторы, что затрудняет сохранение бдительности, а утверждение, что человек не соответствует фото, является социально неудобным взаимодействием даже в таких структурированных системах, как пограничный контроль.
Удивительно, но никто в «Звездных войнах» никогда не подделывал голограмму. В современном же мире существует клонирование голоса и дипфейки. Клонирование голоса – это именно то, на что оно похоже: компьютер берет образец голоса и говорит что-то этим голосом. Можно купить плюшевого мишку, который разговаривает как дедушка. А дипфейки – это видеоэквивалент. Сегодня эти инструменты сложны, медленны в использовании и не работают идеально. Атаки становятся только лучше, над слабыми местами во вредоносном программном обеспечении работают, и наша способность использовать телефонные или видеозвонки, чтобы отличать на расстоянии настоящую личность от поддельной, уменьшается.
Про технологические попытки заменить человека системой интересно послушать, но они все еще ужасающе несовершенны. Имеются заслуживающие доверия сообщения о том, что люди проходят пограничный контроль даже при использовании сканирования радужной оболочки глаза [Youssef, 2010]. Пограничный контроль полезен в качестве примера, потому что это система, в которой мы можем ожидать, что технология будет наиболее эффективной. Со многими интересными угрозами можно справиться путем улучшения системы безопасности организации, включающей обнаружение поддельного оборудования, фальсификации сигнала от реального оборудования, протезов, а также проверку персонала: ленивого, дружелюбного или подкупленного. Таким образом, биометрические системы должны работать почти на пике своей надежности.
В последнее время появились заявления о том, что набор сгенерированных отпечатков пальцев может обмануть сканеры отпечатков пальцев телефона в 65 процентах случаев [Ross, 2017]. Есть вопросы к исследованию, но атаки становятся только лучше. Сообщество хакеров Chaos Computer Club (CCC) продемонстрировало, как можно перейти от фотографий, сделанных с расстояния 5 метров, к отпечаткам радужной оболочки, которые обманывают сенсор радужной оболочки глаза на смартфоне высокого класса [CCC, 2017].
Физические нападения с целью кражи частей тела – это не только материал для фильма «Особое мнение»; об этом сообщалось и в реальном мире. И хотя я не хочу забегать вперед, мы должны признать возможность того, что мы будем по уши в биометрии, такой как FaceID.
Голосовые системы используются все шире отчасти потому, что их можно использовать скрытно. Системы генерации синтетического звука, имитирующие человека, говорящего в режиме реального времени, не за горами. Запутать можно не только компьютеры. Подключите одну из этих систем к телефонному звонку, и вы можете ввести в заблуждение собеседника, заставив его думать, что вы – кто-то другой. Это поставит в тупик многие колл-центры, операторы которых хотят перейти на голосовую аутентификацию, потому что она может использоваться скрытно (или, возможно, ненавязчиво) в фоновом режиме. Вполне вероятно, что система голосовой аутентификации обнаружит некоторые инструменты клонирования голоса, и злоумышленники будут искать или создавать инструменты, которые позволят им выдавать себя за другое лицо.
Атаки на фактор «Что у вас есть»
Вещи, которые у вас есть, могут быть утеряны, украдены или продублированы. Если у вас есть физический токен для многофакторной аутентификации и вы хотите передать свою работу на аутсорс программисту в Китае, вы можете направить на токен веб-камеру, чтобы китаец мог сделать вашу работу.
Кроме того, «Что у вас есть» может быть устройством с идентификаторами для устройств. Это может быть IP‐адрес, на который можно получать пакеты. Слово «получать» очень важно – гораздо проще подделать адрес отправителя, чем заставить пакеты вернуться к вам. Имели место атаки с подменой TCP, в которых использовались предсказуемые идентификаторы и порядковые номера, поэтому им не нужно было получать ответы.
Атаки на фактор «Где вы находитесь»
Расположение может быть полезным дополнением к другим факторам проверки подлинности. С физическим местоположением все сложно. Большинство систем не обладают ни достаточным разрешением для измерения времени, ни надежностью, чтобы определить, какое расстояние прошли радиосигналы: они распространяются со скоростью 30 см в наносекунду, поэтому, если ваше определение времени производится «всего лишь» в микросекундах, у вас будет точность порядка 600 метров. (Если вам не повезет, сигналы посылаются в самом начале микросекунды и принимаются в самом конце следующей.) По состоянию на 2022 год на странице руководства Linux time(7) по-прежнему говорится, что «микросекундная точность типична для современного оборудования».
Если вы преобразуете IP-адрес в физическое местоположение, не забывайте, что IP-адреса являются гибкими. Геолокация IP-адреса – сложная задача, многие мобильные устройства по умолчанию подключаются через сложные прокси-системы, предназначенные для повышения производительности. Люди часто хотят выглядеть так, будто они пришли откуда-то посмотреть телевизор (!), поэтому инструменты для спуфинга легко доступны.
Атаки на цепи аутентификации
С атаками на тех, кого вы знаете, тесно связаны атаки на цепочку аутентификации.
Многие системы стремятся к тому, чтобы упростить отправку одноразового кода или пароля на адрес электронной почты, связанный с вашей учетной записью. Это практически признание того, что, поскольку у всех нас слишком много учетных записей, легко забыть или потерять свой пароль. Следовательно, поставщики услуг электронной почты становятся или признаются важнейшей частью безопасности таких систем.
Для этого необходимо, чтобы у пользователя по-прежнему был доступ к учетной записи электронной почты, которую он использовал при настройке любой другой учетной записи. Системы, которые редко общаются с клиентами, такие как банки с пенсионными счетами, должны быть осторожны с тем, чтобы счет не был переназначен. Это отличается от сбитого с толку представителя, потому что ваш провайдер электронной почты не является вашим представителем в отношении безопасности учетной записи (или, по крайней мере, отличается представление об этом).
Защита
Аутентификация является одной тех из задач, которые людям приходится многократно решать ежедневно, поэтому даже ваши реальные, лояльные пользователи или клиенты могут оказаться измотанными. Важно разработать средства защиты, которые хорошо проверяют подлинность, не перегружая людей чрезмерно.
Аутентификация людей
Ни один фактор в отдельности не работает хорошо для аутентификации людей, и использование более одного фактора – лучший способ преодолеть эти недостатки. (Я подразумеваю, что должны использоваться несколько типов факторов, например «Что у вас есть» и «Что вы знаете», а не многократное повторение или вариации «Что вы знаете».) Мы обсуждали эти факторы в целом выше, в разделе «Аутентификация людей компьютерами», и я хотел бы вернуться к «Что вы знаете».
«Что вы знаете»
Защита систем паролей включает в себя управление тем, что люди выбирают в качестве пароля, работу с реальностью повторного их использования, понимание, что другие сайты будут сливать их, и, следовательно, необходимость безопасного хранения паролей.
«Защитники» должны ожидать, обнаруживать словарные атаки и реагировать на них. Полезно обновлять список распространенных паролей каждый год. Я вполне уверен, что мы наблюдали всплеск использования паролей murderhornet (оса-убийца) в 2020 году и covid в 2021-м.
Офлайн-атаки на «Что вы знаете» основаны на прямом доступе к копии базы данных аутентификации. Хорошо спроектированные базы данных аутентификации используют множество итераций криптографического хэша и хранят не сам пароль, а значение его хэша. Хэш-функция спроектирована таким образом, что нет возможности перейти от выхода к входу. (Это называется атакой нахождения прообраза на хэш-функцию.) Если на вашей платформе есть функции для установки и проверки паролей, они, вероятно, сделают это за вас. Нюансы защиты хранимых аутентификаторов очень познавательны, если вы хотите углубиться в защиту, но простой ответ – используйте Argon2, победителя конкурса по хэшированию паролей. Вам также нужно будет использовать «соль» (случайное значение для каждого пароля, хранящееся в открытом виде), чтобы два пользователя, использующие один и тот же пароль, имели разную хранимую информацию для проверки подлинности. (Подробнее смотрите в главе 7.)
Если вы используете другие секреты (улица, на которой вы выросли), то необратимый хэш накладывает требование точных совпадений. Вы можете скорректировать ответы людей перед проверкой (изменить «Улицу» или «ул.» на «улицу») в качестве альтернативы сохранению ответов в виде простого текста.
Аутентичные жесты – «Что вы сделали»
Настольные операционные системы раньше рассматривали все программное обеспечение, запущенное «от имени вошедшего в систему пользователя», как эквивалентное. Программа могла прочитать или записать все ваши файлы. Программы-вымогатели любят такие функции. Теперь все эволюционировало, и путь развития, с упором на «аутентичные жесты», описан в главе 6. Если вы разрабатываете платформу, подумайте, полезно ли отличать физический ввод от виртуального.
Аутентификация компьютеров
Возможность борьбы со спуфингом зависит от типа программного обеспечения. Если ваши клиенты используют веб-браузер, вы не можете контролировать, куда этот браузер переходит. Создатели подключенных устройств часто имеют больше контроля. Их устройствам может потребоваться подключение только к небольшому количеству пунктов назначения, и эти места назначения могут находиться под контролем производителя устройства. Такой тип управления позволяет указать сертификаты или удостоверяющий центр (УЦ), которые являются доверенными. (Это чревато поломкой в случае потери сертификатов или недоступности УЦ.) Подмена локальных файлов, к которым имеет доступ только ваше приложение, относительно проста, но становится сложнее по мере того, как доступ к этим файлам осуществляется по сети.
Заключение
Давайте вернемся к вопросу о том, как R2-D2 узнает, что нужно проиграть голограмму принцессы Леи, говорящей: «Помогите, Оби-Ван Кеноби». Возможно, будучи оперативником высокого уровня, дроид ведет биометрическую базу данных доверенных участников Повстанческого альянса? В этом случае очень важно убрать его с корабля подальше от Империи: в случае его захвата клад может быть найден судебно-медицинскими экспертами, и все повстанцы могут быть немедленно разоблачены. Неприкосновенность частной жизни важна для многих людей. Сохранение конфиденциальности списков членов или клиентов имеет значение, даже если вы не сражаетесь с Галактической Империей.
В самом широком смысле, поскольку мы разрешаем действия в зависимости от того, какая учетная запись используется и какие полномочия ей предоставлены, мы должны убедиться, что люди и компьютеры достаточно хорошо аутентифицированы.
2
Вмешательство и целостность
Когда «Тысячелетний сокол» улетает со «Звезды смерти», Хан справедливо беспокоится о том, что все было слишком просто. На это есть две причины: Оби-Ван вмешался в работу источника питания притягивающего луча, и целостность самого «Сокола» тоже была нарушена – на борту установили маяк слежения.
Введение
Вмешательство, когда полученные вами данные уже не те, которые хранились или были отправлены, представляет угрозу целостности этих данных. Наиболее распространенными способами вмешательства являются нарушения целостности хранилища и сбои целостности коммуникаций, но существует также множество способов вмешательства в целостность процесса или физическую целостность устройства. Случается вмешательство в работу систем после успешной атаки. Существуют также вопросы целостности в распределенных системах и вопросы атомарности в системах баз данных. Средства защиты целостности могут защитить вас как от преднамеренного вмешательства, так и от отказов в надежности, вызванных космическими лучами, механическими или логическими сбоями или другими случайными факторами.
Бывают ситуации, когда целостность хранилища или связи нарушается из-за того, что вы общаетесь не с тем файлом или не с тем сервером. Когда это вредоносное действие, а не ошибка, каждая из таких ситуаций может быть вызвана спуфингом, что приводит к тем же проблемам, что и нарушение целостности, но ваши файлы не затронуты, а правильный сервер предоставил бы вам правильный ответ. Целостность также связана с проблемой доступности, когда целью атаки является удаление файла.
Объекты вмешательства
Когда «Тысячелетний сокол» прятался в астероидном поле, к нему цеплялись создания, известные как миноки, что могло повредить целостность энергетических систем и корпуса корабля. Любое вмешательство происходит в том или ином контексте. Что-то оказывается повреждено или нарушено, и это может быть хранилище, связь или время. Существует также вмешательство в процесс, которое немного отличается.
Вмешательство в хранилище
Когда вы открываете файл на локальном компьютере, вы ожидаете, что этот файл будет таким, каким вы его оставили. Вы бы хотели, чтобы это было так, даже после краха системы по любой из причин. Если вы обнаружите в нем мусор, это случайное нарушение целостности. В файлы, которыми вы владеете и которые заблокировали, только вы можете вносить изменения (ну, вы и root). Конечно, есть файлы, которые намеренно доступны для записи более чем одному человеку или учетной записи.
Вы можете рассмотреть возможность использования цифровых подписей для защиты важных файлов, таких как двоичные файлы, что является прекрасной защитой. Вам нужно будет проверить, по крайней мере, кто подписал файл, а также, воможно, соответствует ли подпись или дата вашим ожиданиям. Если вы этого не сделаете, вы подвергнетесь атаке с откатом версии вперед или назад. То есть если у вас есть подпись для Microsoft Word 11.2, который полностью пропатчен, и кто-то может заменить ее на 11.1, то проверка целостности «тот ли это файл, который нам нужен?» недоопределена.
К хранилищам данных относятся совместно используемая память, базы данных, файловые системы, облачные хранилища, архивные системы, такие как магнитные ленты или компакт-диски, а также стикеры (памятные записки). Атаки в меньшей степени зависят от типа хранилища, за исключением того, что тип хранилища коррелирует с тем, насколько сильно он привязан к системе. Хранилища данных связаны с конкретным компьютером с разной степенью прочности. Файловые системы часто находятся на дисках внутри компьютера, но иногда на съемных носителях или подключены по сети. Записи хранятся в R2‐D2 и транспортируются через места, полные мерзавцев. (Откровенно говоря, шокирует тот факт, что системы повстанцев, используемые для анализа планов «Звезды смерти», не подверглись атакам программ-вымогателей.) Чаще всего информация хранится на самом краю грузовика на носителях, готовых упасть, или в почте, где она имеет свойство пропадать.
Когда злоумышленники физически владеют хранилищем данных, они могут обойти защиту операционной системы. Но даже если они этого не сделают, то могут обойти ядро, получив доступ к памяти или устройствам на физическом уровне, обойти проверки целостности или убедить сбитого с толку представителя выполнить операции записи за них. Если ваше хранилище данных находится в облаке, то ваша целостность зависит от изоляции по отношению к другим облачным пользователям.
Хранилище имеет ограничения, в том числе емкость. Когда диск заполнен, можно удалить самую раннюю или самую последнюю информацию. (Думаю, вы можете проявить изобретательность и выбросить данные наугад или из середины.) Если вы собираетесь алгоритмически ограничить использование хранилища, учтите, что решение о хранении журналов за N недель в последний раз пересматривалось как для Windows, так и для Linux в 1990-х годах, когда диски стоили доллары за мегабайт.
Распределенные системы могут отдавать приоритет целостности операции записи (например, Amazon действительно хочет убедиться, что операция «Добавить в корзину» очень надежна) или целостности операции чтения (любой флаг «Учетная запись Алисы заблокирована» будет виден при любом чтении каждым банковским приложением), и они могут отдавать приоритет либо скорости сходимости, либо скорости действий, допуская некоторую непоследовательность.
Вмешательство в коммуникации
Сообщения проходят по каналам; электронные письма передаются по каналу SMTP, а HTML-страницы – по каналу HTTP (а часто и по каналу TLS). В современном мире мы привыкли к тому, что TCP прозрачно обеспечивает нам надежную и упорядоченную доставку сегментов TCP по ненадежной IP-магистрали. Вы можете подделать и сообщение, и канал, но средства и последствия этого будут разными. Фальсификацию сообщения, как правило, легче представить себе до или после того, как оно попало в определенный канал, особенно когда канал имеет такую защиту, как TLS (рис. 2.1).

Рис. 2.1. Каналы и сообщения
Корабль принцессы Леи – «Тантив IV», и это один из двух кораблей, показанных на рисунке 2.1. По какой-то причине он общается с кораблем ботанов. Есть канал, показанный в виде трубки, и сообщения, которые проходят через него. (В этой схеме есть серьезные угрозы конфиденциальности, и мы поговорим о них в главе 4 «Раскрытие информации и конфиденциальность».) Связист ботанов может подделать сообщение 1 во время его подготовки, Империя может подделать сообщение 2, а имперский шпион, внедренный к повстанцам, может изменить сообщение 3 до того, как оно попадет к Лее.
Иногда сообщения имеют защиту целостности, например цифровую подпись. Иногда каналы имеют защиту целостности, например, каждое сообщение защищено хэшем с ключом.
Если целостность ваших сообщений не защищена, ничто не предотвратит их изменение и не поможет вам обнаружить их. Если у вас поддерживается целостность в системе обмена сообщениями, вам, вероятно, придется столкнуться со сложным процессом выбора служебных заголовков, включенных в защиту целостности. В сообщениях электронной почты, например, вы не можете включить заголовок (заголовки) «Подпись», но, что более интересно, вы не можете предсказать маршрут, по которому пойдут сообщения, и, следовательно, не можете включить строки Received, которые добавляются по пути. И очень многие из таких схем будут уязвимы для внедрения заголовков. Внедрение заголовков – это добавление новых заголовков способами, которые не анализируются получателями должным образом.
Атаки с внедрением заголовков могут использовать дополнительные ложные заголовки, в зависимости от того, как написан код. Расчет на то, что люди и автоматические синтаксические анализаторы будут «видеть» разное. Еще хуже, если проверка подписи отделена от синтаксического анализа отображения, и не прошедший проверку заголовок может отображаться у пользователя только потому, что он первый или последний, или то, что код пользовательского интерфейса решит показать именно этот из заголовков. Подробнее об этой атаке читайте в главе 8 «Распознавание и порча».
Конечно, когда вы подписываете или аутентифицируете сообщения, вам необходимо хранить ключи и управлять ими. Хранилищу ключей может угрожать подделка или раскрытие информации, а код управления подвержен угрозам подделки, раскрытия информации или угрозам расширения полномочий. Это может привести к краже ключей или их использованию за пределами их обычного пути. И то и другое нарушит целостность сообщения. Обработка исключений сложна, поэтому после того, как Повстанческий альянс украдет коды аутентификации, штурмовая группа может высадиться на луне Эндора. Что делать с просроченными ключами – раздражающая проблема (см. главу 3 «Отказ от ответственности и доказательства»).
Целостность канала может быть важна как системное свойство, защищающее группу сообщений в качестве набора или ограничителя, затрудняющего подделку конкретных сообщений. Например, может быть полезно защитить информацию о том, что некий ботан отправил три сообщения повстанцу, даже если у вас нет информации об их содержании. Если вы хотите вмешаться в работу канала, вы сможете сделать это из-за отсутствия защиты целостности или ее недостаточности, или из-за плохого управления ключами. Метаданные о сообщениях, которые канал может защитить от несанкционированного доступа, включают время, размер, направление, вход и выход участников и/или представление участников именами систем или дисплеев. Например, если вы защищаете информацию об IP-адресах, связанных с каналом, вы также можете собирать и защищать информацию о том, как эти IP-адреса сопоставляются с доменными именами, SMB-именами и другими системами именования на других уровнях. Программное обеспечение для управления системами часто изменяет эти сопоставления с течением времени и может не поддерживать нужные журналы, поддерживать их столько, сколько вы хотите, или синхронизировать их с вашими временны´ми интервалами. Возможность модификации реализована явным образом, и поэтому мы говорим «изменить», но злоумышленники могут сделать то же самое, и в этом случае мы называем это вмешательством. Кроме того, сопоставление между именами, используемыми вашей системой, и другими идентификаторами, такими как адрес электронной почты или номер телефона, часто является информацией, которую некоторые люди захотят сохранить в тайне.
Когда вы сосредоточены на целостности, может оказаться легко проигнорировать посредников, которых традиционно называют «человек посередине» (man in the middle) (MITM). MITM также расшифровывается как «обезьянка посередине» (monkey in the middle). Если вы можете настроить MITM, у вас есть и другие способы для вмешательства, помимо добавления или удаления сообщений. Эти способы включают воспроизведение подписанных сообщений, отправку их обратно (что чаще всего интересно в контексте симметричной аутентификации, например, кода проверки подлинности сообщений) или отправку подделанных сообщений с явно хорошими порядковыми номерами. Если вы передаете порядковые номера до того, как проверка подлинности сообщения будет выполнена, вы можете рассматривать будущие допустимые сообщения как недействительные, поскольку вы уже проанализировали этот порядковый номер.
Кроме того, если у вас есть канал из точки А в точку Б, насколько хорошо охраняют вход и выход? Может ли кто-то вставить сообщение на одной стороне, чтобы оно вышло на другой? Когда событие произойдет, будет ли это рассматриваться как сообщение от А к Б или В? Это может быть сбитый с толку представитель или тот, кто получил взятку.
Вмешательство во время
Большинство систем имеют по крайней мере несколько мнений о значении слова «сейчас», а разногласия, недоразумения или даже атаки на время являются либо помехой для операций, либо строительным блоком для атаки. Есть системное время, которое установлено либо на расчетное время, либо на UTC (всемирное скоординированное время), и отображаемое время, которое, вероятно, учитывает часовые пояса. Телефоны и ноутбуки часто физически перемещаются в новые часовые пояса, а существование такой гадости, как летнее время, означает, что время на часах может увеличиться не только на одну секунду за раз.
Когда вы полагаетесь на время, важно понимать, что его можно изменять как со злыми, так и с благими намерениями. Мотивация не меняет проблему, а оборонительное проектирование и шаблоны реализации, которые вы захотите использовать для защиты от злонамеренных изменений, также могут сделать ваши системы более надежными.
Иногда секунда системного времени длиннее часа, например, когда виртуальная машина переходит в спящий режим. В других случаях фактическое время может меняться непредсказуемым образом. Правительство Самоа однажды решило, что одна из пятниц не нужна, поскольку они переместились по другую сторону линии перемены дат, а это означало, что произошла разница во времени между Самоа и другими странами, кроме острова Токелау. (Да, Самоа действительно сделало это в 2011 году, чтобы приблизить свои часовые пояса к важным торговым партнерам [Mydans, 2011; Sussman, 2012]). Сохранение системного времени в формате UTC, а не по местному времени, означает, что у вас будет меньше проблем, связанных с изменениями местного времени. Поэтому, если вы не находитесь в межгалактической миссии, держите системное время в UTC. (Это также относится к космическим аппаратам меньшей дальности – за исключением марсоходов.)
Бóльшая часть системного времени управляется бортовыми часами, с корреляцией с серверами времени, часто через NTP или GPS либо, возможно, через вышки сотовой связи. Дрейф часов является проблемой для сопоставления журналов даже при отсутствии злоумышленника. Злоумышленники используют эту схему, чтобы подделать системное время. Многие системы безоговорочно доверяют указаниям DHCP о том, какой NTP-сервер использовать. Удаленный злоумышленник, который может подделать NTP-пакеты, сигналы GPS или сотовые сигналы, может использовать эти инструменты, чтобы изменить представление системы о том, который час. Аналогичным образом локальный пользователь может изменить системное представление о смещении времени (между фактическим и системным временем), часовом поясе или системном времени. Для этого могут потребоваться или не потребоваться права администратора.
Злоумышленники могут воспользоваться временем, изменяя его. Его перевод назад может привести к тому, что сертификат, лицензионный ключ или другие данные будут рассматриваться как действительные после истечения срока их действия или недействительные из-за того, что дата ввода в действие еще не наступила. Перевод вперед может иметь аналогичные последствия. На локальном компьютере это может позволить вам дольше использовать дорогостоящее программное обеспечение, заблокировать доступ к сайту, потому что система считает, что сертификат этого сайта больше не действителен, или дольше играть в «Звездные войны», потому что родительский контроль не работает должным образом. Если вы сможете скорректировать представление сервера о времени, вы сможете купить билеты на концерт до того, как они поступят в продажу, или предотвратить подачу заявок вашими медлительными соперниками, закрыв окно подачи заявок раньше. Точно так же вы можете торговать акциями, когда рынок закрыт. В каждом месте, где есть окно дозволенной активности, вмешательство во время может помочь вам, навредить вашим соперникам или и то и другое вместе.
Вмешательство в процессы
Во всех случаях, кроме простейших, процессы могут полагаться на операционную систему для защиты от процессов, принадлежащих другим пользователям. (Загрузчики, такие как MS-DOS, смарт-карты и другие слабые системы прошлого времени, обычно не могут обеспечить такую защиту.) Эта функция изоляции иногда имеет два режима: защита от процессов других пользователей и более слабая защита от процессов, запущенных от имени того же пользователя. С другой стороны, операционная система должна обеспечивать контроль над тем, какой процесс может читать или писать в память другого процесса. Исторически сложилось так, что эта норма была ослаблена для процессов, запущенных от имени одного и того же пользователя: вы хотите иметь возможность отлаживать свои собственные процессы и влиять на их поведение, чтобы они вели себя по-разному. Apple объявила о другом наборе настроек по умолчанию в IoS, и, хотя некоторую функциональность стало добавлять труднее, также было сложнее написать и вредоносное ПО.
Сетевые атаки на процессы
Операционная система опосредует доступ к аппаратному обеспечению, в том числе сетевому, и предоставляет интерфейс для потоков или пакетов, которые могут содержать все, что выходит за пределы (очень минималистичные) сетевого стека. Процессы должны защищаться от того, что могут сделать злоумышленники. Например, удаленный клиент может изменить предоставленное вами одноразовое случайное число или изменить значение admin=no, добавить токен admin=yes или даже удалить токен rebel_sympathizer. Они также могут попытаться подделать ваши входные данные, поступающие через удаленные файловые системы, или создать путаницу между кодом и данными, или иным образом повредить целостность вашего процесса. Атаки на целостность процессов описаны в главе 6 «Расширение полномочий и изоляция» и в главе 8 «Распознавание и порча».
Вмешательство других пользователей
Операционная система создает каналы, обеспечивающие связь и взаимодействие между пользователями с различными идентификаторами, включая доступ к файлам, сигналы и совместно используемую память. Для вмешательства наиболее важными являются разрешения на запись. Как правило, эти средства защиты достаточно сильны для того, от чего они намерены защищать. Например, если в вашей операционной системе или у поставщика облачных услуг есть режим «только добавление новых записей» для журналов, вы, вероятно, можете рассчитывать на его работу, чтобы только авторизованный администратор журналов мог удалять журналы.
Защитить свой процесс от несанкционированного доступа root, администратора или гипервизора сложно, и пытаться делать это или беспокоиться об этом – пустая трата усилий, если у вас нет аппаратной поддержки. При аппаратной поддержке, такой как Intel SGX или Apple Secure Execution Environment, существуют явные пути авторизации, которые контролируют то, что может делать администратор операционной системы, и обеспечивают надежную защиту целостности. Подробности выходят за рамки этой книги, но вспомните, что в любом коде есть ошибки, которые часто являются ошибками безопасности, и это оборудование потребует необычных навыков и доступа к тестированию.
Вмешательство пользователя с тем же самым ID
Когда вызывается процесс, очень многие вещи в его окружении могут контролироваться вызывающим и, возможно, позже быть изменены создателем. Наиболее заметные элементы окружающей среды, находящиеся под контролем вызывающего, – это рабочий каталог и переменные среды, включая те, которые управляют поведением динамического загрузчика библиотек. Менее заметными, но не менее важными являются открытые файловые дескрипторы для ввода или вывода.
Убедить человека вмешаться в работу собственного компьютера – интересная и, возможно, неожиданная форма атаки. По мере того как компьютеры становятся все менее познаваемыми, «Погуглите сообщение об ошибке» является не только частым, но и разумным ответом. Есть сайты, изобилующие советами, которые могут быть весьма небезопасны, иногда случайно, а иногда потому, что люди, кажется, намеренно советуют дурное, например «Загрузите это программное обеспечение и запустите его от имени администратора». Такие атаки могут с трудом достигать целей, и многие из них, вероятно, собирают малоценный урожай. Но если вы интенсивно используете истребители TB-65B X-wing и ваш противник знает об этом, то он может использовать веб-сайт механиков звездолетов, чтобы убедить ваших механиков настроить бортовые радиостанции таким образом, чтобы истребители было легче отслеживать на больших расстояниях.
Вмешательство в библиотеки
Есть три интересных случая вмешательства через библиотеки. Во-первых, это пути загрузки библиотеки, такие как папка Downloads или переменная среды LD_LOAD_LIBRARY; второй – библиотеки, загружаемые через менеджер пакетов; и, наконец, библиотеки, загружаемые с веб-сайта.
Папка Downloads используется для хранения большого количества загрузок. Если кто-то загружает установщик и этот установщик неточно указывает, какие библиотеки DLL ему нужны, то загруженные заблаговременно в папку Downloads копии этих библиотек DLL могут быть использованы установщиком. Конечно, это относится к любому коду, а не только к установщикам, но установщики часто становятся жертвами этой формы вмешательства, поскольку запуск их из папки с загрузками кажется разумным и нормальным [Lawrence, 2019]. Лучшим решением для поставщиков приложений является поставка пакета установщика, такого как. app, MSI или. dmg, а не исполняемого файла. Поставщики операционных систем также должны использовать специальные папки, такие как Downloads и tmp, и требовать специальных флагов сборки для загрузки зависимостей (подключаемые пакеты и библиотеки) из таких папок. Одним из вариантов этого является проверка наличия библиотеки в доверенном каталоге, таком как system32, в котором есть ненадежные и доступные для записи подкаталоги, такие как Tasks [Forshaw, 2017]. Как бы ни было заманчиво высмеивать Microsoft за это, но нечто подобное есть во всех системах.
Современные системы управления пакетами упрощают управление зависимостями. На самом деле это настолько просто, что разработчики часто добавляют одну и ту же библиотеку несколько раз на веб-страницы. Они добавляют как одну и ту же, так и разные версии [Lauinger, 2018]. Существует проблема, которая заключается в случайной подмене библиотеки в результате ошибки проверки версии. Одно из распространенных решений этой проблемы – фиксация версий библиотек, от которых зависит программа, чтобы помочь управлять совместимостью. Это приводит к тому, что старые версии, полные уязвимостей, все равно используются [Morszczyzna, 2017; Pieczul, 2017].
Веб-подход к фальсификации библиотек основан на использовании в интернете библиотек, включенных с других сайтов. Есть несколько способов сделать это, но <script src=URI> является самым распространенным. Злоумышленник, взломавший сайт, обслуживающий этот URI, может изменить работу всех сайтов, зависящих от него. Например, в ноябре 2018 года кто-то взломал Statcounter, сайт измерения аудитории, код которого на тот момент использовался на двух миллионах сайтов [Faou, 2018]. Злоумышленники вставляли шесть строк кода JavaScript, который срабатывал, если URL-адрес загружаемой страницы включал /myaccount/withdraw/BTC. Этот URL-адрес, вероятно, присутствовал только на криптовалютном сайте gate.io. Если URL-адрес совпадал, загружался дополнительный код. В качестве отступления: либо это упущенная возможность атаковать еще 1 999 999 других сайтов, либо хорошие навыки, снижающие вероятность обнаружения атаки на другом сайте.
Ввод и вмешательство
Наконец, необходимо защитить целостность кода и потока управления от порчи при вводе данных. Атаки, использующие эту уязвимость, описаны в главе 8.
Вмешательство в конкретных технологиях
Когда Люк снимает блокиратор с R2-D2, это специфичное для дроидов вмешательство. (Давайте не будем беспокоиться о том, как этот блокиратор взаимодействует с остальными технологиями дроидов.) Несмотря на то что большинство читателей не занимаются производством дроидов, многие из них работают с конкретными технологиями, поэтому стоит изучить, как вмешательство проявляется в устройствах, ИИ/МО и облаке.
Вмешательство на устройствах
Многие программисты считают, что атаки на устройства «вне зоны их внимания». Microsoft в своей статье «Десять непреложных законов безопасности» говорит: «Если у злоумышленника есть неограниченный физический доступ к вашему компьютеру, это уже не ваш компьютер». Специалисты, занимающиеся эксплуатацией, часто ставят решетки вокруг компьютеров, которые им важны, потому что замки на большинстве обычных ПК и серверов можно легко открыть с помощью скрепки.
Создание надежной защиты от несанкционированного доступа к устройствам является дорогостоящим процессом. Приличный сейф, который вы покупаете для хранения ценностей дома, защищает от злоумышленников своей массой и надеждой на то, что легче будет взломать какой-нибудь другой сейф. Сейфы, которые протестированы и рассчитаны на сопротивление опытному злоумышленнику с инструментами в течение 15 минут, будут стоить более 1000 долларов. (Те, которые вы покупаете за сотни долларов, не имеют сертификата TL-15.)
Конечно, сейфы – не единственные умные устройства, и многие из них гораздо более уязвимы для случайных прохожих. Существуют навесные замки с поддержкой Bluetooth, дверные звонки с камерами и Wi-Fi, а также камеры видеонаблюдения, которые предназначены для того, чтобы находиться снаружи и, следовательно, за пределами вашего периметра или в нем. Встраивание средств защиты в эти устройства обходится недешево, а аппаратные ограничения часто сводятся к какой-нибудь специальной головке винта, а иногда и к датчику несанкционированного доступа. Устройства доступны розничным продавцам, установщикам, уборщикам, арендодателям и гостям, в том числе милашкам, которых ваши подростки приводят домой. Вы, как разработчик системы или конечный пользователь, должны быть готовы к тому, что ваше устройство может быть подвержено физическому вмешательству.
Если вам не все равно и вы не нацелены на любительский рынок, где это поощряется, вам следует подумать о выявлении слабых мест в вашей системе путем вмешательства в аппаратное обеспечение и особенно в хранилище (часто расположенное на SD-карте) или в оперативную память. Охлаждение оперативной памяти баллончиком со сжатым воздухом позволяет злоумышленнику отключить ее от питания, подключить к новой системе и прочитать содержимое. Это проще, когда оперативная память не припаяна. Существует также важная повторяющаяся проблема с интерфейсами JTAG. JTAG расшифровывается как Joint Test Action Group и относится к специфическому интерфейсу для отладки и тестирования электроники. Интерфейсы JTAG часто остаются доступными после того, как устройства покидают завод, и это позволяет злоумышленникам получить все виды доступа.
Случай с рыцарями-джедаями интересен: справедливо ли критиковать инженеров «Звезды смерти» за то, что они не блокировали получше управление притягивающим лучом? Поразмыслив об этом вопросе больше, чем он того заслуживает, я считаю, что несправедливо. «Звезда смерти» была управляемой военной установкой, и существовала потенциальная необходимость в экстренном техническом обслуживании, когда притягивающий луч втягивает что-то слишком быстро.
Вмешательство в ИИ/МО
Злоумышленники, которые могут повлиять на выбор или хранение обучающих данных, могут делать все что угодно с этой выигрышной позиции. Некоторые системы пытаются обновить свои модели, обучая их в полевых условиях. Эти системы подвергаются атакам. Иногда это становится достоянием общественности, как в случае с ботом Tay AI от Microsoft, который после запуска в X (Twitter) быстро начал извергать расистскую тарабарщину. В других случаях это менее заметно. Microsoft публично заявила о загрузке вредоносных программ, разработанных, по-видимому, чтобы повлиять на системы машинного обучения, которые они используют для улучшения обнаружения [Parikh, 2018]. В работу обучающих моделей можно вмешаться там, где они используются. Когда система обучения децентрализована или федерирована, она может стать уязвимой для атак. Эти федерированные модели обучения могут быть уязвимы либо для ложных входных данных, либо для поддельных сообщений между взаимодействующими объектами.
Вмешательство в облако
Облачные системы, такие как Gmail или Facebook, обладают интересным свойством: они позволяют входить в систему из любого места. Злоумышленники, которым удается пройти аутентификацию для доступа к учетной записи, будут регулярно вмешиваться в элементы управления, включая безопасность и операционный контроль. Например, они добавят в процедуру восстановления учетной записи адрес электронной почты, который контролируют, а в почтовом сервисе добавят правила, из-за которых ответы на их сообщения будут пересылаться и не показываться вам.
В облаке появились новые возможности для несанкционированного доступа. К ним относятся как код, который вы получаете от других, так и код, который вы создаете сами. Код, который вы получаете от других пользователей, может включать общедоступные образы виртуальных машин, контейнеры Docker и другое программное обеспечение, которое вы используете. Кроме того, есть код, который создаете вы. И то и другое объединяется в рамках вашего собственного процесса развертывания приложений. Как общедоступное, так и частное хранилище может быть взломано. Например, когда вы получаете предварительно созданный Amazon Machine Image, насколько вы уверены в том, что люди, которые его создали и сохранили, дают вам то, что вы ожидаете? Наименее вероятным, но наиболее мощным будет злоумышленник, получивший некоторые права администратора у облачного провайдера. Не зацикливайтесь на этом слишком сильно: ваша способность повлиять на это невелика, и поставщик облачных услуг знает, насколько это может навредить его бизнесу.
Механизмы вмешательства
Обсудив вмешательство в хранилище, связь, время и процессы, а также то, как это проявляется в облаке, интернете вещей и ИИ/МО, давайте обратим внимание на некоторые из задействованных механизмов.
Место вмешательства
Существует множество механизмов, с помощью которых люди могут вмешиваться, и каждый из них требует полномочий того или иного рода. В классическом компьютерном мире наиболее важными привилегиями были запуск кода, возможность делать это в качестве администратора или администратора домена, подключение к корпоративной или физической сети. Быть подключенным к корпоративной сети означало быть «за брандмауэром», по причудливому выражению тех дней, когда существовал единый брандмауэр. Это также означало, что вы могли свободно подключаться ко всем видам ресурсов, которые были как бы частными. Подключение к физической сети означало, что вы могли видеть все проходящие пакеты, потому что они транслировались всем в сети. Имея возможность видеть их, вы также могли изменить их, по крайней мере настолько, чтобы сломать контрольную сумму, а затем отправить вместо них поддельную версию. Проводные сети, в которых когда-то использовался коаксиальный кабель, как правило, были заменены Ethernet на витой паре, с подавлением широковещательных пакетов на коммутаторе. Конечно, если вы управляете коммутатором или маршрутизатором, вы можете модифицировать все, что проходит через него.
Может показаться странным, что мы говорим о проводных сетях в сегодняшнюю эпоху мобильных телефонов и портативных компьютеров, но провода по-прежнему широко используются в сложных условиях работы, например в центрах обработки данных и в таких учреждениях, как посольства, где риск беспроводного прослушивания (или несанкционированного доступа) достаточно высок. Для этих сетей и для многих устройств интернета вещей физический доступ является важной привилегией, необходимой для несанкционированного доступа. Физический доступ традиционно защищается заборами, стенами, а иногда даже корпусами устройств. Все это часто охраняют сторожа и собаки. (Иногда это сторожевые собаки, например доберман-пинчер, а порой просто домашние питомцы, такие как кокер-спаниель.) Эти средства контроля эффективны в разной степени, а также непредсказуемы. Университеты, кафе, отели, церкви и другие гостеприимные пространства шокирующе доступны, на взгляд параноика, а наши дома открыты во время соседских общений, гаражных распродаж или при сдаче в аренду через Airbnb.
Наши дома и офисы также обычно открыты для радиоволн, а они часто бывают удивительно мощными. (Радиоволны – еще один пример извращенности в области безопасности: когда вы хотите, чтобы беспроводная связь работала, радиус действия досадно мал, а когда вы беспокоитесь о злоумышленниках – на удивление велик.)
Наконец, может быть вмешательство в цепочку поставок. Люди, которые проектируют, производят, собирают или поставляют физические вещи, могут поставлять продукты, которые будут не совсем такими, как вы ожидаете, и большинство разработчиков программного обеспечения и инженеров по безопасности мало что могут с этим сделать. Если вы думаете, что сами сможете что-то с этим сделать, читайте The Huawei and Snowden Questions [Lysne, 2018]; в противном случае двигайтесь дальше. Наша общая неспособность создать безопасное программное обеспечение, даже когда мы этого хотим, означает, что большинству злоумышленников не нужно беспокоиться.
Существует также вмешательство в программное обеспечение. Если разработчик компилятора хочет вставить бэкдор в машинный код, создаваемый компилятором, он может это сделать. Они даже могут написать версию своего компилятора, которая распознает, что он компилирует компилятор, и вставить дополнительный код в выходной компилятор. После этого они могут удалить троянский код. Но заглядывали ли вы когда-нибудь в код GCC? Вы можете спрятать там песчаный краулер, и никто никогда его не увидит. Таким образом, удалять его практически не нужно, есть возможность просто все отрицать. Кен Томпсон говорил об этом в своей тьюринговской лекции «Размышления о том, можно ли полагаться на доверие» [Thompson, 1984].
Инструменты для вмешательства
Механизмы намеренного вмешательства варьируются от общих инструментов до специализированных. Если я вошел в систему и могу писать в файл, я могу просто открыть его в текстовом редакторе. Это работает, даже если файл не является текстом, хотя бывает сложно внести нужные изменения, так как ваш редактор может «поправить» неровности в файле. Это означает, что он может вмешиваться в ваше вмешательство. Какая наглость! Таких проблем можно избежать, используя стандартные клиенты: клиент базы данных для файла базы данных, Word для. docx, emacs для. html или gdb и windbg для процесса. Существуют также специализированные клиенты как для анализа, так и для модификации локальных файлов, некоторые из них довольно изящны, например визуализатор файлов Veles или обфускатор кода. (Что вы говорите! Обфускатор нужен не для того, чтобы изменить файл, а для того, чтобы помешать кому-то понять его? Конечно, это так, и он делает это путем вмешательства в его содержание. Считаете, что эти изменения разрешены? Послушайте, как разработчик ругается во время отладки.) Многие из этих инструментов теперь работают в веб-браузере, что не делает их менее специализированными, но снижает нагрузку на установку и настройку.
Для изменения сетевого подключения обычно требуются специализированные инструменты той или иной формы. Существуют средства, предназначенные для изменения сетевых подключений, которыми вы управляете, а также для изменения сетей злоумышленниками. Вы модифицируете свои собственные сетевые подключения, чтобы получить такие возможности, как запись или простое изменение сложных потоков (например веб-сеансов) с помощью прокси-сервера атаки OWASP Zed Attack Proxy (ZAP). Кто-то может захотеть изменить ваши сетевые подключения, как это происходит в большинстве случаев, когда вы останавливаетесь в отеле, или изменить сеть, отправив команды маршрутизации, чтобы перенаправлять весь трафик через свою систему.
Одним из интересных методов фальсификации является семейство атак типа rowhammer. Если вы думаете об оперативной памяти как о множестве плотно упакованных ячеек, каждая из которых содержит либо ноль, либо единицу, то вы попали в точку, и это очень маленькая точка. По мере увеличения плотности оперативной памяти ток может просачиваться из одной ячейки в соседнюю и фактически приводить к тому, что бит переключается, потому что, как заметил философ инженерии Мартин Гор, все имеет значение в больших количествах. А при больших объемах записи в соседнюю физическую ячейку памяти биты могут быть переключены, то есть подделаны. После того как был анонсирован rowhammer, создатели памяти добавили технику, называемую обновлением целевой строки, для защиты от него [Ducklin, 2021]. Если вы работаете со стандартными компонентами ПК, это, скорее всего, не является проблемой для вас, но, если вы производите оборудование, стоит убедиться, что ваши компоненты защищены от этой и других связанных с ней атак.
Еще один интересный метод вмешательства – через страницы советов в интернете. Этот метод эксплуатирует очень сильно сбитого с толку представителя, человека-владельца некой системы, который пытается решить какую-то проблему. Даже отличный «контент, созданный пользователями», может включать в себя небезопасные шаги, но эти сайты могут быть полны и злоумышленниками, которые намеренно или случайно дают плохие советы. Ссылки с этих сайтов могут быть плохими с самого начала, или адреса ссылок могут устареть и быть заменены злоумышленниками, распространяющими вредоносное ПО.
Защита
Целостность обеспечивается превентивным контролем и контролем обнаружения. Любой из них может работать криптографически или полагаться на что-то с бóльшими полномочиями: ядро безопасности, поставщика облачных услуг или оборудование. Вариант с ядром безопасности работает только тогда, когда весь доступ к файлам осуществляется через него, что обычно означает локальный компьютер или облачный сервис, который является посредником в доступе к его хранилищу.
Криптография
Криптография может предотвратить взлом со стороны вредоносных хранилищ или сетевых злоумышленников. К вредоносному хранилищу относится любое хранилище, которое может контролироваться злоумышленником. Простой пример – USB-накопитель, подключенный к компьютеру злоумышленника. Вы больше не можете доверять операционной системе в том, что она защитит вас. А в сети нет операционной системы для защиты пакетов.
Криптозащита включает в себя как асимметричные, так и симметричные технологии. Для защиты сообщений можно использовать симметричные криптографические схемы, при которых обе стороны совместно используют один и тот же ключ. Например, методы хэширования с ключом могут защитить сообщения от подделки. Асимметричные методы (с открытым ключом) обеспечивают защиту целостности по принципу «один ко многим»; например, все могут видеть, что именно этот файл был подписан именно этим ключом, который связан с Adobe и используется для подписи обновлений программного обеспечения. Таким образом, асимметричные методы также могут быть использованы для аутентификации файлов после того, как они прошли через потенциально ненадежное хранилище или между различными системами, находящимися под вашим контролем, сохраняя при этом секретную часть пары открытых ключей на одной машине.
Ядро
Ядро – часть операционной системы, которая исполняет весь код пользовательского уровня, – является каноническим примером чего-то, обладающего бóльшими полномочиями. Сегодня более полный список включает в себя не только ядро, но и гипервизор, чип безопасности, корпоративный инструмент управления идентификацией и доступом (Identity and Access Management – IAM) и многое другое. Что бы то ни было, до тех пор, пока оно действительно контролирует весь доступ к вашим данным, оно может обеспечить защиту целостности.
Независимо от того, как «оно» реализовано, важно сообщить «ему», что вы хотите, чтобы произошло, и убедиться, что ваше намерение ясно, с помощью разрешений. Ваша локальная операционная система имеет ядро безопасности, так же как и ваш мобильный телефон, и ваш поставщик облачных услуг. Каждое из них обладает уникальными и важными свойствами.
Мобильные операционные системы (iOS, Android) обычно защищают приложения от несанкционированного доступа друг к другу во время работы, защищают их от несанкционированного доступа к хранилищу других приложений и ограничивают установку приложений магазином приложений. Они также проверяют подпись магазина приложений перед загрузкой приложения, защищая его от вмешательства на уровне устройства.
Облачные сервисы имеют уровни администрирования, службы поддержки и «корпоративного» администрирования. Поставщики инфраструктуры или платформы как услуги, которые поощряют своих клиентов загружать мощный и гибкий код, подвержены вмешательству со стороны этих клиентов. (Это относится к расширению полномочий и другим понятиям, более подробно рассмотренным в главе 6.)
Сообщить ядру, что делать, может быть сложнее, чем вы ожидаете, когда разрешения наследуются различными способами, когда несколько ролей могут устанавливать разрешения (например, вы и администратор приложений Office) и когда разрешения, предоставляемые ядром, изменяются. Отладка или исправление разрешений на бегу часто приводит к тому, что «теперь все работает», но с разрешениями куда более широкими, чем предполагалось.
Аппаратное обеспечение не сделано из волшебной пыли безопасности. От памяти с доступом только для чтения до изолированного исполнения, зашифрованной памяти или даже отдельного чипа, аппаратное обеспечение может гарантировать безопасность на все более надежном уровне выполнения, чтобы защитить вас от вмешательства и других угроз. Память с доступом только для чтения может быть жестко прошитым ПЗУ, или она может быть защищена различными способами, начиная от переключателя, который необходимо перекинуть, провода, который должен быть перерезан, или просто оперативной памяти, к которой только специальный чип имеет доступ на запись. Стоит учитывать угрозы для каждого из них, когда вы можете их конкретизировать: например, если вы проектируете подключенное устройство, в котором интегрируется оборудование, программное обеспечение и, возможно, облачный сервис в единый пакет. Специалисты по безопасности часто шарахаются от идеи принятия защиты, в качестве которой не уверены. Такая неопределенность характерна для аппаратного обеспечения. Это сложно и дорого проверить, даже если порт JTAG остается открытым. Разумно полагаться на оборудование, даже в том случае, когда вы не можете точно указать, каким оно будет. Скорее всего, его сложнее атаковать, чем более высокие уровни, на которых вы работаете.
Когда нет ядра, на которое можно было бы положиться, например если злоумышленник может вмешаться в локальное хранилище на уровне ОС или под ним, от него трудно защититься. Заманчиво, конечно, посыпать все волшебной криптопылью, но злоумышленник, который может модифицировать файлы, скорее всего, может изменить ваши процедуры проверки, ваш пользовательский интерфейс или другие элементы, которые могут вас обмануть. Другими словами, ядро, которое позволит играть с вашими файлами, также будет играть с вашим кодом. Таким образом, вероятно, не стоит беспокоиться об этом в пределах ОС или приложения, но на уровне предприятия или системы нужно время от времени проверять файлы с помощью электронно-криминалистической визуализации, удаленных проверок целостности или других подобных механизмов. Гораздо выгоднее защищать хранилище, находящееся в сети или облаке. Такое хранилище можно проверить криптографически.
Обнаружение
При обнаружении сбоя целостности его можно устранить, выбросив поврежденные куски и получив чистую копию – скажем, повторно загрузив файл или восстановив его из резервной копии. Поврежденные куски редко могут быть восстановлены. Обнаружение также может привести к расследованию причин повреждения и выявит либо аварийные случаи, либо атаки.
Обнаружение также может быть дополнением к превентивным мерам контроля. Может быть затруднительно установить правила именно так, как вы хотите, и разрешения, предоставленные учетной записи, будут использованы неавторизованным пользователем этой учетной записи. Такое обнаружение может быть выполнено с помощью журналов аудита или криптографии. Криптографическая защита иногда включается в инструменты «управления целостностью файлов».
Bepul matn qismi tugad.