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

Страница 2

Одна из причин того, что нам не удается создать защищенные системы, заключается в том, что нападающие обладают огромными преимуществами. Они могут изучить объект нападения, запланировать атаки и запускать их только тогда, когда чувствуют себя уверенно. Они могут делать что захотят, чтобы получить контроль над системой, заставить ее вести себя неправильно или поставить в неловкое положение ее создателя. И кое-что из того, что делают нападающие, действительно очень умно, и все, что они делают, – неожиданно. Это крайне важно. В прекрасном небольшом видео 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 с очень разным визуальным оформлением.)