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

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

Внимание человека – и правда суровый хозяин. Даниэль Канеман, лауреат Нобелевской премии и основатель поведенческой экономики, в своей чудесной книге «Думай медленно, решай быстро» (Thinking Fast and Slow) использует один единственный акроним: WYSIATI. What You See Is All There Is (Что ты видишь, то и есть). Важность того, что прямо перед нами, так велика, что она вытесняет наши попытки «оставаться в курсе» и «держать в уме». И все же, как инженер, вы должны делать именно это – держать в уме надежность, производительность, дизайн интерфейсов, эксплуатационные характеристики и великое множество других свойств. У нас есть набор инструментов для того, чтобы управиться с такими вещами, включая автоматизацию, контрольные списки и оценку команд специалистов разного профиля.

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

Введение

Очень многому я учусь у моих студентов. Когда я слышу вопросы, которые они задают, и читаю работы, которые они сдают, я узнаю´, с какими трудностями они встретились, обеспечивая безопасность своих систем. Тому, что я знаю об угрозах, я обязан десятилетиям карьеры, нескольким мудрым учителям и множеству совершённых ошибок. Как я упоминал в разделе «Благодарности», появление этой книги простимулировано простым вопросом «Где я могу узнать больше об этих угрозах?».

Подобно тому, как говорят: «Я чувствую, что в нем есть что-то хорошее» – я чувствовал этот вопрос во многих разговорах. За словом «безопасность» скрывается немало сложностей и нюансов. Я собрался было сказать, что мы узнаём об угрозах благодаря постепенному осознанию, но это неправда. Мы скорее узнаём об угрозах, когда что-нибудь идет не так. Даже когда это «что-нибудь» размером меньше, чем «Звезда смерти», уроки часто бывают травматическими, иногда меняющими карьеру. Трагедия – плохой учитель.

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

Для кого эта книга

Эта книга – для каждого инженера.

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