Выбрать главу

Все эти параметры касаются и традиционных систем, но с некоторыми существенными отличиями. Конфиденциальность и целостность обеспечиваются с помощью заказных писем и хранения документов в несгораемых сейфах. Сегодня ограбить почтовый поезд значительно сложнее, чем во времена Джесси Джеймса38. Кроме того, людям обычно несложно на глаз отличить оригинальный бумажный документ от копии. В качестве проверки попробуйте сделать фотокопию настоящего банковского чека. В понедельник попытайтесь обналичить настоящий чек в вашем банке. А во вторник попробуйте сделать то же самое с фотокопией. Проследите за разницей в поведении банковского служащего.

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

Прежде чем перейти к обсуждению самих решений, имеет смысл потратить несколько минут и попытаться определить, к какому уровню стека протоколов относится система сетевой безопасности. Скорее всего, какой-то один уровень для нее определить сложно, каждый из них должен внести свой вклад. На физическом уровне с подслушиванием можно бороться за счет размещения передающих кабелей (или, что еще лучше, оптического волокна) в герметичных металлических трубах, наполненных инертным газом под высоким давлением. Любая попытка просверлить трубу приведет к утечке части газа из трубы, давление снизится, и это послужит сигналом тревоги. Этот метод применяется в некоторых военных системах.

На канальном уровне пакеты, передаваемые по двухточечному каналу, могут зашифровываться при передаче в канал и расшифровываться при получении. При этом все детали известны лишь канальному уровню, а более высокие уровни могут даже не догадываться о том, что происходит. Однако такое решение перестает работать, если пакету нужно преодолеть несколько маршрутизаторов, поскольку его придется расшифровывать на каждом из них, что сделает его беззащитным перед атаками внутри маршрутизатора. Кроме того, при таком подходе нельзя обеспечивать безопасность отдельных сеансов (например, заказов в интернет-магазине) и при этом не защищать остальные. Тем не менее этот метод, называемый канальным шифрованием (link encryption), легко может быть введен в любой сети и часто бывает полезен.

На сетевом уровне можно развернуть брандмауэры, которые не позволят вредоносному трафику поступать в сеть или покидать ее. Также на этом уровне можно использовать протокол IPSec, защищающий IP-пакеты путем шифрования пользовательских данных. На транспортном уровне можно использовать сквозное шифрование всего соединения (то есть на всем пути от процесса к процессу). Аутентификация пользователей и неотказуемость обычно обеспечиваются на прикладном уровне, хотя иногда (например, в беспроводных сетях) аутентификация может происходить на более низких уровнях. Поскольку проблема безопасности затрагивает все уровни стека сетевых протоколов, в данной книге ей отводится целая глава.

8.1.1. Базовые принципы безопасности

Хотя обеспечение безопасности на всех уровнях сетевого стека является очевидной необходимостью, порой очень трудно определить, насколько эффективно и всесторонне решены связанные с ней проблемы. Другими словами, в большинстве случаев сложно гарантировать безопасность. Вместо этого мы пытаемся максимально повысить уровень безопасности, последовательно применяя ряд принципов. Классические принципы безопасности были сформулированы еще в 1975 году Джеромом Зальцером (Jerome Saltzer) и Майклом Шредером (Michael Schroeder):

1. Минимизация количества используемых механизмов. Его также иногда называют принципом простоты. Сложные системы обычно содержат больше ошибок, чем простые. Кроме того, пользователи могут плохо понимать принцип их действия и использовать их неправильно или небезопасно. Простые системы — хороший выбор. Например, хотя система PGP (см. раздел 8.11) предоставляет мощные возможности защиты электронной почты, она не получила широкого распространения, поскольку многие пользователи находят ее громоздкой. Простота также помогает минимизировать поверхность атаки (attack surface) — все точки, в которых злоумышленник может атаковать систему. Если ненадежному пользователю предлагается большой набор функций, каждая из которых реализована с помощью множества строк кода, такая система имеет большую поверхность атаки. И если в определенной функции нет особой необходимости, лучше обойтись без нее.

2. Отказоустойчивые настройки по умолчанию. Допустим, вам нужно организовать доступ к ресурсу. Лучше всего задать четкие правила относительно того, в каких случаях пользователь может получить доступ, вместо того чтобы пытаться определить условия отказа в доступе. Иными словами, отсутствие права доступа по умолчанию — более безопасный подход.

3. Полная опосредованность. При предоставлении доступа к любому ресурсу необходимо выполнять проверку на наличие полномочий. То есть мы должны каким-то способом определять источник запроса.

4. Минимизация полномочий. Согласно этому принципу любая система или подсистема должна обладать только теми полномочиями, которые являются достаточными для ее работы. Взломав такую систему, злоумышленники смогут получить минимальный объем полномочий.

5. Разделение задач. Данный принцип тесно связан с предыдущим: лучше разделить систему на несколько компонентов с минимально возможными полномочиями, вместо того чтобы наделять один компонент всеми правами. Это, опять же, ограничивает возможности злоумышленников в случае взлома ими отдельного компонента.

6. Минимизация количества общих механизмов. Этот немного более сложный принцип гласит, что нужно минимизировать число механизмов, совместно используемых несколькими пользователями. Если мы выбираем между реализацией сетевой процедуры в операционной системе (где ее глобальные переменные являются общими) и в библиотеке пространства пользователя (где к ней, по сути, имеет доступ только пользовательский процесс), предпочтительнее второй вариант. Общие данные в операционной системе вполне могут послужить информационным путем между пользователями. Пример такой атаки продемонстрирован в разделе, посвященном перехвату TCP-соединений.

7. Открытый дизайн. Данный принцип предельно прост: дизайн системы не должен быть секретным. Это обобщение используемого в криптографии принципа Керкгоффса. В 1883 году голландец Огюст Керкгоффс (Auguste Kerckhoffs) опубликовал две статьи по теме военной криптографии, в которых утверждалось, что система шифрования должна оставаться надежной, даже если все ее устройство, за исключением ключа шифрования, станет общеизвестным. Другими словами, не стоит надеяться на «безопасность через неясность», вместо этого нужно исходить из предположения, что злоумышленник сразу поймет устройство системы и принцип действия алгоритмов шифрования и дешифрования.