Секреты и ложь. Безопасность данных в цифровом мире - Брюс Шнайер
Шрифт:
Интервал:
Закладка:
Назначение сканеров, определяющих слабые места защиты, – автоматически сканировать сеть (или компьютер) на предмет обнаружения известных недостатков. Они делают свое дело и затем выдают точный отчет о том, какие уязвимые точки имеет сеть. Обладая этой информацией, вы можете решить – усилить защиту или пользоваться сетью, несмотря на обнаруженные недостатки.
На самом деле с этими устройствами не все так ясно, и все сканеры, имеющиеся на рынке, действуют не совсем так. Если бы они работали так, как можно было бы предположить, то они испортили бы компьютеры и причинили ущерб сети. Никто не использует такие средства, поэтому приходится идти на ухищрения.
Представьте чувствительный сканер, определяющий уязвимые места в вашем доме. Он проверит, чувствительны ли ваши окна к атаке камнем. Очевидный способ сделать это – бросить камень в окно и посмотреть на результат. Но это причинит вред дому, и поэтому сканер ищет обходные пути для получения нужной информации. Он определит, одинарные или двойные стекла в окне. Возможно, постучит по ним для того, чтобы удостовериться, действительно ли это стекло или более прочный пластик. Может быть, он попытается прочитать часть номера на стекле и сделает выводы о качестве литья. Вот такие вещи приходится делать сканирующему устройству.
На самом деле все еще сложнее. Иногда трудно сказать, будет ли успешна исследуемая атака. Например, домашний сканер проверяет электробезопасность, пытаясь перерезать провод. Это ему удается, но свет не гаснет. Что это означает – что сканер на самом деле не смог перерезать линию, или что в доме имеется резервная электростанция? Или, например, сканер перерезает провод, и свет гаснет. Значит ли это, что сканер перерезал линию или сделал что-нибудь другое (несколько последовательных действий, в результате которых свет погас)? Сканер не знает об этом, и в большинстве случаев нет способа определить действительно повлиявший фактор. Сети ненадежны; чаще всего трудно понять, в чем причина неисправности.
Хотя сканирующие устройства недостаточно эффективны для обнаружения слабых мест, и они также не могут точно оценить результат своих действий, они небесполезны. Они могут исследовать, по крайней мере, окольными путями, системы на уязвимость. В результате создается список слабых мест, которые аккуратный системный администратор будет закрывать (а бесчестный хакер будет использовать). Вот тут они работают отлично.
Когда в 1995 году появился SATAN (Securuty Administrator Tool for Analyzing Networks), он произвел настоящий фурор. В средствах массовой информации он был изображен хуже, чем его тезка (сатана), и автор этой программы был уволен с работы. С тех пор отношение к сканирующим устройствам изменилось, и они стали использоваться как часть набора инструментов администратора безопасности. На рынке сейчас присутствуют несколько коммерческих продуктов подобного рода с известными именами. Их можно представлять себе как некую разновидность аудита: это похоже на то, что некоторое частное лицо исследует вашу сеть, и сообщает о слабых местах вашей системы безопасности. Вы можете нанять исследователя для проверки вашей системы, но хакер может нанять того же самого исследователя для проверки возможности атаки. Понятно, что это ограничения технологии.
Безопасность электронной почтыСейчас электронная почта широко распространена. Любой, кто присутствует в киберпространстве, имеет электронный адрес и, вероятно, получает много сообщений каждый день. Почтовые программы не имеют встроенной системы безопасности.
Любой узел сети по пути следования сообщений между отправителем и получателем способен прочитать электронную почту, так же как и любой другой сетевой пакет. (Вы можете даже увидеть имена некоторых из этих машин в заголовке полученной почты.) Интернет-сообщение можно сравнить с почтовой открыткой: любой – почтальон, сортировщик почты, любопытные перевозчики, – в общем, те, кто соприкасаются с почтовой открыткой, могут прочитать сообщение на обратной стороне. Также нет способа проверки подписи или обратного адреса (знаете ли вы, что написанное в заголовке письма имя отправителя можно легко сфальсифицировать?), поэтому мы не можем знать наверняка, откуда пришло это письмо. (Распространители спама[38] используют это для сокрытия истинных адресов массовых рассылок.) Если хакер хочет все красиво обставить, он может связаться с машиной, которая должна явиться отправителем его сообщения, и действительно послать сообщение с нее. Если ему все равно, то он просто подделывает имя в заголовке письма.
Хотелось бы, чтобы электронная почта обеспечивала две вещи. Во-первых, мы должны быть уверены, что никто не сможет прочитать сообщение, кроме того, кому оно действительно предназначается. Во-вторых, мы должны твердо знать, что сообщение на самом деле пришло от того человека, имя которого указано в заголовке, и что никто не мог его подделать.
С помощью криптографии легко защитить электронную почту, и на рынке имеются десятки продуктов, призванных обеспечить решение этой проблемы. Вот основная последовательность действий.
1. Алиса получает открытый ключ Боба.
2. Алиса подписывает сообщение своим закрытым ключом.
3. Алиса шифрует сообщение с помощью открытого ключа Боба.
4. Алиса отсылает Бобу зашифрованное и подписанное сообщение.
5. Боб расшифровывает сообщение при помощи своего закрытого ключа.
6. Боб проверяет подпись Алисы, используя открытый ключ Алисы.
У вас, скорее всего, возникают вопросы относительно открытых ключей: как их получить, где хранить, как проверять. Я расскажу об этом подробно в главе 15.
Шифрование и сетевая защитаЗащиту от сетевых атак нельзя свести просто к применению криптографии в системах. Часто особенности системы не позволяют использовать криптографию. Например, одна часть записи системы доменных имен постоянно изменяется, поэтому непрактично использовать цифровые подписи в этой системе. Подтверждение подлинности с помощью криптографии в данном случае просто не будет работать.
Или представьте себе виртуальный мир, в котором каждый пакет зашифрован с помощью IPsec. Как только пакеты будут зашифрованы, их нельзя будет анализировать. Сетевые инженеры не смогут больше делать анализ трафика. Системы перевода адреса не смогут работать с пакетами. Системы, которые оптимизируют размер пакета для передачи через спутник, тоже не будут работать.
Другой пример: множество сетевых защит рассчитаны на проверку пакетов. Шифрование может препятствовать такой защите.
Рассмотрим антивирусное программное обеспечение, используемое в брандмауэрах, которое автоматически сканирует все входящие электронные сообщения. В больших корпорациях эти программы, просматривая почту, могут находить более 1000 вирусов в день. Если эти корпорации будут шифровать все сообщения, то подобные программы никакой опасности не обнаружат (если они не имеют ключа).
Рассмотрим брандмауэр, который просматривает входящие пакеты на предмет выявления возможного нападения. Если в этой сети везде используется IPsec, то брандмауэры ничего не смогут проверить.
Нет хорошего решения этой проблемы. Один из возможных путей – это снабдить брандмауэр ключом, с помощью которого можно осуществить дешифрацию сообщений. Он несет в себе множество потенциальных проблем безопасности. Другой вариант – это распределенный брандмауэр: распределить защиту по всему сетевому пространству через каждый узел сети. И это решение имеет свой комплекс проблем, но, вероятно, за ним будущее брандмауэров.
Исследователи Интернета бьются над этой проблемой; у меня тоже нет готового ответа.
Глава 13
Надежность программного обеспечения
Системные меры безопасности (ядра безопасности, меры контроля доступа, криптография и т. д.) в комплексе с хорошими сетевыми мерами безопасности (брандмауэрами, системами обнаружения вторжения, механизмами проверки) создают впечатление достаточной компьютерной безопасности. Почему же тогда и компьютеры, и сети так ненадежны? Почему мы так часто становимся свидетелями уязвимости компьютеров и почему не происходит изменение в лучшую сторону?
Проблема в том, что такие меры безопасности, как шифрование, ядра безопасности, брандмауэры и прочие, лучше работают в теории, нежели на практике. Другими словами, изъяны системы безопасности значительно чаще случаются при вводе ее в действие, и они намного более серьезны, чем те, что возникают при ее разработке. До сих пор во второй части данной книги говорилось о разработке. В этой главе речь пойдет о вводе в действие.
Дефектный кодВ июле 1996 года вследствие ошибки в программе вскоре после запуска взорвалась ракета «Ариан 5» Европейского космического агентства: программа пыталась поместить 64-разрядное число в 16-разрядное пространство, вызвав переполнение. Этот урок особенно важен для понимания проблем компьютерной безопасности. По существу, проблема была связана с фрагментом кода, обрабатывавшего данные о скорости бокового ветра, написанного еще для ракеты «Ариан 4». Через 36,7 секунды после запуска управляющий компьютер попытался преобразовать значение скорости из 64-разрядного формата в 16-разрядный. Число оказалось слишком большим, что и вызвало ошибку. Обычно используется дополнительный код, который отслеживает ошибки такого рода и исправляет их. Но в данном случае программисты-разработчики решили не беспокоиться о подобном коде, так как величина скорости никогда не достигала таких больших значений, чтобы создавать проблемы. Возможно, это было верно для «Ариан 4», но «Ариан 5» – более быстрая ракета. Но хуже всего то, что эти вычисления, содержащие ошибку, не имели смысла с того момента, когда ракета оказывалась в воздухе. Программа, их производящая, была нужна лишь для того, чтобы отладить систему перед запуском, и после этого ее надо было бы сразу отключить. Но инженеры еще при разработке более ранней модели ракеты решили использовать эту функцию в течение первых 40 секунд полета, чтобы облегчить перезапуск системы в случае задержки запуска в последний момент перед стартом. Была резервная система, предназначенная дублировать основную в случае ее отказа, но она работала с тем же самым программным обеспечением, содержавшим те же самые ошибки.