8.1. Основы сетевой безопасности
При решении проблем сетевой безопасности традиционно выделяют три основных параметра безопасности: конфиденциальность, целостность и доступность. Конфиденциальность подразумевает недоступность информации для неавторизованных пользователей. Именно это сразу приходит в голову при упоминании сетевой безопасности. Целостность означает, что полученная информация является в точности той, которая была отправлена, без изменений со стороны злоумышленников. Доступность подразумевает недопущение выхода из строя систем и сервисов вследствие сбоев, перегрузок или специально внесенных ошибок конфигурации. Хороший пример попытки поставить доступность под угрозу — это DoS-атака. Такие атаки часто бьют по особо важным целям: банкам, авиакомпаниям или средним школам во время экзаменов. Кроме классического триумвирата конфиденциальности, целостности и доступности, которые играют доминирующую роль в сфере безопасности, важны и некоторые другие аспекты. В частности, аутентификация позволяет определить, с кем именно вы имеете дело, прежде чем предоставить ему доступ к конфиденциальной информации или заключить коммерческую сделку. Наконец, неотказуемость (nonrepudiation) связана с подписями. Как доказать, что ваш клиент действительно оформил электронный заказ на десять миллионов винтиков с левосторонней резьбой по 89 центов за штуку, если теперь он утверждает, что цена была 69 центов? А еще он может заявить, что вообще ничего у вас не заказывал, если увидит, что китайские фирмы наводнили рынок винтиками с левосторонней резьбой за 49 центов.
Все эти параметры касаются и традиционных систем, но с некоторыми существенными отличиями. Конфиденциальность и целостность обеспечиваются с помощью заказных писем и хранения документов в несгораемых сейфах. Сегодня ограбить почтовый поезд значительно сложнее, чем во времена Джесси Джеймса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) опубликовал две статьи по теме военной криптографии, в которых утверждалось, что система шифрования должна оставаться надежной, даже если все ее устройство, за исключением ключа шифрования, станет общеизвестным. Другими словами, не стоит надеяться на «безопасность через неясность», вместо этого нужно исходить из предположения, что злоумышленник сразу поймет устройство системы и принцип действия алгоритмов шифрования и дешифрования.
8. Психологическая приемлемость. Этот принцип носит совершенно нетехнический характер. Правила и механизмы безопасности должны быть легкими в использовании и понимании. Здесь снова уместно вспомнить систему PGP для защиты электронной почты, многие реализации которой не соответствуют данному принципу. Однако понятие приемлемости этим не ограничивается. Помимо удобства в использовании важно позаботиться о том, чтобы смысл применения правил и механизмов был очевиден.
Важную роль в обеспечении безопасности играет изоляция. Она гарантирует разделение компонентов (программ, компьютерных систем или даже целых сетей), относящихся к разным защищаемым зонам или обладающих различными правами доступа. Все взаимодействия между разными компонентами происходят с надлежащим контролем полномочий. Изоляция, минимизация полномочий и строгий контроль движения информации между компонентами позволяют создавать системы с высокой степенью разделения.
Помимо технических вопросов, касающихся устройства систем, тема сетевой безопасности затрагивает проблемы, связанные с математическими основами и криптографией. Ярким примером проблемы первого типа является классический «пинг смерти» (ping of death). С его помощью злоумышленники вывели из строя множество хостов по всему интернету. Используя параметры фрагментации IP-пакетов, они создавали эхо-запросы ICMP, превышающие максимально допустимый размер IP-пакета. Поскольку сторона получателя не рассчитывала на прием пакетов столь большого размера, в зарезервированном ею буфере не хватало места, и лишние байты перезаписывали данные, расположенные в памяти после буфера. Конечно, это вызывало программный сбой — переполнение буфера. Примером криптографической проблемы является использование 40-битного ключа в исходной версии алгоритма WEP-шифрования для сетей Wi-Fi. Обладая достаточной вычислительной мощностью, злоумышленники могли легко подобрать такой ключ методом простого перебора.
8.1.2. Базовые принципы проведения атак
Простейший способ рассмотрения вопросов безопасности системы сводится к тому, чтобы поставить себя на место злоумышленника. Поэтому теперь, ознакомившись с базовыми принципами безопасности, давайте рассмотрим базовые принципы проведения атак.
С точки зрения злоумышленника, безопасность системы представляет собой ряд задач, которые он должен решить для достижения своих целей. Существует множество способов нарушения конфиденциальности, целостности, доступности и других параметров безопасности. Например, чтобы нарушить конфиденциальность сетевого трафика, злоумышленник может взломать систему и считать данные напрямую, обманом заставить участников коммуникации отправлять данные без шифрования и перехватить их либо, в более амбициозном сценарии, взломать шифр. Каждый из этих способов используется на практике и включает в себя несколько шагов. Мы поговорим об этом подробнее в разделе 8.2, а пока лишь кратко перечислим эти шаги и возможные способы их реализации.
1. Разведка (reconnaissance). Александр Грэм Белл (Alexander Graham Bell)39 как-то сказал: «Подготовка — ключ к успеху». Проведение атак в компьютерных сетях здесь не является исключением. Первое, что должен сделать злоумышленник, — это собрать как можно больше сведений об объекте атаки. Если вы планируете атаковать кого-нибудь, используя спам или социальную инженерию, рекомендуем вам потратить некоторое время на ознакомление с профилями пользователей, у которых вы хотите выманить информацию, и даже изучить содержимое их мусорных корзин. Однако в этой главе мы ограничимся лишь техническими аспектами атак и соответствующих защитных мер. В сетевой безопасности этап разведки сводится к сбору информации, полезной для злоумышленника. С какими устройствами мы взаимодействуем? Какие протоколы при этом задействованы? Какова топология сети? На каких компьютерах работают те или иные службы? И так далее... Мы обсудим разведку в разделе 8.2.1.
2. Прослушивание (sniffing) и перехват (snooping). Важный этап многих сетевых атак — перехват сетевых пакетов. Очевидно, что возможность перехвата сетевого трафика полезна для злоумышленника, если конфиденциальная информация передается в незашифрованном виде. Однако даже из зашифрованного трафика часто можно извлечь полезные данные — MAC-адреса участников коммуникации, информацию о том, кто с кем и когда связывался, и т.д. Кроме того, злоумышленник может перехватывать такой трафик с целью взломать шифр. Если злоумышленник имеет доступ к сетевому трафику других пользователей и может его «прослушивать», это говорит о недостаточном соблюдении по крайней мере двух принципов безопасности — минимизации полномочий и полной опосредованности. Прослушивание трафика не представляет затруднений в широковещательных сетях (например, сети Wi-Fi), но как перехватить трафик, если вы даже не можете подключиться к каналу, по которому он передается? Тема прослушивания будет рассмотрена подробнее в разделе 8.2.2.
3. Подмена данных, спуфинг (spoofing). Еще одним базовым инструментом злоумышленников является выдача себя за кого-то другого. При этом подложный сетевой трафик имитирует трафик другого компьютера. Например, мы можем легко заменить адрес отправителя во фрейме Ethernet или IP-пакете для обхода защиты или проведения DoS-атаки, поскольку эти протоколы очень просты. А как насчет таких сложных протоколов, как TCP? Ведь при отправке TCP-сегмента SYN для установления соединения с сервером с использованием подложного IP-адреса сервер ответит на этот IP-адрес сегментом SYN/ACK (второй этап установки соединения), и если злоумышленник не находится в том же сегменте сети, то он не увидит этот ответ. Это значит, что он не узнает, какой порядковый номер использует сервер, и не сможет установить соединение. Подмена данных нарушает принцип полной опосредованности: не имея возможности определить источник запроса, мы не можем нормально осуществить для него посредничество. В разделе 8.2.3 мы поговорим о подмене данных более подробно.
4. Нарушение работы (disruption). Третий компонент из тройки базовых параметров безопасности, доступность, приобретает все большую важность для злоумышленников, учитывая то, насколько разрушительными могут быть атаки типа «отказ в обслуживании» (Denial of Service, DoS). Более того, в ответ на появление новых средств защиты эти атаки становятся все более изощренными. Можно утверждать, что DoS-атака происходит из-за нарушения принципа минимизации количества общих механизмов (то есть недостаточной изоляции компонентов). В разделе 8.2.4 мы подробно поговорим об эволюции этого вида атак.
Используя различные комбинации этих базовых компонентов, злоумышленники могут проводить целый ряд атак. Например, проведя разведку и прослушивание, они могут узнать адрес компьютера потенциальной жертвы и выяснить, что этот пользователь настолько доверяет серверу, что автоматически принимает от него любой запрос. С помощью DoS-атаки (направленной на нарушение работы) злоумышленники могут вывести из строя настоящий сервер, чтобы он больше не отвечал жертве, а затем отправить подложные запросы, имитирующие запросы сервера. Именно так была осуществлена одна из самых известных атак в истории интернета, которой подвергся Суперкомпьютерный центр Сан-Диего. Чуть позже мы обсудим эту атаку подробнее.
8.1.3. Методы борьбы с угрозами
Теперь, ознакомившись с методами злоумышленников, давайте обсудим, как с ними можно бороться. Поскольку большинство атак осуществляется через сеть, сообщество специалистов по безопасности быстро пришло к мысли о том, что сеть также может быть подходящим местом для отслеживания атак. В разделе 8.3 мы подробно поговорим о брандмауэрах, системах обнаружения вторжений и других подобных средствах защиты.
Разделы 8.2 и 8.3 посвящены системным вопросам относительно попыток злоумышленников получить конфиденциальную информацию, а в разделах 8.4–8.9 мы перейдем к более формальным аспектам сетевой безопасности и поговорим о криптографии и аутентификации. В компьютерных системах реализуется ряд криптографических примитивов, основанных на математической теории. Поэтому даже если сетевой трафик попадет в руки взломщиков, это не приведет к каким-либо тяжелым последствиям. К примеру, злоумышленники все равно не смогут нарушить конфиденциальность, модифицировать контент или успешно воспроизвести передаваемые по сети сообщения. Тема криптографии достаточно обширна, поскольку существуют различные типы примитивов самого разного назначения (для подтверждения подлинности, для шифрования с использованием открытых или симметричных ключей и т.д.). При этом у каждого типа, как правило, есть несколько реализаций. В разделе 8.4 представлены ключевые концепции криптографии, а в разделах 8.5 и 8.6 рассмотрены методы шифрования с симметричным и открытым ключами соответственно. Раздел 8.7 посвящен цифровым подписям, а раздел 8.8 — управлению ключами.
В разделе 8.9 поднимается важная проблема обеспечения безопасной аутентификации. Аутентификация призвана полностью устранить возможность подмены данных, позволяя процессу убедиться в том, что другой участник коммуникации является именно тем, за кого себя выдает. По мере того как безопасность приобретала все большую важность, специалисты разрабатывали различные протоколы аутентификации. Как мы увидим далее, такие протоколы обычно основаны на криптографии.
От аутентификации мы перейдем к конкретным примерам решений (как правило, криптографических) по обеспечению безопасности. В разделе 8.10 мы рассмотрим такие средства защиты сетевой коммуникации, как IPsec и VPN, и поговорим об обеспечении безопасности в беспроводных сетях. В разделе 8.11 обсудим средства защиты электронной почты, включая PGP и S/MIME. В разделе 8.12 речь пойдет о веб-безопасности в более широком смысле, и в частности о защищенном протоколе DNS (DNSSEC), исполняемых в браузерах скриптах и протоколе SSL. Мы убедимся, что в этих технологиях используются многие идеи, изложенные в предыдущих разделах.
Наконец, раздел 8.13 посвящен социальным аспектам. Каким образом сетевая безопасность затрагивает такие важные вопросы, как неприкосновенность частной жизни и свобода слова? А что насчет авторских прав и защиты интеллектуальной собственности? Поскольку тема безопасности крайне важна, мы должны тщательно рассмотреть все эти вопросы.
Перед тем как мы перейдем к подробному рассмотрению этой темы, следует еще раз напомнить, что в целом обеспечение безопасности является весьма обширной областью изучения. В этой главе мы сфокусируемся лишь на безопасности сетей и коммуникации, оставив без внимания вопросы, связанные с аппаратным обеспечением, операционными системами, приложениями или пользователями. Это значит, что мы не будем подробно рассматривать программные ошибки и касаться аутентификации пользователей с использованием биометрических данных, защиты с помощью паролей, атак переполнения буфера, применения троянских программ и вирусов, подмены входа в систему и изоляции процессов. Эти темы детально обсуждаются в главе 9 книги «Modern Operating Systems»40 Таненбаума и Боса (Tanenbaum and Bos, 2015). Все желающие узнать о вопросах обеспечения безопасности на уровне системы могут обратиться к этой книге. Итак, начнем.
38 Американский преступник XIX века, грабитель банков и поездов. — Примеч. ред.
39 Американский и канадский ученый, один из основоположников телефонии, основатель компании AT&T. — Примеч. ред.
40 Таненбаум Э., Бос Х. «Современные операционные системы». СПб., издательство «Питер».