Текст книги "Секреты и ложь. Безопасность данных в цифровом мире"
Автор книги: Брюс Шнайер
Жанры:
Интернет
,сообщить о нарушении
Текущая страница: 11 (всего у книги 34 страниц)
Глава 8
Компьютерная безопасность
Защита компьютерной информации и криптография – не одно и то же. Криптография часто применяется в целях защиты, но последняя представляет собой намного более общее понятие. В общепринятом понимании компьютерная защита объединяет такие разные вещи, как контроль санкционированного (и несанкционированного) доступа, управление учетными записями и привилегиями пользователя, защиту от копирования, от вирусов и защиту баз данных. В принципе, к защите компьютерной информации также относятся защита от подсоединения других пользователей через сеть, от подбора пароля и от проникновения вирусов, но такого рода вещи мы обсудим в главе, посвященной безопасности сетей. В век Интернета понятия компьютерной безопасности и безопасности сетей практически слились. Но для ясности в этой книге я проведу некую условную границу между понятиями компьютерной и сетевой безопасности по принципу: актуальна эта проблема безопасности для любого компьютера или только для компьютера, подсоединенного к сети. Полная защита компьютерной информации, которую можно определить как предотвращение и (или) выявление недозволенных действий пользователей компьютерной системы, представляется существенно более сложной, чем простая математика криптографии. Так оно и есть.
Суть проблемы состоит в том, что одна математика не может обеспечить полную безопасность. В криптографии математика дает защите огромное преимущество перед злоумышленником. Добавьте один бит к ключу – и вы вдвое усложните работу по взлому алгоритма. Добавьте десять битов – и вы увеличите эту работу примерно в тысячу раз. Когда речь идет о компьютерной безопасности в целом, стороны находятся в равном положении: злоумышленники и защитники могут извлечь из технологии одинаковую выгоду. Это значит, что, если бы вам было достаточно криптографии для обеспечения безопасности, у вас все было бы в порядке. К сожалению, в большинстве случаев это не так.
Большинство ранних исследований по компьютерной безопасности было посвящено проблеме персонального доступа в системах совместного пользования. Как сделать так, чтобы Алиса и Боб могли пользоваться одним и тем же компьютером и одинаковыми компьютерными программами, но чтобы Алиса не могла видеть, что делает Боб, а Боб не знал, что делает Алиса? Или в общем случае: если системой пользуется большая группа людей, у каждого из которых есть определенные права использовать определенные программы и видеть определенные данные, то как мы можем реализовать такие правила контроля доступа? Вообще говоря, это не та задача, которую можно решить с помощью криптографии, хотя в чем-то она могла бы помочь. Это новая задача.
Компьютерная безопасность требует преодоления и многих других новых проблем. Как компании обеспечить правильную работу с большой базой данных, к которой разные люди имеют различный доступ? Эта проблема может быстро стать чрезвычайно сложной. Только несколько человек имеют право видеть информацию о зарплате, еще меньше людей должны видеть всю совокупность данных: среднюю зарплату, статистические данные о здоровье и т. д.
Могут ли пользователи быть уверены в том, что используемые ими компьютерные программы исправны, что они не были модифицированы? Как им удостовериться, что их данные не изменялись? Как компания, производящая программы, может обеспечить выполнение правил лицензирования: нельзя копировать программы с машины на машину, программу можно одновременно запустить только на пяти компьютерах, только десять пользователей одновременно могут работать с этой программой, программа может работать только в течение одной тысячи часов?
Все это – серьезные требования, и задачи компьютерной безопасности имеют сложные решения.
Определения
Попытки определения понятия компьютерной безопасности стоили огромных усилий. Исторически проблема безопасности имеет три аспекта: конфиденциальность, неприкосновенность и доступность.
Конфиденциальность немногим отличается от секретности, о которой мы говорили в главе 5. Изначально компьютерная безопасность понималась как предотвращение несанкционированного доступа к засекреченной информации. Это предубеждение отчасти развеялось с появлением электронной торговли и практики совершения сделок в Интернете – в этой сфере существенно более важна неприкосновенность, – однако оно сохраняется при разработке большинства систем обеспечения компьютерной безопасности. Основная масса исследовательских работ на тему компьютерной безопасности сосредоточена на обеспечении конфиденциальности, главным образом потому, что большая часть ранних исследований финансировалась военными. На практике, как я заметил, понятия «конфиденциальность» и «безопасность» использовались как синонимы.
Понятию неприкосновенности труднее дать строгое определение. Лучшая из известных мне формулировок звучит так: все данные сохраняются в таком виде, в каком они были оставлены последним лицом, правомочным вносить изменения. В контексте компьютерной безопасности «неприкосновенность» означает защиту от записи. Неприкосновенность данных – это гарантия того, что их не удалит и не изменит кто-то, у кого нет на это права. Неприкосновенность программного обеспечения – это гарантия того, что программы не будут изменены по ошибке, по злому умыслу пользователя или вирусом.
Из определения неприкосновенности видно, что эта проблема аналогична проблеме обеспечения конфиденциальности. Если последняя перекрывает несанкционированный доступ к данным (и программам), то первая предотвращает несанкционированную запись. И фактически обе эти задачи решаются при помощи одних и тех же технологий безопасности (криптографических и других).
Доступность традиционно считают третьим «китом» компьютерной безопасности, хотя на самом деле понятие доступности выходит далеко за рамки этой проблемы. В различных стандартах по обеспечению защиты доступность определяется как «свойство системы, состоящее в том, что ее беспрепятственная эксплуатация возможна, когда это необходимо» или как «свойство системы быть готовой и пригодной к работе по требованию законного пользователя». Эти определения всегда поражали меня недостаточной конкретностью. Их смысл сводится к следующему: мы интуитивно знаем, что подразумеваем под доступностью – нам нужно, чтобы компьютер работал, когда мы того хотим, и так, как мы того хотим.
Конечно, бывает, что программы не работают или работают неправильно, но это – проблемы надежности вычислительных систем и качества программных продуктов и… ни одна из них не имеет отношения к безопасности. В контексте безопасности под доступностью можно понимать гарантию того, что злоумышленник не сумеет помешать работе законных пользователей. В частности, в задачу обеспечения доступности входит исключение возможности атак, вызывающих отказ в обслуживании.
Контроль доступа
Совместное обеспечение конфиденциальности, доступности и неприкосновенности сводится к контролю доступа. Суть проблемы состоит в обеспечении законным пользователям возможности делать все то, что им дозволено делать и на что остальные не имеют права.
Проблема контроля доступа в действительности намного шире и связана не только с компьютерами. Как вообще можно ограничить доступ к чему-либо? Как можно контролировать доступ к совместно используемым ресурсам? Как обозначить уровни доступа, различные у разных людей? Эту проблему трудно решить даже для большого здания: для этого ставят замки на входе и на дверях внутренних помещений и доверяют ключи от них надежным людям, выдают всем пропуска, которые проверяются охранниками, и т. д. В случае компьютерной системы контроль доступа – тоже трудная задача.
Кроме того, актуальность этой задачи то возрастает, то убывает с течением времени. Сначала вообще не требовался контроль доступа к компьютерам, поскольку все доверяли друг другу. По мере того как все большее количество людей приобщалось к работе с большими вычислительными машинами, возникала необходимость контролировать доступ – как для соблюдения секретности, так и для получения отчетов об использовании машинного времени. Контроль доступа был прост в мире с пакетной обработкой данных.
С появлением персональных компьютеров отпала нужда в контроле: у каждого был свой собственный компьютер. Если кто-то хотел закрыть для других доступ к файлам, он просто запирал свою дверь. В настоящее время происходит возврат к системам коллективного пользования: общим сетевым ресурсам, удаленным системам и т. п. Контроль доступа представляет проблему практически для всех независимо от того, пользуются ли разные люди общим компьютером или одной учетной записью на веб-сайте.
Перед тем как поговорить о различных типах контроля доступа, нам необходимо ввести два понятия. Речь идет о так называемых субъектах, у которых есть доступ к неким объектам. Часто, хоть и не всегда, субъектом является пользователь, а объектом – компьютерный файл. Субъектом также может быть компьютерная программа или процесс, а объектом – другая компьютерная программа, сопряженная, например. Объектом может быть запись базы данных. Объектом может быть определенный ресурс, возможно, какая-то часть технического оборудования компьютера или принтер, или часть памяти компьютера. В зависимости от обстоятельств одна и та же компьютерная программа бывает субъектом доступа в одном случае и объектом в другом.
Существует два способа задать условия контроля доступа. Вы можете оговорить, что разрешено делать различным субъектам, или оговорить, что позволено сделать с разными объектами. На самом деле – это взгляд на одну и ту же задачу с двух разных сторон, и у этих подходов есть свои плюсы и минусы. Традиционно, операционные системы работали с ресурсами и файлами; таким образом, условия контроля доступа задавали в терминах этих объектов. Современные системы ориентированы на конкретное применение. Они предлагают услуги конечным пользователям, таким как большие системы управления базами данных. В этих системах часто используются те механизмы, которые контролируют доступ субъектов.
Установление доступа не означает «все или ничего»; могут быть различные его виды. Например, в системе UNIX три вида доступа предоставляют следующие права: читать, писать и выполнять. Все эти права независимы. Например, кто-то, обладающий правом только на чтение файла, не может изменять этот файл. Тот, у кого есть право только на ввод информации, может изменять файл, но не вправе его прочесть. Тот, у кого есть полномочия и на чтение, и на ввод информации, волен делать и то и другое.
Третий тип права доступа – «выполнять» – особенно любопытен. Такое право имеет смысл только для компьютерных программ – исполняемых файлов. Субъект, имеющий право только на выполнение определенных файлов, может запустить программу, но ему нельзя ни прочесть код, ни изменить содержимое. При некоторых обстоятельствах это имеет смысл: вообразите программу, хранящуюся в защищенной памяти – устройство цифровой подписи в модуле, снабженном системой защиты от вторжения, – в этом случае действительно возможно выполнение команды без прочтения кода.
Существование различных видов доступа означает, что кто-то имеет возможность решать, кому какие права предоставить. В системе UNIX это владелец файла. Владелец может установить, кому разрешается читать, записывать и выполнять файл. В UNIX принадлежность устанавливается для каждого файла в отдельности и обычно обусловливается каталогом, в котором файл находится.
В системе Windows NT более сложный набор прав доступа. В ней предусмотрены права читать, писать и выполнять, а также удалять, изменять права доступа и изменять принадлежность. Владелец файла может разрешить кому-то изменять права доступа к этому файлу или менять его принадлежность.
Представьте себе существующую в компьютере сложную систему организации доступа в виде таблицы. По вертикали расположен список всех возможных пользователей, по горизонтали – список всех файлов. В ячейках таблицы находятся условия доступа пользователя к соответствующему файлу. Алиса может иметь право чтения файла А, чтения и записи в файл В и вовсе не иметь доступа к файлу С. Для Боба может быть установлена подобная, не менее сложная схема доступа.
В случае компьютерной системы любого разумного размера эта таблица быстро становится очень сложной. Поэтому приходится прибегать к упрощениям. Можно установить доступ к файлу таким образом, чтобы только его владелец имел возможность читать, записывать и выполнять его. Можно сделать файл общедоступным для чтения, но лишь его владелец будет иметь возможность вносить изменения. Можно создать так называемую «группу», в которую входят несколько человек с одинаковым доступом. В этом случае, если люди, например, работают над одним проектом и должны использовать определенные файлы, только они и никто другой будут иметь необходимый доступ. В системе UNIX это легко осуществимо, причем отдельный пользователь может входить в разные группы.
Один из способов справиться со сложностью контроля доступа состоит в том, чтобы разбить таблицу. В некоторых системах список тех, кто имеет доступ к определенному объекту, хранится вместе с самим объектом. Его часто называют списком контроля доступа (access control list, ACL). Это обычная практика, и ACL часто используется в целях безопасности операционных систем. Хотя существуют и определенные проблемы. Такие списки работают хорошо в простых средах, когда пользователи сами устанавливают права доступа, но несколько хуже в тех случаях, когда доступ устанавливает управляющий персонал. В таких системах, например, не существует простого способа временной передачи прав доступа. Также подобные системы недостаточно хорошо обеспечивают проверку доступа по ходу работы программы. Кроме того, поскольку установка доступа привязана к объектам, а не субъектам, могут возникнуть трудности, когда понадобится лишить доступа определенного субъекта. Если кто-нибудь из сотрудников компании увольняется, система должна перебрать все объекты и исключить этого человека из каждого списка. Наконец, управление системой на основе ACL довольно трудоемко, поэтому множество предлагаемых программ предназначено для облегчения этой задачи.
Модели безопасности
Существует множество теоретических моделей безопасности, разработка многих из них финансировалась Министерством обороны в 70-х и 80-х годах. Поскольку речь шла о системах безопасности для нужд обороны, использовалась военная схема секретности, которую мы обсуждали в главе 5. Такие системы называют многоуровневыми системами безопасности (multilevelsecuritysystem, MLS), поскольку они предназначены для поддержки многочисленных уровней секретности в единой системе. (Альтернативные решения слишком громоздкие. Можно создать одну компьютерную систему для несекретных данных, другую, совершенно независимую, – для конфиденциальных данных, третью – для секретных данных и т. д. Или создать систему наивысшего уровня, в которой весь компьютер относится к самому высокому уровню секретности.)
Наиболее известна модель Белла-Лападулы – в ней определено большинство понятий, связанных с контролем доступа и описанных в предыдущем разделе. В этой модели даются определения субъекта, объекта и операции доступа, а также математический аппарат для их описания. Эта теория долгое время оказывала влияние на проектирование систем, однако она не помогла создать практичные и экономичные системы.
Модель Белла-Лападулы предлагает два основных правила безопасности: одно относится к чтению, а другое – к записи данных. Во-первых, если пользователи имеют категорию допуска «Секретно», то они могут читать несекретные, конфиденциальные и секретные документы, но без права читать совершенно секретные. Во-вторых, если пользователи работают с секретными данными, они могут создавать секретные и совершенно секретные документы, но не могут создавать конфиденциальные и несекретные. (Второе условие также важно. Представьте себе, что кто-то – человек или даже компьютерный вирус – пытается украсть документы. Защита, конечно, предотвратит отправку конфиденциальных документов с используемого компьютера. Но если скопировать текст конфиденциального документа в несекретный, то последний можно будет послать по электронной почте. Чтобы этого не случилось, были введены соответствующие средства управления.) Общее правило звучит так: пользователи могут читать только документы, уровень секретности которых не превышает их допуска, и не могут создавать документы ниже уровня своего допуска. То есть теоретически пользователи могут создавать документы, прочесть которые они не имеют права.
Существует понятие обязательного (мандатного) контроля доступа (по терминологии Белла-Лападулы), который осуществляется системой. Он отличается от используемого в операционных системах, подобных UNIX или NT, «разграничительного» контроля доступа, который позволяет пользователям самим принимать решение о том, кто и с каким файлом может работать. (Впрочем, большинство версий UNIX могут иметь некоторые элементы обязательного контроля доступа: обладатель корневого доступа имеет обязательный доступ на чтение, запись и выполнение всех файлов компьютера.)
Модель Белла-Лападулы имеет большое значение, но у нее есть ряд ограничений. Во-первых, эта модель ориентирована на обеспечение конфиденциальности в ущерб всему остальному, а принципы конфиденциальности основаны на военной схеме секретности. Во-вторых, игнорируется проблема изменения классификации. В модели предполагается, что все сведения каким-то волшебным образом относятся к соответствующему уровню секретности, который остается неизменным. В реальной жизни все меняется: кто-то засекречивает важную по его мнению информацию, а кто-то другой впоследствии рассекречивает ее. Бывает так, что совокупность данных имеет более высокую секретность, нежели каждый элемент данных по отдельности: номера телефонов Агентства национальной безопасности относятся к несекретным данным, но полная телефонная книга АНБ классифицируется как конфиденциальная информация. Это означает, что уровень секретности сведений легко повышается сам собой, а обратный процесс возможен только после тщательной проверки. И в-третьих, бывают случаи, когда пользователи должны работать с данными, которые они не имеют права увидеть. Сведения о том, что самолет несет груз из некоторого количества бомб, возможно, имеют более высокий уровень секретности, чем уровень доступа диспетчера, но диспетчеру тем не менее необходимо знать вес груза.
В теоретической литературе обсуждались и многие другие модели безопасности. В модели под названием «Китайская стена», например, подробно рассматриваются компьютерные системы, которые работают с данными, полученными от не доверяющих друг другу пользователей, и способы, позволяющие гарантировать каждому из них конфиденциальность. (Вообразите компьютеризованную брокерскую систему, клиенты которой имеют доступ к своим счетам. Брокеры хотят исключить возможность, чтобы клиент А увидел портфель клиента Б, даже несмотря на то, что, возможно, оба портфеля классифицируются одинаково.)
Модель Кларка-Уилсона была разработана скорее для коммерческих нужд, нежели для военных структур. Требования коммерческой безопасности преимущественно касаются целостности данных, и именно на нее ориентируется эта модель. Кларк и Уилсон дали определение двум типам целостности: внутреннему соответствию, которое относится к свойствам внутреннего состояния системы, и внешнему соответствию, которое касается свойств системы по отношению к внешнему миру. Затем была построена формальная модель безопасности, в которой были систематизированы эти принципы, так же как и принципы обеспечения конфиденциальности.
В модели Кларка-Уилсона центральным является понятие данных, с которыми позволено оперировать только предписанным способом. Например, при помощи этой модели можно реализовать потребности двойной бухгалтерии: каждый кредит необходимо сопоставить равному дебету, и все должно быть записано в специальный аудиторский файл. Эта модель запрещает производить определенные действия без дополнения их другим соответствующим действием: например, запрещено кредитовать счет без записи дебета.
Ядра безопасности и надежная вычислительная база
Многие операционные системы имеют встроенные средства безопасности. В этом есть здравый смысл – часто лучше всего поместить средства безопасности на нижних уровнях системы: на аппаратном или уровне операционной системы. Тому есть несколько причин.
Во-первых, часто существует возможность обойти средства безопасности на некотором уровне посредством атаки, проведенной уровнем ниже. Например, встроенные функции кодирования в текстовом редакторе не зависят от того, может ли злоумышленник взломать операционную систему, под управлением которой он работает. Таким образом, более надежной является защита на самом низком уровне программного обеспечения.
Во-вторых, так проще. В ядро системы обычно легче ввести дополнительные меры безопасности. Упрощается осуществление и анализ таких мер. И, как следовало ожидать, в результате получается более защищенная система.
В-третьих, часто так получается быстрее. Все средства работают лучше, если они встроены в операционную систему, и средства безопасности не исключение. Криптография, например, может съедать много времени, и имеет смысл сделать ее работу как можно более эффективной.
Поэтому безопасность операционных систем остается предметом исследований уже в течение десятилетий. Раз так, для нее разработан свой собственный набор понятий.
• Монитор обращений. Часть программных средств, которая осуществляет доступ субъектов к объектам. Когда некий процесс делает вызов операционной системы, монитор обращений останавливает процесс и выясняет, следует ли разрешить или запретить вызов. Например, он не позволит пользователю с конфиденциальной регистрационной учетной записью читать секретные документы или создавать несекретные документы.
• Надежная вычислительная база. Это все защитные устройства внутри компьютера – оборудование, программно-аппаратные средства, операционная система, программные приложения и т. д. – все, что используется для осуществления политики безопасности. Некий администратор указывает компьютеру, что, от кого и каким образом следует защищать (это и есть политика безопасности), а надежная вычислительная база обеспечивает выполнение этой задачи.
• Ядро безопасности. Это оборудование, программно-аппаратные средства, операционная система, программные приложения и все остальные элементы надежной вычислительной базы, которые реализуют концепцию монитора обращений.
Монитор обращений – это абстрактное устройство защиты; оно занимается такими вещами, как управление файлами и управление памятью. Ядро безопасности обеспечивает действие монитора обращений. Надежная вычислительная база содержит все средства защиты, в том числе и ядро безопасности. А все в целом реализует некую модель безопасности – Белла-Лападулы или какую-то другую – и осуществляет защиту наиболее простыми и эффективными средствами. И конечно, надежная вычислительная база по определению надежна – пользователи не должны иметь возможность изменить ее, иначе безопасность может быть утрачена.
Эту концепцию трудно осуществить в реальной операционной системе. Компьютер – сложный зверь, и все в нем должно быть надежным. Любая мелочь способна испортить все дело. Если кто угодно имеет доступ к жесткому диску с правом на чтение и запись, то как можно помешать одному пользователю читать то, что пишет другой? Что, если один пользователь хочет, чтобы второй прочитал, что он написал? Возможно ли, чтобы пользователь, используя прерывания, делал что-то, чего он делать не должен? Как защитить доступ к принтеру? Может ли один человек узнать секреты другого через клавиатуру? Что, если базовые средства надежной вычислительной базы выйдут из строя? Как вам удастся выполнить дефрагментацию диска, если у вас есть доступ только к своим файлам?
Исторический пример почти правильной реализации этой теории – это операционная система под названием Multics, которую в конце 1960-х разработали MIT, Bell Labs и Honeywell. В Multics модель Белла-Лападулы построена с нуля. (Фактически, именно проект Multics дал толчок развитию модели Белла-Лападулы.) Разработчики применяли формальную математическую систему этой модели, чтобы продемонстрировать безопасность своей системы, а затем обозначили понятия модели в своей операционной системе. Ни одного кода не было написано до того, как спецификации были одобрены. Multics работала, хотя средства безопасности в ней были слишком громоздкими. К настоящему времени почти все уже забыли о Multics и уроках, вынесенных из этого проекта.
Один из уроков, о которых люди позабыли, – в том, что ядро должно быть простым. (Даже ядро Multics, которое содержало только 56 000 кодовых строк, как выяснилось, слишком сложно.) Ядро – это по определению высоконадежные программы. В главе 13 будет рассказано о надежности программ, мораль же в том, что неразумно ждать, что в программах не будет сбоев защиты. Поэтому чем проще программа, тем меньше в ней будет ошибок безопасности.
К сожалению, современные операционные системы страдают болезнью, известной как «распухание ядра». Это означает, что большой объем кода располагают внутри ядра, а не снаружи. Когда система UNIX была написана впервые, считалось обязательным помещение несущественных кодов за пределами ядра. С тех пор все забыли этот урок. Все имеющиеся сейчас разновидности UNIX в той или иной степени страдают распуханием ядра: у них либо слишком много команд в ядре, либо имеются непонятные утилиты, запускающиеся в случае корневого доступа, либо что-то еще.
Windows NT устроена намного хуже. Эта операционная система может служить примером того, как полностью игнорируются исторические уроки безопасности. То, что находится в ядре, по определению защищено, поэтому с точки зрения разумного проектирования необходимо уменьшить размер ядра, насколько возможно, и убедиться, что оно полностью защищено. Windows, похоже, придерживается мнения, что, поскольку то, что содержится в ядре, защищено по определению, следует просто побольше всего разместить прямо в ядре. Если разработчикам было непонятно, как обеспечить безопасность чего-либо, они просто запихивали это в ядро и считали его уже защищенным. Очевидно, это не помогает при длительной работе.
В системе Windows драйверы принтеров являются частью ядра. Пользователи регулярно загружают эти драйверы или устанавливают их, наверное, не осознавая, что норовистый (или неисправный) драйвер принтера может полностью уничтожить защиту их системы. Было бы намного разумнее разместить драйверы принтеров снаружи ядра, тогда они не должны были бы быть надежными, но это вызвало бы у разработчиков больше трудностей. А философия Windows NT в том, чтобы всегда отдавать предпочтение простому над безопасным – и в обращении, и в разработке.
Windows 2000 еще хуже.
Тайные каналы
Тайные каналы – это головная боль разработчиков моделей защиты. Помните, что одно из двух основных правил безопасности в том, что пользователь или процесс не может записывать данные на более низком уровне доступа? Тайные каналы – это способ обойти этот контроль.
Тайные каналы – это способ для субъекта с доступом более высокого уровня послать сообщение на более низкий уровень защиты – обычно посредством какихто ресурсов совместного использования. Например, злоумышленная программа, уровень доступа которой «Совершенно секретно», могла бы послать, манипулируя сетевой пакетной передачей (два пакета подряд означают единицу, а два пакета с промежутком между ними – нуль), сообщение, в котором сообщались бы коэффициент загрузки ЦПУ, распределение памяти, доступ к жесткому диску, установка очередности печати и т. п. Тайным каналом могут быть и пробелы в документе, и «случайное» заполнение в конце записи базы данных. Не быстро, но вполне осуществимо отправить сообщения процессов высокого уровня доступа процессам более низкого уровня, разрушая модель безопасности.
Создавать тайные каналы просто и забавно. Опасность представляют не те пользователи, которые копируют с экрана данные с грифом «Совершенно секретно» и переправляют их в Китай, а те, кто пишет программы, которые могут тайно собирать данные, оставаясь в тени.
Разработчики систем тратят много времени на то, чтобы закрыть определенные тайные каналы или, по крайней мере, свести к минимуму количество информации, которую можно было бы по ним переслать. Циклы ЦПУ могут иметь фиксированные такты специально для того, чтобы сделать невозможной утечку по отдельным тайным каналам. К программам пакетной передачи может быть добавлена система случайного шума, чтобы существенно снизить использование этого тайного канала. Но фактически невозможно перекрыть все тайные каналы, и часто пытаются выйти из положения, жестко ограничивая пропускную способность. Тем не менее, если интересующая вас информация – это всего-навсего крошечный 128-битовый криптографический ключ, вы найдете тайный канал, по которому ее можно отправить.
Критерии оценки
Если вы собираетесь приобрести компьютерную систему с определенной моделью безопасности или с определенным типом ядра, вам потребуется гарантия, что эта модель надежна. Или, другими словами, некая гарантия, что система обеспечивает достаточную защиту.
Есть два основных способа получить такую гарантию. Первый – это IVV, что означает «независимые верификация и проверка достоверности» (independent verification and validation). Основная его идея в том, что один коллектив разрабатывает и создает систему, а другой – оценивает эту разработку, вплоть до того, что иногда создает идентичную систему, чтобы сравнивать с ней оцениваемую. Это дорогой путь, его применяют в таких важных случаях, как создание системы управления ядерным оружием или компьютеров космических кораблей многоразового использования.
Более дешевый путь – оценивать систему по какому-то независимому набору критериев и присваивать ей определенный рейтинг безопасности.
Первым набором критериев оценки систем была «Оранжевая книга». В какой-то мере она уже устарела, но все же оказала большое влияние на компьютерную безопасность в 80-х годах, и до сих пор можно услышать, как перебрасываются терминами из «Оранжевой книги» – вроде «уровня безопасности С2».
На самом деле «Оранжевая книга» называется так: «Критерии оценки надежности компьютерных систем Министерства обороны США» (U.S. Department of Defense Trusted Computer System Evaluation Criteria), но это название трудно выговорить, а обложка у книги оранжевая. Она была опубликована в 1985 году Национальным центром компьютерной безопасности, который в некоторой степени можно считать подразделением Агентства национальной безопасности. Задачей «Оранжевой книги» было определить требования безопасности и стандартизировать правительственные требования поставок. Она дала фирмам-изготовителям вычислительных машин возможность измерить безопасность своих систем и подсказала им, что они должны ввести в свои защищенные программы. Кроме того, она предложила систему классификации различных уровней компьютерной безопасности и способы проверить, удовлетворяет ли определенная система заданному уровню.