Крупные производители знают это, как и то, что создавать надежное программное обеспечение не выгодно. Согласно исследованиям, 90-95% всех программных изъянов безобидны, они не сказываются на работе программ, и пользователи их не замечают. Намного дешевле выпускать программное обеспечение с дефектами и затем исправлять обнаруженные 5-10% ошибок.
Они также знают, что невыгодно заниматься обеспечением реальной безопасности. По несколько раз в неделю они сталкиваются с новыми уязвимыми местами в своих продуктах. Они устраняют те, что им под силу, а о тех, с которыми справиться не могут, делают лживые заявления для печати, и ждут, когда бум в прессе утихнет. Затем они выпускают новую версию программного обеспечения с новыми функциональными возможностями, которые сопровождаются полным набором новых погрешностей, потому что пользователи предпочитают «навороченность» безопасности.
И пользователи будут их покупать. До тех пор пока закон не будет побуждать производителей к созданию безопасных продуктов, они не станут беспокоиться об этом.
Глава 24
Процессы безопасности
В 1996 году была клонирована шотландская овца по имени Долли. В последовавшей за этим событием дискуссии в прессе «Тайм» и «Ньюсуик» высказывали мнение, что клонирование людей безнравственно, и необходимо законодательными мерами пресечь возможность проведения подобных экспериментов. Но все это бессмысленно. Кто-нибудь все равно попытается клонировать людей независимо от того, законно это или нет. Нужно принять это как неизбежность и попытаться понять, что с этим делать.
В компьютерном мире также невозможно обеспечить какие-либо гарантии. Технологические приемы могут отразить большинство случайных атак. Угроза уголовного наказания может удержать от преступления многих, но не всех. Попытки нарушить чьи-либо права все равно будут продолжаться. Сети будут взламываться. Мошенничество будет процветать. Деньги будут красть. Люди будут гибнуть.
Технология не является панацеей. Программные продукты всегда имеют недостатки, число которых постоянно увеличивается. Единственный выход состоит в том, чтобы смириться с реальностью и научиться жить в этих условиях. Точно так же, как и в любой другой сфере общественной жизни. Никакие технические приемы не могут защитить нас от террористических актов. Мы стараемся обеспечить свою безопасность с помощью доступных нам средств, таких как таможенный контроль, сбор информации об известных террористических группах, неотвратимое уголовное преследование.
Принципы
Разделяйте
Бывалые путешественники держат лишь небольшую сумму денег в бумажнике, а остальное – в мешочке, скрытом под одеждой. Таким образом, если их обворуют, они не потеряют все деньги. Структура шпионских или террористических организаций предполагает разделение на маленькие группы, члены которых знают только друг друга и никого более. Таким образом, если кто-нибудь оказался схвачен или сдался сам, он может выдать только тех людей, которые входят в его ближайшее окружение. Разделение – эффективный способ защиты, так как оно ограничивает последствия действий противника, приводящих к успеху. Это – пример здравого смысла, которым часто пользуются. Пользователи имеют индивидуальные учетные записи; двери помещений офиса запираются разными ключами; права доступа предоставляются соответственно степени доверия конкретному лицу, а также реальной необходимости предоставления ему определенных сведений; личные файлы шифруют уникальными ключами. Система безопасности не строится по принципу «все или ничего», но она должна предотвращать возможность причинения значительного ущерба.
Схожий принцип – минимум привилегий. В основном это означает, что нужно давать кому-нибудь (пользователю или некоторым процессам) только те привилегии, которые необходимы для выполнения задачи. Мы постоянно сталкиваемся с этим в повседневной жизни. Ваш ключ, скорее всего, подходит только к вашему, а не любому помещению в здании. Доступ к банкоматам и хранящимся в них деньгам имеет только обслуживающий их персонал. Даже если вы пользуетесь особым доверием на службе, вы сможете выболтать только те секреты, которые вам позволено знать.
Еще больше примеров можно найти в компьютерном мире. Пользователи имеют доступ только к тем серверам, которые нужны им для работы. Только системный администратор имеет доступ к системе в целом, пользователи имеют доступ лишь к своим файлам. Иногда отдельные файлы бывают защищены групповым паролем, известным только тем, кому необходим доступ к этим файлам. Конечно, легче предоставить каждому полный доступ, но безопаснее давать людям только те привилегии, в которых они действительно нуждаются. Системы предоставления прав доступа в UNIX и NT основаны на этом принципе.
Многие нападающие пользовались нарушением принципа минимума привилегий. Как только нападающий получает доступ к учетной записи пользователя, вскрывая пароль или как-нибудь иначе, он предпринимает несколько попыток получить высшую привилегию. Например, многие нападающие пытаются вскрыть «песочницу» Java (sandbox), получить таким образом минимальные привилегии, а затем перейти в режим, позволяющий получить привилегированный статус. Взлом защиты цифровых дисков, проездных карточек и систем платного телевидения и других, имеющих одно общее свойство – все секреты хранятся в устройстве, находящемся в распоряжении пользователя, – также можно назвать получением высших привилегий.
Разделение также важно, потому что чем больше людей пользуются системой, тем меньше ее надежность. Чем крупнее компьютер, чем шире круг задач, решаемых с его помощью, тем он менее безопасен.
Это одна из причин, почему Интернет, наиболее широко используемая сеть, таит столько опасностей. Сравните веб-сервер и компьютер, работающий в режиме пониженного потребления мощности, находящийся в запертом бомбоубежище и окруженный охраной. Использование разделения делает систему более похожей на второй вариант.
Укрепите самое слабое звено
Прежде всего следует защитить самое слабое звено. Это очевидно, но снова и снова я встречаю системы, в которых это правило игнорируется. Было бы наивностью просто вкопать огромный кол перед воротами замка и надеяться, что враг побежит прямо на него. Защита должна быть со всех сторон, поэтому придется выкопать ров и построить частокол. Точно так же при использовании алгоритма шифрования с 256-битовым ключом не стоит надеяться, что вы в безопасности; враг, вероятно, найдет такой способ нападения, который никак не связан с алгоритмами шифрования.
Меня постоянно удивляет, как много зияющих дыр остается в коммерческих системах безопасности. Разработчики не замечают их, так как поглощены созданием защиты тех частей системы, в которых они хорошо разбираются. Изучите ландшафт уязвимых мест в целом, сконструируйте схему нападений, найдите в ней самое слабое звено и обезопасьте его. Затем переходите к следующему слабому звену. Таким образом вы, вероятно, сможете построить наиболее безопасную систему.
Используйте пропускные пункты
Пропускной пункт представляет собой узкий коридор, в котором легко контролировать пользователей. Вспомните, как устроены и для чего предназначены турникеты на вокзале, контрольно-кассовые пункты в супермаркете и двери вашего дома. Для этих целей используются брандмауэры, маршрутизаторы, регистрация при входе в систему, а некоторые веб-сайты направляют пользователей сперва на домашнюю страницу. Так же устроена система обнаружения мошенничества с кредитными картами. Всегда имеет смысл использовать пропускные пункты в целях безопасности.
Но эти пункты полезны только в том случае, если нет никакого способа обойти их. Один из обычных способов преодоления брандмауэра состоит в том, чтобы обойти его: можно найти, например, незащищенное удаленное соединение. Случается, что люди оставляют удаленное соединение включенным. Иногда маршрутизаторы, запоминающие устройства большой емкости и даже принтеры могут иметь незащищенные порты. Все это позволяет нападающим обходить пропускные пункты.