Поиск
 

Навигация
  • Архив сайта
  • Мастерская "Провидѣніе"
  • Добавить новость
  • Подписка на новости
  • Регистрация
  • Кто нас сегодня посетил   «« ««
  • Колонка новостей


    Активные темы
  • «Скрытая рука» Крик души ...
  • Тайны русской революции и ...
  • Ангелы и бесы в духовной жизни
  • Чёрная Сотня и Красная Сотня
  • Последнее искушение (еврейством)
  •            Все новости здесь... «« ««
  • Видео - Медиа
    фото

    Чат

    Помощь сайту
    рублей Яндекс.Деньгами
    на счёт 41001400500447
     ( Провидѣніе )


    Статистика


    • Не пропусти • Читаемое • Комментируют •

    · СЕКРЕТЫ И ЛОЖЬ · БЕЗОПАСНОСТЬ ДАННЫХ В ЦИФРОВОМ МИРЕ ·
    Б. ШНАЙЕР


    ОГЛАВЛЕНИЕ

    фото
  • Предисловие
  • Как читать эту книгу
  • Благодарности
  • От издательства
  • Глава 1 Введение
  • Часть I Ландшафт
  •   Глава 2 Опасности цифрового мира
  •   Глава 3 Атаки
  •   Глава 4 Противники
  •   Глава 5 Потребность в секретности
  • Часть II Технологии
  •   Глава 6 Криптография
  •   Глава 7 Криптография в контексте
  •   Глава 8 Компьютерная безопасность
  •   Глава 9 Идентификация и аутентификация
  •   Глава 10 Безопасность компьютеров в сети
  •   Глава 11 Сетевая безопасность
  •   Глава 12 Сетевые защиты
  •   Глава 13 Надежность программного обеспечения
  •   Глава 14 Аппаратные средства безопасности
  •   Глава 15 Сертификаты и удостоверения
  •   Глава 16 Уловки безопасности
  •   Глава 17 Человеческий фактор
  • Часть III Стратегии
  •   Глава 18 Уязвимости и их ландшафт
  •   Глава 19 Моделирование угроз и оценки риска
  •   Глава 20 Политика безопасности и меры противодействия
  •   Глава 21 Схемы нападений
  •   Глава 22 Испытание и верификация программных продуктов
  •   Глава 23 Будущее программных продуктов
  •   Глава 24 Процессы безопасности
  •     Принципы
  •   Глава 25 Заключение
  • Источники
  • Об авторе

    Посвящается Карен

    Предисловие

    Я написал эту книгу во многом для того, чтобы исправить собственную ошибку.

    Семь лет назад мною была написана книга «Прикладная криптография» («Applied Cryptography»). В ней я создал математическую утопию – алгоритмы, тысячелетиями хранящие ваши глубочайшие секреты, протоколы передачи данных, обеспечивающие воистину фантастические возможности: неконтролируемые извне финансовые операции, необнаружимую аутентификацию, анонимную оплату. И все это – незаметно и надежно. В моем видении криптография была великим технологическим уравнителем: с ее помощью каждому дешевому (и дешевеющему с каждым годом) компьютеру могла быть обеспечена такая же безопасность, как и компьютерам всемогущего правительства. Во втором издании той книги я зашел так далеко, что написал:

    «Недостаточно защищать себя с помощью закона; мы нуждаемся и в том, чтобы защитить себя с помощью математики».

    Все это – неправда. Криптография не может ничего подобного. И не потому, что она стала хуже с 1994 года или написанное мною тогда перестало быть правдой сегодня, но оттого, что криптография существует не в вакууме.

    Криптография – это раздел математики и, как и прочие ее разделы, связана с числами, уравнениями и логикой. Безопасность – реальная, ощутимая безопасность, столь необходимая нам с вами, – связана с людьми: с уровнем их знаний, их взаимоотношениями и с тем, как они управляются с машинами. Информационная безопасность связана с компьютерами – сложными, нестабильными, несовершенными компьютерами.

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

    Ошибка «Прикладной криптографии» была в том, что я рассуждал обо всем независимо от контекста. Я говорил о криптографии так, как будто она и есть Ответ™. Я был потрясающе наивен.

    Результат же был вовсе плох. Читатели поверили, что криптография – род некоей магической пыли, которая покроет их программное обеспечение и сделает его неуязвимым. И они произносили магические заклинания вроде «128-битовый ключ» или «инфраструктура открытого ключа». Как-то однажды коллеги поведали мне, что мир наполнился плохими системами безопасности, сконструированными людьми, прочитавшими «Прикладную криптографию».

    С момента написания той книги я занимался тем, что давал консультации по криптографии: по всем вопросам, связанным с разработкой и анализом систем безопасности. К своему несказанному удивлению, я обнаружил, что слабые места в системах безопасности отнюдь не определяются недостатками математических моделей. Они были связаны с аппаратурой, программами, сетями и людьми. Прекрасные математические ходы становились никчемными из-за небрежного программирования, гнусной операционной системы или просто выбора кем-то плохого пароля.

    В поисках слабины я научился смотреть шире, рассматривая криптографию как часть системы. Я начал повторять пару сентенций, которые красной нитью проходят через всю эту книгу: «Безопасность – это цепь: где тонко, там и рвется» и «Безопасность – это процесс, а не продукт».

    Любая реальная система – запутанная серия взаимодействий. Защита должна распространяться на все компоненты и соединения этой системы. И в этой книге я старался показать, что в современных системах настолько много компонентов и связей – некоторые из них неизвестны даже создателям, а тем более пользователям, – что угроза для безопасности всегда остается. Ни одна система не совершенна; ни одна технология не есть Ответ™.

    Сказанное очевидно каждому, кто знаком с проблемами безопасности на практике. В реальном мире за словом «безопасность» скрывается ряд процессов. Это не только упреждающие мероприятия, но и обнаружение вторжения, его пресечение и целая судебная система, позволяющая выследить виновного и преследовать его по суду. Безопасность – не продукт, она сама является процессом. И если мы должны обеспечить безопасность нашей вычислительной системы, нам необходимо начать разработку этого процесса.

    Несколько лет назад я слышал цитату, которую слегка изменил:

    «Если вы думаете, что технология может решить проблемы безопасности, то вы не понимаете ни проблем безопасности, ни технологии».

    Эта книга о проблемах безопасности, о технологических ограничениях и о поиске решения.

    Как читать эту книгу

    Читайте эту книгу по порядку, от начала до конца.

    И это действительно необходимо. Во многих технических книгах авторы скользят по поверхности, лишь эпизодически залезая поглубже; чаще всего они следуют структуре справочника. Эта книга не такова. В ней прослеживается четкая линия: это повествование, рассказ. И подобно любому хорошему рассказу, мало толку читать ее беспорядочно. Главы основываются одна на другой, и вы сможете вкусить все радости окончательной победы, только пройдя весь путь до конца.

    Более того, я хотел бы, чтобы вы прочли книгу один, а потом еще и второй раз.

    Эта книга доказывает, что для понимания безопасности системы необходимо рассматривать ее целиком, а не раскладывать на отдельные технологии. Безопасность сама по себе – взаимосвязанная система, и это означает, что сначала нужно приобрести некоторые знания по всем имеющим к ней отношение вопросам, а затем уже углубляться в тот или иной предмет.

    Но два прочтения… Возможно, я хочу слишком многого. Забудьте об этом.

    Книга состоит из трех частей:

    • часть I «Ландшафт» дает общий вид картины: кто такие взломщики, чего они хотят и что нужно делать, чтобы предотвратить угрозу;

    • часть II «Технологии» в основном описывает различные технологии безопасности и их ограничения;

    • часть III «Стратегии» в соответствии с окружающим ландшафтом и ограничениями технологий определяет, что же мы теперь должны делать.

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

    Благодарности

    Очень многие люди читали эту книгу на разных стадиях ее подготовки. Я хотел бы поблагодарить тех, кто читал наиболее ранний вариант этой книги: Стива Басса, Сьюзен Гринспан, Криса Холла, Джона Келси и Мадж. Их советы помогли мне окончательно определить как содержание, так и стиль изложения. Мне хотелось бы также выразить благодарность Бет Фридман за ее помощь в основательном редактировании книги, когда она была написана еще лишь наполовину, и редактировании других ее частей, а также за помощь в руководстве работой редактора и корректора, Карен Купер за помощь в корректуре и Рафаилу Картеру за помощь в редактировании, когда работа над книгой уже близилась к концу. Ценные замечания при чтении книги или ее частей сделали: Микеланджело, Кен Айер, Стив Басс, Дэвид Дайер-Беннетт, Эд Беннетт, Рассел Бранд, Карен Купер, Дэвид Коуен, Уолта Куртис, Дороти Деннинг, Карл Эллисон, Эндрю Фернандес, Гордон Форс, Эми Форсайт, Дин Гэлон, Дрю Гросс, Грегори Гуерин, Питер Гутманн, Марк Харди, Дейв Инат, Крис Джонстон, Джеймс Джораш, Ариен Ленстра, Стюарт Мак Клур, Гэри Мак Гроу, Дуг Меррилл, Джефф Мосс, Симона Несс, Артимадж Нельсон, Питер Ньюман, Эндрю Одлизко, Дуг Прайс, Джеймс Риордан, Бернард Руссели, Том Роули, Эви Рубин, Риан Рассел, Адам Шостак, Симон Сингх, Джим Уолнер и Элизабет Цвикки. Благодаря этим людям книга стала более завершенной, точной и интересной. Все недостатки, пропущенные ошибки и чрезмерное многословие остаются на совести автора.

    От издательства

    Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты comp@piter com (издательство «Питер», компьютерная редакция).

    Мы будем рады узнать ваше мнение!

    Все исходные тексты, приведенные в книге, вы можете найти по адресу http://www piter com/download.

    Подробную информацию о наших книгах вы найдете на веб-сайте издательства http://www piter com.

    Глава 1
    Введение

    В марте 2000 года я занимался тем, что собирал воедино сведения из различных источников о событиях, связанных с проблемой компьютерной безопасности. Вот эти сведения.

    • Кто-то взломал веб-сайт SalesGate com (электронная коммерция В2В, business-to-business) и украл около 3000 записей, содержащих номера кредитных карт клиентов и информацию частного характера. Часть этой информации он поместил в Интернете.

    • В течение нескольких лет частная информация утекала с веб-сайтов (таких как Intuit) к рекламодателям (например, DoubleClick). Когда посетители производили расчеты на сайте Intuit, вводимая ими информация посылалась и на DoubleClick благодаря ошибке, допущенной программистами при создании сайта. Все это происходило без ведома пользователей и, что более удивительно, без ведома Intuit.

    • Осужденный за свои преступления хакер Кэвин Митник в показаниях Конгрессу сказал, что наиболее уязвимое место в системе безопасности – «человеческий фактор». Он зачастую выведывал пароли и другую секретную информацию, действуя под чужим именем.

    • Опрос службы Гэллапа показал, что каждый третий из тех, кто делает покупки через Интернет, будет делать их, пожалуй, менее охотно в свете последних событий, связанных с проблемами безопасности.

    • Частные данные клиентов, заказывавших PlayStation 2 на веб-сайте корпорации Sony, «утекли» к неким другим клиентам. (Это – актуальная проблема всех типов сайтов. Многие посетители «отмечаются» на них в надежде получить информацию о покупателях сайта.)

    • Директор ЦРУ отрицал, что Соединенные Штаты участвовали в экономическом шпионаже, но не стал отрицать существования обширной разведывательной сети, называемой ECHELON.

    • Некто Пьер-Гай Лавойе, 22 лет, был осужден в Квебеке за взлом системы безопасности нескольких правительственных компьютеров США и Канады. Он провел 12 месяцев в заключении.

    • Министерство обороны Японии приостановило внедрение новой компьютерной системы безопасности после того, как установило, что программное обеспечение было разработано членами секты Аум Синрике.

    • Новый почтовый вирус, названный «Чудесный парк» (Pretty Park), распространился через Интернет. Это новая разновидность вируса, появившегося годом раньше. Он рассылался автоматически по всем адресам, имеющимся в почте пользователей программы Outlook Express.

    • Novell и Microsoft продолжают препираться по поводу замеченных ошибок в системе безопасности Active Directory операционной системы Windows 2000: кто из них должен обеспечивать параметры безопасности, установленные вами для своего каталога (я лично верю, что это конструктивный недостаток Windows, а не ошибка).

    • Двое сицилианцев (Джузеппе Руссо и его жена Сандра Элазар) были арестованы за кражу через Интернет около тысячи кредитных карт США. Они использовали эти карты для закупки лучших товаров и лотерейных билетов.

    • Отражена серия атак, направленных на отказ в обслуживании, проведенных хакером (на самом деле – скучающим подростком) по имени Кулио (Coolio). Он признал, что в прошлом вскрыл около 100 сайтов, в том числе сайт криптографической компании RSA Security и сайт, принадлежащий государственному департаменту США.

    • Злоумышленники организовали атаки, приведшие к отказам в обслуживании на веб-сайте компании Microsoft в Израиле.

    • Джонатан Босанак, известный как Гетсби (Gatsby), был приговорен к 18 месяцам заключения за взлом сайтов трех телефонных компаний.

    • Военные Тайваня объявили, что обнаружили более 7000 попыток со стороны китайских хакеров войти в систему безопасности страны. Эта жуткая статистика не была конкретизирована.

    Вот еще несколько сообщений о нарушениях систем безопасности в марте 2000 года:

    • Лазейка, обнаруженная в Microsoft Internet Explorer 5 (в Windows 95, Windows 98, Windows NT 4.0 и Windows 2000), позволила злоумышленнику создать веб-страницу, дающую ему возможность запустить любую программу на компьютере посетителя сайта.

    • Модифицировав URL, некий нарушитель сумел полностью обойти механизм аутентификации, защищающий удаленных пользователей серверов Axis StarPoint CD-ROM.

    • Обнаружено, что если атакующий пошлет Netscape Enterprise Server 3.6 некое длинное сообщение, то переполнение буфера приведет к прекращению работы программы, а атакующий сможет выполнить в этом случае на сервере любой код.

    • Стало известно, что некоторые атаки (приводящие к отказу в обслуживании или направленные на подавление сценария CGI) могут быть проведены таким образом, что программа RealSecure Network Intrusion Detection их не обнаружит.

    • Выяснилось, что, посылая определенный URL на сервер, обслуживаемый программой ColdFusion компании Allaire, злоумышленник может получить сообщение об ошибке, содержащее информацию о физических адресах различных файлов.

    • Omniback – это система резервного копирования компании Hewlett-Packard. Злоумышленник может использовать ее для проведения атаки, приводящей к отказу в обслуживании.

    • Эмулятор DOS Dosemu, поставляемый с Corel Linux 1.0, имеет слабое место, позволяющее пользователю выполнять привилегированные команды.

    • Манипулируя значениями некоторых параметров DNSTools 1.8.0, злоумышленник может воспользоваться недостатками программы и выполнить произвольный код.

    • Пакет InfoSearch для работы с CGI автоматически конвертирует текстовые документы в HTML. Ошибка в CGI-сценарии позволяет нарушителю выполнять на сервере команды на уровне привилегий веб-сервера.

    • Найдены слабые места в почтовой программе The Bat! позволяющие злоумышленникам красть файлы с компьютеров пользователей.

    • Clip Art Gallery компании Microsoft позволяет пользователю загружать файлы с клипами с веб-страниц. При определенных условиях видоизмененный файл клипа может вызвать выполнение произвольного кода на компьютере пользователя.

    • Если вы посылаете определенное имя пользователя и пароль (даже если он неправильный) на FTP-сервер 3.5 Bison Ware, он выйдет из строя.

    • Используя специальным образом модифицированные URL, злоумышленник может повредить Windows 95 и Windows 98 на компьютерах пользователей.

    Ниже представлен список 65 веб-сайтов, которые, согласно информации, опубликованной на сайте attrition org, были обезображены в течение месяца. В данном контексте слово «обезображены» означает, что некто вскрыл сайт и заменил главную страницу.

    Tee Plus; Suede Records; Masan City Hall; The Gallup Organization; Wired Connection; Vanier College; Name Our Child; Mashal Books; Laboratorio de Matematica Aplicada da Universidade Federal do Rio de Janeiro; Elite Calendar; Parliament of India; United Network for Organ Sharing; UK Jobs; Tennessee State University; St. Louis Metropolitan Sewer District; College of the Siskioyous; Russian Scientific Center for Legal Information; Ministry of Justice; RomTec Pic; Race Lesotho; Monmouth College; Association of EDIUsers; Bitstop, Inc; Custom Systems; Classic Amiga; 98 Sskate; CU Naked; Korea National University of Education; PlayStation 2; Assotiation for Windows NT User Group Bloem S.A.; Aware, Inc.; Ahmedabad Telephone Online Directory; Ahmedabad Telecom District; Fly Pakistan: Quality Business Solutions; Out; Internet Exposure; Belgium Province de Hainvan Wervings en Sectiebureaus; Engineering Export Promotion Council, Ministry of Commerce, India; AntiOnline's Anticode; Pigman; Lasani; What Online; Weston High School; Vasco Boutique; True Systems; Siemens Italy; Progress Korea; Phase Device Ltd.; National Postal Mail Handlers Union; Metrics; Massachusetts Higher Education Network; The London Institute; Fort Campbell School System; and MaxiDATA Tecnologia e Informatica Ltda.

    И наконец, атаки на домашний компьютер, принадлежащий одному моему другу и подсоединяющийся к Интернету через модем:

    • двадцать шесть просмотров с целью обнаружить слабые точки;

    • четыре обнаруженные попытки взлома компьютера во время поиска слабых точек;

    • множество других хакерских трюков.

    Фиксируя подобные события только в течение первой недели марта 2000 года, я воистину устал от этого занятия.

    Обозревая получившийся список, можно сказать, что устрашающе действует прежде всего большое разнообразие проблем, слабых точек и атак. Слабые места имеются в программах, которые мы считаем защищенными; есть они даже в самих системах безопасности. Некоторые из них присутствуют в системах электронной коммерции, при конструировании которых наверняка учитывались вопросы безопасности. Одни из них есть в новых программах, другие – в программах, которые продаются уже в течение многих лет. Нередко поставщики программного обеспечения никак не хотят согласиться, что у их продукции имеются проблемы с безопасностью.

    Первые семь дней марта 2000 года не были исключением. И в другие недели случались подобные происшествия, а некоторые из них были еще показательнее. Действительно, факты говорят о том, что положение вещей ухудшается: число «дыр» в системах безопасности, взломов и отказов постоянно возрастает. Даже если мы будем больше знать о безопасности (как сконструировать криптографические алгоритмы, как построить безопасную операционную систему), все равно обеспечить полную безопасность будет невозможно. Почему это так и что можно с этим сделать – и является предметом нашего разговора.

    Системы

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

    Машины только недавно стали системами. Подъемный блок – это машина; но лифт – это комплексная система, включающая много различных механизмов. Системы взаимодействуют: лифт взаимодействует с электрической системой здания, с его системой пожарной безопасности и, возможно, даже с его системой защиты окружающей среды. Компьютеры, взаимодействуя, образуют сети; сети, взаимодействуя, образуют более крупные сети… в общем, вы уловили идею.

    Адмирал Грейс Хоппер говорил: «Жизнь была проще перед Второй мировой войной. После этого у нас появились системы». Это – очень проницательный взгляд на вещи.

    Если вы используете концепцию систем, можно проектировать и строить в более крупном масштабе. Есть разница между созданием особняка и небоскреба, орудия и ракеты Patriot, посадочной полосы и аэропорта. Каждый может изготовить светофор, но разработать городскую систему транспортного контроля значительно сложнее.

    Интернет, возможно, наиболее сложная система, которая когда-либо разрабатывалась. Она включает в себя миллионы компьютеров, объединенных в непредсказуемо сложные физические сети. На каждом компьютере работают сотни программ, некоторые из них взаимодействуют с программами, установленными на том же компьютере, другие – через сеть с программами, установленными на удаленных компьютерах. Система принимает сигналы от миллионов пользователей, часто одновременно.

    Один человек сказал: «Сэр, это зрелище подобно собаке, стоящей на задних лапах. Удивительно не то, что она делает это недостаточно хорошо, а то, что она вообще способна это делать».

    Системы имеют несколько интересных свойств, которые уместно здесь обсудить.

    Во-первых, они сложны. Механизмы просты: молоток, дверные петли, нож для бифштексов. Системы же намного сложнее: они имеют компоненты, петли обратной связи, среднее время отклика, инфраструктуру. Цифровые системы весьма затейливы: даже простая компьютерная программа состоит из тысяч строчек кода, описывающего всевозможные разновидности различных операций. Сложная программа имеет тысячи компонентов, которые могут работать как по отдельности, так и во взаимодействии друг с другом. Именно для сложных цифровых систем было разработано объектно-ориентированное программирование.

    Во-вторых, системы взаимодействуют, формируя еще более крупные системы. Это может быть сделано намеренно – программисты используют объекты, чтобы дробить большие системы на малые, инженеры подразделяют большие механические системы на малые подсистемы, и так далее, – или происходит естественным образом. Изобретение автомобиля привело к развитию современной системы дорог и магистралей, а она, в свою очередь, взаимодействуя с другими системами, существующими в нашем мире, породила то, что мы называем мегаполисом. Система контроля авиалиний взаимодействует с навигационной системой самолета и с системой предсказания погоды. Тело человека взаимодействует с другими человеческими организмами и с другими системами на планете. Интернет переплетается со всеми наиболее важными системами в нашем обществе.

    В-третьих, системы обладают неожиданными свойствами. Другими словами, они иногда могут делать вещи, которых разработчики и пользователи не ожидают от них. Телефонная система, например, породила новый способ взаимодействия людей. (Александр Грэхем Белл не имел представления, что телефон станет прибором для осуществления персональной связи, – он предполагал использовать его для сообщений о приходе телеграммы.) Автомобили изменили пути, на которых люди встречаются, назначают свидания и влюбляются. Системы защиты окружающей среды в зданиях оказывают влияние на здоровье людей, что также сказывается на работе системы здравоохранения. Системы обработки текстов изменили способ их написания. У Интернета полно неожиданных свойств: вспомните об электронных покупках, виртуальном сексе, совместном авторстве.

    И – четвертое: в системах имеются «баги»[1]. Они являются особой разновидностью ошибки. Их наличие – неожиданное свойство системы, не предусмотренное при ее создании. «Баги» принципиально отличаются от сбоев. Если где-то происходит сбой, продолжение работы невозможно. Когда же имеется «баг», работа продолжается, хотя объект, ее производящий, ведет себя «плохо»: возможно, неустойчиво, возможно, необъяснимо. «Баги» – уникальное свойство систем. Машины могут ломаться или портиться, или не работать вовсе, но только системы могут иметь «баги».

    Системы и безопасность

    Все перечисленные свойства оказывают влияние на безопасность систем. Ухищрения – вот точное определение для безопасности на сегодняшний день, поскольку обезопасить сложную систему, подобную Интернету, трудно именно в силу ее сложности. Безопасность систем – дело сложное, а безопасность сложных систем в особенности.

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

    <reverence type – 'hushed'> Security </reverence>

    (<тип уважения = 'секретность'> Безопасность </уважение>)

    Увы, так не случается, и подтверждение тому можно видеть в моем отчете за 7 дней марта 2000 года. Причина большинства событий, связанных с нарушением безопасности, коренится в четырех свойствах систем, рассмотренных ранее:

    Сложность. Проблемы безопасности в Active Directory операционной системы Windows 2000 прямо вытекают из сложности любой компьютерной системы каталогов. Я думаю, что они зиждятся на недостатке, заложенном при проектировании: Microsoft применила конструкторское решение, обеспечивающее удобство пользователям, но небезупречное с точки зрения безопасности.

    Взаимодействие. Взаимодействие между программным обеспечением вебсайта Intuit и программным обеспечением DoubleClick, производящее отображение объявлений пользователей, привело к утечке информации от одного к другому.

    Неожиданность. Судя по сообщениям в прессе, программисты Sony не знают, как происходит утечка информации о кредитных картах от одного пользователя к другому. Она просто происходит.

    «Баги». Уязвимость Netscape Enterprise Server 3/6 была следствием программного «бага». Нарушитель мог использовать этот «баг», породив проблему для безопасности.

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

    Первое – это соотношение между теорией и практикой безопасности. Существует целая куча теорий безопасности: теория криптографии, теория брандмауэров и обнаружения вторжения, теория биометрик. В истории полно примеров, когда система была основана на великой теории, но терпела поражение на практике. Йоги Берра однажды сказал: «В теории нет различия между теорией и практикой. На практике есть».

    Теоретические изыскания лучше всего подходят для идеальных условий и лабораторных установок. Самая популярная шутка на занятиях физикой в моем колледже была: «Рассмотрим сферическую корову с равномерно распределенной плотностью». Некоторые вычисления мы можем производить только для идеализированной системы: реальный мир гораздо сложнее, чем теория. Цифровые системы безопасности также подчиняются этому закону: мы можем сконструировать идеализированные операционные системы так, что они, вероятно, будут безопасными, но мы не можем заставить их действительно безопасно работать в реальном мире. В реальном мире существуют несоответствия проекту, неприметные изменения и неправильные реализации.

    Реальные системы не подчиняются теоретическим решениям. Совпадения случаются только тогда, когда сферическая корова обладает такими же неожиданными свойствами, как и реальная Буренка. Именно по этой причине ученые – не инженеры.

    Вторая важная вещь, которую нужно помнить – это соотношение между предупреждением, обнаружением и реагированием. Хорошая защита объединяет все три звена: безопасное хранилище, чтобы сохранить ценности, сигнализацию, чтобы обнаружить грабителей, если они захотят туда проникнуть, и полицию, которая отреагирует на сигнал тревоги и поймает грабителей. В системах компьютерной безопасности наблюдается тенденция полагаться в основном на упреждающие меры: криптография, брандмауэры и т. д. В большинстве случаев в них не заложено обнаружения и почти никогда нет реагирования и преследования. Такая стратегия оправдана только тогда, когда предупредительные меры совершенны: в противном случае кто-нибудь наверняка сможет сообразить, как их обойти. Большинство уязвимых мест и, соответственно, нападений, описанных в данном разделе, – это результат несовершенства превентивных механизмов. В реальности же нашего мира обнаружение и реагирование очень существенны.

    Часть I
    Ландшафт

    Компьютерную безопасность часто представляют абстрактно: «Эта система защищена». Продавец программного обеспечения может сказать: «Эта программа гарантирует защиту вашей сети» или «Мы обеспечиваем безопасность электронной коммерции». Подобные заявления неизбежно несут на себе отпечаток наивности и упрощенчества. Это означает, что обращается больше внимания на безопасность программы, чем на безопасность системы. Первый вопрос, который следует задать в таком случае: «От кого и от чего защищена система?»

    Это актуальный вопрос. Представьте себе продающуюся безопасную операционную систему. Обеспечит ли она защиту от ручной гранаты, если та попадет прямиком в ваш процессор? Или от того, кто нацелит видеокамеру непосредственно на вашу клавиатуру или экран монитора? От того, кто «просочился» в вашу компанию? Скорее всего нет: не потому, что эта операционная система плоха, но потому, что некто более или менее осознанно воплощает конструкторские решения, в которых определено, какие виды возможных атак эта операционная система будет предотвращать (и, возможно, предотвратит), а какие она будет игнорировать.

    Проблемы усугубляются, когда подобные решения принимаются недостаточно обдуманно. И не все всегда так очевидно, как в предыдущем примере. Защищает ли система безопасности телефонной линии от того, кто может вас случайно подслушать, от перехватчика, имеющего большие финансовые возможности или от национального разведывательного управления? Защищает ли система безопасности банка от мошенничества клиентов, от мошенничества продавцов, от мошенничества банковского кассира или от мошенничества управляющего банком? Приведет использование другого изделия к усилению или ослаблению безопасности? Точное понимание того, что может обеспечить отдельно взятая технология безопасности и чего она не может, является слишком сложным для большинства людей.

    Безопасность нельзя представить только в белом или только в черном цвете; контекст часто играет большую роль, чем сама технология. Тот факт, что надежная операционная система не может защитить от ручной гранаты, не означает, что она бесполезна; он означает только, что мы не можем просочиться сквозь стены, дверные замки и оконные решетки. Каждая конкретная технология занимает свое важное место в общей концепции безопасности системы. Система может быть защищена от обыкновенных преступников, или от промышленного шпионажа определенного типа, или же от национального разведывательного управления с его шпионской сетью. Система может быть защищена до тех пор, пока не появились некие новые достижения математики, или в течение некоторого определенного промежутка времени, или от определенных типов атак. Как любое прилагательное, слово «безопасный» не имеет смысла вне контекста.

    В первой части книги я предпринял попытку рассмотреть основы контекста безопасности. Я расскажу о возможных угрозах для цифровых систем, о типах атак и о типах нападающих. Затем я расскажу о том, что желательно для системы безопасности. Я сделаю это прежде, чем обсуждать конкретные технологии, поскольку невозможно грамотно оценить технологии безопасности без знания ландшафта. Так же как вы не сможете понять, каким образом стены замка защищают его жителей, не погрузившись в атмосферу средневековья, вы не сможете понять, каким образом работает брандмауэр или Интернет с шифрованием данных вне контекста той среды, в которой они действуют. Кто такие нападающие? Чего они хотят? Какими инструментами располагают? Без базовых представлений о таких вещах невозможно разумное обсуждение понятия безопасности.

    Глава 2
    Опасности цифрового мира

    Этот мир – опасное место. Грабители подстерегают, чтобы наброситься на вас, когда вы идете по плохо освещенной аллее; искусные мошенники строят планы, как лишить вас денег, отложенных на старость; коллеги всеми силами стремятся разрушить вашу карьеру. Синдикаты организованной преступности распространяют коррупцию, наркотики и страх с поразительной эффективностью. В наличии также сумасшедшие террористы, ненормальные диктаторы и неконтролируемые остатки бывших супердержав, которые отличаются скорее взрывоопасностью, чем здравым смыслом. Кроме того, если верить газетам, есть еще монстры в пустынях, руки, торчащие из могил, от которых мороз пробирает, и ужасные инопланетяне, перевозящие детей Элвиса. Иногда удивительно все-таки, что мы прожили настолько долго, чтобы построить достаточно стабильное общество для проведения этого обсуждения.

    Но мир – еще и безопасное место. Хотя опасности в индустриальном обществе вполне реальны, все же они – скорее исключения. В это иногда трудно верить в наш век сенсаций – газеты лучше продаются с заголовком «Трое прохожих случайно застрелены в перестрелке», чем «У двухсот семидесяти миллионов американцев небогатый событиями день» – но это правда. Почти все ходят каждый день по улице и не подвергаются нападению грабителей. Почти никто не умирает от случайного выстрела, не страдает от надувательства мошенников и, приходя домой, не сталкивается с сумасшедшими мародерами. Большинство компаний не являются жертвами вооруженного грабежа, жуликоватых банковских менеджеров или насилия на рабочих местах. Менее одного процента удаленных взаимодействий, позволяющих вести дела на расстоянии, без непосредственного контакта, приводят к жалобам какого-либо рода. Люди, как правило, честны: они обычно твердо придерживаются неписанных общественных правил. Законность в нашем обществе, в общем, на высоком уровне.

    (Я осознаю, что предыдущий абзац представляет собой чрезмерное упрощение сложного мира. Я пишу эту книгу в Соединенных Штатах в конце второго тысячелетия. Я пишу ее не в Сараево, Хевроне или Рангуне. У меня нет опыта, исходя из которого я мог бы рассказать, каково жить в тех местах. Мои личные представления о безопасности происходят из опыта жизни при стабильной демократии. Эта книга о безопасности с точки зрения индустриального мира, а не мира, раздираемого на части войной, подавляемого тайной полицией или контролируемого криминальными структурами. Эта книга об относительно небольших опасностях в обществе, в котором главные угрозы уже отведены.)

    Нападения, криминальные или нет, представляют собой исключения. Это события, застающие людей врасплох, «новости» в прямом смысле слова. Они нарушают общественный уклад, разрушают жизнь тех, кто стал их жертвой.

    Неизменная природа атаки

    Что отличает киберпространство от его двойника – реального мира в «плоти и крови», если отбросить технологические изыски и графические пользовательские интерфейсы? Как и физический мир, виртуальный мир населен людьми. Эти люди взаимодействуют с другими, образуют сложные социальные и деловые взаимоотношения, живут и умирают. В киберпространстве существуют сообщества, большие и малые. Киберпространство наполнено коммерцией. Там заключаются соглашения и контракты, там случаются разногласия и конфликты.

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

    Это означает, что, бросая взгляд в прошлое, мы можем точнее увидеть, что принесет будущее. Нападения будут выглядеть по-разному – взломщик будет оперировать цифровыми взаимодействиями и точками входа в базы данных вместо отмычек и монтировок, террористы выберут мишенью информационные системы вместо самолетов – но мотивация и психология будут теми же. Это также значит, что нам не понадобится совершенно другая правовая система в будущем. Если наше грядущее похоже на былое – за исключением некоторых особенностей, – тогда правовая система, которая работала в прошлом, вероятно, будет работать и в будущем.

    Вилли Саттон грабил банки, потому что там хранились деньги. Сегодня деньги находятся не в банке, они перемещаются по компьютерным сетям. Каждый день банки мира переводят друг другу миллиарды долларов при помощи простого изменения чисел в компьютерной базе данных. Между тем, средняя величина единичной кражи из физических банков ненамного превышает 1500 долларов. И киберпространство будет представляться злоумышленникам все более соблазнительным – объем электронной торговли возрастает с каждым годом.

    Где деньги – там преступность. Ограбление банка или магазина спиртного, надевание лыжной маски и размахивание пистолетом 45-го калибра не совсем устарело.

    Но это – не тот метод, который предпочтет преступник, чтобы продумать план, если он совсем не одурел от наркотиков. Организованная преступность предпочитает нападать на крупные системы, чтобы получать большую добычу. Мошенничество с кредитными картами и контрольными системами стало с годами более изощренным. Жульничество с расчетными автоматами следует тому же принципу. Если мы не увидели до сих пор широко распространенного мошенничества с системой платежей в Интернете, то это потому, что там еще нельзя получить крупные деньги. Когда деньги там будут, преступники попытаются их украсть. И как видно из истории, они в этом преуспеют.

    Нарушение конфиденциальности также не является чем-то новым. Удивительное множество юридических документов является достоянием общественности – это записи с общим доступом: имущественные сделки, продажа кораблей, гражданские и уголовные судебные разбирательства и приговоры, банкротство. Хотите узнать, кто владеет вон тем кораблем и сколько он за него заплатил? Это можно сделать. Такова роль общего доступа к базам данных. Еще больше приватной информации содержится в 20 000 (или около того) персональных баз данных (в США), которые находятся в корпорациях: финансовые подробности, медицинская информация, особенности образа жизни.

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

    Специалисты по маркетингу уже давно используют любые данные, которые могут заполучить, чтобы «вычислить» определенных людей. В Соединенных Штатах личные данные принадлежат не тому человеку, которого они характеризуют, а организации, собравшей их. Информация о ваших финансах не является вашей собственностью, она принадлежит вашему банку. Ваша медицинская информация принадлежит не вам, а вашему врачу. Врач дает клятву, что сохранит ваши личные секреты, но страховые агенты и этого не делают. Вы действительно хотите, чтобы любой знал о вашем пороке сердца или наследственной глаукоме? Как насчет вашего алкоголизма или неприятностей с венерическим заболеванием двадцатилетней давности?

    Нарушение конфиденциальности может легко привести к мошенничеству. В рассказе «Бумажная луна» Джой Дэвид Браун пишет о трюках, к которым прибегали в период Великой депрессии для продажи Библий и родственных товаров, цены на которые внезапно упали. В другого рода аферы сейчас вовлечены матери и вдовы солдат, погибших на заокеанской войне: «Всего за несколько пенни в день мы позаботимся об их могилах» – и обманщики получают свой куш. Во многих частях страны коммунальные службы установили систему на основе телефонной связи, позволяющую считывать показания счетчиков: воды, электричества и т. п. Эта идея будет казаться грандиозной до тех пор, пока какие-нибудь предприимчивые преступники не начнут использовать ее для определения времени отъезда хозяев в отпуск. Или пока они не догадаются использовать систему аварийного контроля, которая с точностью до цента показывает еще и подробности аренды здания. Если данные могут быть использованы, кто-нибудь попробует это сделать – с компьютером или без него.

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

    Изменяющаяся природа атаки

    Опасности могут быть теми же, но киберпространство все видоизменяет по-своему. Хотя нападения в цифровом мире могут иметь те же цели и использовать многие из тех методов, что и нападения в физическом мире, все же они будут существенно различаться. Они будут проще и шире распространены. Будет сложнее проследить, поймать, доказать вину злоумышленника. И их действие будет более разрушительным. У Интернета есть три новых свойства, которые помогают осуществить атаку. Любое из них – угроза, все вместе они способны вселить ужас.

    Автоматизация

    Автоматизация – это друг нападающего. Если умный фальшивомонетчик изобрел способ чеканки безукоризненных пятицентовых монет, никто не будет беспокоиться. Фальшивомонетчик не сумеет сделать достаточно много этих монет, чтобы оправдать время и усилия. Телефонные хулиганы могли звонить бесплатно из телефонов-автоматов в пределах определенной местности практически сколько угодно с 1960-х до середины 1980-х. Конечно, телефонная компания была недовольна, что привело к грандиозным шоу с попыткой поймать этих людей, – но хулиганы не сильно повлияли на итоговую прибыль компании. В самом деле, вы не можете украсть столько десятицентовых телефонных звонков, чтобы это сказалось на доходе компании с многомиллиардным капиталом, особенно если себестоимость услуг близка к нулю.

    В киберпространстве все иначе. Компьютеры имеют неоспоримое преимущество при решении повторяющихся, скучных задач. Наши фальшивомонетчики могут отчеканить миллион электронных пятицентовиков во время сна. Так называемая тактика «поэтапных нападений» – кража каждый раз небольшой части денег, по кусочкам, от каждого счета, приносящего процентный доход, – прекрасный пример того, что было невозможным без компьютеров.

    Если вы спланировали крупную аферу, при помощи которой можно очистить чьи-нибудь карманы, а она срабатывает только один раз из 100 000 попыток, вы умрете с голоду, прежде чем ограбите кого-то. В киберпространстве вы можете настроить свой компьютер на поиск одного шанса из ста тысяч. Возможно, вы будете находить по целой дюжине таких шансов ежедневно. Если вы в состоянии привлечь другие компьютеры, то сможете находить сотни шансов.

    Быстрая автоматика совершает атаки, даже если возможное число успешных попыток мизерно. Атаки, которые были слишком несущественны, чтобы обращать на них внимание в физическом мире, могут быстро стать основной угрозой в цифровом. Многие коммерческие системы совершенно не заботятся об этих мелочах: дешевле игнорировать их, чем с ними бороться. Им придется думать иначе с приходом цифровых систем.

    Киберпространство, кроме того, прокладывает новую просторную дорогу для нарушения конфиденциальности просто в результате факта появления автоматизации. Предположим, вы проводите маркетинговую кампанию, направленную на богатых любящих родителей, вместе с детьми коллекционирующих марки с изображениями пингвинов. Это слишком трудоемко – ходить по всему городу и находить богатых граждан с детьми, которые любят пингвинов и интересуются марками. Для компьютерной сети нет ничего проще, чем сопоставить маркетинговую базу данных почтовых индексов людей с определенным годовым доходом, записи о датах рождения, списки подписчиков rec collecting stamps[2] и данные покупателей книг о пингвинах на Amazon com. Интернет дает в руки средства, позволяющие собрать все данные о человеке, когда-либо внесенные в пользовательскую сеть. Бумажные данные, даже если они общедоступны, трудно искать и трудно сопоставлять. Компьютеризованные данные найти существенно проще. Данные, внесенные в сеть, можно найти удаленно и сравнить с другими базами данных.

    При определенных обстоятельствах получение этих данных незаконно. Частных лиц неоднократно преследовали в судебном порядке за просмотр секретных файлов полиции или информационно-поисковых систем. При других условиях это действие вполне обоснованно называется добычей данных. Например, большие компании, имеющие базу данных кредитных карт: Experian (раньше – TRW), TransUnion и Equifax, имеют горы сведений почти о любом человеке в США. Эту информацию собирают, сортируют и продают любому, кто готов за нее заплатить. Базы данных кредитных карт содержат ошеломляющее количество фактов о том, как люди привыкли тратить деньги: где они живут, что едят, как проводят отпуск – все это можно там найти. DoubleClick пытается построить базу данных, содержащую информацию об индивидуальных привычках веб-серферов[3]. Даже магазин бакалейных товаров ведет специальные карты постоянных покупателей, что позволяет получать данные о предпочтениях последних. Компания Acxiom специализируется на соединении информации частных и общедоступных баз данных.

    Новым здесь является не то, что данные выплывают наружу, а то, как просто их можно собирать, использовать и злоупотреблять ими. И дела становятся все хуже: собирается все больше данных. Банки, авиалинии, каталоги компаний, фонды медицинского страхования – все они хранят информацию частного характера. Множество веб-сайтов собирают и продают персональные данные. А почему нет? Хранение данных дешево и, может быть, когда-нибудь пригодится. Такие разнообразные архивы в конце концов появляются в общедоступной сети. И все больше и больше данных оказывается собрано и снабжено перекрестными ссылками. Автоматизация переводит добычу информации на новую ступень.

    Действие на расстоянии

    Как любят подчеркивать специалисты по технологиям, Интернет не имеет границ или естественных ограничений. Любые две вещи одинаково тесно связаны, будь они расположены в разных концах комнаты или планеты. Одинаково просто активизировать работу компьютера в Тулузе с компьютера в Тунисе и с компьютера в Таллахассии (Tallahassee). He нравятся законы о цензуре или законы о компьютерных преступлениях в вашей стране? Найдите страну, которая вам нравится больше. Страны вроде Сингапура пытались ограничить возможности своих граждан в отношении поиска в Сети, но строение Интернета делает задачу блокировки его отдельных частей неосуществимой. По мнению Джона Гилмора, «цензура Интернета – это его повреждение и разгром».

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

    Глобальная природа Интернета также затрудняет поиск преступников и их обвинение. Найти нападающих, ловко скрывающих свое местонахождение, может быть почти невозможно, и, если вы даже найдете их, что будете делать? Преступность ограничена только в том, что касается политических границ. Но если у Интернета не существует физической территории, на которой можно было бы его контролировать, то кто обеспечит его безопасность?

    К настоящему времени все правоохранительные органы, которые могли бы предъявить претензии к Интернету, уже пытались это сделать. Данные пришли из Германии? Тогда это в юрисдикции немецких законов. Они адресованы в Соединенные Штаты? Тогда это дело американского правительства. Они проходили через Францию? Если так, французские власти ответят qu'il s'est passe[4]. В 1994 году операторов компьютера BBS в Милпитасе, штат Калифорния, – где находились и люди и компьютеры – судили и признали виновными в суде Теннесси, потому что кто-то в Теннесси сделал междугородный телефонный звонок в Калифорнию и загрузил порнографические картинки, которые, как обнаружилось, разрешены в Калифорнии, но неприличны в Теннесси. Операторы BBS никогда до судебного процесса не бывали в Теннесси. В июле 1997 года 33-летняя женщина была осуждена швейцарским судом за отправку порнографии через Интернет – хотя с 1993 года она жила в США. Имеет ли это какой-то смысл?

    Тем не менее обычно преследование судебным порядком невообразимо трудно. До того, как их «вычислят», преступники могут использовать неразбериху в качестве ширмы. В 1995 году 29-летний хакер из Санкт-Петербурга заработал 12 миллионов долларов, вломившись в компьютер Ситибанка. Ситибанк случайно обнаружил взлом и вернул себе большую часть денег, но встретил огромные сложности с выдачей хакера, чтобы подвергнуть его суду.

    Такая разница в законах между различными штатами и странами может даже привести к высокотехнологичной форме выбора области юрисдикции. Иногда это работает в пользу обвинителя, как, например, осуждение в Теннесси калифорнийской BBS. В других случаях она идет на пользу преступникам: преступному синдикату, у которого достаточно денег, чтобы предпринять широкомасштабную атаку на финансовую систему, не так трудно найти страну, у которой слабые законы о компьютерной преступности, несомненно продажные офицеры полиции и никаких договоров о выдаче преступников.

    Распространение технических приемов

    Третье свойство – это легкость, с которой опыт удачных атак распространяется по киберпространству. НВО – компанию, занимающуюся кабельным телевидением, не очень заботит, что кто-нибудь может создать дешифратор для их базы. Для этого требуется время, сноровка и некоторое количество денег. Но что, если этот «кто-нибудь» опубликует простой метод получения любым человеком бесплатного спутникового телевидения? Без всякой работы? Безо всякого оборудования. «Просто наберите эти семь цифр на вашем пульте дистанционного управления, и вам никогда больше не придется платить за кабельное телевидение». Это может увеличить количество пользователей, не производящих платежи, до миллионов и ощутимо повлиять на прибыльность компании.

    Физические фальсификации – это сложная, но решаемая задача. Двадцать лет назад мы продавали шаху Ирана какие-то старые машины глубокой печати. Когда к власти пришел аятолла Хомейни, он сообразил, что гораздо выгоднее печатать стодолларовые банкноты, чем иранские риалы. ФБР называет эти подделки суперзнаками, поскольку они почти безупречны. (Вот почему в США изменили дизайн денег.) В то время как ФБР и секретные службы заламывали руки, Министерство финансов произвело некоторые подсчеты: иранские печатные станки могут печатать только какое-то количество денег в минуту, в году только столько-то минут, то есть можно посчитать максимальное количество фальшивых банкнот, которое иранцы в силах выпустить. Казначейство решило, что это количество фальшивок не повлияет на денежную стабильность, так что не стоит серьезно беспокоиться о национальной безопасности.

    Если бы производство фальшивых денег использовало электронику, все было бы по-другому. Электронный фальшивомонетчик может автоматизировать процесс, написать программу и поместить ее где-нибудь на одном из веб-сайтов. Люди будут загружать эту программу и запускать необнаруживаемое производство фальшивых электронных денег. К полудню эта информация могла бы оказаться в руках первых 1000 фальшивомонетчиков; следующие 100 000 получили бы ее в течение недели. Денежная система США смогла бы разрушиться за неделю. Уже не существовало бы максимального предела усиления мощности этой атаки – в киберпространстве она может возрастать экспоненциально.

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

    Мы рассматривали эту проблему на примере компьютерных вирусов: дюжина сайтов позволяет вам загрузить компьютерные вирусы, наборы инструментов для их конструирования и модели самих вирусов. Ту же картину мы видим с хакерскими инструментами: комплекты программного обеспечения, которые вызывают поломку компьютеров, крушат серверы, обходят защиту от копирования или используют недостатки конструкции браузеров, чтобы красть данные из машин пользователей. Вирусы Интернета всегда порождают вирусы на гибких дисках, что выглядит как необычная и привлекательная забава. Организация атак вида «отказ в обслуживании», направленных на основные веб-сайты, как в 2000, не требует никакой изобретательности: достаточно загрузить и запустить программу-сценарий. И поскольку электронные коммерческие системы широко распространены, мы видим, что автоматизированные нападения направлены и на них тоже.

    Компьютерные атаки доказывают то, что преступникам не нужно обладать сноровкой, чтобы преуспеть.

    Упреждающие меры вместо ответных

    Традиционно коммерческие системы бегали наперегонки с мошенничеством: оперативная, в режиме онлайн, проверка кредитных карт была лишь ответной мерой на участившиеся кражи последних. Этот метод не сработает в Интернете, потому что время в нем течет очень быстро. Кто-то может провести успешную атаку на систему кредитных карт Интернета, написать программу, чтобы автоматизировать нападение, и за 24 часа программа станет доступна для полумиллиона людей по всему миру, и большинство из них невозможно будет потом ни в чем обвинить. Я представляю себе консультанта по безопасности, который входит в офис главного администратора и говорит: «У нас есть два варианта. Мы можем принять любую транзакцию как действительную, будь она законной или мошеннической, или не принимать ни те, ни другие». Главный администратор окаменел бы перед необходимостью такого выбора.

    Глава 3
    Атаки

    Я собираюсь обсудить три основных класса атак. Преступные атаки относятся к наиболее явным, и этому типу я уделю основное внимание. Но два других класса – атаки, приводящие к огласке, и «законные» атаки – могут быть гораздо более разрушительными.

    Преступные атаки

    Что такое преступные атаки, понять просто: каким образом, атакуя эту систему, я смогу получить максимальную финансовую выгоду? Нападающие бывают разные: от преступников-одиночек до изощренных синдикатов организованной преступности, от «своих людей», решивших заработать «быстрых денег», до правительств, нацеленных на борьбу с инфраструктурой другой страны.

    Мошенничество

    Мошенничать пытались со всеми когда-либо изобретенными коммерческими системами. Недобросовестные торговцы пользовались неправильными весами для того, чтобы обсчитывать покупателей; те же, в свою очередь, соскабливали серебро и золото с ободков монет. Подделывали все: деньги, акции, кредитные карты, чеки, аккредитивы, заказы на поставку, фишки казино. Современные финансовые системы – чеки, кредитные карты и сети банковских автоматов – ежегодно терпят многомиллионные потери из-за мошенничества. Электронная торговля не будет ничем отличаться, не изменятся и методы преступников.

    Аферы

    Национальная компьютерная лига выделила пять наиболее распространенных в сети афер – это продажа интернет-услуг, продажа разнообразных товаров, аукционы, пирамидальные и многоуровневые маркетинговые схемы и благоприятные возможности для деловой деятельности. Люди читают какое-нибудь соблазнительное письмо в электронной почте или посещают привлекательный веб-сайт и отсылают деньги в какой-то абонентский ящик, и все заканчивается тем, что они или не получают ничего взамен, или получают ничего не стоящий хлам. Все очень похоже на физический мир: множество людей просто обмануто.

    Разрушительные атаки

    Разрушительные атаки – это сфера деятельности террористов, наемных служащих, склонившихся к мести, или хакеров, ушедших в подполье. Разрушение – это преступная атака (редко бывает, чтобы разрушение чужого имущества было законным), но часто при этом отсутствуют корыстные мотивы. Вместо них нападающие просто задают себе вопрос: «Каким образом я могу вызвать наибольшие повреждения, нападая на эту систему?»

    Существует много разновидностей разрушительных атак. В 1988 году кто-то написал компьютерный вирус, направленный непосредственно на компьютеры, принадлежащие Electronic Data System. Он не произвел слишком больших разрушений (в действительности нанес небольшой ущерб NASA), но цель была именно такова. В начале 2000 года мы наблюдали массовые атаки, приводящие к отказам в обслуживании, на Yahoo! Amazon com, E*Trade, Buy com, CNN и eBay. Умелый нападающий, вероятно, может неделями подавлять работу провайдера. Фактически хакер, обладающий достаточным мастерством и подходящими моральными устоями, может, вероятно, «разрушить» весь Интернет.

    На другом конце спектра – те, кто открыто вламывается через парадную дверь с бомбой. Нападения США на иракские системы коммуникаций в Персидском заливе, по-видимому, лучший тому пример. Группа французских террористов Comitee Liquidant ou Detournant les Ordinateurs (Комитет компьютерной ликвидации и сдерживания) в начале 1980-х разбомбила компьютерные центры в районе Тулузы. Более эффектным было лишь сожжение Александрийской библиотеки в 47 году до н э. (Юлием Цезарем), в 391 году н э. (христианским императором Феодосием I) и в 642 году н э. (Омаром, халифом Багдада) – все это, кстати, превосходные уроки, наглядно демонстрирующие важность резервного копирования.

    Кража интеллектуальной собственности

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

    Компании, занимающиеся программным обеспечением, хотят продавать свои программы легальным покупателям, избегая того, чтобы пираты изготовили миллионы нелегальных копий и продали (или раздали) их всем желающим. В 1997 году Альянс коммерческого программного обеспечения (Business Software Alliance) установил на своей веб-странице счетчик, который показывал, какие потери несет индустрия из-за пиратства: 482 доллара в секунду; 28 900 долларов в минуту; 1,7 миллиона долларов в час; 15 миллиардов долларов в год. Эти цифры завышены, так как сделано ложное допущение, что всякий, кто пользуется пиратской копией, например 3D Studio Max компании Autodesk, заплатил бы за легальную продукцию 2995 долларов (или 3495 долларов, если брать розничную цену). Распространенность пиратства в сфере программного обеспечения сильно зависит от страны: считается, что 95% программ в Китайской Народной Республике – пиратские, тогда как в Канаде таких только 50%. (Лидирует Вьетнам с 98% пиратского программного обеспечения.) Эти потери выводят из себя компании, занимающиеся программными средствами.

    Пиратство может принимать различные масштабы. Это и распространение дисков среди друзей, и загрузка из Интернета, и крупномасштабные операции по изготовлению копий (обычно проводящиеся на Ближнем Востоке).

    Пиратство также может быть совершено по отношению к данным. Подделывают ли музыкальные диски, которые продают в закоулках Бангкока, или МР3-файлы с той же музыкой, которые распространяют через Веб, – электронную интеллектуальную собственность воруют все время. (И, конечно, это в полной мере относится к цифровым изображениям, цифровому видео и электронному тексту.)

    Общая нить этих рассуждений состоит в том, что компании хотят контролировать распространение своей интеллектуальной собственности. Такая позиция, хотя она совершенно обоснована, противоречит тому, что, собственно, представляет собой электронный мир. Последний имеет свои особенности: в отличие от физических вещей, информация может находиться в двух местах одновременно. Ее можно копировать бесконечно. Кто-то может отдавать часть информации и одновременно сохранять ее. Когда информация распространится повсюду, может стать невозможным проследить ее местонахождение. Если цифровая копия Короля-льва когда-нибудь будет распространяться по Интернету, Дисней не сумеет удалить все копии.

    Недозволенное копирование – не новая проблема; она так же стара, как индустрия звукозаписи. Когда я учился в школе, у меня были магнитофонные записи музыки, которые были мне не по карману; и точно так же поступали все остальные мои знакомые. Тайвань и Таиланд долгое время были источником поддельных CD. Русская мафия развивает индустрию видеопиратства, а китайские триады все в большей степени вовлекаются в подделку программных средств. Ежегодные промышленные потери были оценены в 11 миллионов долларов в год, хотя это число, возможно, тоже основывается на ложных предположениях.

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

    Присвоение личности

    Зачем красть у кого-то, когда вы просто можете стать этим человеком? Это существенно проще и может оказаться намного более выгодным: получить стопку кредитных карточек на чужое имя, наделать крупных долгов и затем исчезнуть. Это называется присвоением личности и является высокоразвитой сферой деятельности преступников. В Альбукерке (Нью-Мексико) преступники проникали в дома именно для того, чтобы забрать чековые книжки, свидетельства о кредитных картах, квитанции и другие финансовые документы, выискивая номера социального обеспечения, даты рождения, места работы и номера счетов.

    Такие вещи происходят все время. В США в течение одного только 1999 года сообщалось о тысячах случаев присвоения личности. Устранение последствий может стать тяжелой и изнурительной задачей.

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

    А жертвы беспомощны. Они сообщают засекреченную информацию любому, кто спрашивает, многие пишут номера водительских прав на чеках. Они выбрасывают счета, банковские квитанции и т. п. Они слишком доверчивы.

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

    Кража фирменной марки

    Идентификация в виртуальном пространстве жизненно важна и для фирм, и для отдельных индивидуумов. Разработка фирменного знака требует времени и денег. Такого рода идентификация – это больше чем надпись, лозунг и навязчивая мелодийка для рекламы. Это – продукция, кирпичные здания, работники службы по работе с покупателями, вещи, которые можно потрогать, люди, с которыми можно поговорить. Марка означает репутацию.

    В Интернете препятствия минимальны. Любой может иметь веб-сайт – от Ситибанка до Фреда-храни-деньги-в-матрасе. И многие так и делают. Как пользователи узнают, какие сайты стоит посетить, на каких – сделать закладку, а с какими установить взаимоотношения? Тысячи компаний продают компьютеры в Сети. Какие из них действительно надежны, а какие не заслуживают доверия?

    Снабжение товара торговой маркой – единственное, что может здесь помочь. Когда Веб был впервые представлен на публичное обозрение, специалисты утверждали, что он возвещает конец big brand[5]. Поскольку любой мог войти в Сеть и соревноваться с узнаваемыми брендами, торговые марки становились бессмысленными. Действительность доказала полную противоположность этому предположению: поскольку любой может войти в Сеть и соперничать с громкими именами, единственный способ отличить продукцию – ее фирменный знак. Пользователи запоминают знак и возвращаются на сайты, которым они доверяют. Знаки имеют реальную ценность, и их имеет смысл воровать.

    Например, малайзийская компания хотела продавать презервативы, используя торговую марку Visa. Малазийцы заявили, что не имеют ничего общего с компанией кредитных карт, но эта «игра слов» дает им своего рода пропуск. Провести настоящую Visa не удалось – компания предъявила иск. Она победила, и я считаю, что такой прецедент имеет важное значение для защиты права собственности на фирменный знак.

    Киберпространство предоставляет широкие возможности для кражи фирменного знака. В 1998 году кто-то подделал запрос на передачу имени домена в Network Solution и украл Sex com; настоящий владелец до сих пор еще пытается вернуть его назад[6]. В другом случае некий сантехник заменил телефонный номер на сайте другого такого же специалиста на свой. Преступные синдикаты в Лас-Вегасе сделали подобный трюк с телефонными номерами эскорт-услуг. Атаки такого рода не представляют собой ничего нового. Элмон Строугер был предпринимателем из Канзас-Сити. Он был убежден, что телефонисты перенаправляют звонки, поступающие к нему, в фирмы-конкуренты, поэтому в 1887 году изобрел телефонный диск, дабы исключить телефонистов.

    Некоторые знатоки устраивают свой веб-сайт таким образом, чтобы красть трафик с других веб-сайтов; это известно как редирект, перенаправление (page-jacking). В Сети есть и тайпсквоттеры, «пираты» опечаток, регистрирующие имя домена, которое выглядит как имя оригинального веб-сайта, написанное с опечаткой. Так поступают создатели многих порносайтов. Даже большие компании не чуждаются такого рода приемов: когда стал популярен 1-800-COLLECT, компании MCI и AT&T создали свою службу телефонных разговоров, оплачиваемых абонентом, которому звонят. У AT&T ею стала 1-800-C0LLECT (нуль вместо буквы «О» – наиболее распространенная ошибка набора), a MCI опустился до того же, зарегистрировав 1-800-0PERATOR с тем же нулем вместо буквы «О», но в другом месте. Некоторые подобные приемы сегодня запрещены, и я надеюсь, что в будущем запретят и остальные.

    Судебное преследование

    К сожалению, судебное преследование в киберпространстве может быть затруднено. Казалось бы, преступления точно такие же – ведь кража противозаконна: хоть аналоговая – хоть цифровая, хоть на линии – хоть без нее. Набор действий тоже одинаков: злоупотребление, подделка, рэкет, мошенничество – как и квалификация, и преследование по закону в соответствии с уголовным кодексом. Законы против таких поступков (вместе с инфраструктурой уголовного правосудия для того, чтобы претворять их в жизнь) уже есть. Были приняты и некоторые новые законы, специально для цифрового мира, но мы пока не знаем всех их тонкостей. Но темп работы судебной системы отличается от темпа развития Интернета, и США может потребоваться десятилетие на то, чтобы упразднить плохо работающий закон или понять, как на самом деле нужно его применять.

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

    В конечном счете люди осознают, что нет смысла писать законы, которые специфичны для какой-либо технологии. Мошенничество есть мошенничество вне зависимости от того, что является средством – почта, телефон или Интернет. Правонарушение не становится более или менее преступным, если в нем используется криптография. (Нью-йоркские продавцы, которые в 1999 году при помощи Palm Pilot[7] копировали номера кредитных карт покупателей, не были бы менее виновны, если бы использовали ручку и бумагу.) И вымогательство не становится лучше или хуже, если его осуществляют с использованием компьютерного вируса, а не старомодных компрометирующих фотографий. Хорошие законы написаны так, чтобы не зависеть от технологии. В мире, где технологии движутся вперед намного быстрее, чем заседания Конгресса, только они и могут работать. Механизмы для более быстрого и чуткого законодательства, может быть, когда-нибудь и появятся.

    Вмешательство в частные дела

    Вмешательство в частные дела не обязательно будет преступлением, но может им стать (оно, например, может быть прелюдией к присвоению личности). В США почти все такие вторжения законны. Людям не принадлежит информация о них самих. Если кредитное бюро или фирма, занимающаяся маркетинговыми исследованиями, собирают о вас информацию – о ваших личных привычках, схеме покупок, финансовом статусе, физическом здоровье, – они вправе продать сведения любому, кому захотят, без вашего ведома и согласия. Впрочем, это везде по-разному. Законы о неприкосновенности частной жизни в большей части Европы (охватывающей Европейский Союз), на Тайване, в Новой Зеландии и Канаде более суровы.

    Другие типы вмешательства в частные дела тоже считаются законными. Когда нанимают частного детектива, чтобы собрать информацию о человеке или компании, это законно до тех пор, пока он не использует никаких противоправных методов. Любого рода вмешательство полиции в частную жизнь законно при наличии ордера, но многое законно и без него. (Знаете ли вы, что полиции США не нужен ордер, чтобы потребовать сделать копии с фотопленок, которые вы сдали на проявку?)

    Существует два принципиально разных типа вторжений в личную жизнь: направленная атака и сбор информации. При направленной атаке злоумышленник хочет узнать все об Алисе. Если Алиса – человек, то атака называется преследованием. Если «Алиса» – компания, то это производственный шпионаж. Если «Алиса» – правительство, то такую атаку называют национальной разведкой или шпионажем. Любая из этих атак доведет вас до тюрьмы при использовании одних методов и не приведет к подобному результату при использовании других.

    Компьютерные меры безопасности могут защитить Алису от направленной атаки, но только до определенного момента. Если злоумышленников достаточно хорошо финансируют, они всегда их обойдут. Например, установят жучок в офисе Алисы, перероют ее мусор или будут следить за ней при помощи телескопа. Информация есть информация, и компьютерные меры безопасности защищают ее, пока она в компьютере. Такие меры работают против бесконтактных атак. Они заставляют злоумышленников подбираться поближе к Алисе и делают вторжение в частную жизнь более опасным, дорогим и попадающим в сферу действия разных неприятных законов.

    Сбор информации – это другой тип вторжений в личную жизнь. Такие атаки используют косвенные методы. Предположим, злоумышленнику нужен список всех вдов не моложе 70 лет, у которых в банке не менее миллиона долларов, которые за прошлый год участвовали более чем в 8 благотворительных акциях и подписываются на астрологический журнал. Или список всех жителей США, подписанных на AZT[8]. Или тех, кто посещал определенный социалистический веб-сайт. Аферисты сто лет собирали бы имена людей, которые могли бы поддаться определенному жульничеству, в то время как широкая распространенность баз данных в Интернете позволяет им автоматизировать и оптимизировать их поиск.

    Хорошее шифрование и компьютерная безопасность в состоянии помочь защититься от атак по сбору информации (если считать, что это незаконно – просто купить информацию у того, кто владеет различными базами данных), делая затруднительной процедуру сбора. Сбор информации выгоден только потому, что его можно автоматизировать; нет никакого смысла перерывать всю мусорную корзину соседа, чтобы найти демографические данные. Если же все компьютерные данные защищены, злоумышленник просто не знает, где ему смотреть. Даже не самые высокие уровни криптографии могут полностью защитить от атак по сбору информации.

    Наблюдение

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

    Технология разрушила такое мировоззрение. Мощные направленные микрофоны могут улавливать разговоры на расстоянии сотен ярдов. После того, как группа террористов MRTA захватила японское посольство в Перу (в 1997 году), в репортажах рассказывали о «жучках», спрятанных в пуговицах рубашек, которые позволили полиции установить местонахождение каждого. Устройства Ван Эйка могут читать текст на мониторе вашего компьютера, расположенного через квартал от них (пока еще это дорогая и сложная атака, но вы только подождите, пока распространятся беспроводные локальные сети). Камеры наблюдения, которые сейчас легко заказать по каталогам электроники, можно запрятать в самые маленькие щели; спутниковые камеры могут прочитать номерной знак вашего автомобиля прямо с орбиты. Министерство обороны проектирует миниатюрные летательные аппараты размером с небольшую птицу или бабочку, которые смогут разыскать вражеских снайперов, определить местонахождение заложников в захваченном здании или шпионить за кем-нибудь.

    Возможность проследить за кем-нибудь издалека уже существует, но ее используют только в исключительных обстоятельствах (не считая телевидения). В 1993 году крупный колумбийский наркоделец Пабло Эскобар был обнаружен отчасти благодаря тому, что проследили его сотовый телефон: метод, известный как точное определение местонахождения. В 1996 году русские военные ликвидировали чеченского лидера Джохара Дудаева при помощи ракеты «воздух-земля» после того, как определили местонахождение, перехватив его разговоры по спутниковому телефону. Сотрудники ФБР обнаружили грузовик, который принадлежал людям, взорвавшим федеральное здание в Оклахома-Сити, собрав записи всех камер наблюдения в городе и сопоставив их показания по времени[9]. Невидимые идентификационные метки печатаются фактически на всей цветной ксерографической продукции любого производства. (Эти машины также обеспечивают меры защиты от подделки – такие, как дополнительный голубой тонер на банкнотах, если устройство определяет, что пытаются копировать американские деньги.)

    Технология, которая позволяет автоматически определять наркодельцов, анализируя случайные телефонные разговоры, по подозрительному поведению спутниковой связи или с помощью уличной камеры по фотографиям преступников, находящихся в розыске, еще не стала обычным делом, но это только вопрос времени. Опознание лиц сможет выделить из толпы конкретного человека. Распознавание голоса позволит просканировать миллионы телефонных разговоров в поисках определенного субъекта; уже можно выискивать подозрительные слова и фразы и выделять один разговор из большого их количества. Закон Мура, который прогнозирует, что промышленность может удваивать вычислительную мощность процессоров каждые 18 месяцев, предсказывает кое-что еще: вычислительная техника следующего поколения будет меньше размерами, быстрее, намного дешевле и доступнее[10]. Как только технология распознавания научится идентифицировать людей, компьютеры смогут проводить их поиск.

    Хранение данных тоже становится дешевле. Всего несколько поколений отделяет нас от возможности записать всю нашу жизнь – на аудио и видео – и сохранить информацию. О необходимости этого могут говорить как о защитном механизме, «на случай если вам когда-нибудь потребуется алиби», или как о полезном для общества механизме, поскольку «вы никогда не знаете заранее, что можете стать свидетелем преступления». Когда-нибудь, возможно, «неношение» устройства, записывающего вашу жизнь, будет казаться подозрительным.

    Инфраструктура наблюдения устроена в Соединенных Штатах под видом «службы работы с клиентами». Кто не слышал повсеместного сообщения, что «этот разговор может прослушиваться или записываться в целях гарантии качества»? Некоторые отели заносят данные о предпочтениях клиентов в международную базу данных, так что клиенты будут чувствовать себя как дома, даже если это их первая остановка в данном городе. В ресторанах высокого класса сейчас есть видеокамеры в обеденном зале для того, чтобы изучать пристрастия в еде и следить за ходом обеда, и базы данных, содержащие сведения о предпочтениях клиентов. Amazon com отслеживает поведение покупателей из различных демографических групп. Дэвид Смит, написавший вирус «Мелисса», был обнаружен, поскольку Microsoft Word автоматически вводит информацию об авторстве во все документы. Автоматические системы оплаты сохраняют сведения о том, какие машины проехали через шлагбаум. В 2000 году некоторые города стали измерять загруженность дороги, отслеживая разговоры водителей по сотовым телефонам. Грань между хорошими потребительскими услугами и преследованием очень тонка.

    Иногда речь не идет о потребительских услугах: компании кредитных карт имеют подробные записи о покупках, поэтому могут предотвращать мошенничество. Компании контролируют посещение служащими веб-сайтов, чтобы ограничить злоупотребления и задолженность. Многие аэропорты фиксируют номерные знаки всех автомобилей, помещенных на стоянку, – международный аэропорт Денвера в целях безопасности записывает номера всех машин, въезжающих на территорию аэропорта.

    GPS (спутниковая система определения координат) – это фантастическая технология наблюдения. По крайней мере две компании поставляют на рынок «умные» автомобильные локаторы на основе GPS. Некая компания продает автоматические системы складского учета, использующие GPS и передатчики, прикрепляемые к объекту. Передатчики сигнализируют о своем местоположении, а центральный компьютер следит, где что находится. Вероятно, у шпионов давно уже была возможность использовать такого рода игрушки, но сейчас это – предмет потребления, поэтому папа знает, где его сын берет машину.

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

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

    Базы данных

    Исторически нарушение конфиденциальности касалось только наблюдения. Затем в 1960-е годы общество достигло критической черты. В бизнес пришли компьютеры с большими базами данных, и организации стали накапливать базы данных, содержащие информацию об отдельных людях. Недавно мы достигли второй критической границы: компьютеры, объединенные в сеть, позволяют совместно использовать, сравнивать и объединять отдельные базы данных. Значение подобных действий для скрытости частной жизни мы можем ощущать все время. Мы ухитрились успешно преодолеть Большого Брата только для того, чтобы затеряться в сетях Младших Братьев. Для начала можно за кем-нибудь незаметно понаблюдать.

    В последнее время собирают и сохраняют все больше и больше данных – из-за того, что сбор информации стал дешевле, и благодаря тому, что люди оставляют больше электронных «отпечатков» в повседневной жизни. Большинство таких данных собирают и сравнивают друг с другом. Многое доступно в режиме онлайн. Отсюда вывод: собрать на кого-нибудь подробное досье совсем несложно.

    Многие базы данных – коммерческие: огромные кредитные базы данных, принадлежащие Experian, TransUnion, Equifax; телефонные базы данных, фиксирующие отдельные звонки; базы данных кредитных карт, содержащие информацию о личных покупках. Информацию можно использовать по прямому назначению или продать для каких-то других целей. В этих случаях доступ к ней законен, но потенциальный доступ к информации имеется и у тех, кто достаточно умел, чтобы взломать компьютер. Можно сравнивать между собой базы данных: информацию о вашем здоровье, финансовые подробности, любые сведения об образе жизни, которые вы когда-либо предавали огласке. В 1999 году в прессе была небольшая перепалка из-за того, что некоторые общественные каналы телевидения продали список жертвователей Демократической партии. В 2000 году общественный протест вынудил DoubleClick отказаться от своих планов по сопоставлению записей веб-серфинга отдельных личностей.

    Веб дает больше возможностей для вторжения в частную жизнь. Электронные магазины могут, теоретически, сохранять записи обо всем, что вы купили (Blockbuster, например, фиксирует в базе данных все видео, которые вы брали напрокат). Также можно сохранять записи обо всем, на что вы просто смотрели: любой предмет, по которому вы просили показать более полную информацию, любую тему, по которой вы искали данные, как долго вы изучали каждый вопрос, а также не только что вы купили, но и на что вы смотрели и не купили.

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

    Анализ трафика

    Анализ трафика – это изучение параметров передаваемой информации. Не содержимого самого сообщения, а его характеристик. Кто с кем общается? Когда? Насколько длинные сообщения? Как быстро посылаются ответы, насколько они длинные? Какого рода связь возникает после получения определенного сообщения? Это все вопросы анализа трафика, и ответы на них могут быть очень информативны.

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

    Часто даже системы передачи информации так же важны, как сама информация. Например, простой факт, что Алиса звонит каждую неделю известному террористу, более важен, чем детали их разговора. Нацисты использовали данные анализа телефонных счетов в оккупированной Франции, чтобы арестовывать друзей арестованных; их на самом деле не интересовало, о чем был разговор. Звонки из Белого дома Монике Левински довольно показательны даже без записи беседы. В часы, предшествующие американской бомбардировке Ирака в 1991 году, доставка пиццы в Пентагон стократно возросла. Любой, обративший на это внимание, точно знал: что-то произошло (довольно интересно, что ЦРУ заказывало такое же количество пиццы, как обычно). Некоторые исследования показывают, что даже если вы зашифруете свой веб-трафик, анализа, основанного на размере зашифрованных веб-страниц, более чем достаточно, чтобы понять, что вы просматриваете.

    Хотя военные используют анализ трафика уже десятки лет, он до сих пор – новая область исследований в академическом мире. Мы в действительности не знаем, насколько коммуникации, особенно наши интернет-связи, уязвимы для анализа трафика и что можно сделать для снижения риска. Ожидается, что в будущем это будет важной научной областью.

    Широкомасштабное электронное наблюдение

    ECHELON – это кодовое обозначение автоматизированной глобальной системы перехвата, управляемой службами безопасности США, Великобритании, Канады, Австралии и Новой Зеландии, возглавляет которую Агентство национальной безопасности. По оценке специалистов, ECHELON перехватывает ежедневно до 3 миллиардов сообщений, включая телефонные звонки, сообщения электронной почты и информацию Интернета, спутниковые передачи и т. п. Система собирает все эти передачи без разбора, а затем сортирует и очищает информацию при помощи программ искусственного интеллекта. В некоторых источниках заявляется, что ECHELON анализирует 90% данных интернет-трафика, хотя это кажется сомнительным[11].

    Такие попытки широкомасштабного наблюдения устрашают и порождают некоторые уникальные проблемы. Информация, полученная таким путем, полезна, если только придать ей вид, в котором люди могли бы ее понять и действовать в соответствии с результатами ее анализа. Соединенные Штаты перехватили сообщение для японского посла в Вашингтоне, в котором обсуждалась бомбардировка Пирл Харбора, но эта информация приобрела смысл только в ретроспективе и не могла обрести его раньше из-за низкого уровня квалификации служащих, к которым она попала. Но трудно не только анализировать данные, но и принять решение, что нужно записывать.

    Потенциально перехват системой ECHELON – нескончаемый поток данных, который никогда не смогли бы обработать сколь угодно много аналитиков. Перехватывающее устройство должно решить в реальном времени, стоит или нет записывать часть информации для дальнейшего анализа. И система не может позволить себе слишком много «дальнейших анализов» – она должна продолжать запись информации. Я уверен, что наиболее ценная часть записанной информации никогда не будет изучаться людьми подробно.

    Чтобы построить систему, аналогичную этой, вам следовало бы инвестировать деньги в две технологии: возможности первичной обработки и анализ трафика.

    Оборудование перехвата должно получить возможность быстро характеризовать фрагменты информации: кто отправитель и получатель, тему сообщения, как ее классифицировать. (Если вы считаете, что трудно проделать такую работу с информацией Интернета и электронной почты, подумайте, как сложно это сделать при речевом общении.) Во многом эта технология похожа на ту, что заложена в поисковых системах.

    Анализ трафика еще более важен. Схемы трафика проясняют многое о любой организации, и их намного проще собирать и анализировать, чем реальные коммерческие данные. Эти схемы также поставляют дополнительную информацию для первичной обработки. Тщательно разработанные базы данных по схемам трафика, несомненно, являются сердцем любой подобной ECHELON системы.

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

    Атаки ради рекламы

    Концепция атак ради известности очень проста: «Как мне атаковать систему, чтобы мое имя появилось в газетах?» Такой тип атаки является относительно новым в цифровом мире: несколько лет назад взлом компьютерной системы не считали достойным освещения в прессе, и я не могу найти в истории никакой другой технологии, которую люди пытались бы испортить только для того, чтобы их упомянули в газете. В физическом мире, однако, этот тип атаки древен: человек, который сжег Храм Артемиды в Древней Греции, сделал это только потому, что хотел, чтобы его имя осталось в веках. (Кстати, его звали Герострат.) Из более позднего упомяну искавших того же детей, которые расстреляли школу в Колумбине.

    Большинство злоумышленников такого типа – это хакеры: умельцы, много знающие о системах и их безопасности. Часто у хакеров есть доступ к значительным ресурсам – в лице студентов большого университета или служащих крупных компаний. У них обычно нет больших денег, но иногда случается избыток времени. Кроме того, они чаще всего не делают того, что может привести их в тюрьму: основная их цель – огласка, а не заключение под стражу.

    Канонический пример такой атаки: два аспиранта университета Беркли в 1995 году взломали схемы кодирования Netscape Navigator. Обнаруженные в системе слабые места аспиранты не использовали для получения незаконной прибыли, а просто позвонили в Нью-Йорк Таймс. Реакция Netscape была примерно такая: «Мы провели ряд вычислений и полагаем, что такая атака потребовала бы безумных затрат; мы не думаем, что взлом системы стоил бы чьих-то усилий». Они правы: взлом не стоит усилий… для того, кого интересуют деньги. У аспирантов были все навыки, доступ ко всем свободным компьютерам в университете и никакой общественной жизни[12].

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

    Иногда такие атаки мотивируют тем, что требуется привлечь внимание к проблеме. Многие компании игнорируют уязвимость своей системы безопасности, если не привлечь к ней внимание общественности. Если исследователь объявляет атаку, компания-жертва будет суетиться, чтобы исправить ситуацию. Таким образом, атаки повышают безопасность систем.

    Атаки ради известности могут дорого обходиться. Клиенты могут после такой атаки отказаться от одной системы в пользу другой, как уже произошло после нескольких атак на банковские системы. Инвесторы могут отказать жертве в фондах. Это уже произошло с индустрией цифровой сотовой связи после подобных атак, показавших недостатки защитных мер по отношению к конфиденциальности и краже. Ситибанк лишился многих значительных вкладов после взлома хакером из Санкт-Петербурга. Взлом системы безопасности цифровых видеодисков (DVD) приостановил поступление на рынок продуктов Sony после рождества 1999 года. В 2000 году CD Universe потеряли множество клиентов в результате того, что хакеры украли с веб-сайта компании 300 000 номеров кредитных карт. Иногда дурная слава обходится дороже, чем реальная кража.

    Атаки ради известности грозят и другими опасностями. Одна из них – в том, что о таких атаках узнают преступники и будут использовать успешную методику. Другая – в том, что доверие общества к системам разъедается оглаской подобных фактов. В частности, это может быть основной проблемой для электронных коммерческих систем. Банки вынуждены сохранять в тайне успешные атаки преступников на их системы с тем, чтобы не волновать общественность. Но хакеров и образованных людей гораздо труднее урезонить, и они продолжают держать в поле зрения коммерческие системы. Если где-то в системе безопасности есть прорехи, кто-нибудь найдет их и созовет пресс-конференцию. Может быть, не первый, кто обнаружит прорехи, но кто-нибудь огласит все. Компании должны быть готовы к этому.

    «Дефейс» – подмена чьих-нибудь веб-страниц – одна из форм атак ради известности. Это обычно становится важной новостью в средствах массовой информации. В 1996 году таковой стал взлом веб-сайта Министерства юстиции. Тот же эффект имел в 1997 году взлом сайта AirTran, а в 1998 – главной страницы сайта газеты New York Times.

    В те дни настроения были таковы, что на некоторых сайтах вовсе не ожидали нападений. Студия Метро-Голдуин-Майер/Юниверсал была шокирована, когда в 1995 году взломали веб-сайт их фильма «Хакеры». А в 1997 студия Юниверсал Пикчерз сама взломала свой веб-сайт фильма «Парк юрского периода» в рекламных целях. (Она пыталась сделать вид, что это дело рук хакеров, но имитированный сайт выглядел слишком профессионально, а взломанная страница была загружена на сайт заранее, за три дня.)

    В наши дни подобные атаки происходят настолько часто, что их только вскользь упоминают в новостях. Возможно, все основные веб-сайты американского правительства были взломаны в 1999 году, как были взломаны веб-сайты множества местных (муниципальных) и иностранных правительств. Я привел в первой главе список из 65 повреждений веб-сайтов в первую неделю марта 2000 года. Системные администраторы уже привыкли к этой проблеме.

    Атаки, приводящие к отказам в обслуживании

    Совсем недавно атаки типа «отказ в обслуживании» стали де-юре-атаками, направленными на огласку. Это произошло только вследствие их широкого освещения в прессе и, будем надеяться, они вскоре перестанут быть новостью. Идея в том, чтобы просто остановить работу чего-нибудь. И, как вам скажет любой, кому приходилось иметь дело с бастующими рабочими – водителями автобусов, диспетчерами воздушного движения, рабочими на ферме и т. п., – такие атаки весьма эффективны.

    В физическом мире есть и другие атаки, приводящие к отказам в обслуживании, например блокады и бойкоты. Все эти атаки имеют свои аналоги в киберпространстве. Имея достаточные возможности телефонной связи, можно заблокировать все соединения модема локального поставщика услуг Интернета. Аналоговая сотовая телефонная сеть испытывает затруднения с соединением, если перемещающийся пользователь переходит от одной ячейки к другой; можно сидеть на холме с направленной антенной и, медленно поворачивая ее туда-сюда, заблокировать все каналы ближайших ячеек.

    Нападения, приводящие к отказам в обслуживании, работают, поскольку компьютерные сети являются сетями связи. Некоторые простые атаки, вроде передачи слова «привет», можно автоматизировать до такой степени, что они становятся атаками, приводящими к отказам в обслуживании. Так в основном устроены атаки, рассчитанные на «затопление» сети, которым подверглись некоторые провайдеры в 1996 году.

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

    Подобные действия могут быть прелюдией к преступной атаке. Взломщики подходят к складу в 1:00 ночи и перерезают провод охранной сигнализации, ведущий к полицейскому участку. Сигнализация срабатывает и предупреждает полицию, что провод поврежден. Взломщики отступают на безопасное расстояние и ждут, когда приедет полиция. Полиция приезжает и ничего не обнаруживает. (Если преступники изобретательны, они перережут провод в незаметном месте.) Полиция решает, что проблема в системе, а владельцы склада решают, что разберутся с ней утром. Полиция уезжает. Взломщики возвращаются и уносят все, что хотят.

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

    Вот другой пример: военная база, окруженная забором, снабженным сенсорами движения. Злоумышленники берут кролика и перекидывают его через забор, а затем убегают. Срабатывает сенсор движения. Охрана приходит, ничего не обнаруживает и возвращается на пост. Злоумышленники повторяют всю процедуру, охрана вновь реагирует. После нескольких таких ночей охрана отключает сенсор движения. И злоумышленники на джипе протаранивают забор. Такого рода атаки неоднократно использовались против русских военных баз в Афганистане и, в качестве проверки охраны, на некоторых военных базах США. Они удивительно удачны.

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

    Более близкий пример: широко используемый метод кражи автомобилей заключается в том, чтобы включать сигнализацию в 2 часа ночи, 2:10, 2:20, 2:30… пока владелец машины не отключит ее, чтобы успокоить разгневанных соседей. Утром машины нет.

    Во время войны атаки, приводящие к отказам в обслуживании, используют все время. Каждая из сторон пытается заблокировать вражеские системы радиолокации и управления стрельбой, нарушить системы коммуникации, взорвать мосты. Одно из свойств подобных атак в том, что для них часто нужен низкий, а не высокий технический уровень: взорвать компьютерный центр намного проще, чем использовать уязвимые места Windows 2000.

    Атаки, приводящие к отказам в обслуживании в Интернете, детально обсуждаются в главе 11.

    «Законные» атаки

    В 1994 году в Великобритании один человек обнаружил, что его банковский счет пуст. Когда он подал жалобу на то, что последние шесть процедур снятия денег со счета он не производил, его арестовали и обвинили в краже. Британский банк заявил, что система безопасности кредитных карт непогрешима, а подсудимый, несомненно, виновен. Когда адвокат изучил доказательства, он обнаружил следующее:

    1. У банка нет службы безопасности и гарантии качества программного обеспечения.

    2. В нем никогда не проводились проверки безопасности.

    3. Обсуждаемые изъятия денег никто не проверял.

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

    От атак, использующих несовершенство законодательства, защититься труднее всего. Цель таких атак не в том, чтобы использовать недостатки системы. И даже не в том, чтобы обнаружить эти недостатки. Цель состоит в том, чтобы убедить судью и присяжных (которые, возможно, не сильны в технике), что в системе могут быть недостатки. В том, чтобы дискредитировать систему, заронить в умы судьи и присяжных сомнения в совершенстве системы и в результате доказать невиновность клиента.

    Вот гипотетический пример. В большом деле о наркотиках полиция использует данные сотовой телефонной сети, по которым устанавливает местонахождение обвиняемого с телефоном в определенном месте в определенное время. Адвокат находит какого-нибудь специалиста-хакера, который дает показания, что такие данные легко могли быть сфабрикованы, что они ненадежны и не могут служить доказательством. У прокурора есть другая группа экспертов, которые утверждают противоположное, и единственный возможный выход состоит в том, что они уравновесят друг друга: суд продолжится без учета данных сотовой связи.

    То же самое может произойти, если данные экспертизы используют для осуждения кого-то, взломавшего компьютерную систему, или если данные о подписании документов используют для навязывания контракта. «Я этого никогда не подписывал, – говорит ответчик. – Компьютер попросил меня ввести пароль и нажать эту кнопку. Что я и сделал». Присяжные, возможно, в такой же степени несведущи в технологии, в какой представляет себя ответчик, и, скорее всего, сочувствуют ему.

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

    Использование «законных» атак в полной мере предоставляет огромные возможности. Многие преступники в высшей степени искусны – в некоторых случаях они могли бы стать лучшими экспертами по вопросам безопасности – и хорошо обеспеченными. Они могут использовать процесс исследования системы, чтобы узнать все необходимые детали. Им даже не нужно проводить атаку; злоумышленнику достаточно найти доказательства существования слабых мест в системе безопасности. Подобные действия можно считать атаками ради престижа, подкрепленными денежными средствами и с почти гарантированной победой.

    Глава 4
    Противники

    Так кто же все-таки угрожает цифровому миру? Хакеры? Преступники? Распространители порнографии? Правительства? Противники – те же самые, что и в обычном мире: уголовные преступники, жаждущие обогащения; промышленные шпионы, охотящиеся за секретами, способными обеспечить конкурентоспособность товаров; хакеры, ищущие тайные ходы; разведка, добывающая военные сведения. Они не изменились, просто киберпространство стало новым полем их деятельности.

    Мы можем разделить противников на категории несколькими способами, приняв за основу классификации цели, доступ, ресурсы, квалификацию и риск.

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

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

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

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

    Рациональный противник (не все из нападающих в здравом уме, однако большинство достаточно обдуманно подходят к делу) выбирает нападение, которое с лихвой окупит понесенные расходы с учетом всех издержек: квалификации, доступа, трудовых ресурсов, времени и риска. Некоторые нападения требуют хорошей квалификации, но не требуют никакого специального доступа: взлом алгоритма кодирования, например. Каждый противник старается использовать набор приемлемых для него видов атак, отбросив те, которые ему не подходят. Конечно же, он выберет такое нападение, которое уменьшает затраты и увеличивает выгоды.

    Хакеры

    Слово «хакер» имеет широкий спектр значений – от системного администратора, достаточно хорошо представляющего, как в действительности работают компьютеры, до подростка-преступника, который кудахчет от восторга, когда громит вашу сеть. Слово было подхвачено средствами массовой информации, и его первичное значение изменилось. Оно скорей используется как комплимент, нежели как оскорбление. В последнее время люди используют слово «крекер» (взломщик программной защиты) для плохих парней и «хакер» – для хороших. Я определяю хакера как индивидуума, который экспериментирует с недостатками системы ради интеллектуального любопытства или собственного удовольствия; это слово описывает человека со специфическим набором навыков и неспецифической моралью. Есть хорошие хакеры и плохие хакеры, аналогично хорошим водопроводчикам и плохим водопроводчикам. (Есть также «хорошие плохие» хакеры и «плохие хорошие» хакеры… но не берите это в голову.)

    Хакеры стары как любопытство, хотя сам по себе этот термин современен. Галилео Галилей был хакером. Мадам Кюри тоже. Аристотель не был. (Аристотель приводил некие теоретические доказательства, что у женщины меньшее количество зубов, чем у мужчины. Хакер просто посчитал бы зубы своей жены. Хороший хакер посчитал бы зубы своей жены без ее ведома, в то время когда она спала бы. Хороший плохой хакер мог бы удалить некоторые из них, только бы доказать свое теоретическое предположение.)

    Когда я учился в колледже, я знал людей, подобных хакерам, назовем их страстными коллекционерами ключей. Они хотели иметь доступ всюду, и их цель была в том, чтобы владеть ключом от каждого замка в университетском городке. Они изучали новые системы запоров, карты коммуникаций, запоминали их расположение и обменивались друг с другом копиями ключей. Запертая дверь была вызовом, личным оскорблением. Эти люди не собирались причинить кому-либо ущерб – воровство не было их целью – хотя, конечно, они могли бы использовать для этого свои знания. Их страстью было получать доступ всюду, куда бы им захотелось попасть.

    Помните телефонных взломщиков, которые могли болтать по таксофонам и делать бесплатные телефонные звонки? Несомненно, они терроризировали телефонную службу. Но им это было нужно не для того, чтобы делать восьмичасовые звонки в Манилу или Мак-Мурдо. Они хотели знать систему лучше, чем проектировщики, и уметь изменять ее по своему желанию. Понимание того, как работает телефонная система, служило им наградой. Другой пример раннего хакерства – фанаты-радиолюбители.

    Ричард Фейнман был хакером, почитайте любую из его книг[13].

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

    Сегодняшние компьютерные хакеры, как правило, молоды (около двадцати), мужского пола и социально – на задворках общества. Они имеют свою собственную культуру: хакерские имена-прозвища, язык, правила. И, что характерно для любой субкультуры, только маленький процент ее представителей действительно что-то собой представляет. Настоящие хакеры понимают технологию на базовом уровне и ими движет желание расширить свое понимание. Остальные же – бездарные позеры, полностью неспособные ни к чему, или преступники. Иногда их называют ламерами.

    Хакеры могут иметь достаточную квалификацию, часто более высокую, чем сами проектировщики системы. Я прослушал большое количество лекций по безопасности, и большинство ораторов, в чьих лекциях есть здравый смысл, – хакеры. Это их страсть. Хакеры смотрят на систему с внешней стороны, с позиции нападающего, а не с внутренней – с позиции проектировщика. Они смотрят на систему, как на организм, как на единое целое. И часто понимают атаки лучше, чем люди, которые разрабатывают системы. Таковы настоящие хакеры.

    У хакеров обычно много времени, но мало финансовых средств. Некоторые из них питают отвращение к риску и в высшей степени осторожно балансируют на грани закона, у других нет страха перед наказанием, и они занимаются незаконной деятельностью без мысли о связанном с ней риске.

    Имеются хакерские телеконференции, хакерские веб-сайты и хакерские соглашения. Хакеры часто продают способы и автоматизированные средства атак друг другу. Есть различные группы хакеров (или шайки, если вам так больше нравится), но нет никакой иерархии. Вы не сможете нацелить сообщество хакеров на что-то определенное: они пойдут так далеко, как смогут. Часто они будут взламывать что-то лишь потому, что это широко известно, интересно, или потому, что цель «заслуживает» этого.

    К сожалению, большинство хакеров совершают незаконные действия. Я не говорю о тех немногих, кто работает в исследовательской среде, кто лабораторно оценивает параметры защиты систем и кто публикует анализ исследований программных продуктов и систем. Я говорю о тех хакерах, которые врываются в пользовательскую сеть, стирают веб-страницы, вызывают аварийные отказы компьютеров, распространяют вирусы и пишут автоматические программы, которые позволяют другим делать то же самое. Эти люди – преступники, и общество должно относиться к ним как к таковым.

    Я не куплю систему, защиту которой хакер взломал только затем, чтобы к ней присмотреться, не причинив никаких повреждений. Некоторые системы довольно хрупкие, и даже тот, кто просто присматривается, может нечаянно что-нибудь испортить. А после того, как посторонний побывал внутри системы, вы более не можете быть уверены в ее целостности. Вы не знаете, прикасался или нет непрошеный гость к чему бы то ни было.

    Вообразите, что вы приходите домой и на двери своего холодильника находите записку: «Привет. Я заметил, что у вас паршивая блокировка входной двери, так что я вломился. Я ничего не касался. Вы действительно должны улучшить свою систему защиты». Как бы вы чувствовали себя?

    Проблемы начинаются с хакеров, которые создают инструменты взлома. Это программы – иногда их называют эксплоитами (exploits), – которые автоматизируют процесс вторжения в системы. Пример – Trin00 – инструмент, создающий отказы в обслуживании. Тысячи серверов были выведены из строя после нападения с помощью этой программы, что потребовало от компаний-владельцев миллионов долларов, уйму времени и усилий для восстановления. Trin00 – одна из причин исследований уязвимости Интернета для такого типа атак и повод для написания научного труда о защите от них. А эти занятия гораздо сложнее, нежели составление программы, автоматизирующей атаку.

    Программа Trin00 не предназначена ни для каких других целей, кроме нападения на системы. Владельцы оружия могут рассуждать о самообороне, но интернет-серверы не врываются в наш дом по ночам. А эта программа намного страшнее, потому что однажды написанная, она стала доступной, и любой, кто захочет быть хакером, сможет загрузить ее и напасть на компьютеры в Интернете. При этом ему даже не обязательно знать, как все работает. Атаки с помощью Trin00 были популярны в начале 2000 года, потому что эта программа была доступна. Без этой доступности – даже при наличии описаний уязвимых мест систем – ни один ламер не был бы способен воспользоваться наличием последних.

    Конечно, те, кто использует Trin00, чтобы напасть на системы, – преступники. Я также верю, что тот, кто ее написал, тоже преступник. Существует тонкая грань между написанием кода для демонстрации исследовательской работы и публикацией инструментальных средств нападения; между невинным хакерством и хакерством, как преступной деятельностью. Я возвращусь к этому в главе 22.

    Большинство организаций с оправданной осторожностью относится к найму хакеров. Есть и исключения – Агентство национальной безопасности, предлагающее стипендию хакерам, желающим работать в Форт Мид; израильская разведка, нанимающая еврейских хакеров из Соединенных Штатов; Вашингтон, предлагающий создать ассоциацию защиты. Некоторые хакеры работают в частных компаниях и профессионально занимаются безопасностью. Недавно ряд консалтинговых компаний попытался оправдать хакеров и представить их в более выгодном свете. Иногда такой подход справедлив, но многим людям бывает тяжело понять отличие этики хакеров от этики преступников.

    Преступники – одиночки

    В апреле 1993 года маленькая группа преступников привезла автоматизированную модель банкомата Fujitsu 7020 на аллею Бэклэнд Хилл в Хартфорде (штат Коннектикут). Машина была специально запрограммирована, чтобы принимать кредитные карты (ATM-карты) от клиентов, записывать номера их счетов и личные идентификационные номера (PIN), а затем сообщать неудачливым клиентам, что выдать деньги невозможно. Несколькими днями позже банда скопировала похищенные номера счетов и личные идентификационные номера на поддельные карты ATM и стала получать по ним наличные деньги в центре Манхэттена. В конечном счете преступники были пойманы, когда банк сопоставил использование поддельных карт с ежедневными записями видеонаблюдения.

    Это было умное и практичное нападение, технически более высокоорганизованное, чем большинство банковских преступлений. Один технически продвинутый преступник из Нью-Джерси прикреплял поддельный уличный депозитный ящик к стене банка и убирал его ранним утром. Но более интересное произошло в другом месте. Несколько лет назад автоматизированный кассовый аппарат был украден в Южной Африке… из полицейского управления средь бела дня.

    Преступники-одиночки совершают большую часть связанных с компьютером преступлений. Иногда, являясь людьми осведомленными, они замечают недостаток в системе и принимают решение использовать его, иногда же они нападают «снаружи». Обычно у них немного денег, отсутствует доступ и недостаточно хорошо организована экспертиза, и они часто попадаются из-за глупых ошибок. Кто-то может быть достаточно сообразительным, чтобы устанавливать поддельные автоматизированные кассовые аппараты, собирать номера счетов и личные идентификационные номера, но если уж он хвастается своим умом в баре и дает арестовать себя прежде, чем вычистит все регистрационные записи… ну, в общем, сложно испытывать к нему симпатию. Посмотрите на два вызывающих нападения на Интернет в начале 2000 года. Кто-то организовал доступ к десяти тысячам номеров кредитных карт с именами и адресами. Лучшее, что он мог выдумать, – это вымогательство. Кто-то другой установил контроль над большим числом компьютеров, готовых подчиниться его указаниям. Но не смог придумать ничего лучше, чем донимать администраторов этих веб-сайтов.

    Преступники-одиночки будут нацеливаться на торговые системы, потому что там – деньги. Их методы могут страдать недостатком изящества, но они будут красть деньги, и еще большие деньги понадобятся для их поимки и доказательства вины.

    Злонамеренные посвященные лица

    Злонамеренный член организации – опасный внутренний враг. Он всегда внутри системы, поэтому, когда он хочет атаковать, его не беспокоят заграждения, приготовленные для незваных гостей. Возможно, он имеет самый высокий уровень доступа и рассматривается системой как заслуживающий доверия, в то время как он ее атакует. Помните русского шпиона Олдриджа Эймса? Он занимал удобнейшую позицию в Центральном разведывательном управлении, чтобы продавать КГБ имена американских разведчиков, находящихся на территории Восточной Европы: его имени доверяли. Подумайте теперь о программисте, который имеет возможность написать код для базы данных платежных ведомостей, дабы обеспечить себе повышение зарплаты каждые шесть месяцев. Или о службе охраны банка, которая сообщает своим дружкам-грабителям предположительное время закрытия кассы. Злонамеренных сотрудников практически невозможно остановить, поскольку они именно те люди, которые пользуются доверием.

    Вот канонический пример атаки посвященного лица. В 1978 году Стэнли Марк Рифкин был консультантом в центральном отделении банка. Он использовал свои знания и доступ к системе пересылки денег, чтобы переместить несколько миллионов долларов на счет в швейцарском банке, а затем обратить эти деньги в алмазы. Он также запрограммировал компьютерную систему на автоматическое стирание записанной на пленку резервной копии данных, поскольку в ней содержалось свидетельство его преступления (он ушел бы с этими деньгами, если бы не похвастался своему адвокату, который и рассказал обо всем).

    Посвященные лица не всегда нападают на систему, иногда они просто используют ее в преступных целях. В 1991 году служащий Чарльз Шваб из Сан-Франциско использовал электронную почту компании для покупки и продажи кокаина. Некто, осужденный за насилие над детьми, работал в больнице в одном из районов Бостона. Украв пароль сослуживца, он изучал больничные карты пациентов, которым звонил с непристойными предложениями.

    Посвященные лица – это необязательно служащие. Они могут быть консультантами и подрядчиками. Во время паники в связи с «проблемой 2000 года» многие компании нанимали программистов из Китая и Индии, чтобы обновить старое программное обеспечение. Оставив ксенофобию в стороне, замечу, что любой из тех программистов мог напасть на системы, будучи посвященным лицом.

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

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

    Мотивация нападений посвященных лиц может быть различна: месть, финансовая выгода, изменение существующих порядков или даже реклама. Вообще говоря, она совпадает с мотивацией хакера, преступника-одиночки или агента национальной разведки. Степень риска, на который готовы идти злонамеренные посвященные лица, зависит от того, движимы они «высокой целью» или простой жадностью.

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

    Промышленный шпионаж

    Бизнес – это война. Вернее, это некое подобие войны, в которой есть судьи. Судьи устанавливают правила – что является законным, а что нет – и стараются проводить их в жизнь. Иногда, если в бизнесе задействовано достаточное количество денег и влияния, контролирующие его люди могут подать ходатайство судье и добиться изменения правил. Но обычно они делают ходы только в пределах установленных правил.

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

    Промышленный шпионаж имеет четкую мотивацию: получить преимущество в конкурентной борьбе, завладев торговыми секретами конкурентов. Общеизвестный пример: Borland обвинял Symantec в передаче торговых секретов через внедренного в компанию руководителя. В другом случае Cadence Design Systems[14]предъявила иск своему конкуренту – компании Avant! – среди прочего обвинив ее в краже исходного кода. В 1999 году Alibris, продающая книги через Интернет, обвинила Amazon com в просматривании электронной почты корпорации. Компании из Китая, Франции, России, Израиля, Соединенных Штатов, как, впрочем, и отовсюду, воруют секреты технологий у иностранных конкурентов.

    Промышленный шпионаж может хорошо финансироваться: аморальная, но разумная компания выделит на промышленный шпионаж достаточно средств, которые с лихвой окупятся. Даже если завладение технологией конкурента обойдется вам в полмиллиона долларов, это может быть только десятой частью расходов на самостоятельное создание такой технологии. (Когда-нибудь задайтесь вопросом, почему возвращаемый на Землю космический корабль русских так похож на все американские корабли серии «Шаттл»?) Противник такого типа не готов рисковать по-крупному, потому что репутации компании (неосязаемый, но ценный элемент) будет нанесен значительный урон, если конкуренты уличат ее в шпионаже, – он действует украдкой.

    Пресса

    Пресса напоминает промышленного шпиона, но действующего с иными побуждениями. Прессу не интересует победа в конкурентной борьбе, ее интересует «заслуживающая освещения в печати» история. Это могут быть вашингтонская City Pages, публикующая видеозаписи судьи Борка (что привело к появлению закона о защите видеоданных от 1988 года), британские бульварные газеты, выносящие на всеобщее обозрение частные телефонные разговоры принца Чарльза с Камиллой Паркер Боулз, или газеты, делающие разоблачения какой-то компании или какой-либо правительственной акции.

    Поднять тираж газеты помогают публикации изображения кандидата в президенты, например Гарри Харта, с чужой женой на коленях. Даже не слишком компрометирующие фотографии принцессы Дианы стоили более полумиллиона долларов. Некоторые репортеры утверждают, что они не стали бы думать дважды, предавать ли гласности секреты национальной безопасности, так как, по их мнению, право публики знать правду важнее.

    Во многих странах свобода прессы воспринимается как преступление. В таких странах пресса обычно плохо финансируется и вообще больше напоминает жертву, нежели агрессора. Журналисты, обладающие достаточной смелостью, чтобы выступать против правительства, попадают в тюрьмы, их пытают и даже убивают. Это – не тот случай, когда можно говорить о прессе, как о нападающей стороне.

    В промышленно развитых странах с разумными свободами пресса может выделить достаточные средства для нападения на отдельную систему или цель. Она может хорошо финансировать, может нанимать экспертов и получать доступ к информации. И если журналисты полагают, что их дело правое, они могут рисковать. (Конечно, журналисты, которые устроили Уотергейтский скандал, попадают в эту категорию.) Журналисты в Соединенных Штатах и других странах оказывались в тюрьме, защищая то, что им представлялось правильным. Некоторые даже умерли ради этого.

    Организованная преступность

    Организованная преступность – это гораздо большее, нежели итальянские мафиозные «семьи» из фильмов Фрэнсиса Форда Копполы. Это – глобальный бизнес. Русские преступные синдикаты действуют как в России, так и в Соединенных Штатах. Азиатские преступные синдикаты действуют как дома, так и за границей. Колумбийские наркокартели также интернациональны. Нигерийские и другие западноафриканские синдикаты захватили 70% чикагского героинового рынка. Польские гангстеры занимаются угоном дорогих машин в Соединенных Штатах и на кораблях переправляют их в Польшу. Конечно, случаются войны между соперничающими группировками, но хорошо развито и международное сотрудничество.

    Объекты бизнеса организованной преступности не изменились за многие столетия: наркотики, проституция, ростовщичество, вымогательство, мошенничество, азартные игры. Использование современной технологии идет двумя путями. Во-первых, это – принципиально новая сфера криминальной деятельности: преступники применяют средства взлома, чтобы ворваться в компьютеры банка и украсть деньги; перехватывают идентификационные коды сотовых телефонов и перепродают их; они занимаются компьютерным мошенничеством. А во-вторых, это – присвоение личности, развивающаяся область; здесь лидируют китайские банды. Конечно, электронное воровство более выгодно: один крупный чикагский банк в 1996 году потерял 60 тысяч долларов из-за грабителей и 60 миллионов долларов из-за мошенничества с чеками.

    Воровские шайки используют компьютеры и в своем основном бизнесе. Легко организовать незаконные азартные игры: сотовый телефон позволяет букмекерам работать повсюду, а быстродействующие компьютеры могут стереть все следы в считанные секунды. И отмывание денег становится все более и более тесно связано с компьютерами и электронными платежами: перемещение денег с одного счета через другой на третий, изменение реквизитов, маскировка происхождения денег – перемещение их через страны почти не оставляет следов.

    В отношении к риску организованная преступность – это то, что получается при объединении преступников-одиночек в организацию, обладающую большими деньгами. Эти парни знают, что для того, чтобы сделать деньги, нужно их немного потратить, и вкладывают капитал в сулящее прибыль нападение на финансовую систему. У них минимальная квалификация, но они могут купить ее. У них минимальный доступ, но они могут купить и его. Они готовы пойти на больший риск, нежели преступники-одиночки; иерархия преступного синдиката часто вынуждает тех, кто стоит ниже, брать на себя самый большой риск, и защита, предоставляемая синдикатом, делает этот риск более терпимым.

    Полиция

    В интересующем нас аспекте полицию можно рассматривать как разновидность национальных разведывательных организаций, за исключением того, что она хуже финансируется, хуже оснащена технически и сосредоточена на борьбе с преступлениями. Тем не менее надо понимать, что от того, насколько благополучна страна, проводятся ли в ней демократические выборы, «борьба с преступностью» может включать в себя целый ряд вещей, обычно не связанных с установлением правопорядка. Возможно, полиция подобна прессе, но имеет лучшее финансирование и читателей, которых интересуют только истинные истории преступления. Или можно думать о полиции как о промышленном конкуренте организованной преступности.

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

    Но полиция не должна нарушать закон. Фундаментальное предположение заключается в том, что мы доверяем государству защиту нашей частной жизни и надеемся только на мудрое использование власти. В то же время истина в том, что по большей части злоупотребления регулярны и бывают значительными. Поток незаконных прослушиваний ФБР во Флориде и их утаивание получили некоторое освещение в прессе в 1992 году; было еще 150 или около того незаконных прослушиваний Лос-Анджелесским полицейским управлением. (Конечно, не обошлось без наркотиков: один человек сказал, что война против наркотиков, кажется, является основным паролем к американской Конституции.) Джон Эдгар Гувер регулярно использовал незаконное прослушивание для сбора сведений о своих врагах. А 25 лет назад действующий президент использовал незаконные подслушивания в попытке остаться у власти.

    Дела, кажется, изменяются к лучшему со времен Гувера и Никсона, и у меня есть много причин надеяться, что возврата к старому не будет. Но риск остается. Технология развивается медленно, а намерения меняются быстро. Даже если сегодня у нас есть уверенность, что полиция будет придерживаться законодательства, вести подслушивание, только когда необходимо, получать все необходимые ордера и вообще вести себя, как положено государственной службе, – мы ничего не знаем о завтрашнем дне. Кризис, подобный тому, который привел к преследованию подозреваемых коммунистов в эпоху Маккарти, может снова наступить. Данные переписи в соответствии с законом не предназначены для использования в любых других целях. Даже в том случае, когда они использовались американцами для обнаружения японцев, проживающих в Америке, и помещения их в концентрационные лагеря во время Второй мировой войны. Организация с устрашающим названием «Комиссия суверенитета Миссисипи» шпионила за тысячами активистов движения за гражданские права в 1960-е годы.

    ФБР использовало незаконное прослушивание, чтобы шпионить за Мартином Лютером Кингом-младшим. Национальная инфраструктура «открытого ключа» может предшествовать национальной регистрации шифрования. Как только появится новая технология, всегда будет искушение использовать ее. И едва ли гражданская активность создаст механизм удержания полиции в предписанных ее статусом рамках.

    Террористы

    Эта категория охватывает широкий диапазон идеологических групп и индивидуумов – как внутренних, так и международных. Здесь нет места для рассуждений на тему морали: террорист – это истребитель свободы других людей. Террористические группы обычно мотивируют свои действия геополитикой или (что еще хуже) этнорелигией – «Хезболлах», «Красные бригады», «Светлый путь», «Тигры Тамила и Ламы», IRA, ETA, FLNC, PKK, UCK, – но они могут быть движимы и моральными или этическими убеждениями, вроде таких, как Earth First и группы радикалов, ратующих за запрещение абортов.

    Эти группы вообще больше сосредоточены на причинении вреда, чем на сборе информации, так что их действия по большей части приводят к дестабилизации и полному разрушению. В то время как их долгосрочные цели – обычно нечто невразумительное, вроде восстановления материка Гондвана или возвращения всех коров в дикое состояние, их ближайшие цели – это месть, хаос и кровавая реклама. Хотя больше всего им нравятся бомбы, они не брезгуют и похищениями людей. Когда с неба падает самолет или оказывается разнесенной в пыль клиника по прерыванию беременности, возникает большой международный ажиотаж. Но в конечном счете эти парни поймут, что гораздо большего результата можно достичь, если научиться заставлять диспетчеров аэропорта О'Хара направлять самолеты друг на друга. Или что если они смогут взломать систему бронирования авиабилетов, чтобы выяснить, каким рейсом вылетит на юг Франции делегация Конгресса этим летом, то их террор будет намного эффективней.

    Настоящих террористов на самом деле очень немного. Их нападения весьма напоминают военные действия, и они, вероятно, должны попадать в категорию «информационный воин». А так как террористы вообще считают себя лично вовлеченными в состояние войны, они готовы идти на самый большой риск.

    Если нет богатого идеалиста, финансирующего их действия, большинство террористов работают на мизерном бюджете. Большая часть из них обладают низкой квалификацией: «Вам туда. Несите эту сумку. Идите по середине этого оживленного рынка. Нажмите на эту кнопку. Увидимся в чудесной загробной жизни». Имеются исключения (некоторые организации изначально хорошо продуманы, хорошо обучены и имеют хорошую поддержку – например, предполагают, что продажа в Ирландии поддельных телевизионных дешифраторов помогла финансировать IRA), но большинство групп не имеют хорошей организации или доступа. И им присуща тенденция к глупым ошибкам.

    Национальные разведывательные организации

    Это – большие мальчики: ЦРУ, Агентство национальной безопасности и Разведывательное управление Министерства обороны США – в Соединенных Штатах (есть и множество других); КГБ (ныне ФАПСИ для контрразведки и ФСБ для иностранной разведки) и ГРУ (военная разведка) – в России; MI5 (контрразведка), MI6 (аналогично ЦРУ) и GCHQ (аналогично Агентству национальной безопасности) – в Великобритании; DGSE – во Франции; BND – в Германии; Министерство национальной безопасности – в Китае (также называемое «Техническим отделом»); Моссад – в Израиле; CSE – в Канаде. Для большинства других противников все это игра: взломать веб-сайт, получить некоторые коммерческие секреты, украсть кое-какие деньги, устроить небольшой погром – все равно что. Для этих парней, однако, это – работа.

    Главная национальная разведывательная организация – это наиболее грозный из окружающих противников. Она чрезвычайно хорошо финансируется, так как обычно считается военным подразделением. (Хотя точная сумма является тайной, объединенные бюджеты ЦРУ, Спецслужбы безопасности, Агентства национальной безопасности, Национальной разведывательной службы и других федеральных разведывательных агентств по оценке печати со ссылкой на «источники в Конгрессе» в 1997 году составляли 33,5 миллиарда долларов.) Это преданный делу и искусный противник с финансированием, достаточным, чтобы оплатить целый комплекс исследований, оборудование, экспертизы и обзавестись опытной и квалифицированной рабочей силой.

    С другой стороны, главная национальная разведывательная организация обычно совершенно не склонна к риску. Национальные разведывательные организации не любят видеть свои названия на титульном листе «Нью-Йорк Таймс» и вообще не вовлекаются в опасную деятельность (исключения, конечно, существуют: это то, о чем вы все же читаете на титульном листе «Нью-Йорк Таймс»).

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

    Второе и, вероятно, более важное: раскрытые операции разоблачают методы, возможности и источники. Много лет АНБ отслеживало по советским автомобильным телефонам, как Политбюро разъезжало по Москве. Кто-то пропустил информацию о здоровье Хрущева в газеты, и внезапно автомобильные телефоны были зашифрованы. В газетах не писалось что-либо об автомобильных телефонах, но КГБ не был настолько глупым. Утечка информации здесь была не в том, что мы узнали о здоровье Хрущева, но в том, что мы прослушивали их переговоры. То же самое случилось после того, как террористы взорвали берлинскую дискотеку в 1986 году. Рейган объявил, что мы располагаем доказательством причастности к этому Ливии – тем самым он разгласил, что у нас была возможность прослушивать переговоры их посольства с Триполи. В течение Второй мировой войны союзники не могли использовать многие сведения, полученные из расшифровки немецкой системы «Энигма» из опасения, что немцы изменят коды.

    Разведывательные цели включают множество вещей, о которых вы знаете: это военная информация, проектировка оружия, дипломатическая информация – и многое другое, о чем вы даже не догадываетесь. Телефонная система – это золотая жила разведки; то же самое относится и к Интернету. Несколько национальных разведывательных организаций активно занимаются промышленным шпионажем (по подсчетам ФБР, до 20 из них шпионят за американскими компаниями) и передают информацию конкурирующим компаниям в своих странах. Китай является самым большим правонарушителем в мире, Франция и Япония тоже хороши, но есть и другие.

    Соединенные Штаты не исключение. В 1999 году Европейское сообщество (EU) обнародовало несколько примеров:

    • В 1994 году правительство Бразилии предоставило контракт на 1,4 миллиарда долларов корпорации Raytheon в обход предложений двух французских компаний. По общему мнению, Raytheon изменил цену своего предложения, когда узнал детали французских предложений.

    • В 1994 году корпорация Douglas McDonell выиграла контракт на строительство самолетов для Саудовской Аравии; возможно, этот выигрыш был основан на внутренней информации, пришедшей от американской разведки.

    Прежний директор ЦРУ Р. Джеймс Вусли признал факт использования информации, полученной системой ECHELON об иностранных компаниях, прибегающих к взяткам для заключения международных контрактов: чтобы «выровнять шансы на игровом поле», информация передавалась в американские компании, а иностранные правительства подвергались давлению с целью пресечь взятки. Хотя это и не доказано. Конечно, любая компания, которая теряет предложение, готова найти причины своей неудачи в чем угодно, и ни одна из жертв не скажет чего-либо публично. Однако сама возможность получения информации таким образом вызывает беспокойство.

    И этот вид воровства в киберпространстве становится все распространеннее. ECHELON – не единственная программа, которая использует Интернет как поле деятельности. Сингапур и Китай прослушивают поток информации, проходящий по сети Интернет через эти страны. (Китай использует свою национальную сетевую защиту, которая называется Великой стеной.) Интернет-провайдеры в России помогают преемникам КГБ читать частные электронные сообщения и прочую информацию в Интернете, что является частью внутренней программы шпионажа, называемой СОРМ-2.

    Национальным разведывательным организациям не чуждо использование хакерского инструментария или даже самих хакеров для выполнения своей работы. У израильского и японского правительств есть программы для привлечения хакеров своих стран – прикармливая их, привлечь к работе по сбору данных. Другие правительства провоцируют хакеров, насмехаясь над ними, с тем чтобы заставить их работать бесплатно. «Если вы настолько хороши, у вас будет пароль к этому правительственному компьютеру» – такие слова сильно действуют на чувство собственного достоинства талантливого подростка. Книга «Яйцо кукушки» Клиффорда Столла повествует об эксплуатации трех хакеров, которые работали на КГБ за деньги и кокаин.

    Методы агентств национальной безопасности изменчивы и, с учетом возможностей целой нации, могут быть очень эффективны. Компании, обеспечивавшие безопасность британских коммуникаций, долгое время страдали от слухов о наличии неких дефектов в их программах кодирования – все это по просьбе британской разведки. В 1997 году директор ЦРУ Джордж Тенет упомянул (мимоходом, без деталей) об использовании хакерских инструментов и методов для пресечения международных переводов денег и других финансовых операций арабских бизнесменов, поддерживающих террористов. Возможности бесконечны.

    Информационные войны

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

    Этот противник имеет те же ресурсы, что и национальная разведывательная организация, но с различиями в двух важных аспектах. Во-первых, он сосредоточен почти исключительно на краткосрочной цели – пресечении способности своей мишени вести войну. И во-вторых, он готов пойти на риск, который неприемлем для долгосрочных интересов разведки. Его задачи – военное преимущество и, что еще важнее, хаос. Мишенями, которые могут интересовать инфовоина, являются армия и средства управления, телесвязь, тыл и снабжение, а также инфраструктура (читайте «коммерческие информационные системы») и транспортные маршруты (читайте «коммерческая авиация»). Эти виды мишеней называются критической инфраструктурой.

    В 1999 году НАТО нанесло удар по электростанциям Белграда; это имело далеко идущие последствия для его компьютерных ресурсов. В качестве возмездия сербские хакеры атаковали сотни американских и натовских сайтов. Китайские хакеры вывели из строя компьютеры в Министерстве внутренних дел, Министерстве энергетики и в американском посольстве в Пекине в качестве мести за случайную бомбежку их посольства в Белграде. Китай и Тайвань участвовали в небольшой кибервойне на протяжении почти всего 1999 года, нападая на компьютеры друг друга с использованием Интернета (хотя это, вероятно, не планировалось правительствами ни одной из сторон).

    В прошлом военные и гражданские системы были отдельными и несхожими: различная аппаратура, различные протоколы связи – все различное. За последнее десятилетие все изменилось; прогресс в технологии произошел слишком быстро для традиционного у военных многолетнего цикла перестройки. Все чаще и чаще коммерческие компьютерные системы используются военными. Это означает, что все нападения, которые проводятся против коммерческих компьютеров, могут проводиться и против военных – те и другие имеют одни и те же уязвимые стороны. И обе стороны конфликта могут использовать одинаковое оборудование и протоколы: TCP/IP, операционные системы Windows, спутниковые приемники GPS. Внешние сети командования американскими Стратегическими воздушными силами (SAC) недавно были переведены на Windows NT.

    Военные боролись с инфраструктурой противника с тех пор, как начали воевать. Средневековые рыцари убивали крепостных, наполеоновские армии жгли посевы, бомбардировщики союзников целенаправленно бомбили немецкие фабрики в течение Второй мировой войны. Сегодня информация – это инфраструктура. В ходе операции «Буря в пустыне» американцы систематически подрывали иракскую инфраструктуру командования и управления. Системы связи были заглушены, кабели индивидуальной связи являлись целью бомбежек. Без командования и управления наземные отряды были почти бесполезны. Ажиотаж в средствах массовой информации вокруг информационной войны смущает, но военные говорят об этом серьезно. Вот цитата из китайской армейской газеты «Жефанг-жунбао» – резюме речей, произнесенных в мае 1996 года:

    «После войны в Заливе, когда все ожидали вечного мира, возникла новая революция в военном деле. Эта революция, по существу, есть переход от механизированной войны в индустриальную эпоху к информационной войне в информационную эпоху. Информационная война – это война решений и контроля, война знаний и война интеллектов. Цель информационной войны постепенно изменится от „сохранения себя и уничтожения врага" к „сохранению себя и управлению противником". Информационная война включает радиоэлектронную войну, тактический обман, стратегическое сдерживание путем устрашения, противостояние пропаганды, психологическую войну, войну в сетях и структурный саботаж. В сегодняшних технологических условиях всепобеждающий принцип, сформулированный Сан Цзу больше двух тысячелетий назад, – „победить врага без борьбы" и подчинить врага „мягким ударом" – может наконец быть понят правильно».

    Война – это не обязательно глобальный конфликт, подобно Второй мировой войне или противостоянию Соединенных Штатов и СССР, которое могло привести к концу света. Более вероятно, что это – «тлеющий конфликт»: «Буря в пустыне», аргентинское вторжение на Фолклендские острова, гражданская война в Руанде. В «Трансформации войны» Мартин ван Кревелд указывает, что так называемые тлеющие конфликты стали после Второй мировой войны доминирующей формой столкновений, уничтожившей более 20 миллионов людей во всем мире. Это изменение – результат двух главных тенденций. Первая состоит в том, что небольшим группам стало гораздо легче прибрать к рукам оружие массового поражения: химическое оружие, биологическое оружие, ракеты дальнего радиуса действия и т. д. Вторая заключается в том, что все больше межнациональных группировок стали способны вести войну. Фактически различие между государствами и межнациональными группировками размыто. Организованные преступные группы в таких странах, как Мексика, Колумбия и Россия, объединяются с правительством на различных уровнях. Не все инфовоины работают в интересах главных индустриально развитых стран. Все больше и больше они работают для второстепенных политических сил.

    Глава 5
    Потребность в секретности

    В каких же видах секретности мы нуждаемся? Прежде чем обсудить (а может быть, и отвергнуть) специфические контрмеры против нападений, уже названных нами, остановимся и поговорим о том, что же нам нужно. Какая степень секретности необходима в сегодняшнем компьютеризированном, интернациональном, взаимосвязанном и взаимозависимом мире?

    Секретность

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

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

    В Соединенных Штатах частные лица не имеют монопольного права собственности на любую информацию о себе. Списки клиентов принадлежат бизнесменам, которые их собирают. Личные записи в базе данных принадлежат владельцу базы данных. Только в редких случаях отдельным личностям обеспечены какие-либо права или защита от сбора частной информации.

    Большинство стран имеют законы, защищающие частную жизнь. В Европейском Союзе, например, действует Закон от 1998 года о защите данных (Data Protection Act). Организации, которые собирают персональные данные, должны зарегистрироваться в правительстве и обеспечить меры против злоупотребления ими. Они не имеют права собирать, использовать и распространять сведения частного характера без согласия того, к кому они относятся.

    Организации также должны сообщать частным лицам о причинах сбора информации, обеспечивать доступ к ней, исправлять неточности и охранять эту информацию от доступа неправомочных сторон. Люди имеют право видеть собранные о них персональные данные и исправлять в них погрешности. Они также имеют право знать, для чего собираются эти сведения, и убеждаться, что информация не будет продана для других целей. И они также имеют право «уклоняться» от любого сбора сведений, когда они этого не хотят. Сборщики данных должны отвечать за защиту индивидуальных данных в разумно высокой степени и не делиться данными с тем, кто нетвердо придерживается этих правил.

    Последний пункт стал причиной осложнений между ЕС и Соединенными Штатами, так как Соединенные Штаты не ведут никакого контроля за сбором персональных данных и позволяют компаниям покупать и продавать последние по желанию. Соединенные Штаты и ЕС в порядке эксперимента приняли соглашение относительно условий секретности для американских компаний, что должно было обеспечить «адекватный» уровень секретности к июлю 2001 года. Некоторые члены Конгресса несколько раз пробовали изменить законодательство о секретности, но под давлением промышленников эти попытки были блокированы. Группа лоббирования NetCoalition com, которая включает в себя AOL, Amazon com, Yahoo! eBay и DoubleClick, верит в саморегулирование, которое является эквивалентом отсутствия секретности. К сожалению, большая часть деловых людей считают, что секретность плоха для бизнеса и что нарушение права на защиту частной информации – иногда единственный путь заработать деньги.

    О деловой секретности. Предприниматели вообще не нуждаются в долгосрочной секретности. (Торговые секреты – формула кока-колы, например, – являются исключениями.) Клиентские базы данных должны оставаться конфиденциальными в течение многих лет. Данные развития производства – только несколько лет, а в бизнесе, связанном с компьютерами, намного меньше этого. Информация об общем финансовом здоровье, деловых переговорах и тактических маневрах – от недель до месяцев. Маркетинг и планы производства, стратегии, долгосрочные переговоры – от месяцев до нескольких лет. Подробная финансовая информация, возможно, нуждается в секретности в течение нескольких лет, но, вероятно, не больше. Даже общие пятилетние планы после девяти месяцев устаревают. Мы живем в мире, где информация распространяется быстро. Деловые тайны прошлой недели к этой неделе вытеснились новыми. А деловые тайны этой недели – это заголовки Wall Street Journal следующей недели.

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

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

    Исключения для краткосрочной секретности связаны с затруднениями: личными, политическими или деловыми. Правительства не хотят, чтобы информация об их политических трудностях просочилась в прессу. (Вспомните Уотергейт. Вспомните мятеж в Иране. Вспомните любой политический скандал, раскрытый средствами массовой информации.) Люди не хотят обнародования своего личного прошлого. (Вспомните Билла Клинтона. Вспомните Боба Ливингстона, конгрессмена и спикера, который ушел в отставку в 1999 году после того, как было обнародовано дело двадцатилетней давности. Вспомните Артура Аша, чье заболевание СПИДом было обнаружено прессой.) Приблизительно через два десятилетия у нас будут выборы, в которых кандидаты окажутся перед необходимостью объяснять послания по электронной почте, которые они написали, когда были подростками.

    Немногие случаи, которые требуют очень продолжительной секретности – из тех, что я знаю, – связаны с правительством. Американские данные переписи – имеются в виду оригиналы, а не что-либо, подвергшееся обработке, – должны остаться тайной в течение 72 лет. Мандаты ЦРУ, которые идентичны шпионским, остаются секретными, пока не переживут и шпиона, и его детей. Канадские данные переписи остаются секретными навсегда.

    Многоуровневая секретность

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

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

    Люди, работающие с этими данными, должны проходить проверки, соответствующие информации самой высокой степени секретности из всех, с которыми они работают. Кто-нибудь с секретным допуском, например, может видеть информацию и несекретную, и конфиденциальную, и секретную. Кто-то с допуском к конфиденциальной работе может видеть только несекретные и конфиденциальные данные. (Конечно, допуск не является гарантией доверия. Глава российского отдела контрразведки ЦРУ Олдридж Эймс имел высший допуск секретности, но при этом он был российским шпионом.)

    Данные на высшем уровне секретности иногда подразделяются по темам или по разделам, имеющим к ним отношение. На эти документы ставится гриф «TS/SCI» (высшая секретность/специальный раздел сведений). Каждый раздел имеет ключевое слово. TALENT и KETHOLE, например, являются ключевыми словами, связанными со спутниками-шпионами КН-11. SILVER, RUFF, TEAPOT, UMBRA и ZARF – с другими. (UMBRA применяется к информации о коммуникациях, RUFF соотносится с изображениями.)

    Разделы – это важные барьеры доступа: кто-нибудь, имеющий доступ высшей степени секретности с дополнительным доступом KEYHOLE (иногда называемым «билетом»), не уполномочен видеть данные высшей степени секретности COBRA.

    Дробление на разделы формально отражает понятие «потребности знать». Наличие у кого-либо некоторого уровня доступа не означает, что он автоматически получает возможность видеть все данные на этом уровне доступа. Он может получать для просмотра только те данные, которые должен знать, чтобы выполнять свою работу. Имеются и другие обозначения, которые уточняют классификацию: NOFORN – «Не для иностранных подданных», WNINTEL – «Внимание: источники и методы разведки», LIMDIS – «Ограниченное распространение».

    В других странах также существуют подобные правила. В Великобритании один дополнительный уровень классификации – ограниченный, который находится между несекретным и конфиденциальным. Соединенные Штаты имеют нечто подобное, называемое FOUO (For Official Use Only) – только для служебного пользования – что означает «несекретно, но не подлежит сообщению посторонним лицам».

    Здесь существенны два момента. Во-первых, все это намного легче осуществить на бумаге, чем на компьютере. В главе 8 говорится о некоторых из многоуровневых систем секретности, которые были построены и использовались, но ни одна из них никогда не работала в крупном масштабе. Во-вторых, эти системы в значительной степени не соответствуют враждебному внешнему окружению. В них не признаются ни корпоративные тайны, ни личные секреты. Секретность в реальном мире не вписывается в узкие иерархические рамки.

    Анонимность

    Нуждаемся ли мы в анонимности? Хорошая ли это штука? В Интернете горячо обсуждалась целая концепция анонимности, взвешивались самые разные мнения людей по этому спорному вопросу.

    Любой, кто работает на кризисной телефонной линии – будь то звонки о самоубийстве или насилии – знает силу анонимности. Тысячи людей в Интернете обсуждают свою личную жизнь в конференциях для оставшихся в живых жертв злоупотребления наркотиками, больных СПИДом и т. д.; они желают делать это только через анонимную пересылку. Это – социальная анонимность и она жизненно важна для здоровья мира, потому что позволяет людям обсуждать такие вещи, говоря о которых нет желания указывать свое имя. Например, послания по почте некоторых людей в alt religion scientolgy[15] сделаны анонимно, иначе они не стали бы писать.

    Политическая анонимность также важна. Не бывает и не может быть того, чтобы все политические выступления были подписаны. Так же как кто-то может совершить массовую политическую рассылку по почте без обратного адреса, может сделать то же самое через Интернет. Это играет важную роль в некоторых случаях: в 1999 году онлайновая анонимность позволила сербам, представителям Косово и другим прекратить Балканскую войну; они посылали новости о происходящем конфликте в остальные части света без непосредственного риска для жизни из-за раскрытия своей личности.

    С другой стороны, люди используют анонимность Интернета, чтобы рассылать угрожающие сообщения по электронной почте, печатать речи, полные ненависти и оскорблений, распространять компьютерные вирусы и иным способом досаждать нормальным гражданам киберпространства.

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

    Второй тип анонимности связан с использованием псевдонима. Подумайте о счете в швейцарском банке (хотя это фактически прекращено в 1990 году), о почтовом ящике, арендованном за наличные под вымышленным именем (хотя это больше невозможно в Соединенных Штатах без поддельного удостоверения), о встречах анонимных алкоголиков, где вы известны только как Боб. Эта анонимность заключается в том, что никто не знает, кто вы, но есть возможность идентифицировать вас по этому псевдониму. Это то, что нужно швейцарским банкам: их не заботит, кто вы, – только то, что вы являетесь тем же самым человеком, который внес деньги на прошлой неделе. Торговец не должен знать ваше имя, но должен знать, что вы законно купили товар, который теперь пытаетесь возвратить.

    Оба типа анонимности сложно осуществить в киберпространстве, потому что многое в его структуре требует установления личности. Новые микропроцессоры класса Intel Pentium III имеют уникальные серийные номера, которые могут быть отождествлены так же, как и сетевые карты в компьютерах локальных вычислительных сетей. Документы Microsoft Office автоматически сохраняют информацию, указывающую на автора. Веб-серверы прослеживают людей в Сети; даже по анонимным обращениям по электронной почте теоретически можно вычислить реального человека, если отследить IP-адрес. Много недостатков было найдено в различных программах, которые обещали анонимную работу. Поверхностная анонимность проста, но истинная анонимность, вероятно, в сегодняшнем Интернете невозможна.

    Коммерческая анонимность

    Понятие псевдонима приносит нам приятную анонимность в финансовых сделках. Но с другой стороны, ее же используют и недобросовестные продавцы, не несущие за товар никакой ответственности: это – ничей бизнес, не принадлежащий ни правительству, ни оптовым, ни мелким торговцам, – что бы люди не покупали, будь то порнофильмы или сюрпризы к дню рождения. К сожалению, существует еще и большая группа негласных сторонников финансовой анонимности: торговцы наркотиками и другие темные элементы. Можно ли примирить две эти стороны?

    Очевидно, можно, потому что существуют наличные деньги. Реально вопрос состоит в том, хотим ли мы когда-нибудь получить электронную версию наличных денег. Я не верю, что хотим, может быть, исключая лишь небольшие сделки.

    Анонимность дорого стоит, потому что с ней связаны дополнительные риски. (Правительственное регулирование также влияет на это.) Банки не глупы, они предпочитают менее опасную систему. И анонимная система обходится дороже, чем система, основанная на учетных записях и отношениях. Банки могут вложить дополнительные затраты в систему, но клиенты не желают за это платить. Если вы – торговец, то проведите эксперимент. Поднимите цены в своем магазине со словами: «Пять процентов скидки, если вы дадите нам свое имя и адрес и позволите проследить ваши привычки в покупках». Посмотрите, сколько клиентов предпочитает анонимность. Люди скажут, что они не хотят попасть в мегабазы данных, прослеживающие каждую их денежную трату, но желают получить такую симпатичную карту постоянного клиента, которая предоставляет все возможности выиграть бесплатное путешествие на Гавайи (одно на тысячу карт). Если Макдоналдс предлагает три бесплатных Биг-Мака за образец дезоксирибонуклеиновой кислоты, то значит, что на это есть причина.

    С другой стороны, поднимите цену, сказав: «Пять процентов скидки, если вы сообщите нам название и адрес школы вашего ребенка», и вы, вероятно, увидите другую реакцию. Есть некоторые вещи, которые большинство людей хотят сохранить в секрете, и есть люди, которые хотят держать в секрете большинство вещей. Всегда будет существовать стиль швейцарского банка – анонимной платежной системы для богатых, которые готовы нести расходы за сохранение секретности. Но средний потребитель далек от богатых. Среди средних потребителей есть некоторые исключения, но вообще-то они не заботятся об анонимности. А у банков нет никакой причины предоставлять им ее, особенно если правительство не заставляет их этого делать.

    Медицинская анонимность

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

    Эту информацию получить нетрудно. Медицинские записи о Николь Браун Симпсон были опубликованы через неделю после ее убийства в 1994 году. А в 1995–м Лондонская Sunday Times сообщила, что цена каждой медицинской записи в Англии составляет 200 фунтов стерлингов. И если так обстоят дела в богатых странах, то вы только вообразите, какие злоупотребления могут стать возможными в странах типа Индии и Мексики, где сумма в 10 долларов способна соблазнить даже наиболее добродетельного государственного служащего.

    Компьютеризированные данные пациентов плохи с точки зрения секретности. Но они хороши для всего остального, так что их сбор неизбежен. В Законе о мобильном и общедоступном страховании здоровья (HIPAA) теперь есть стандарты для компьютеризированных медицинских записей. Они делают информацию легко доступной там, где в этом есть необходимость, что удобно для населения, которое реже пользуется услугами семейного доктора и чаще ездит по всей стране, посещая различных докторов и клиники в случае необходимости. Специалисты могут легко получать нужные данные. Так же поступают и страховые компании, потому что такие данные более содержательны, более стандартизированы и более дешевы для обработки: если все данные электронные, то проверять клиентов будет дешевле. Это лучше и для исследователей, потому что позволяет им эффективнее использовать доступную информацию: впервые они могут смотреть на все в стандартной форме.

    Это большое мероприятие, вероятно, столь же важное, как ранее упомянутые финансовые и кредитные базы данных. Как общество мы окажемся перед необходимостью сбалансировать потребность в доступе (который более очевиден для медицинской, чем для финансовой информации) с потребностью в секретности. Так или иначе, компьютеризация приходит в медицину. Мы должны быть уверены, что все сделано правильно.

    Секретность и правительство

    Правительство и ФБР, в частности, любят изображать частную секретность чудовищным инструментом четырех всадников Апокалипсиса: террористов, торговцев наркотиками, тех, кто отмывает деньги, и тех, кто занимается детской порнографией. В 1994 году ФБР протаскивало через Конгресс законопроект о цифровой телефонной связи, согласно которому телефонные компании должны были бы установить на своих коммутаторах оборудование, позволяющее легко подключаться к любой линии. После таранов Центра международной торговли оно продвигало законопроект о всесторонней борьбе с терроризмом, который дал бы ему полномочия проводить прослушивание телефонных переговоров и наделил бы Президента властью единолично объявлять политические группы террористическими организациями. К счастью, это не прошло. После падения из-за взрыва топливного бака самолета в 1996 году ФБР играло на слухах о том, что это было попадание ракеты, и принимало ряд мер, которые разрушали частную секретность. Оно продолжает лоббировать предоставление правительственного доступа ко всем шифровальным ключам или ослабление защиты до того уровня, когда она уже не будет играть никакой роли.

    В течение нескольких последних десятилетий развитие компьютерной секретности в Соединенных Штатах было ограничено тем, что называется экспортными законами. Экспортные законы определяют те виды шифрования, которые компании США могут экспортировать. Так как большинство программных продуктов распространено по всему миру, такие законы значительно ограничивали эффективность шифрования в массовых программах, подобных браузерам и операционным системам[16].

    В 1993 году американское правительство отстояло так называемый «Клиппер-Чип», который будет обсуждаться подробно в главе 16. Это система, которая дает полицейским доступ к вашим ключам кодирования.

    Дебаты продолжаются. ФБР стремится к узакониванию прав, нарушающих секретность: прослушиванию широкополосных телефонных сетей, установке подслушивающих устройств в компьютеры пользователей без ордера везде, где возможно. Во время написания книги у нас появились новые экспортные правила для программного обеспечения, представленного на массовом рынке, разнообразие законопроектов либерализации шифрования находится в Конгрессе, и несколько дел о контроле над экспортом направлены в Верховный суд. Изменения происходят постоянно; что-либо сказанное мной здесь может устареть к моменту издания книги.

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

    Второе – может ли правительство закупать технологию, которая совершенно очевидно приносит большие социальные выгоды, но, с другой стороны, некоторым образом препятствует законному принуждению, так что, по идее, необходимо ограничивать ее использование? Ключевой козырь ФБР – это шифрование, являющееся большой помехой для расследования уголовных дел, так как ФБР имеет те же самые возможности подслушивания, что и десять лет назад. Однако подслушивание не обеспечивает доказательств, и история убедительно показывает, что перехват – это нерентабельный метод борьбы с преступностью. Широко распространенное шифрование может быть шагом назад в осуществлении механизмов законного принуждения, но не в обвинении преступников.

    Я не знаю ответов. Существует равновесие между секретностью и безопасностью. Законы, которые регламентируют розыскную деятельность и соблюдаются должным образом, препятствуют юридическому принуждению, и это может кончиться тем, что некоторые преступники получат свободу. С другой стороны, эти законы защищают граждан от злоупотреблений полиции. Мы, как общество, должны решить, какое равновесие является правильным для нас, и затем создать условия для законного проведения его в жизнь. Но я громогласно возражаю против ФБР, старающегося насадить выгодное ему решение без общественного обсуждения и без общественного понимания.

    В любом случае будущее не оптимистично. Право на секретность – это первое, чем пренебрегают в случае кризиса, и ФБР попробует сфабриковать кризисы, чтобы попытаться захватить большее количество полномочий для вторжения в секретность. Война, террористические нападения, полицейские акции… наверняка вызовут большие изменения в точках зрения. И даже сейчас, в обстоятельствах, наиболее способствующих аргументированным дебатам о секретности, мы теряем ее все больше и больше.

    Аутентификация

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

    Люди аутентифицируют себя огромное количество раз в день. При входе в компьютерную систему, вы подтверждаете свою подлинность компьютеру. В 1997 году управление социального обеспечения пробовало ввести данные людей в сеть; они прекратили это после жалоб на то, что номер социального обеспечения и девичья фамилия матери не являются достаточно хорошими опознавательными средствами и что у людей будет возможность читать данные других людей. Компьютер также должен подтвердить свою подлинность вам; в противном случае как вы узнаете, что это ваш компьютер, а не какой-нибудь самозванец?

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

    Человек говорит с продавцом магазина и спрашивает о пироге. В некоторой степени оба аутентифицируют друг друга. Продавец хочет знать, способен ли клиент заплатить. Если клиент одет в тряпье, продавец может попросить, чтобы он ушел (или, по крайней мере, заплатил сразу). Если клиент носит лыжную маску и размахивает АК-47, продавец, скорее всего, убежит сам.

    Клиент также аутентифицирует подлинность торговца. Он на самом деле продавец? Он продаст мне пирог или даст мне только кучу опилок в булочке? Что сказать о булочной? В наличии есть некое свидетельство о чистоте, подписанное местным санитарным инспектором, оно висит где-то на стене, если вдруг клиент захочет проверить. Но чаще клиент доверяет своим инстинктам. Мы все уходим из булочной, если нам не понравилось «ощущение» этого места.

    Торговец вручит пирог, а клиент заплатит 5 долларов по счету. Еще большая аутентификация. Действительно ли этот счет подлинный? Выглядит ли этот пирог съедобным? У нас настолько хорошо развита зрительная (и обонятельная) аутентификация, что мы не задумываемся об этом, но поступаем так все время. Клиент получит сдачу, посмотрит на чек, чтобы удостовериться, что он пробит законным предпринимателем, и положит его в карман.

    Если бы клиент платил по кредитной карте, за этим последовало бы еще больше аутентификации. Торговец прогнал бы карту через считывающее контрольное устройство, которое связалось бы с центральным сервером, и убедился бы, что счет действителен и кредита на нем достаточно для покупки. Торговец исследовал бы карту, чтобы убедиться, что это не подделка, и проверил бы подпись на ее оборотной стороне. (Большинство торговцев, правда, не будут так беспокоиться, особенно если сделка незначительна по сумме.)

    Если бы клиент платил чеком, был бы другой опознавательный ритуал. Торговец посмотрел бы на чек и, возможно, спросил бы клиента о некоторых идентификационных данных. Он мог бы записать номер водительского удостоверения клиента и номер его телефона на обороте чека или, допустим, номер кредитной карточки клиента. Ни одно из этих ухищрений фактически не позволяет сделать вывод, что чек действителен, но помогает проследить за клиентом в случае, если возникнут проблемы.

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

    Вернемся к нашему торговцу. Приходит другая клиентка. Она и торговец – старые друзья. Каждый из них знает другого в лицо. Это – здравая система подтверждения: они узнают друг друга даже при том, что у нее новая прическа, а он носит новый парик и очки. Супергерои понимают это и носят маски, чтобы сохранить свою личность в секрете. Это больше подходит для комиксов, чем для реальной жизни, потому что аутентификация – это не только распознавание лица (иначе слепой никогда никого не узнал бы). Люди помнят голос друг друга, фигуру, особенности и т. д. Если торговец говорит со своим другом по телефону, они могут подтвердить личности друг друга вообще без визуального контакта. Специальный уполномоченный Гордон должен был понять, что Брюс Уэйн – на самом деле Бэтман, просто потому, что они так часто разговаривали по телефону.

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

    Все достаточно просто, потому что каждый бывал в таких магазинчиках. Платон не доверял написанному, потому что не мог определить, что является правдой, если человек не находится прямо перед ним. Что бы он сказал о Всемирной Сети: никакого голоса, никаких лиц… только биты.

    Тот же самый клиент, купивший пирог, теперь возымел желание купить что-нибудь менее скоропортящееся – рецепт приготовления пирога, например. Для этих поисков он заходит в Сеть, пользуется своим испытанным поисковым сервером и находит несколько веб-сайтов, где продаются рецепты пирогов. Все они принимают к оплате кредитные карточки через Интернет или позволяют сделать заказ по почте. Все они обещают доставку в три-четыре дня. Что теперь?

    Как бедный клиент узнает, можно ли им доверять? Потребуется немного усилий, чтобы просмотреть предложения: в Сети любой может сделать это в течение нескольких минут. Но какие из продавцов честны, а какие занимаются жульничеством? URL – указатель информационного ресурса (строка символов, указывающая на местонахождение документа в Интернете) мог бы быть именем продавца рецептов, которому можно доверять, но где гарантия, что сайт действительно соответствует тому самому доверенному имени? У Северо-Западных авиалиний есть веб-сайты, где можно купить авиабилеты: www nwa com. До недавнего времени у туристических агентов был веб-сайт www northwest-airlines com. Сколько людей купили билеты у последних, думая, что покупают их у первых? (Многие компании не знают доменных имен своих тезок.) Некоторые компании помещают имена своих конкурентов в описание своих веб-сайтов (обычно скрытые) в надежде обмануть поисковые серверы. Internic net, где вы собираетесь зарегистрировать доменное имя, – не то же самое, что Internic com. Последний возник как надувательство, сформировавшись внутри Internic Software, и в настоящее время якобы регистрирует имена доменов. Хозяева, вероятно, сделают значительный бизнес за счет создания путаницы. Есть даже более мрачное предположение: кто может сказать, что некий незаконный хакер не убедил программу просмотра отображать один URL вместо другого?

    Клиент находит веб-сайт, который выглядит подходящим, и выбирает рецепт пирога. Теперь он должен заплатить торговцу. Если он покупает что-либо ценное, то в этом случае нужна серьезная аутентификация. (Если он тратит 25 центов на виртуальную газету, все немного проще.) Действительны ли эти электронные деньги? Действительна ли эта кредитная карточка и есть ли у клиента право выписывать электронный чек? Некоторые торговцы, работающие непосредственно с клиентом, просят показать водительские права перед тем, как принять чек; а что же может проверить цифровой торговец перед принятием электронного чека?

    Наиболее важной проблемой безопасности является аутентификация через цифровые сети. Здесь может быть так же много различных решений, как и различных требований. Некоторые решения должны быть сильными и весомыми, чтобы защитить миллионы долларов. Для других это не обязательно: например, аутентификация дисконтной карты торговца. Некоторые решения подразумевают анонимность – наличные деньги или карту, которая пускает вас в специфическую область сети, не требующую обязательного раскрытия вашего имени, – в то время как другие нуждаются в строгой системе аутентификации. Большинство будут стремиться к интернациональности: сетевой паспорт, системы, используемые для международной торговли, цифровые подписи или международные контракты и соглашения.

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

    Когда думаете об аутентификации, держите в уме два ее различных типа. Они могут выглядеть похожими, но техника их использования очень различна. Первый – это аутентификация сеанса: беседа лицом к лицу или по телефону, или через IRC (международную линию передачи документальной информации). Сеансами также могут быть разовые посещения интернет-магазина. Метод аутентификации здесь – это сравнение отдельных диалогов: является ли лицо, сказавшее что-либо сейчас, тем же самым лицом, сказавшим что-либо ранее? (Это легко сделать при переговорах по телефону или при личной встрече – если голос и внешность те же самые, то, вероятно, это один и тот же человек. В Сети значительно сложнее.)

    Второй – это аутентификация транзакции: покупки с использованием кредитной карты, частично денежное обращение. Аутентифицируется здесь действительность сделки: признают ее стороны или же будет вызвана полиция. Споры при обсуждении этой стороны вопроса одни и те же, осуществляется сделка через Сеть, по телефону или же при личном контакте. Неважно, идет ли речь о проверке чека на 100 долларов торговцем, который должен удостовериться, что чек не поддельный, или о сопоставлении подписи на кредитной карточке с подписью в регистрационной карточке продаж.

    Целостность

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

    Целостность – это не то же самое, что точность. Точность характеризует степень соответствия данной величины ее истинному значению; целостность описывает отношение данной величины к самой себе через какое-то время. Часто они тесно взаимосвязаны.

    В любом обществе, где компьютеризированные данные используются для принятия решений, целостность важна. Иногда это может иметь значение для общества в целом: если статистика о детях с уровнем жизни за чертой бедности является признанным фактом, ситуация может быть изменена путем выделения федеральных пособий. Для любого, кто зависим от акций NASDAQ (компьютеризированной системы котировки ценных бумаг), путаница может быть убийственной. Иногда это важно для отдельной личности: вы на самом деле можете создать беспорядок, внеся изменения в записи о водительских правах и отметив чью-либо лицензию как приостановленную. (Это было случайно сделано в 1985 году в Анкоридже, штат Аляска, по отношению к 400 людям, по крайней мере один человек из которых провел ночь в тюрьме. Подумайте об удовольствии, которое кто-нибудь может получить, сделав это специально.)

    Было несколько инцидентов, связанных с целостностью и имевших отношение к акциям. В 1997 году у компании Swisher, которая производит дезодоранты для унитазов, сильно увеличилась стоимость акций из-за того, что информационные службы некоторое время путали символику ее акций с символикой акций другой компании с названием Swisher, которая производит сигары. Компания Swisher1 была намного меньше, чем Swisher2, поэтому когда вы, будучи введены в заблуждение, просматривали ее годовой отчет, то находили невероятную недооценку акций. Некие парни вычислили, что же на самом деле произошло, и быстро продали акции Swisher1, просчитав, что цена снова упадет, как только инвесторы поймут ошибку.

    В 1999 году служащий PairGain Technologies отправил по почте поддельные объявления о слиянии компаний, оформленные так, как выглядят объявления информационной службы Блумберг, и получил контроль над 30% акций до тех пор, пока обман не был раскрыт.

    Эти случаи не имеют отношения к аутентификации. Не имеет значения, кто собрал данные переписи, кто составил конечные цены акций или кто ввел записи о регистрации автомашин – они касаются целостности. Но есть много других баз данных, где целостность важна: телефонные книги, медицинские записи, финансовые записи и т. д.

    Когда один мой знакомый писатель-мистик появляется перед аудиторией, я всегда думаю, что хладнокровный способ убить кого-нибудь состоит в том, чтобы изменить базу данных дозировки препарата в больнице. Если врач недостаточно внимателен – например, он утомлен, препарат незнакомый, его отвлекает некий Мак-Гуффин, – он может прописать только то, что ему сообщает компьютер. Сегодня это может не сработать – рядом есть бумажный первоисточник, например настольный справочник врача или фармакологические стандарты препарата – но кто поручится за завтра?… Миллионы людей получают медицинскую информацию по Сети. Например, drugemporium com делает запрос другому сайту – drkoop com, чтобы получить информацию о возможной несочетаемости препаратов, которые вам назначены. Пользователей обычно предупреждают, чтобы они не полагались на информацию, взятую всего из одного источника, но большинство из них все равно будут поступать так, а не иначе. Кто-нибудь захочет поиграть с целостностью этих данных и причинит много вреда.

    И даже если нет никакого преступного намерения, в любой сетевой системе, которая имеет дело с рецептами и лечением, лучше проводить проверку целостности, чтобы застраховать себя от случайных ошибок: никто не хочет, чтобы случайно измененный байт привел в итоге к смертельному случаю в больнице – ни пациент, ни компания, занимающаяся поставками программного обеспечения, которой придется иметь дело с судебными процессами.

    В физическом мире люди используют материальную копию объекта как доказательство целостности. Мы доверяем телефонной книге, настольным справочникам врача и «Американским статистическим отчетам», поскольку это книги, которые выглядят настоящими. Если они фальшивы, значит, кто-то тратит много денег, чтобы они выглядели настоящими. Когда вы снимете с полки роман Диккенса и начнете читать его, вы не усомнитесь в его реальности. Точно так же с вырезкой из Business Week – это всего лишь клочок бумаги, но он выглядит и воспринимается как страница журнала. Если вы получаете фотокопию журнальной вырезки, то она только напоминает страницу журнала. Если кто-нибудь перепечатает статью (или загрузит ее из LEXIS-NEXIS) и пошлет ее по электронной почте вам, тогда… кто знает.

    1 августа 1997 года я получил электронную почту от друга; в ней была копия речи Курта Воннегута в день присуждения университетских степеней в Массачуссетском технологическом институте. По крайней мере, я так предполагал. Мой друг переслал ее мне с честными намерениями. Но это не было речью Курта Воннегута на присуждении университетских степеней в 1997 году. В 1997 году Воннегут не выступал там. Он не писал этой речи и нигде не выступал с ней. Она была написана Мари Шмич и опубликована в ее колонке в Chicago Tribune 1 июля 1997 года.

    Я сопоставил этот случай сомнительного авторства Воннегута с письмом, полученным мной приблизительно 15 лет назад, еще до появления Всемирной паутины, даже до того, как у меня появился адрес электронной почты (но уже во времена Интернета). Речь идет об эссе с названием «Мечта о будущем (не исключая омаров)»; друг отправил мне фотокопию по электронной почте. Копия была сделана непосредственно с публикации. Да, она могла быть сфальсифицирована, но это потребовало бы уйму работы. Это было до эры настольных издательских систем, и придать чему-либо вид фотокопии журнала Esquire было сложно и дорого. Сегодня отличить реальную вещь от «утки» уже сложно.

    Я получал переданные по электронной почте статьи из журналов и газет. Кто может дать гарантию, что те статьи на самом деле из газет и журналов, хотя утверждается, что это так. Как я узнаю, что они не были искусно изменены: слово здесь, предложение там. Что если я сделаю эту книгу доступной интерактивно, и некие хакеры возьмут и изменят мои слова? Возможно, вы читаете эту книгу в Сети; остановитесь ли вы, чтобы подумать, что прочитанное вами может не быть написано мною, что вы верите серверу, с которого загрузили книгу. Является ли вера механизмом, который применим для проверки, что это мои слова? По прошествии достаточного количества лет многие люди будут читать переделанную версию книги – иную, чем мои настоящие слова. Думаете, кто-нибудь заметит это? Насколько задолго до измененной версии была создана «настоящая» версия? Когда протест Воннегута будет забыт и его речь на присуждении ученых степеней войдет в историю?

    Соблазн подделывать или изменять данные велик. Покрытый рунами камень, найденный в Миннесоте, предположительно описывает визит викингов, и ничего, что он содержит слова, возникшие только в современном шведском языке. Поль Шлиман (внук Генриха Шлимана) претендовал на открытие секрета Атлантиды в старинных свитках майя, которые он прочел в Британском музее. Ничего, что никто не может прочесть письмена майя и что старинные свитки хранятся в Мадриде. Переписанная Бисмарком телеграмма Эмса в 1870 году развязала Франко-Прусскую войну. В 1996 году, когда Дэвид Селборн пытался протолкнуть свой перевод описания посещения Китая итальянским путешественником (обогнавшим Марко Поло на три года), он использовал «владельца манускрипта, согласившегося на перевод только в случае, если будет соблюдена строжайшая его анонимность», в качестве уловки, чтобы скрыть подделку.

    Цифровой мир позволяет с легкостью осуществлять подобные вещи, потому что подделку настолько же просто произвести, насколько сложно выяснить истину. В мае 1997 года 13-летняя жительница Бруклина выиграла национальный конкурс по орфографии. Когда в New York Post была напечатана фотография Assoshiated Press, на которой девочка прыгает от радости, со снимка убрали название ее спонсора, нью-йоркской Daily News. Так же на видео: когда Си-Би-Эс показывала празднование Нового, 2000 года она добавила свою собственную эмблему к эмблеме корпорации NBC (30 на 40 футов). А поддельные эссе и речи, подобные речи Воннегута, путешествуют по Интернету постоянно.

    Изображения способны оказывать мощные воздействия на людей. Они могут изменять мнения и оказывать влияние на внешнюю политику. Картины «Бури в пустыне» – загнанные в ловушку иракцы, ставшие жертвами снарядов военно-воздушных сил коалиции, сыграли большую роль в быстром прекращении огня: американцы не любят видеть резню. А помните Сомали? Кадры были взяты из тридцатисекундного видеоклипа: мертвую Марине (Marine) проволокли по улицам Могадишу для того, чтобы отбить у американцев желание воевать. Информация – это сила. В некоторых случаях видеоклип может быть и обманом.

    Это звучит жутко, но, несмотря на внимание к этой проблеме, мы теряем способность отличать настоящую вещь от фальсификации. На протяжении всей истории человечества мы использовали контекст для проверки целостности; в электронном мире контекста нет. Для кинофильма «Афера» Ньюман и Редфорд нанимали дюжины актеров на пробы и устраивали реалистичную имитацию тотализатора конных бегов, чтобы детально изучить поведение каждого кандидата. Во время съемок более современного кинофильма «Испанский заключенный» было то же самое. Вовлечение в такие глобальные игры с целью детального изучения реакций было популярно во времена депрессии; впрочем, я знаю, что подобные вещи делаются и сегодня. Данный способ оценки надежен, потому что человек не может предположить, что все, что он видит – комнаты, люди, движение, – в действительности является только представлением, разыгранным исключительно для него. В Сети это сделать просто. В мире, в котором нет возможности потрогать, людям нужен новый способ проверки целостности того, что они видят.

    Аудит

    Двойная запись в бухгалтерском учете была придумана в 1497 году Лукой Пациоли из Борго Сан-Сеполкро, хотя само это понятие на 200 лет старше. Основная идея в том, что каждая операция будет влиять на два или более счета. Один счет дебетируется на ту же самую сумму, на которую кредитуется другой счет. Таким образом, все операции всегда проходят по двум счетам и, поскольку они всегда показывают увеличение на одном счете и уменьшение на другом, суммарный итог по всем счетам всегда будет нулевым.

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

    Аудит жизненно необходим, если к безопасности относиться серьезно. Двойная запись бухгалтерского учета – это только начало; банки имеют комплексные и исчерпывающие требования к аудиту. То же касается тюрем, стартовых шахт ядерных ракет и бакалейных магазинов. В тюрьмах должны хранить записи на каждого, кто поступает и выбывает, и регулярно составлять баланс, чтобы быть уверенными, что никто незамеченным не убыл (или случайно не остался). В ракетных шахтах могут дополнительно подвергнуть ревизии каждый убывающий и прибывающий контейнер и упаковку, сравнивая отгрузочные и приемные записи с действительностью. Бакалейный магазин хранит кассовую ленту всего пробитого товара и сравнивает количество денег, находящихся в ящике кассы фактически, с тем, что пробито на кассовой ленте.

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

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

    Электронные деньги

    Вернемся в старые времена (год 1995 или около того). В те дни каждый думал, что мы должны создать новый вид денег для обращения в электронной торговле. Много компаний прекратили свое существование в попытках выдумать новые деньги. Некоторые компании старались создать электронный эквивалент наличных денег, другие – электронный эквивалент чеков и кредитных карт. Одной из последних таких попыток стал объединенный протокол Visa/Master card, предназначенный для использования существующих кредитных карт совместно с особой интернет-системой, позволяющей сделать кредитные карты надежными для электронной коммерции.

    Они как-то изворачиваются, но не в этом дело. Кредитные карты прекрасно подходят для Интернета, и очень многие с готовностью пользуются ими для покупки книг, одежды и всего прочего. Однако наличие таких брешей в защите, которые позволили осуществить кражи серийных номеров кредитных карт в 2000 году, впечатляет. Будет ли когда-нибудь создана специфическая для Интернета форма оплаты?

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

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

    Различные физические реализации также предполагают различные требования. Эта система сетевая или автономная? Все намного проще, если вы можете рассчитывать на сетевое соединение с банком (каковое требует банкомат). Если вы создаете торговую систему для использования в той части света, где недостаточно телефонных линий (как, например, в отдельных районах Африки), вы не можете принять этот вариант. Будет ли система работать в программной среде или мы можем рассчитывать на надежные аппаратные средства, подобные смарт-карте? И будет ли эта система предполагать анонимность, как в случае использования наличных денег, или включать опознавание, подобно системе кредитных карт? И наконец, какое правительственное регулирование будет осуществляться по отношению к этой системе? Это зависит не только от выбранных платежных средств, но также от постановлений правительства или правительств, имеющих власть над системой.

    Мы уже можем наблюдать кое-что из этого. У нас пока нет цифровых наличных денег, но уже появляются альтернативные системы, которые выполняют ту же роль, что и деньги. Flooz com создал специализированную валюту для оплаты подарков. На нем выдаются подарочные сертификаты, которые могут быть использованы в качестве денег. Beenz com предпринимает нечто подобное; «beenz» не являются настоящими деньгами, но они могут использоваться и обращаться, как настоящие деньги. Другие компании тоже участвуют в этом процессе.

    Я ожидаю, что это станет большим делом и, возможно, опасным. Причина в том, что псевдовалюты не могут играть той регулирующей роли в процессе товарооборота, которую играют реальные деньги.

    Упреждающие меры

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

    Вы можете проследить это на примере кредитных карт. Изначально подтверждение кредитных карт не осуществлялось через сеть. Торговцам предоставляли книги с недействительными номерами кредитных карт каждую неделю, и они должны были вручную проверять номер по книге. Сейчас подтверждение карты происходит по сети в режиме реального времени. Плохие люди воровали новые карты из почтовых ящиков; из-за этого компании, обслуживающие кредитные карты, стали требовать, чтобы вы звонили для активации своей карты. Сейчас карты и извещения об активации отправляются из различных точек. У компаний также есть разведывательные программы для контроля непредвиденных расходов. («Доброе утро, сэр, извините за беспокойство. Многие годы вы были хорошим клиентом. Мы хотим проверить, действительно ли вы внезапно переехали в Гонконг и полностью исчерпали свой кредит».)

    Когда банкоматы впервые были введены Citicorp в 1971 году, клиент должен был помещать кредитную карту в прорезь и набирать свой идентификационный номер[17]. Машина проверяла его и выбрасывала карту обратно клиенту. После этого он мог закончить операцию. Предприимчивые нью-йоркские преступники переодевались в костюмы обслуживающего персонала и ждали недалеко от этой машины. После подтверждения идентификационного номера клиента они подходили и говорили, что банкомат сломан, проходит тестирование или в нем просто нет денег, и просили использовать соседний рядом. В конце концов, людям в таких костюмах можно доверять – так думали клиенты. После того как клиент уходил, они заканчивали первую операцию и клали в карман наличные деньги.

    Карта должна была удерживаться до конца сделки, но это требовало реконструкции аппаратных средств. Банкам нужно было действовать быстро, и они нашли временное решение, которое могло быть введено в действие в банкоматах: было сделано так, чтобы расположенные рядом машины имели связь между собой. Поскольку банки применили это повсюду, то могли наблюдать, как преступники перемещались по всему городу в поисках машин, где уловка все еще срабатывала. Тогда они настроили банкомат так, чтобы он удерживал карту до конца сделки. Долгосрочное решение состояло в том, чтобы создать сеть с обратной связью, дающую уверенность в том, что в любой момент времени проводится только одна транзакция с использованием данной карты. Это было сделано, так что теперь не имеет значения, сколько времени карта удерживается машиной. Теперь многие банкоматы попросят вас просто предъявить свою карту, но раньше было очень много мошенничества, пока проблема не была определена.

    Подобные способы фиксации недостатков в системах безопасности после того, как уже было осуществлено нападение, не подходят для Интернета. Атаки могут быть автоматизированными, они могут легко и быстро повторяться низкоквалифицированными нападающими. Нападение на банкоматы, адаптированное к Интернету, может разрушить банковскую систему. Недостаточно противодействовать мошенничеству после того, как оно было продемонстрировано в работе; мы должны быть предусмотрительны и бороться с обманом до того, как он произойдет.

    Часть II
    Технологии

    Система безопасности, как луковица, состоит из слоев. На внешнем слое находятся пользователи, по-разному использующие систему, по-разному всем доверяющие и по-разному же реагирующие на баги системы. Внутри «луковицы» находятся связи, обеспечивающие безопасность взаимодействия пользователя с системой и контактов различных систем. Еще ближе к сердцевине расположены программные средства, наверняка содержащие ошибки; поэтому естественно ожидать, что для них у нас есть какие-то элементы защиты. Эти программы работают в сетях и на отдельных компьютерах. Двигаясь глубже, мы обнаружим теоретически идеальные протоколы обмена данными. И в самой сердцевине (иногда) располагается криптография: математические уравнения, описывающие условия безопасности.

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

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

    И мы постараемся не злоупотреблять смешением плохо согласующихся между собой метафор.

    Глава 6
    Криптография

    Криптография весьма загадочна. С одной стороны – это набор сложных математических выражений. Шифровальщики вечно изобретают сложные математические преобразования, а им вечно противостоят криптоаналитики, находя все более оригинальные способы нарушить работу этой математики. У шифрования длинная и славная история: с его помощью наперсники, любовники, тайные общества и правительства на века сохраняли свои секреты.

    С другой стороны, криптография – это одна из основных технологий в киберпространстве. Она позволяет нам взять все те деловые и социальные структуры, с которыми мы привыкли иметь дело в физическом мире, и переместить их в киберпространство. Криптография – это технология, позволяющая нам обеспечить безопасность в киберпространстве и бороться с теми атаками и злоумышленниками, о которых шла речь в части I. Без криптографии никогда бы не смогла распространиться электронная торговля. Криптография не являет собой панацею, для полной надежности вам потребуется еще много всего другого, но она, несомненно, важна.

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

    С точки зрения пользователя, криптография представляет собой туманный объект, выполняющий функции защиты, – вроде Бэтмана – нечто грозное, но справедливое и наделенное мистической силой. Если пользователь уделит ей немного внимания, криптография предстанет перед ним целым собранием акронимов, которые способны обеспечить решение самых различных задач безопасности. Например, IPsec защищает трафик в Интернете. С его помощью обеспечивается безопасность виртуальных частных сетей (VPN). Протокол SSL (Secure Sockets Layer) отвечает за безопасность соединений Всемирной Сети. Системы PGP (Pretty Good Privacy) и S/MIME гарантируют надежность электронной почты; они не дают прочитать сообщения никому, кроме адресата, и не допускают фальсификации авторства. Протокол SET защищает операции, проводящиеся в Интернете с использованием кредитных карт. Все вышеперечисленное – это протоколы. Существуют протоколы для защиты цифровой информации (музыки, фильмов и т. п.), для аутентификации сотовых телефонов (чтобы предотвратить мошенничество), для электронной торговли и для многого другого. Чтобы создать эти протоколы, шифровальщики используют различные алгоритмы: алгоритмы шифрования, цифровой подписи и т. д.

    Симметричное шифрование

    Исторически криптография использовалась с одной единственной целью: сохранить секрет. Даже сама письменность была своего рода шифрованием (в Древнем Китае только высшие слои общества могли обучаться чтению и письму), а первый опыт применения криптографии в Египте относится примерно к 1900 году до н. э.: автор надписи пользовался необычными иероглифами. Есть и другие примеры: дощечки из Месопотамии, на которых зашифрована формула изготовления керамической глазури (1500 год до н. э.), еврейский шифр ATBASH (500—600 годы до н. э.), греческое «небесное письмо» (486 год до н. э.) и шифр простой подстановки Юлия Цезаря (50-60 год до н. э.). Кама Сутра Ватсьяяны даже помещает искусство тайнописи на 44-е, а искусство секретного разговора на 45-е место в списке 64 искусств (йог), которыми должны владеть мужчины и женщины.

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

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

    Такая схема более или менее работает. Алиса может при помощи изобретенного ею алгоритма зашифровать свой секрет глазури для керамики. Алиса и Боб могут договориться об алгоритме, чтобы поделиться друг с другом мыслями о Кама Сутре. Целый общественный класс – китайская знать (хотя, скорее всего, никого из них Бобом не звали) – использовал письменность, чтобы утаить от крестьян государственные тайны.

    Но возникают определенные сложности. Во-первых, алгоритм должен быть надежным. Не надейтесь, что Ева посмотрит на зашифрованное сообщение, пожмет плечами и отступится. Она твердо намерена прочесть открытый текст. Если Ева – это правительство Великобритании времен Второй мировой войны, она наймет лучших математиков, лингвистов и шахматистов страны, запрет их и еще 10 000 человек в тайной резиденции в Блетчли Парк и создаст компьютер – только так она сможет взломать алгоритм и восстановить текст сообщения. Агентство национальной безопасности – единственный в своем роде крупнейший потребитель компьютерного оборудования и работодатель математиков. Алисе нужно быть очень ловким шифровальщиком, если ей предстоит перехитрить Еву такого уровня. Я еще расскажу об этом позже.

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

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

    Очень маловероятно.

    В этом прелесть ключа. Замок на вашей двери – это серийный продукт какой-то безликой компании, которую нисколько не заботит ценность вашей коллекции марочных вин, но вы и не должны им доверять. Они не говорят вам: «Помните, любой, у кого есть замок такой же марки, может открыть ваш замок». У вас есть ключ. Набор шпеньков в замке, соответствующий вашему ключу, отличает ваш замок от всех остальных замков в округе, несмотря на то что у них может быть та же модель. (На самом деле пример упрощен. Вы все же должны принять на веру, что они правильно собрали замок и не припасли запасных ключей. Но мы пока что не принимаем это во внимание.)

    Дверной замок служит примером такой же модели защиты, какую в 1466 году привнес в криптографию Леон Баттиста Альберти, известный итальянский архитектор эпохи Возрождения, создав криптографический ключ. У кого угодно могут быть замки одинаковых моделей, но ключи у всех разные. Конструкция замка не является уникальной – у слесарей есть книги с подробными схемами, а большинство хороших моделей описаны в общедоступных патентах, – но ключ является тайной. У вас есть ключ, значит, вы можете отпереть дверь. Если вы одолжите ключ другу, то он сможет войти в дом. А тот, у кого ключа нет, останется на улице. (Слесарями в данном случае будут криптоаналитики; до них мы доберемся позднее.)

    Применение такой модели в криптографии решает обе упомянутые выше проблемы. Алгоритмы, так же как и замки, можно стандартизировать. Стандарт шифрования данных (Data Encryption Standard, DES) – это общепринятый криптографический алгоритм, широко распространенный с 1977 года. Его использовали в тысячах различных программ для любых приложений. Самые сокровенные подробности устройства DES были опубликованы с первого дня его существования; их опубликовали даже до того, как этот алгоритм приняли в качестве стандарта. Доступность этого алгоритма не сказывается на безопасности, поскольку различные группы пользователей выбирают себе разные секретные ключи. Если Алиса и Боб пользуются одним ключом, значит, они могут общаться. Ева ключа не знает, следовательно, она не сможет прочесть их сообщения – даже если у нее есть точно такие же шифровальные программы, как у Алисы и Боба.

    С помощью ключей решается задача включения и исключения людей из группы избранных. Если Алиса и Боб договорились о совместном использовании одного ключа и хотят, чтобы Ким Филби смог присоединиться к их общению, они просто дадут ему копию ключа. Если позже они решат, что Филби передает секреты Советскому Союзу, им нужно просто сменить ключ и не сообщать об этом Филби. С этого момента он исключен из системы и больше не сможет читать сообщения, зашифрованные новым ключом. (Увы, он все же может прочитать старые.)

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

    Такие алгоритмы называют симметричными, потому что отправитель и получатель используют один и тот же ключ. Ключ представляет собой случайную строку битов некоторой длины: в 2000 году хорошей длиной ключа считалась длина в 128 бит. У различных симметричных алгоритмов – разная длина ключей.

    Симметричные алгоритмы можно обнаружить в шифровальных системах всего компьютеризованного мира. Общепринятыми алгоритмами считают DES и тройной DES, RC4 и RC5, IDEA и Blowfish. Улучшенный стандарт шифрования (Advanced Encryption Standard, AES) вскоре станет стандартным алгоритмом шифрования правительства США[18]. При помощи этих алгоритмов обеспечивается безопасность частных сообщений электронной почты, индивидуальных файлов, электронных банковских операций и кодов запуска ракет с ядерными боеголовками. Эти алгоритмы препятствуют нарушению конфиденциальности.

    Но они несовершенны.

    Проблема в распределении ключей. Для того чтобы описанная система работала, Алиса и Боб должны договориться о секретном ключе перед тем, как получат возможность обменяться тайными сообщениями. Если они достаточно сообразительны, то будут регулярно менять ключ, скажем, раз в день. Им необходимо как-то тайно уславливаться об этих ежедневно изменяющихся ключах, так как, перехватив ключ, кто угодно сможет читать все сообщения, зашифрованные с его помощью. Кроме того, поскольку необходима попарная секретность, количество ключей будет возрастать пропорционально квадрату количества пользователей. Двум пользователям нужен только один ключ, но сеть из десяти пользователей требует 45 ключей[19], чтобы предоставить каждой паре возможность секретного общения. А сеть из 100 пользователей потребует 4950 различных ключей. В 80-х годах корабли Военно-Морского флота США отправлялись в плавание с полным набором ключей, предоставляемых Агентством национальной безопасности – каждый ключ был напечатан на бумажной ленте, перфокарте или на чем-нибудь еще; этого было достаточно для всех сеансов связи на все время выполнения задания. Но недостаточно только распространять ключи секретно: их нужно секретно хранить, секретно использовать, а затем секретно уничтожать. Алиса и Боб обязаны хранить свои ключи в тайне в течение всего времени, пока им необходимо общаться друг с другом и быть уверенными, что ни у кого больше нет их ключей. Секретность должна соблюдаться как до и во время использования ключа, так и впоследствии.

    Это означает, что уничтожение ключей имеет большое значение. Алиса и Боб не могут просто выбросить свой ключ в корзину в конце работы и надеяться, что его никто не найдет. Перехватчики не пренебрегают хранением зашифрованных посланий, которых не способны прочесть, в надежде, что найдут к ним ключ через несколько дней. Агентство национальной безопасности получило возможность расшифровать русский трафик VENONA (вспомните эту историю; это действительно поучительно) только благодаря тому, что СССР повторно использовал ключ, который, должно быть, ранее выбросил, и тому, что АНБ хранило все эти советские шифрованные сообщения более 10 лет[20].

    Есть множество исторических примеров, когда недостаточное внимание к обращению с ключами приводило к разгадке безупречного шифрования. Джон Уокер служил в военно-морском флоте США и был офицером безопасности, ответственным за обеспечение безопасности ключей, но одновременно он делал и другую карьеру, фотографируя ключи флота и отсылая фотографии русским. Японская секта поклонников смерти Аум Синрике зашифровала свои компьютерные записи, но она была настолько неосторожна, что оставили копии ключей на дискете, обнаруженной полицией. Это произошло в 1995 году: не кажется ли вам, что приверженцы культа смерти могли бы к тому времени кое-что знать о ключах.

    Типы криптографических атак

    Что означает «взломать» алгоритм? На первый взгляд очевидно – кто-то сможет прочитать сообщение, не имея ключа. Но на самом деле все сложнее.

    Если злоумышленник просто берет зашифрованное сообщение и восстанавливает открытый текст, то такую атаку называют атакой с использованием только шифрованного текста (cipher text-only attack). Их, как правило, больше не используют – современные алгоритмы слишком хороши, чтобы их одолеть атаками такого рода.

    С большей вероятностью можно встретить атаки с использованием известного открытого текста (known-playn text attack): у дешифровщика есть образец открытого и шифрованного текста, что позволяет ему восстановить ключ. На первый взгляд может показаться, что это бесполезно, но на самом деле смысл есть. Если при помощи этого же ключа будут зашифрованы другие тексты, злоумышленник сумеет взять ключ и прочесть остальные тексты. Например, почти у всех компьютерных файлов есть заголовок. Все файлы Microsoft Word, например, начинаются с нескольких сотен одинаковых байтов. (Это «невидимые» символы – служебные байты программы, и они не отображаются в окне.) Если криптоаналитик может, воспользовавшись имеющимся открытым текстом, воспроизвести ключ, то сумеет прочитать документ Word полностью. Атаки, при которых известен открытый текст, с большим успехом применяли против немецкой «Энигмы». Аналитики получали в руки единственный незашифрованный текст, например прогноз погоды, а через некоторое время один из отдаленных немецких постов в Норвегии начинал пунктуально присылать ежедневные одинаковые сообщения: «Нечего сообщать». (Открытый текст можно еще называть шпаргалкой.) Обычно таким образом узнавали ключ текущего дня, а затем с помощью ключа читали зашифрованные сообщения.

    Еще более действенной является атака с помощью избранного открытого текста (chosen-plain text attack). При такой атаке криптоаналитик имеет возможность выбрать сообщение, которое после этого зашифровывают. Затем он получает зашифрованное сообщение и восстанавливает ключ. Атаки этого рода срабатывали против немецких шифров: союзники сознательно допускали утечку определенной информации для того, чтобы получить зашифрованный текст, или провоцировали сообщения о событиях в городах с уникальными названиями, служащие особенно хорошими шпаргалками. Эти атаки хорошо срабатывают и против некоторых систем, использующих смарт-карты, в результате чего злоумышленники получают возможность помещать на карту нужную им информацию.

    Все эти атаки объединяет то, что аналитикам известны детали алгоритма. (Единственным исключением, которое мне известно, сегодня является японский код PURPLE.) Это не просто ученый ярлык, а очень хороший механизм. Если в программах будут использовать какой-то алгоритм, то его «раскрутят» и в обратную сторону. Среди секретных когда-то алгоритмов, которые уже «раскрутили» – RC4, все алгоритмы шифрования цифровой сотовой связи, DVD– и DIVX-алгоритмы шифрования видеоизображений и алгоритм Firewire. Захватят и расшифруют даже алгоритмы, глубоко запрятанные в военном оборудовании. Примерами могут служить «Энигма» во Второй мировой войне[21] или почти все алгоритмы НАТО и Варшавского договора во времена холодной войны. (Мы их не знаем, но весьма компетентные военные занимались их расшифровкой.) Полезно предполагать, что врагу известны подробности вашего алгоритма, потому что в конечном итоге они все равно станут ему известны. Август Керхкофф первым сформулировал это положение в 1883 году: «В алгоритме нет никакой тайны, вся тайна в ключе».

    Распознавание открытого текста

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

    В 1940-х годах Клод Шеннон ввел понятие расстояния уникальности (unicitydistance). Среди прочего, расстояние уникальности измеряет количество необходимого зашифрованного текста, позволяющее однозначно воспроизвести открытый текст. Это значение зависит и от свойств открытого текста, и от длины ключа, характерной для такого алгоритма шифрования.

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

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

    Для стандартного англоязычного сообщения расстояние уникальности равно К/6,8, где К – это длина ключа в битах. (6,8 – степень естественной избыточности английского языка. Для других открытых текстов она будет больше или меньше, но незначительно.) Для ASCII-кода, применяемого согласно стандарту DES, расстояние уникальности составляет 8,2 байт. Для 128-битового шифра это примерно 19 байт. Таким образом, для англоязычных сообщений, длина которых превышает 19 байт, расшифрованный текст, похожий на английский, с большой вероятностью будет истинным открытым текстом. Почти такое же значение расстояния единственности имеют файлы электронных таблиц, текстовых процессоров и баз данных. (На самом деле оно может быть намного меньше, потому что форматы файлов предполагают стандартное начало файла.) Для сжатых файлов расстояние уникальности могло бы быть в два-три раза больше (но опять-таки, стандартное начало может его существенно снизить).

    Отсюда мораль: «Распознать открытый текст просто, и для этого не требуется большого количества информации».

    Коды аутентификации сообщений

    Коды аутентификации сообщений (Message authentication codes или MACs) – это следующий базисный элемент, о котором мы поговорим. Они не обеспечивают секретность, но гарантируют аутентификацию и целостность. Они дают уверенность, что сообщение пришло именно от того человека, который обозначен как автор (это аутентификация), и что сообщение по пути не изменилось (а это целостность).

    Вы можете рассматривать MAC как защищающую от вскрытия оболочку сообщения. Кто угодно может прочесть сообщение – оболочка не обеспечивает секретность. Но кто-то, кто знает ключ MAC, может удостовериться, что сообщение не было изменено. Конкретнее, MAC – это номер, который прикреплен к цифровому сообщению.

    Для MAC применяют секретные ключи совместного использования, типа симметричных алгоритмов шифрования. Сначала Алиса договаривается о ключе с Бобом. Затем, когда она хочет послать Бобу сообщение, она вычисляет MAC сообщения (применяя секретный ключ) и присваивает его сообщению. У каждого сообщения есть уникальный MAC для любого возможного ключа.

    Когда Боб получает сообщение, он вычисляет его MAC (опять-таки используя все тот же совместный ключ) и сравнивает его с тем значением MAC, которое прислала Алиса. Если они совпадают, то он может быть уверен в двух вещах: сообщение действительно пришло от Алисы (или от кого-то, кто знает секрет общего ключа) – потому что только применяя этот ключ, можно вычислить MAC, и это сообщение цельное и не измененное – так как MAC можно вычислить только по полному и точному сообщению. Если бы Ева (помните нашу перехватчицу?) прослушивала связь, она смогла бы прочитать сообщение. Однако если бы она попыталась изменить текст сообщения или MAC, то вычисленный Бобом MAC не был бы равен тому значению, которое он получил. Еве пришлось бы изменить сообщение, а затем изменить MAC, чтобы он был правильным для нового сообщения, но она не могла бы этого сделать, так как не знает ключа. Банки используют такую простую систему аутентификации уже несколько десятилетий.

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

    MAC постоянно используются в Интернете. Их применяют, например, в протоколе IPsec, чтобы гарантировать, что IP-пакеты не были изменены в промежутке между отправлением и прибытием на место назначения. Их используют во всевозможных протоколах межбанковских переводов для установления подлинности сообщений. Большинство MAC сконструированы с применением симметричных алгоритмов или односторонних хэш-функций. Например, в СВС-МАС применяется симметричный алгоритм, а в НМАС и NMAC – хэш-функции.

    Односторонние хэш-функции

    Односторонние (однонаправленные) хэш-функции напоминают цифровые отпечатки пальцев: небольшие фрагменты данных, которые могут служить для идентификации достаточно больших цифровых объектов. Это общедоступные функции, у них нет никаких секретных ключей.

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

    Хэш-функция также может обеспечивать аутентификацию и целостность. Если бы вы загрузили эту книгу из Интернета, у вас не было бы никакого способа узнать, написал все это я или кто-то другой все же частично изменил мои слова. Однако, если бы я дал вам в руки хэш-значение для этой книги (типичный 20-байтовый код), вы смогли бы сравнить расчетный результат с тем значением, которое дал я. Если они совпадают, то это моя книга, без изменений.

    Хэш-функции широко применяются в криптографии и компьютерной безопасности. Они используются почти во всех протоколах Интернета, чтобы обрабатывать ключи, связывать последовательность событий или аутентифицировать события. Они также важны для алгоритмов цифровой подписи (подробнее об этом – позднее). Они, возможно, – наиболее полезный инструмент в коллекции шифровальщика.

    В настоящее время используется целый набор односторонних хэш-функций. Стандарт на хэш-функцию SHA-1 принят правительством США. Для алгоритма безопасности хэширования (Secure Hash Algorithm) есть акронимы, и они приведены в соответствующем стандарте (Secure Hash Standard, SHS). RIPEMD-160 – это европейский алгоритм. MD4 выходит из употребления (хотя вы все еще можете его неожиданно встретить), a MD5 демонстрирует существенные недостатки, и его больше не используют для создания чего-либо нового.

    Шифрование открытым ключом

    Помните проблему распределения ключей, о которой я упоминал в разговоре о симметричном шифровании? Как два человека могут убедиться, что у них один и тот же ключ и что они могут пользоваться алгоритмом симметричного шифрования или функцией MAC? Шифрование открытым ключом (или асимметричное шифрование) решает эту проблему. Оно позволяет вам посылать секретное сообщение людям, которых вы никогда раньше не встречали и с которыми вы не договаривались о секретном ключе. Оно допускает возможность двум людям обмениваться данными у всех на виду и в результате этого обмена получить секретные данные, которые не сможет получить кто-то, подслушивавший переговоры. Говоря в терминах физического мира, такое шифрование позволяет вам и вашему приятелю прокричать друг другу числа в кафе, битком набитом математиками, – так что, когда вы закончите, вы и ваш приятель получите одно и то же число, и никто, кроме вас двоих, совсем ничего не поймет.

    Звучит нелепо? Это кажется невозможным. Если бы вы спросили шифровальщиков со всего света в 1975 году, все они сказали бы, что это невозможно. Так что можете себе представить всеобщее изумление, когда в 1976 году Витфилд Диффи и Мартин Хеллман объяснили, как это сделать. Или удивление британской разведки, когда Джеймс Эллис, Клиффорд Кок и М. Д. Уильямсон осуществили то же самое на несколько лет раньше.

    Основная идея в том, чтобы использовать математическую функцию, которую просто вычислять в одном направлении и тяжело – в другом. Одна из таких функций – разложение целых чисел на множители. Если даны два числа, их легко перемножить и найти произведение. Но если дано только произведение, практически невозможно разложить число на множители и определить исходные числа. Как раз такого плана математику можно применять для создания шифрования с открытым ключом: в нее входят арифметические операции над абсолютными значениями чисел, возведение в степень и большие многоразрядные (до нескольких тысяч битов) исходные числа. Сегодня существует добрые полдюжины алгоритмов с названиями вроде RSA, Эль-Гамаль и алгоритм эллиптических кривых. (Алгоритмы, в основе которых лежит так называемая «задача о ранце», конкурировали с ними на ранних стадиях, но по прошествии 20 лет их так или иначе взломали.) Математика для каждого алгоритма своя, но концептуально они все одинаковы.

    Вместо единственного ключа совместного пользования у Алисы и Боба есть два ключа: один для шифрования, а другой для расшифровки. Ключи различны, и невозможно, зная один ключ, вычислить другой. То есть если у вас есть ключ для шифрования, вы не сумеете найти ключ для расшифровки.

    Вот в этом-то и есть самое интересное. Боб может создать пару таких ключей. Он может взять и обнародовать ключ для шифрования. Он может послать его друзьям, опубликовать на своем веб-сайте или поместить в телефонной книге. Алиса может найти этот ключ. Она может с его помощью зашифровать сообщение для Боба. Затем она может послать ему сообщение. Боб, используя свой ключ расшифровки (который он предусмотрительно не размещал на веб-сайте), сможет расшифровать и прочитать послание Алисы. Заметим, что Алисе не приходится встречаться с Бобом в какой-нибудь темной аллее и договариваться об общем секрете. Бобу даже не обязательно знать Алису. И, как ни странно, даже Алисе не обязательно знать Боба. Если Алиса сможет найти ключ, который Боб обнародовал, она сможет послать ему тайное сообщение, которое никто, кроме Боба, не сможет прочитать. Такое постоянно происходит с пользователями PGP; один из их ключей находится на каком-либо сервере, и тогда совершенно посторонний человек может отправить им зашифрованные сообщения. Даже если вы что-то смыслите в математике, это не менее удивительно.

    Детали этого процесса содержат в себе целую кучу хитростей. Например, я не рассказал, как Боб создал открытый и закрытый ключи и как он сделал свой личный ключ секретным. (Он не может его помнить – ведь ключ состоит из более чем тысячи случайных цифр.) И я пропущу здесь рассказ о невероятно сложной задаче – как Алиса узнает, что она получила именно ключ Боба, а не какой-то старый, или неправильный, или ключ какого-либо злоумышленника. Мы вернемся к этому позднее.

    А сейчас я хочу обратить ваше внимание на то, что никто не применяет шифрование с открытым ключом для кодирования сообщений. Все операционные системы используют гибридные технологии, в которых задействованы оба типа криптографии. Причина интереса к этому подходу в его эффективности. На самом деле, когда Алиса хочет послать сообщение Бобу, она зашифровывает сообщение при помощи симметричного алгоритма, используя произвольный ключ, который создает «из воздуха» (так называемый сеансовый ключ). Она зашифровывает этот произвольный ключ при помощи открытого ключа Боба, а затем отправляет вместе зашифрованный ключ и зашифрованное сообщение для Боба. Когда Боб их получает, он производит обратную операцию. При помощи личного ключа он расшифровывает произвольный симметричный ключ, а затем использует его для расшифровки сообщения.

    Это может показаться сверхъестественным, но все совершенно нормально. Повторюсь, никто не использует криптографию с открытым ключом непосредственно для шифрования сообщений. Все применяют гибридные технологии. Так устроены все программы, обеспечивающие безопасность электронной почты, – PGP, РЕМ, S/MIME и любые другие. Так обеспечивается защита сообщений Веб, TCP/IP, телефонной связи и всего остального.

    Схемы цифровой подписи

    Шифрование с открытым ключом – вещь довольно удивительная, но цифровые подписи (сигнатуры) – еще более интересный и важный инструмент. Цифровые подписи обеспечивают тот же уровень аутентификации сообщений, что и MAC. А в современном бизнесе аутентификация намного важнее секретности,

    Как и шифрование с открытым ключом, цифровые подписи используют пару ключей: открытый и закрытый. Вы также не можете установить по одному ключу другой. Но в этом случае ключи меняются местами.

    У Алисы есть открытый текст сообщения. Применяя свой закрытый ключ, она сообщение зашифровывает. Поскольку это ее личный ключ, то только им можно зашифровать сообщение абсолютно тем же способом. Таким образом, зашифрованное сообщение становится Алисиной подписью на сообщении. Открытый ключ Алисы общедоступен. Кто угодно способен достать этот ключ и расшифровать сообщение, удостоверившись таким образом, что его подписала (то есть зашифровала) Алиса. Подпись является функцией сообщения, поэтому она уникальна для сообщений: злостный фальсификатор не может снять подпись Алисы с одного документа и поместить ее на другой. Подпись – это функция личного ключа Алисы, то есть она уникальна для нее.

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

    Таким образом, большинство алгоритмов цифровых подписей на самом деле не зашифровывают подписанные сообщения. Идея та же, но математическое исполнение отличается. Для того чтобы создать подпись, Алиса производит некоторые вычисления исходя из сообщения и своего личного ключа. Эта подпись прикрепляется к сообщению. Боб проделывает другие вычисления, основываясь на сообщении, подписи и открытом ключе Алисы, чтобы проверить подпись. Ева, которая не знает личного ключа Алисы, может проверить подпись, но не может подделать сообщение или полноценную подпись.

    В настоящее время применяются несколько алгоритмов цифровой подписи. Наиболее популярен RSA. Алгоритм цифровой подписи американского правительства (Digital Signature Algorithm, DSA), который применяют в стандарте цифровой подписи (Digital Signature Standard, DSS), также используется часто. Вы можете иногда встретить алгоритм Эль-Гамаль. А еще существуют алгоритмы подписей, в основе которых лежит криптография эллиптических кривых; они похожи на все прочие, но в некоторых ситуациях работают эффективнее.

    Хотя алгоритмы цифровой подписи с открытым ключом похожи на MAC, они лучше в одном важном нюансе. Используя MAC, Алиса и Боб применяют совместный секретный ключ для аутентификации сообщений. Если Алиса получит сообщение и проверит его, она будет знать, что сообщение пришло от Боба.

    Но она не сможет доказать это правосудию. В чем можно его убедить – это в том, что письмо пришло или от Боба, или от Алисы: как-никак оба они знали ключ MAC. При помощи MAC можно убедить получателя, что письмо поступило от отправителя, но MAC нельзя использовать для убеждения третьей стороны. Цифровые подписи позволяют уверить третью сторону, решающую проблему отказа от подписи: Алиса не может отправить Бобу письмо, а позднее утверждать, что никогда его не посылала.

    К несчастью, действительность такова, что все, что касается подписей, является черным или белым, как это предполагает математика. Законы о цифровых подписях существуют в законодательстве многих стран, но меня беспокоит, что они не жизнеспособны. Цифровые подписи не являются аналогом автографа (собственноручной подписи). Я расскажу об этом подробнее в главе 15.

    Генераторы случайных чисел

    Случайные числа – это простой элемент криптографии, о котором меньше всего говорят, но он важен не менее, чем остальные. Почти всем системам компьютерной безопасности, в которых применяется криптография, необходимы случайные числа – для ключей, уникальных чисел в протоколах и т. п. – и безопасность таких систем часто зависит от произвольности ее случайных чисел. Если генератор случайных чисел ненадежен, вся система выходит из строя.

    В зависимости от того, с кем вы разговариваете, генерация случайных чисел выглядит или тривиальной, или невозможной. Теоретически это невозможно. Джон фон Нейман, отец вычислительной техники, сказал: «Любой, кто считает, что существуют арифметические методы получения случайных цифр, безусловно, грешит». Он имел в виду, что невозможно получить что-то случайное в полном смысле слова на выходе такого детерминированного зверя, как компьютер. Это правда, но, к счастью, кое-что сделать мы можем. От генератора случайных чисел нам необходимо не то, чтобы числа были действительно случайными, а чтобы их невозможно было предсказать и воспроизвести. Если у нас будут выполнены эти два условия, мы сможем достичь безопасности.

    С другой стороны, если мы нарушаем эти два условия, безопасности нет. В 1994 году в казино Монреаля установили компьютерный генератор случайных чисел для лотерей. Один наблюдательный игрок, проводивший в казино очень много времени, заметил, что выигрышные номера были каждый день одни и те же. Он успешно сорвал три Джек-Пота подряд и получил 600 000 долларов. (Как следует позаламывав руки, поскрежетав зубами и расследовав все, казино заплатило выигрыш.)

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

    Некоторые генераторы случайных чисел отслеживают случайные движения пользователя. Программа может попросить пользователя набрать на клавиатуре большую строку произвольных символов; она может задействовать последовательность символов или даже время между нажатиями клавиш для создания случайных чисел. Другая программа запросто способна потребовать у пользователя туда-сюда подвигать мышью или похрюкать в микрофон.

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

    Какого бы происхождения ни была случайность, генератор создаст ряд случайных битов. Затем их можно использовать как криптографические ключи и для всего остального, что нужно системе.

    Длина ключей

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

    Начнем с самого начала. Криптографический ключ – это секретное число, которое делает криптографический алгоритм уникальным для тех, кто совместно пользуется этим ключом. Если Алиса и Боб договорились об общем ключе, то при помощи алгоритма они могут тайно пообщаться. Если Ева-перехватчица не знает ключа, ей придется исследовать и ломать алгоритм.

    Одна очевидная вещь, которую можно сделать, – это перепробовать все возможные ключи. Это так называемая атака «в лоб», или лобовая атака. Если длина ключа n битов, то существует 2^n всевозможных комбинаций ключей. При длине ключа в 40 бит, придется перебрать около триллиона вариантов ключей. Такая задача покажется ужасно скучной для Евы, но компьютеры неутомимы. Они лучше всех решают ужасно скучные задачи. В среднем компьютеру пришлось бы испробовать половину ключей, прежде чем он найдет правильный, то есть компьютер, который мог бы проверять миллиард ключей в секунду, потратил бы на поиски правильного 40-битового ключа примерно 18 минут. В 1998 году Electronic Frontier Foundation создала машину, которая могла атакой «в лоб» ломать DES-алгоритм. Эта машина, названная DES Deep Crack, проверяла 90 миллиардов ключей в секунду; она могла найти 56-битовый ключ DES в среднем за 4,5 дня. В 1999 году распределенный интернет-проект подбора ключей для взлома DES, distributed net (включающий в себя Deep Crack), был способен проверить 250 миллиардов ключей в секунду.

    Все схемы таких взломов «в лоб» линейны: вдвое большее количество ключей потребует вдвое больше компьютерного времени. Но сложность такого взлома зависит от длины ключей экспоненциально: добавим один бит к длине ключа, и взлом «в лоб» станет в два раза сложнее. Добавим два бита – в четыре раза. Десять битов – в тысячу раз сложнее.

    Сила атак «в лоб» в том, что они работают против любого алгоритма. Поскольку эта атака не касается внутренней математики алгоритма, ей все равно, что же там внутри. Одни алгоритмы могут быть быстрее других, и поэтому атака «в лоб» проходит быстрее, но длина ключа легко это перевешивает. Достаточно просто сравнить длины ключей различных алгоритмов, чтобы выяснить, какие из них более уязвимы для лобовой атаки.

    В 1996 году группа шифровальщиков (включающая и меня) исследовала различные технологии, которые можно использовать для создания дешифрующих машин, действующих по принципу лобовой атаки, и пришла к выводу, что 90-битовый ключ сможет обеспечивать безопасность до 2016 года. Ключ Triple-DES состоит из 112 бит, а наиболее современные алгоритмы имеют по меньшей мере 128-битовые ключи. (Улучшенный стандарт шифрования (AES) правительства США поддерживает длины ключей 128,192 и 256 бит.) Даже машине, работающей в миллиард раз быстрее Deep Crack, потребовался бы миллион лет, чтобы перебрать 2^112 ключей и восстановить открытый текст; еще более, чем в тысячу раз, возрастает время при переходе к 128-битовому ключу. Он будет обеспечивать безопасность в течение тысячелетия.

    К этим числам нужно относиться с некоторым скептицизмом. Я – не ясновидящий и ничего не знаю о будущих достижениях компьютерных технологий. Реальная безопасность зависит от нескольких вещей: насколько ваши данные ценны, как долго их требуется хранить в тайне и т. п. Но это означает, что должны существовать «законсервированные» числа – длины ключей для симметричных алгоритмов и MAC. Хэш-функции должны иметь длину, равную удвоенной длине ключа.

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

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

    Трудно оценивать будущие трудности разложения на множители и вычисления дискретных логарифмов, поскольку нет никакого математического доказательства, что эти задачи имеют фиксированную степень сложности. (С другой стороны, мы знаем, насколько трудно перебирать все возможные ключи.) Итак, еще раз: отнеситесь ко всем этим рекомендациям, как к мнению квалифицированных специалистов – и не более того.

    Глава 7
    Криптография в контексте

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

    Достаточно неожиданно, но причина этого не в плохом качестве криптографии. (Многое лежит на поверхности, но есть и проблемы, упрятанные гораздо более глубоко.) Ответ нужно искать в различии между теорией и практикой.

    Криптография – это раздел математики. Математика – теоретическая наука; она логична. Хорошая математика исходит из правильной предпосылки, следует единственным путем – доказательство за доказательством – через неизведанные земли и заканчивается неопровержимым выводом. По природе своей она хорошо выглядит на бумаге.

    Корни проблем безопасности следует искать в физическом мире. Материальный мир во многом нелогичен. Он неупорядочен. В нем не существует единственного пути. В нем есть теории и выводы, но для того чтобы согласиться с выводами, вам необходимо принять предпосылки, модели и взаимосвязи между теориями и реальным миром. А это непросто. Люди не играют по правилам. Они делают то, чего от них не ожидают; они не укладываются в жесткие рамки. То же самое касается технических средств: время от времени все начинает плохо работать, а то и вовсе ломается. Это же можно сказать о программном обеспечении. Оно должно быть логичным и упорядоченным, как-никак это – просто комбинация нулей и единиц, но иногда оно настолько сложно, что становится больше похожим на организм, а не на творение математики. Неважно, насколько хороша криптографическая теория: когда она используется в системе, она сталкивается с практикой.

    Я часто говорю о программах, что они – лишь дань моде. Когда реклама утверждает, что используется RSA, тройной DES или любой другой модный алгоритм криптографии, это равносильно заявлению о том, что дом полностью безопасен только потому, что у него надежный дверной замок. Этого недостаточно.

    Длина ключа и безопасность

    Несмотря на то что я сказал в предыдущей главе, длина ключа почти ничего не определяет в безопасности.

    Внутри замка на входной двери вашего дома есть множество штырьков. Для каждого из них существуют различные возможные положения. Когда кто-то вставляет ключ в замочную скважину, все штырьки перемещаются в определенные позиции. Если положение, в которое ключ ставит штырьки, как раз то, которое необходимо, чтобы замок открылся, то он открывается. Если нет – не открывается.

    У замков, наиболее часто используемых в жилых домах, пять штырьков, каждый из которых может располагаться в одном из десяти различных положений. Это означает, что существует 100 000 возможных ключей. Взломщик с огромной связкой ключей может перебрать все ключи один за другим и в конце концов попасть внутрь. Ему лучше набраться терпения, поскольку если даже он тратит на один ключ 5 секунд, ему потребуется примерно 69 часов, чтобы найти подходящий ключ (и это без перерывов на сон, еду и душ).

    Однажды в вашу дверь звонит торговый агент и предлагает вам купить новый замок. У его замка семь штырьков по двенадцать положений у каждого. Агент скажет, что взломщику придется три года непрерывно перебирать ключи, прежде чем он сможет открыть дверь. Почувствуете ли вы себя в большей безопасности с таким замком?

    Наверное, нет. Все равно ни один взломщик не стал бы стоять перед вашей дверью 69 часов. Он, скорее всего, откроет замок отмычкой, просверлит его, вышибет дверь, разобьет окно или просто спрячется в кустах до тех пор, пока вы не отправитесь на прогулку. Замок с большим количеством штырьков и положений не обеспечит вашему дому большую безопасность, поскольку атака, которая таким образом затрудняется – перебором еще большего количества ключей – не та атака, о которой стоит задумываться особо. До тех пор пока количества штырьков достаточно, чтобы сделать недопустимой такую атаку, вам не следует о ней беспокоиться.

    То же самое справедливо для криптографических ключей. Если они достаточно длинные, то лобовые атаки просто лежат за пределами человеческих возможностей. Но здесь следует позаботиться о двух вещах. Во-первых, о качестве алгоритма шифрования, а во-вторых, о качестве ключа. Какой ключ является «достаточно длинным», зависит от обеих этих вещей.

    Но в первую очередь нужно разъяснить понятие энтропии.

    Энтропия – мера беспорядка или, более конкретно в контексте криптографии мера неопределенности. Чем больше неопределенность, тем больше энтропия. Например, случайно выбранный человек из обычной популяции является или мужчиной, или женщиной, в этом случае переменная «пол» составляет один бит энтропии. Если случайный человек сообщает, кто из четырех «Битлз» ему больше нравится, и все варианты равновероятны, этому соответствуют два бита энтропии. Пол члена женской олимпийской команды по бегу – это величина, у которой нет энтропии – они все женщины. Энтропия предпочтений одного из «Битлз» на собрании фан-клуба Джона Леннона существенно меньше двух битов, поскольку наиболее вероятно, что выбранный наугад человек предпочитает Джона. Чем больше определенность переменной, тем меньше энтропия.

    То же самое верно для криптографических ключей. То, что алгоритм использует 128-битовый ключ, не означает, что у него 128 бит энтропии для ключа. Или точнее, лучший способ сломать данную реализацию 128-битового алгоритма шифрования может состоять не в том, чтобы перебрать все ключи. «128 бит» – это просто мера максимального количества работы, которая потребуется, чтобы восстановить ключ; но про минимум ничего не сказано.

    Во-первых, следует позаботиться о происхождении ключа. Все вычисления, касающиеся длины ключа, я производил, предполагая, что каждый ключ имеет при создании максимальную энтропию. Другими словами, я рассчитывал, что все варианты ключа равновероятны, что генератор случайных чисел, создавший ключ, работает идеально. Это допущение не совсем верно.

    Многие ключи создаются на основе паролей и ключевых фраз. Система, принимающая пароль из 10 ASCII-символов, предоставляет для него 80 бит, но ее энтропия будет значительно меньше 80 бит. Некоторые символы ASCII никогда не появляются, а пароли, которые представляют собой реальные слова (или что-то похожее на слова), гораздо вероятнее, чем произвольные строки символов. Я видел оценки энтропии для английского языка, меньшие 1,3 бит на символ; у пароля энтропия меньше, чем 4 бит на символ. Это значит, что пароль из 8 символов будет приблизительно соответствовать 32-битовому ключу, а если вы захотите 128-битовый ключ, вам нужен пароль из 98 символов (на базе английского алфавита).

    Видите ли, разумный взломщик не будет перебирать все возможные пароли по порядку. Он сначала испробует наиболее вероятные, а затем проверит остальные – в порядке убывания вероятности. Он проверит тривиальные пароли (типа «пароль» или «1234»), после этого – весь английский словарь, а затем различные заглавные буквы, цифры и т. п. Это называют словарной атакой. Программа для взлома пароля, реализующая такую атаку, называется L0phtcrack; на 400-мегагерцовом Quad Pentium II она может протестировать зашифрованный пароль по 8-мегабайтовому словарю распространенных паролей за считанные секунды.

    Вот почему смешно, когда компании вроде Microsoft рекламируют 128-битовое шифрование, а затем берут за основу ключа пароль. (Это в высшей степени характерно для всей системы безопасности Windows NT[22].) Используемые алгоритмы могут допускать 128-битовый ключ, но энтропия пароля гораздо меньше. Фактически, качество криптографии и длина ключа не важны; причиной выхода системы из строя послужит слабый пароль. (Очевидное решение – не допустить, чтобы люди перебирали множество паролей, – не срабатывает. Я подробнее остановлюсь на этой проблеме в главе 9.)

    Это очень важно. Я знаю сложные системы, секретный ключ которых защищен паролем. В основе безопасности практически любого зашифрованного продукта на жестком диске компьютера лежит ключ, запоминаемый пользователем. Почти вся система безопасности Windows NT приходит в негодность из-за того, что она построена на основе пароля, запоминаемого пользователем. Даже система PGP (Pretty Good Privacy) распадется, если пользователь выберет плохой пароль.

    Не важно, какие алгоритмы и насколько длинные ключи используются; секреты, которые хранятся в памяти пользователя, беззащитны сами по себе.

    Ключ, сгенерированный случайным образом, намного лучше, но проблемы остаются. Генератор случайных чисел должен создавать ключи с максимальной энтропией. Недостатки генератора случайных чисел – те же, что привели к сбоям системы шифрования в Netscape Navigator 1.1. Хотя генератор случайных чисел применяли для создания 128-битовых ключей, максимальная энтропия достигала примерно 20 бит. То есть алгоритм был не лучше, чем если бы использовался 20-битовый ключ[23].

    Второй предмет заботы – это качество алгоритма шифрования. Все предыдущие расчеты предполагали, что алгоритм получал ключи при помощи вычислений и использовал их совершенным образом. Если в алгоритме есть слабые места, доступные для атаки, это существенно снижает энтропию ключей. Например, алгоритм А5/1, используемый европейской сетью сотовых телефонов GSM, имеет 64-битовый ключ, но может быть взломан за время, требующееся для взлома 30-битового ключа при помощи атаки «в лоб». Это значит, что хотя у алгоритма имеется ключ с 64-битовой энтропией, он задействует для ключа только 30 бит энтропии. Вы можете с тем же успехом использовать хороший алгоритм с 30-битовым ключом.

    По этой причине проходит довольно много времени, прежде чем шифровальщики начинают доверять новому алгоритму. Когда кто-то предлагает новый алгоритм, у него есть определенная длина ключа. Но обеспечивает ли алгоритм реально ту энтропию, которая заявлена? Может потребоваться несколько лет анализа, прежде чем мы поверим, что он это делает. И даже тогда мы можем легко ошибиться: возможно, кто-то придумает новые математические подходы, которые понизят энтропию алгоритма и сломают его. Поэтому рекламу программ, в которых обещаются тысячебитовые ключи, трудно воспринимать серьезно – ее создатели не имеют понятия, как работают ключи и энтропия.

    Похожая проблема существует и для физических ключей и замков. Принято думать, что слесарь возит в своем грузовике огромное кольцо с ключами от машин. Может потребоваться 10 000 ключей, чтобы открыть все замки, но в реальности несколько дюжин ключей откроют любой из них. Иногда слесарю достаточно просто взять другой ключ, отличающийся от предыдущего на 1-2 «бита», – отметим, что это комбинация анализа и лобовой атаки – и этого уже достаточно. Да, процесс долгий, но совсем не такой, как проверка всех 10 000 возможных ключей (старые замки – четырехштырьковые). Действительная надежность дверного замка существенно отличается от теоретической.

    То же самое с комбинациями замков. Вы можете перебрать все возможные комбинации – и существуют машины для взлома сейфов, которые так и делают, – или поступить хитрее. Современные машины для взлома сейфов применяют микрофон, чтобы слушать звук, производимый дисками, когда их поворачивают, и они могут открыть сейф намного быстрее, чем старые, действующие «в лоб».

    Сказанное здесь заставляет очень внимательно подходить к выбору алгоритма. Мы еще обсудим это более детально в конце этой главы.

    Одноразовое кодирование

    Кодирование одноразового использования – это самый простой из всех алгоритмов, его изобрели незадолго до XX века. Основная идея его состоит в том, что у вас есть набор символов ключа. Вы прибавляете один символ ключа к каждому символу открытого текста и никогда не повторяете символы ключа. (Это «одноразовая» часть.) Например, вы прибавляете В (2) к С (3), чтобы получить Е (5), или Т (20) к L (12), чтобы получить F (6). ((20 + 12) mod 26 = 6.) Такая система подходит для любого алфавита, в том числе и бинарного. И это единственный имеющийся у нас алгоритм, безопасность которого может быть доказана[24].

    Вспомним понятие расстояния уникальности. Оно возрастает при увеличении длины ключа. Когда длина ключа приближается к длине сообщения, расстояние уникальности стремится к бесконечности. Это означает, что невозможно восстановить открытый текст, и это доказывает безопасность одноразового кодирования.

    Но, с другой стороны, это практически бесполезно. Поскольку ключ должен при этом быть такой же длины, как и сообщение, то проблема не решена. Единственный здравый подход к шифрованию должен предполагать, что очень длинная секретная информация – сообщение – превращается с его помощью в очень короткую секретную информацию – ключ. При помощи одноразового кодирования вы нисколько не сокращаете секретную информацию. Так же сложно доставить шифр получателю, как и доставить само сообщение. Современная криптография зашифровывает большие объекты, например цифровые фильмы, соединения через Интернет или телефонные разговоры, и такое шифрование практически невозможно осуществить, работая с одноразовым кодированием.

    Одноразовое кодирование практически использовалось в особых случаях. Русские шпионы применяли для общения алгоритм одноразового кодирования, используя карандаш и бумагу. Агентство национальной безопасности (NSA) раскрыло эту систему, поскольку русские использовали ее повторно. Горячая линия телетайпа между Вашингтоном и Москвой была зашифрована именно таким образом.

    Если утверждают, что некая программа использует этот алгоритм, то здесь почти наверняка обман. А если и нет, то программа наверняка непригодна для использования или небезопасна.

    Протоколы

    Шесть инструментов, о которых я говорил в предыдущей главе, – симметричное шифрование, коды аутентификации сообщений, шифрование с открытым ключом, односторонние хэш-функции, схемы цифровых подписей и генераторы случайных чисел – составляют набор инструментов шифровальщика. С его помощью мы выстраиваем криптографические решения реальных задач: «Как мне послать секретное письмо по электронной почте? Как можно предотвратить мошенничества с телефонными звонками? Как мне обеспечить безопасность системы голосования через Интернет?» Эти задачи безопасности мы решаем, компонуя простейшие элементы в так называемые протоколы. Приходится использовать и другие второстепенные элементы, но, по существу, шесть перечисленных выше элементов составляют ядро любого криптографического протокола.

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

    Хотите создать безопасный телефон? Используйте криптографию с открытым ключом, чтобы сформировать сеансовый ключ, а затем при помощи этого ключа и симметричной криптографии зашифруйте переговоры. Хэш-функция обеспечивает дополнительную безопасность против атак, проводимых человеком. (Подробнее об этом позже.) Чтобы засекретить сообщение электронной почты, воспользуйтесь криптографией с открытым ключом для соблюдения секретности и схемой цифровой подписи для аутентификации. Электронная торговля? Обычно для нее не требуется ничего, кроме цифровых подписей и, иногда, шифрования для секретности. Секретный контрольный журнал? Возьмите хэш-функции, шифрование, может быть, MAC и перемешайте.

    То, что мы сейчас делаем, и есть создание протоколов. Протокол – это не сложнее, чем танец. Это последовательность заданных шагов, которую выполняют два (или больше) партнера и которая предназначена для решения поставленной задачи. Представьте себе протокол, которым пользуются продавец и покупатель при покупке мандаринов. Вот необходимые шаги:

    1. Покупатель спрашивает у продавца мандарины.

    2. Продавец дает ему мандарины.

    3. Покупатель платит продавцу.

    4. Продавец возвращает ему сдачу.

    Все, о ком идет речь в протоколе, должны знать шаги. Например, покупатель знает, что он должен заплатить за мандарины. Все шаги должны быть однозначны: ни продавец, ни покупатель не могут достичь шага, на котором они не знают, что делать. Кроме того, протокол должен обязательно завершаться – в нем не должно быть бесконечных циклов.

    Шаг 2 не будет работать как надо, если продавец не поймет семантическое содержание шага 1. Продавец не выполнит шаг 4, если на шаге 3 не признает деньги настоящими. Попробуйте купить мандарины в США на польские злотые и посмотрите, как вам это удастся.

    Нас особо волнуют протоколы безопасности. Кроме всех перечисленных выше требований мы хотим, чтобы покупатель и продавец не имели возможности обманывать (что бы ни означало «обманывать» в нашем контексте). Мы не хотим, чтобы продавец мог заглянуть в бумажник покупателя на шаге 3. Мы не хотим, чтобы продавец не отдал покупателю сдачу на шаге 4. Мы не хотим, чтобы покупатель застрелил продавца на шаге 3 и ушел с украденными мандаринами. Такие способы обмана распространены и в материальном мире, а анонимность киберпространства только увеличивает опасность.

    Даже в физическом мире были разработаны более сложные протоколы, чтобы снизить опасность всякого рода жульничества. Вот как в общих чертах выглядит протокол продажи автомобиля.

    1. Алиса передает Бобу ключи и документы.

    2. Боб дает Алисе чек на сумму покупки.

    3. Алиса кладет деньги в банк.

    Здесь Боб запросто может сжульничать. Он может дать Алисе фальшивый чек. Она не будет знать, что чек фальшивый, и не узнает, пока ей не скажут об этом в банке. К тому времени Боб с ее машиной будет уже далеко.

    Когда я продавал машину несколько лет назад, во избежание такой атаки придерживался несколько модифицированного протокола.

    1. Боб выписывает чек и идет с ним в банк.

    2. Когда на счет Боба поступит достаточно денег, чтобы покрыть чек, банк «заверяет» чек и возвращает его Бобу.

    3. Алиса передает Бобу ключи и документы о праве собственности.

    4. Боб дает Алисе заверенный чек на сумму покупки.

    5. Алиса кладет деньги в банк.

    Что при этом происходит? Банк в такой коммерческой сделке выступает доверенной третьей стороной. Алиса полагается на то, что банк выплатит по заверенному им чеку полную сумму. Боб верит, что банк сохранит деньги на счете, а не вложит их в рискованные предприятия в странах третьего мира. Алиса и Боб могут осуществить свою сделку, даже если они не доверяют друг другу, – поскольку они оба доверяют банку.

    Такая система работает не потому, что банк – солидное учреждение, за которым стоит много, включая хорошую рекламную кампанию, а потому, что банк не заинтересован в выгоде кого-либо одного – Алисы или Боба – и имеет надежную репутацию. Банк будет придерживаться протокола заверения чека, что бы ни произошло. Если на счету Боба достаточно денег, банк выдаст чек. Если Алиса представит чек к оплате, банк его оплатит. Если бы банк все же скрылся с деньгами, не многое бы от него осталось. (В этом и есть сущность репутации.)

    Данный протокол защищает Алису, но не Боба от покупки фальшивых документов или краденой машины. Для этого нам нужен другой протокол.

    1. Алиса передает ключи и документы о праве собственности юристу.

    2. Боб отдает юристу чек.

    3. Юрист проверяет чек в банке.

    4. По прошествии оговоренного временного промежутка, который отводится на то, чтобы проверить чек и зарегистрировать машину, юрист отдает Бобу документы. Если клиринг чека не удается осуществить в течение оговоренного времени, юрист возвращает документы Алисе. Если Боб не может получить новые документы на машину (поскольку Алиса дала ему недействительные документы), Боб предоставляет юристу соответствующие доказательства и получает назад свои деньги.

    Как и в предыдущем протоколе, здесь привлекается третья доверенная сторона. В данном случае это юрист. Алиса не доверяет Бобу, Боб не доверяет Алисе, но оба они верят, что юрист на последнем шаге поведет себя беспристрастно. Юрист совершенно не заинтересован в чьей-либо выгоде – ему все равно, отдаст он документы Бобу или Алисе. Он задержит деньги на депоненте и будет действовать в соответствии с соглашением между Бобом и Алисой.

    Другие протоколы могут быть более простыми и не требовать столь сложного обмена. Например, протокол, в соответствии с которым банк в состоянии удостовериться, что чек подписан Алисой.

    1. Алиса подписывает чек.

    2. Банк сравнивает подпись на чеке с подписью на папке Алисы.

    3. Если они совпадают, банк дает Алисе деньги. Если не совпадают – не дает.

    Теоретически, такой протокол обеспечивает защиту от того, что Боб обманным путем получит деньги Алисы, но, конечно, в реальности все сложнее. Боб может уметь подделывать подписи. Банк может давать рискованные займы Парагваю и разориться. Алиса может вытащить пистолет. Существуют, вероятно, тысячи способов нарушить этот протокол, но с разумными допущениями он работает.

    Протоколы цифрового мира во многом похожи на предыдущие примеры. Цифровые протоколы при помощи криптографии делают то же самое: сохраняют секреты, проводят аутентификацию, охраняют справедливость, обеспечивают аудит и т. п.

    В Интернете используется множество протоколов безопасности; я расскажу о них в следующем разделе. У других цифровых сетей есть свои протоколы безопасности. Индустрия сотовых телефонов применяет целый ряд протоколов – как для секретности, так и для предотвращения мошенничества (с переменным успехом). У компьютерных приставок к телевизору также есть протоколы безопасности. И у смарт-карт тоже.

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

    Более сложные протоколы дают криптографии возможность прыгнуть через любые препятствия. Можно предоставлять так называемые доказательства с нулевыми знаниями, когда Алиса способна доказать Бобу, что она что-то знает, не открывая, что именно. Криптографические протоколы также могут обеспечивать систему одновременного подписания контрактов через Интернет. Можно создать цифровой аналог заказных писем, когда Алиса сумеет прочесть письмо, только отослав обратно «расписку в получении».

    При помощи протокола, называющегося совместным управлением секретностью (secret sharing), мы можем предписывать требование соглашения о доступе (collusioninaccess) – секрет, который нельзя узнать, если многие люди не действуют сообща. Это – действительно необходимая вещь. Представьте себе ядерную ракетную установку. Для того чтобы запустить ракету, два человека одновременно должны повернуть ключи и разблокировать систему. А замочные скважины (или в данном случае их цифровой аналог) достаточно сложны, чтобы один-единственный солдат не мог повернуть все ключи и убить всех; чтобы запустить ракету, по крайней мере два человека должны действовать сообща. Или представьте себе контроль счетов корпорации, в соответствии с которым для особо ценных чеков требуется две подписи: по крайней мере два из пяти членов правления корпорации должны подписать чек. Мы можем создать что-то подобное при помощи криптографии.

    Получится даже еще лучше. Можно создать протокол для тайного голосования в Интернете – такой, что только зарегистрированный избиратель сможет проголосовать, никто не сумеет проголосовать дважды, никто не сможет узнать, кто за кого голосовал, и все будут уверены, что выборы честные. Можно даже создать электронную валюту, однако кто-нибудь попытается использовать эти платежные средства дважды…

    Честно говоря… если вы захотите, мы сможем сделать и это.

    Однако существуют и проблемы, которым посвящено достаточно места в этой книге.

    Криптографические протоколы Интернета

    Для Интернета криптография относительно нова и появилась она в нем только благодаря коммерциализации сети. Интернет небезопасен; чтобы обеспечить безопасность в сети, необходима криптография. Вот почему на практике криптографические протоколы являются важнейшей составной частью протоколов Интернета. Примеры, приведенные здесь, характерны для 2000 года, со временем их характер, конечно, будет меняться.

    Первой областью применения криптографии в Интернете стала электронная почта. В ней работали два соответствующих протокола: S/MIME и OpenPGP. OpenPGP – это протокол в составе PGP и его разновидностей. S/MIME – стандартный интернет-протокол во всех других случаях.

    Netscape изобрела SSL (Secure Sockets Layer – протокол, гарантирующий безопасную передачу данных по сети; комбинирует криптографическую систему с открытым ключом и блочным шифрованием данных) на заре существования Веб, когда люди захотели заниматься безопасной электронной торговлей при помощи своих браузеров. SSL существовал в нескольких воплощениях (он был полем боя во время войны браузеров Netscape и Microsoft и в итоге был назван TLS (Transport Layer Security)). Эти протоколы встроены в браузеры и позволяют людям зашифровать секретную информацию, посылаемую на различные веб-сайты.

    Более новые криптографические протоколы разработаны для защиты пакетов IP. Среди них Microsoft Point-to-Point Tunneling Protocol (PPTP, у которого есть грубые дефекты), Layer Two Tunneling Protocol (L2TP) и IPsec (он существенно лучше, хотя и слишком сложен). IKE (Internet Key Exchange) – это, как видно из названия, протокол обмена ключами. Сегодня эти протоколы используются преимущественно для того, чтобы обеспечить работу виртуальных частных сетей (VPN). Тем не менее протоколы безопасности Интернета «умеют» намного больше, чем протоколы VPN. У них есть возможность обеспечивать безопасность большей части трафика. Со временем, может быть, эта возможность реализуется.

    Существуют также и другие интернет-протоколы. SET – разработанный компаниями Visa и MasterCard для защиты операций с кредитными картами во Всемирной паутине. (Эти протоколы никогда не будут широко применяться.) Протокол SSH (Secure Shell – защитная оболочка) используется для шифрования и идентификации команд для удаленных соединений. Другие протоколы имеют дело с сертификатами открытых ключей и инфраструктурой сертификатов: PKIX, SPKI и им подобные. Microsoft использует свои протоколы для защиты Windows NT.

    Большая часть этой работы была проделана под эгидой Проблемной группы проектирования Интернета (Internet Engineering Task Force, IETF – одна из групп IAB, отвечающая за решение инженерных задач Интернета, выпускает большинство RFC, используемых производителями для внедрения стандартов в архитектуру TCP/IP). Процесс нуждается в тщательном согласовании, а это значит, что создание подобных вещей требует длительного времени и в результате они получаются более сложными, чем могли бы быть. Как мы увидим позднее, эта сложность не является хорошим фактором.

    Типы атак, направленных на протоколы

    Так же как существует много различных атак, мишенью которых служат алгоритмы, множество их направлено и против протоколов. Простейшие из них – это пассивные атаки: вы просто присматриваетесь к протоколу и ищете, что можно понять. Часто в результате простого подслушивания можно узнать очень многое.

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

    Узким местом атак перехвата является то, что не всегда понятно, какая информация представляет ценность. Можете представить себе зашифрованную телефонную сеть, в которой невозможно (учитывая секретность, обеспечиваемую криптографией) подслушивать телефонные разговоры. Однако информация о подключениях остается доступной. Эта информация часто тоже бывает полезной. В военной обстановке, например, вы можете многое узнать из анализа трафика: кто с кем говорит, когда и как долго.

    Более сложные атаки – активные: вставка, удаление и изменение сообщений. Они могут оказаться существенно более действенными.

    Рассмотрим систему смарт-карт. Люди кладут деньги на счет и затем используют карточку для оплаты. Эта система будет состоять из множества различных протоколов: для помещения денег на карту, для перевода денег с карты на другое устройство, для запросов информации о карте и других.

    Активные атаки способны нанести множество повреждений такой системе. Предположим, вы можете вмешиваться в протокол между банком и картой. Если вам доступно воспроизведение старых сообщений, вы можете добавить на карту побольше денег. Или, например, вы умеете удалять сообщение в протоколе перевода денег с карты при покупке – тогда сумма на карте никогда не будет уменьшаться.

    Одна из мощных атак – это атака посредника, «человека посередине» (man-in-the-middle-attack). Алиса хочет тайно поговорить с Бобом, применяя какой-то алгоритм с открытым ключом, чтобы создать свой ключ. Ева перехватывает сообщение Алисы. Она представляется Алисе как Боб, завершая протокол обмена ключами. Затем она связывается с Бобом и представляется как Алиса, выполнив тем самым второй протокол обмена ключами с Бобом. После этого она может прослушивать связь. Когда Алиса посылает Бобу сообщение, Ева его перехватывает, расшифровывает, зашифровывает заново и посылает Бобу. Когда Боб посылает сообщение для Алисы, Ева проделывает аналогичную процедуру. Это очень действенная атака.

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

    И, повторим снова, не всегда очевидно, какого рода атаки необходимо предотвращать. Существовал протокол идентификации открытого ключа, который описан в литературе, сконструированный так, что пользователи могли аутентифицировать себя для хостов. Этот протокол защищал от атак пассивного прослушивания и от активных атак вставки или удаления. Но, как оказалось, он не защищал от хостов злоумышленников. Алиса может подтвердить хосту свою подлинность, и ни один перехватчик не сможет выдать себя за Алису. Но хост сможет.

    Это – интересная атака. В одних обстоятельствах полагают, что хост достоин доверия и этой проблемы нет. В других случаях проблема налицо. Нам легко представить себе, что злонамеренные хосты во Всемирной паутине есть. Если бы банк, работающий через Интернет, использовал этот протокол (насколько мне известно, такого не было), то преступники смогли бы создать ложный банковский вебсайт, у которого немного отличался бы URL. Не подозревающие ни о чем пользователи аутентифицировали бы себя на этом ложном сайте, а он затем представлялся бы реальному банку пользователем.

    Множество подобных вещей формализовано. Существуют автоматические инструменты (сервисные программы) для анализа протоколов: формальные логики, компьютерные программы, которые анализируют детали протоколов, и другие. Эти инструменты полезны, они регулярно обнаруживают проблемы в существующих протоколах, но с их помощью нельзя «доказать» надежность протокола.

    Выбор алгоритма или протокола

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

    Эту проблему лучше всего проиллюстрировать примером. Допустим, врач говорит вам: «Я знаю, что есть антибиотик, который хорошо помогает при лечении вашей инфекции; у него нет вредных побочных эффектов и десятилетия исследований говорят в пользу такого лечения. Но я собираюсь назначить вам вместо этого толченые сухари, потому что мне кажется, что они тоже помогут». Вы пошли бы к другому врачу.

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

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

    Проблема вот в чем: любой человек, сколь угодно неопытный, может разработать элемент криптографии, который сам взломать не может. Это – существенно. Это значит, что кто угодно может сесть и создать криптографический элемент, попытаться его взломать, потерпеть неудачу, а затем сказать: «Я изобрел безопасный алгоритм, протокол или что-то еще». Реально он говорит этим: «Я не могу его взломать, поэтому он безопасен». Первый вопрос, который надо задать в ответ: «Да кто ты такой?» Или более пространно: «Почему я должен верить в надежность чего-то, если ты не смог это взломать? Чем подтверждается то, что если у тебя это не вышло, то и никто другой не сможет этого сделать?»

    Криптографическое сообщество обнаружило, что ни один человек не готов предоставить такие доказательства. (Может быть, и есть кто-нибудь в Агентстве национальной безопасности, но эти люди не болтливы.) Нет никакого способа доказать надежность элемента – можно либо продемонстрировать ненадежность, либо признать попытку неудавшейся. Это называется проверкой гипотезы с нулевым разглашением. Лучшее, что могут сказать люди, занимающиеся безопасностью: «Мы не знаем, как взломать этот алгоритм, протокол или что-то другое, и никто другой тоже не знает». Экспертная оценка программы, длительный период испытаний – вот единственное доказательство безопасности, которое у нас есть.

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

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

    Посмотрите на следующие три варианта протоколов безопасности.

    IPsec. Его разработка началась в 1992 году. Разработка велась комиссией «в открытую» и была предметом тщательного публичного изучения с самого начала. Все знали, что это важный протокол, и огромные усилия прилагались для того, чтобы все было правильно. Алгоритмы защиты предлагали, взламывали, а затем модифицировали. Версии классифицировались и анализировались. Первый проект стандарта был выпущен в 1995 году. Обсуждались достоинства безопасности и эффективность, простота исполнения, возможности дальнейшего расширения и применения. В 1998 году комиссия представила окончательный вариант протокола. До сих пор каждый, кто интересуется, может открыто его изучать.

    РРТР. Фирма Microsoft разработала свой собственный Point-to-Point Tunneling Protocol (новая сетевая технология, которая поддерживает многопротокольные виртуальные частные сети, позволяя удаленным пользователям безопасно обращаться к корпоративным сетям с помощью коммутируемого соединения, предоставляемого интернет-провайдером или с помощью прямого соединения с Интернетом), который должен выполнять во многом схожие с IPsec функции. Был создан свой протокол аутентификации, свои хэш-функции и свои алгоритмы генерации ключа. Все эти элементы оказались крайне слабыми. В них использовался известный алгоритм шифрования, но использовался таким образом, что не обеспечивал безопасности. Программисты допустили ошибки в реализации, которые еще больше ослабляли систему. Но поскольку их коды были спрятаны внутри, никто не заметил, что РРТР недостаточно надежен. Microsoft использовала РРТР в Windows NT, 95 и 98, а также в своих продуктах для виртуальных частных сетей. Статьи, описывающие недостатки протокола, не публиковались до 1998 года.

    Право собственности.

    Некоторые компании объявляют о своих собственных решениях задачи безопасности. Они не вдаются в детали или из-за того, что это право собственности, или из-за неоформленности патента. Вам приходится им доверять. Разработчики могут заявить о новом алгоритме или протоколе, который во многом превосходит имеющиеся сегодня. Они могут кричать о математических прорывах… о чем угодно. Очень немногое из этого оказывается правдой. И даже если к системам предоставляется открытый доступ, их запатентованность и контроль соблюдения авторских прав означают, что немногие шифровальщики будут озадачены анализом заявленных преимуществ. С другой стороны, даже если шифровальщики займутся этой проблемой, компании, конечно, не будут ждать годы, пока исследования подтвердят надежность новинок.

    Вы можете выбрать одну из этих трех систем для обеспечения надежности своей виртуальной частной сети. Хотя у любой из них есть слабые места, вы сделаете опасность минимальной. Если вы работаете с IPsec – больше уверенности в надежности алгоритмов и протоколов. Конечно, это не гарантия безопасности – реализация может оказаться слабой (см. главу 13) или кто-то придумает новые способы атаки – но по крайней мере вы знаете, что алгоритмы и протоколы прошли какой-то уровень анализа.

    Другой пример: рассмотрим симметричный алгоритм шифрования. Их, безусловно, существуют сотни, но давайте ограничимся пятью.

    • Тройной DES, который начиная с середины 70-х был проанализирован практически всем криптографическим сообществом.

    • AES, который (прежде чем его выберут) будет подвергнут трехлетнему тестированию, вовлекающему практически все криптографическое сообщество.

    • Некий алгоритм X, который был представлен на академической конференции два года назад; пока что вышла одна статья с анализом, судя по которой это – надежный алгоритм.

    • Алгоритм Y, который кто-то недавно поместил в Интернете и заверил нас в его надежности.

    • Алгоритм Z, который компания сохраняет в секрете до получения патента; возможно, они нанимали несколько шифровальщиков для трехнедельного анализа.

    Это – нетрудный выбор. Могут существовать ограничения, которые не позволят вам выбрать тот алгоритм, который вы хотите (AES существует главным образом потому, что тройной DES слишком медлителен для многих сред), но выбор достаточно ясен.

    Меня постоянно изумляет, как часто люди не выбирают очевидного решения. Вместо того чтобы использовать общедоступные алгоритмы, компании цифровой сотовой связи решили создать собственный запатентованный алгоритм. За последние несколько лет все алгоритмы стали общедоступными. И став общедоступными, они были взломаны. Каждый из них. То же самое случилось с алгоритмом DVD-шифрования, алгоритмом шифрования Firewire, различными алгоритмами шифрования Microsoft и бесчисленным множеством других. Любой, кто создает собственный образец шифрования, – гений или глупец. С учетом соотношения гениев и глупцов в нашей действительности шансы выжить у образца невелики.

    Иногда приводится следующий контраргумент: секретная криптография надежнее, потому что она тайная, а открытая криптография опаснее, поскольку она открытая. Это звучит правдоподобно, но если вы на минуту задумаетесь, несоответствия станут очевидными. Открытые образцы созданы так, чтобы обеспечивать безопасность, несмотря на свою открытость. Таким образом, их не опасно сделать общедоступными. Если элемент обеспечивает безопасность, только оставаясь секретным, то он будет работать до тех пор, пока кто-нибудь не разберется в его устройстве и не опубликует способ взлома. Выпускаемые запатентованные элементы включают все алгоритмы, описанные в предыдущем разделе, различные протоколы смарт-карт для электронной торговли, секретные хэш-функции в картах SecurID и протоколы, защищающие мобильный терминал данных полиции MDC-4800 компании Motorola.

    Отсюда не вытекает, что все новое ущербно. Что это на самом деле значит – так то, что все новое подозрительно. Новая криптография появляется в академических статьях, а затем в демонстрационных системах. Если она действительно лучше, то в конце концов шифровальщики начнут ей доверять. И только тогда будет разумно использовать ее в реальных программах. Для алгоритма этот процесс может занять от 5 до 10 лет, для протокола или библиотек исходных кодов – поменьше.

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

    В криптографии безопасность приходит путем следования за широкими массами. Доморощенные алгоритмы невозможно подвергать в течение сотен и тысяч часов криптоанализу, через который прошли DES и RSA. Компания или даже промышленное объединение не могут мобилизовать ресурсы, которые использовались, чтобы противостоять аутентификационному протоколу Kerberos или IPsec. Ни один патентованный почтовый протокол шифрования не в состоянии повторить конфиденциальность, предлагаемую PGP или S/MIME. Следуя в общей струе, вы обеспечиваете уровень криптоаналитической экспертизы всемирного сообщества, а это вам – не несколько недель работы ничем не выдающихся аналитиков.

    Довольно трудно обеспечить надежную криптографическую обработку в новой системе; просто безумие использовать новую криптографию, когда существуют жизнеспособные тщательно изученные альтернативы. И все же большинство компаний, занимающихся безопасностью, и даже умные и здравомыслящие во всем остальном люди проявляют острую «неофилию», и их легко ослепляют свежеиспеченные блестящие образчики криптографии.

    И остерегайтесь врача, который говорит: «Я изобрел и запатентовал абсолютно новый способ лечения, который состоит в употреблении толченых сухарей. Этот метод еще не испробован, но я уверен, что он великолепен». Помните, что новую криптографию часто называют змеиным ядом.

    Глава 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 году Национальным центром компьютерной безопасности, который в некоторой степени можно считать подразделением Агентства национальной безопасности. Задачей «Оранжевой книги» было определить требования безопасности и стандартизировать правительственные требования поставок. Она дала фирмам-изготовителям вычислительных машин возможность измерить безопасность своих систем и подсказала им, что они должны ввести в свои защищенные программы. Кроме того, она предложила систему классификации различных уровней компьютерной безопасности и способы проверить, удовлетворяет ли определенная система заданному уровню.

    Эта классификация выглядит так: D (минимальная секретность), С (защита по усмотрению), В (обязательная защита) и А (подтвержденный доступ). Внутри некоторых этих уровней существуют подуровни. Есть, например, С1 и С2 – защита по усмотрению и защита с контролируемым доступом, последняя более эффективная. С1 не является защищенным уровнем; это, по сути, то, что вы получаете с новеньким с иголочки UNIX'OM. (Вы ведь не замечали большого количества систем, которые гордились бы своим рейтингом безопасности C1.) C2 лучше; это, наверное, наиболее подходящий уровень безопасности для коммерческих продуктов[25]. В основе большинства процедур контроля доступа лежит модель Белла-Лападулы, которая берет начало с уровня B1 – уровни Bl, B2, B3 и А, как считали, больше подходят для военных систем.

    Основная проблема такого подхода – с уровнями безопасности – была в том, что они не означали, что система защищена. Приобретение системы уровня В1, например, не давало гарантированной безопасности компьютера. Это всего лишь означало, что изготовители установили в систему обязательный контроль доступа и имели необходимую документацию, чтобы получить рейтинг безопасности В1. Безусловно, обязательный контроль доступа делает систему уровня В1 намного более защищенной, чем система уровня С2, но ошибки защиты одинаково вероятны в любой системе. Единственное, что было доподлинно известно, – в первом случае разработчики больше старались.

    Кроме того, «Оранжевая книга» применима только к автономным системам и полностью игнорирует возможное подсоединение компьютера к сети. Несколько лет назад фирма Microsoft предпринимала большие усилия, чтобы присвоить Windows NT рейтинг безопасности С2. Усилия пошли на убыль, когда стало известно, что об этом рейтинге можно говорить, только если компьютер не подсоединен к сети, у него вовсе нет сетевой карты, дисковод заклеен эпоксидной смолой, а процессор – Compaq 386. Рейтинг С2 системы Solaris столь же необоснован. В недавних модификациях «Оранжевой книги» с переменным успехом делались попытки иметь дело с компьютерами, соединенными с сетью.

    Кроме того, как известно, рейтинг имеет узкое значение. Рейтинг системы относится только к определенной конфигурации и определенному типу установленного программного обеспечения. Если версия 1.0 операционной системы имела определенный уровень безопасности, нет никакой гарантии, что версия 1.1 имеет такой же уровень. Если рейтинг компьютерной безопасности относится к определенной конфигурации – с определенным набором установленного программного обеспечения, – то нельзя ничего сказать о безопасности компьютеров других конфигураций.

    В сегодняшнем мире, где всегда все взаимосвязано, «Оранжевая книга» вышла из употребления. Некоторые национальные и международные организации делали попытки модернизировать ее. Канадцы создали свои «Канадские критерии оценки надежности компьютерных продуктов» (Canadian Trusted Computer Products Evaluation Criteria). EC ответил «Критериями оценки безопасности информационных технологий» (Information Technology Security Evaluation Criteria, ITSEC), предварительно одобренными в 1995 году. Еще одно предложение США было названо «Федеральными критериями».

    Недавно все собрались вместе, чтобы прекратить это сумасшествие. Были разработаны «Общие критерии» с целью удовлетворить всех и объединить хорошие идеи из всех остальных документов. Появился стандарт ISO (International Organization for Standardization, Международная организация по стандартизации) (15408, версия 2.1). Основная его мысль в том, что «Общие критерии» предоставляют свод концепций безопасности, которые пользователи могут включать в профиль защиты, представляющий собой, по сути, формализованные потребности пользователя в отношении безопасности. Кроме того, каждый отдельный продукт можно проверить соответственно профилю защиты. Предполагается, что правительство станет следить за тем, чтобы методология «Общих критериев» выполнялась как надо, а коммерческие лаборатории будут осуществлять фактическое тестирование и сертификацию.

    «Общие критерии» основаны на соглашении о взаимном признании сертификатов качества, то есть различные страны договорились признавать проведенную друг другом сертификацию. В соглашении участвуют Австралия, Канада, Франция, Германия, Новая Зеландия, Великобритания и Соединенные Штаты.

    Это огромный шаг в правильном направлении. «Общие критерии» разработаны, чтобы дать общую оценку безопасности (не работы) программ, которые можно приобрести, по ряду различных требований. Индустрия смарт-карт тратит много времени на разработку своего профиля безопасности в рамках «Общих критериев». Я связываю с этой программой большие надежды.

    Будущее безопасных компьютеров

    Формальные модели хороши для блестящей теории, но менее полезны на практике. У них есть принципиальные ограничения; нет гарантии, что, реализовав модель безопасности, вы обязательно получите систему, имеющую определенные свойства защиты. Модели могут привести к системе, непригодной для использования; принудительная подгонка системы под модель способна выработать чересчур замысловатые конструкции. Может потребоваться уйма времени, чтобы разработать и создать их. И хуже того, они даже не гарантируют безопасности. Если система соответствует требованиям формальной модели безопасности, в лучшем случае она в силах гарантировать защиту от злоумышленников, которые придерживаются этой модели. Ушлые взломщики изобретательны и всегда выдумывают что-нибудь новенькое. И в результате, поскольку злоумышленники не придерживаются моделей разработчиков, они снова и снова взламывают защиту.

    Из тех систем, которые сейчас находятся в употреблении, практически ни одна не создана по формальной модели безопасности. Системы используют некоторые формальные идеи безопасности – так, все операционные системы имеют надежную вычислительную базу, – но для того, чтобы системы оставались полезными и пригодными, приходится искать компромисс. Только это и имеет смысл.

    Безопасность операционной системы, а значит, и защита компьютера имеет несколько ключевых компонентов. Один из них – это жесткий мандатный механизм безопасности более общего типа, чем в формальных моделях. Этот мандатный механизм безопасности реализует политику администратора, который не обязательно является пользователем. Более того, стратегия политики безопасности заключается также в контроле доступа и шифрования. То есть политика должна устанавливать, кто (человек или процесс) и к каким данным (или другим процессам) может иметь доступ и какие средства управления шифрованием должны быть применены к этим данным. Такого рода стратегия (как и ничто другое) не может перекрыть тайные каналы, но полезна для прекращения тех злоупотреблений, с которыми мы имеем дело сегодня.

    Вторым ключевым компонентом безопасной операционной системы является выверенный канал. Это механизм, с помощью которого пользователь (или процесс) напрямую взаимодействует с надежной вычислительной базой, который может быть задействован пользователем или проверенными программами и который не может быть подменен посторонним программным обеспечением. Например, разве это не здорово, если пользователь видит экран входа в систему и уверен, что это настоящий экран входа, а не троянский конь, пытающийся выудить его пароль? Механизмы реализации выверенного канала также будут иметь большое значение для снижения ущерба, ожидаемого от программ злоумышленников.

    На рынке существуют надежные операционные системы, которые снабжены этими компонентами, но они все еще мало известны потребителям. Мне хотелось бы увидеть, как большинство этих идей реализуются в основных операционных системах, таких как Microsoft Windows. Но не похоже, что это случится в ближайшее время.

    Глава 9
    Идентификация и аутентификация

    Независимо от того, какую систему защиты вы используете, чаще всего первым шагом работы является идентификация и подтверждение подлинности (аутентификация): кто вы такой и можете ли это доказать? Как только компьютер узнает вас, он сможет выяснить, что вам разрешено и чего не позволено делать. Другими словами, контроль доступа не может начаться прежде, чем завершатся идентификация и аутентификация.

    Давайте поговорим об этом. У Алисы есть некие возможности для работы на компьютере, и мы хотим быть уверены в том, что эти возможности есть только у нее. Иногда это – возможность получить доступ к какой-либо информации: файлам, балансу счетов и т. д. Иногда – получение доступа ко всему компьютеру: никто другой не сможет включить его и воспользоваться данными Алисы и ее программами. В других случаях возможность носит более конкретный характер: получить деньги из банкомата, воспользоваться сотовым телефоном, отключить охранную сигнализацию. Эта возможность может быть связана с веб-сайтом: например, доступ к странице Алисы или банковским документам. Иногда эта возможность – доступ к шифровальному ключу, который слишком длинен для запоминания. (Система PGP – набор алгоритмов и программ для высоконадежного шифрования, применяет контроль доступа для защиты частных ключей.) Не важно, что из перечисленного мы рассматриваем, – важно то, что некоторые меры контроля доступа требуют идентификации Алисы.

    На самом деле меры контроля доступа должны обеспечить две вещи. Во-первых, Алиса должна попасть в систему, а во-вторых, система должна оставить других снаружи. Сделать только первое или только второе легко – открытая дверь позволит и Алисе, и кому-нибудь другому войти; а заложенная кирпичом дверь будет держать снаружи как остальных, так и Алису, – но выполнить оба условия сразу сложнее. Нам нужно что-нибудь, что даст возможность узнавать Алису и пускать ее внутрь, но так, чтобы другие не смогли в это повторить. Мы должны уметь идентифицировать Алису, а после этого проверить подлинность идентификации. (На самом деле меры контроля доступа обязаны осуществлять еще и третью функцию – протоколирование всего, что происходило.)

    Традиционно опознавательные и проверочные меры основываются на чем-то одном из трех: «что вы знаете», «кто вы такой» и «что вам позволено». Это реализуется в виде паролей, биометрических методов распознавания и опознавательных знаков доступа. Иногда системы используют совместно любые две из этих вещей. Параноидальные системы используют все три.

    Пароли

    Традиционным подходом к проверке подлинности является применение пароля. Вы наблюдаете повсеместно. Когда вы регистрируетесь в компьютерной системе, то вводите имя пользователя и пароль. Чтобы сделать звонок по телефону с использованием телефонной карты, вам необходимо набрать номер своего счета и пароль. Чтобы получить деньги в банкомате, вы вставляете свою карту и набираете идентификационный номер (пароль).

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

    Компьютер, который вас опознает, имеет список имен пользователей и паролей. Когда вы вошли под своим именем пользователя и паролем (или номером вашего счета и идентификационным номером), компьютер сличил введенные данные с записями, хранящимися в его списке. Если вы ввели имя пользователя, имеющееся в списке, и пароль, соответствующий этой записи, то попадете внутрь. Если нет, вы останетесь вне системы. Иногда система будет повторно спрашивать вас об имени пользователя и пароле. Иногда она будет заблокирована после определенного числа неудачных попыток. (Вы ведь не хотите, чтобы кто-нибудь, укравший карточку банкомата, затем пробовал перебрать все десятки тысяч возможных идентификационных номеров, один за другим, в попытке найти единственный подходящий.)

    К несчастью, система имен пользователей и паролей работает не столь хорошо, как предполагают люди.

    Понятие паролей, вообще говоря, основывается на попытке совместить несовместимое. Идея в том, чтобы набрать легкую для запоминания случайную последовательность. К сожалению, если нечто легко запомнить, то оно не будет случайным, например «Сюзанна». А если это будет набрано наугад, например «r7U2*Qnpi», то оно запоминается нелегко.

    В главе 7, когда я говорил о длине ключей и безопасности, я обсуждал проблемы изобретения и запоминания пользователями ключей. Пароль – это форма запоминания пользователем ключа, и словарные нападения на пароли поразительно эффективны.

    Как работает это нападение? Подумаем о системе контроля доступа к компьютеру или веб-сайту. У компьютера есть файл имен пользователей и паролей. Если нападающий получит доступ к этому файлу, то узнает все пароли. В середине 70-х годов эксперты по компьютерной безопасности пришли к лучшему решению: вместо хранения всех паролей в файле они решили хранить хэш-функцию пароля. Теперь, когда Алиса набирает свой пароль в компьютере или на веб-сайте, программное обеспечение вычисляет хэш-значение и сравнивает его с сохраненным в файле. Если они совпадают, Алиса допускается в систему. Теперь нет файла паролей, который можно было бы украсть, – есть только файл хэшированных паролей. И так как назначение хэш-функции – воспрепятствовать незваному гостю зайти слишком далеко в своих намерениях, злоумышленник не сможет восстановить настоящие пароли из хэшированных.

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

    Ранее словарные нападения были сложны из-за медленной работы компьютеров. Они стали более легкими, потому что компьютеры стали гораздо быстрее. L0phtcrack является примером хакерского инструмента, предназначенного для восстановления паролей и оптимизированного для паролей Windows NT. Windows NT имеет две парольные защиты: более сильную, предназначенную для NT, и более слабую, совместимую со старыми сетевыми протоколами входа в систему. Эта функция работает без учета регистра с паролями не длиннее семи символов. L0phtcrack облегчает работу в парольном пространстве. На Pentium II с тактовой частотой 400 МГц L0phtcrack может перебрать каждый буквенно-цифровой пароль за 5,5 часа, каждый буквенно-цифровой пароль с прочими символами за 45 часов и каждый из возможных паролей, включающий любой знак клавиатуры компьютера, – за 480 часов. Это не сулит ничего хорошего.

    Некоторые пытались решить эту проблему, используя все более и более «сильные» пароли. Это означает, что пароли сложней для угадывания и их появление в словаре менее вероятно. Старая универсальная система контроля доступа на мэйнфрэймах (RACF) требовала от пользователей ежемесячной смены паролей и не разрешала использовать слова. (В Microsoft Windows нет такого контроля, и вам услужливо предлагается сохранить любой пароль.) Некоторые системы создают пароли для пользователей случайным образом – путем связывания случайных слогов в произносимое слово (например, «талпудмокс») или соединения чисел, символов и смены регистра: например FOT78hif#elf. Система PGP использует парольные фразы, которые представляют собой сложные предложения с бессмысленным контекстом: например «Телефон ЗЗЗЗЗЗ, это должно быть вы говорите мне приятным голосом 1958???!телефон». (Однако это не так просто для запоминания и набора, как вам хотелось бы.)

    Эти ухищрения становятся все менее и менее эффективными. В течение последних десятилетий действие закона Мура делает возможной «атаку в лоб» для ключей, имеющих все большую энтропию. В то же самое время есть максимум энтропии, до которого средний компьютерный пользователь (или даже пользователь уровнем выше среднего) может что-то запомнить. Вы не можете ожидать от него запоминания 32-символьного случайного шестнадцатеричного числа, так что же должно произойти, чтобы он запомнил 128-битовый ключ? Вам действительно не стоит полагаться, что он введет при входе в систему фразу с использованием набора алгоритмов и программ высоконадежного шифрования, описанных в предыдущем параграфе. Эти два фактора пересеклись; сейчас взломщики паролей могут вычислить все, что (в пределах разумного) может запомнить пользователь.

    Конечно, есть исключения. Производство высоконадежных компьютеров, применяемых в ядерной отрасли, надежные дипломатические каналы, системы, применяемые для связи со шпионами, живущими на вражеской территории, – случаи, когда пользователи найдут время, чтобы запомнить длинные и сложные парольные фразы. Эти применения не имеют ничего общего с современными компьютерными сетями и паролями для продажи товаров в электронной торговле. Проблема в том, что средний пользователь не может и даже не пытается запомнить достаточно сложные пароли для предотвращения словарных нападений. Атаковать защищенную паролем систему часто легче, чем напасть на шифровальный алгоритм с 40-битовым ключом. Пароли ненадежны, если вы не в силах предотвратить словарных нападений.

    Как ни плохи пароли, люди находят способ сделать их еще хуже. Если вы попросите их выбрать пароль, он будет паршивый. Если вы принудите их выбрать хороший пароль, они напишут его на почтовой карточке и прикрепят к монитору. Если вы попросите поменять его, они сменят его на пароль, которым пользовались месяц назад. Только изучение действующих паролей обнаруживает, что в 16% из них насчитывается три и менее цифры и 86% могут быть легко взломаны. Многочисленные исследования лишь подтверждают данную статистику[26].

    Одни и те же люди выбирают одни и те же пароли для множества приложений. Хотите украсть группу паролей? Создайте веб-сайт, содержащий какую-либо интересную информацию: порно, результаты хоккейных турниров, сведения об акциях или все, что касается демографии. Не делайте платным его посещение, а введите регистрацию имен пользователей и паролей для просмотра информации. В большинстве случаев вы будете получать те же самые имя пользователя и пароль, которые пользователь использует в последнее время. Может быть, они позволят вам войти в его банковский счет. Сохраняйте и неправильные пароли; иногда люди по ошибке вводят пароль, предназначенный для системы А, в систему В. Заставьте пользователя заполнить небольшую анкету при регистрации: «Какие другие системы вы используете регулярно? Банк X, брокерскую фирму Y, службу новостей Z?» Я знаю, что один исследователь сделал нечто подобное в 1985 году – он получил дюжины паролей системных администраторов.

    И даже когда люди выбирают хорошие пароли и меняют их регулярно, они слишком часто хотят поделиться ими с другими, состоящими и не состоящими в организации, особенно когда им нужна помощь, чтобы справиться с работой. Ясно, что такие откровения несут величайший риск для безопасности, но в сознании людей риск представляется минимальным, а потребность выполнить работу преобладает.

    Это не говорит о том, что нет лучших или худших паролей. Предшествующий пример парольной фразы из PGP все еще защищен от словарных нападений. В целом, чем проще пароль для запоминания, тем он хуже. Вообще словарные нападения пытаются сначала разгадать заурядные пароли: словарные слова, перевернутые слова, слова с некоторыми прописными буквами, их же с незначительными изменениями – как, например, с числом 1 вместо буквы I, и т. п.

    К сожалению, многие системы ненадежны так же, как и самые слабые пароли. Когда нападающий хочет получить вход в систему, его не волнует, чей он получает доступ. Согласно рабочим тестам, L0phtcrack восстанавливает около 90% всех паролей менее чем за день и 20% всех паролей в течение нескольких минут. Если на 1000 входов 999 пользователей выберут исключительно сложные пароли, такие что L0phtcrack не сможет установить их, программа взломает систему, подобрав единственный слабый пароль.

    С другой стороны, с точки зрения пользователя это может быть примером того, что «нет необходимости бегать быстрее медведя – достаточно опережать тех, кто рядом с вами». Любое словарное нападение будет успешным против тех многих входов, чей пароль «Сюзанна» – они-то в первую очередь и станут жертвой атаки. Если же ваш пароль «молот-бабочка», то, хотя он тоже достаточно уязвим для словарных нападений, вероятно, не он станет жертвой.

    Принимая в расчет вероятный тип нападающего, вы можете сделать систему с длинными и сильными паролями надежной. Но все постоянно меняется: закон Мура гласит, что сегодняшние сильные пароли – это завтрашние слабые пароли. В общем, если система основана на паролях, нападающий может организовывать словарное нападение в ожидании времени, когда система станет уязвимой. Периодически.

    Подведем итоги. Все основывалось на нападающем, захватившем файл хэшированных паролей. Стоит предотвратить словарные нападения, и пароли снова станут пригодными. Это возможно, хотя и нелегко для компьютеров с общим доступом. Парольный файл UNIX, например, может читать кто угодно. В наши дни в UNIX есть теневой парольный файл; в нем находятся действительные хэшированные пароли, а в общедоступном парольном файле не содержится ничего полезного. Файл хэшированных паролей в NT хорошо защищен, и его трудно украсть; для этого вам нужен или доступ администратора, чтобы разыскать хэшированные пароли через сеть (хотя поздние версии NT и Windows 2000 предотвращают и это), или же вам нужно отлавливать пароли, когда они используются для других сетевых приложений.

    Система также может «захлопываться» после нескольких попыток неудачного ввода пароля, например десяти. Таким образом, если кто-то пытается войти под именем Алисы и начать угадывать пароли, он введет только 10 вариантов. Конечно, это будет надоедать Алисе, но это лучше, чем подвергать риску ее имя пользователя. И точное определение времени «замораживания» может зависеть от обстоятельств. Может быть, ее вход будет закрыт на 5 минут или на 24 часа. Может быть, до тех пор пока она не поговорит с каким-нибудь администратором. Высоконадежные механизмы после определенного числа попыток неудачного ввода пароля или его неправильного набора могут замораживаться надолго, с уничтожением информации внутри.

    Другое решение состоит в том, чтобы использовать интерфейс, несовместимый с компьютером. Ваша магнитная карта, по которой вы вправе получить наличные деньги, защищена четырехзначным идентификационным номером. Что может быть более незначительным для компьютерного взлома? Требуется несколько миллисекунд, чтобы перебрать все возможные 10 000 идентификационных номеров, но в данном случае компьютер сложно присоединить к интерфейсу пользователя. Человек может стоять у банкомата и перебирать все эти номера один за другим. И для того, чтобы проверить все 10 000 идентификационных номеров, может потребоваться вместо 10 секунд – 28 часов безостановочной работы.

    Так же как люди способны быть достаточно отчаянными, чтобы постараться осуществить такое нападение, так и банкомат будет «глотать» карточки, если вы вводите слишком много неверных паролей. До сих пор эта мера безопасности все еще применяется во многих системах: кодах дезактивации сигнализации (конечно, вы можете попытаться перебрать 10 000 возможных кодов, но на это у вас есть всего лишь 30 секунд), электронных дверных замках, телефонных карточках и т. п. Эти системы работают потому, что здесь нападение не может быть автоматизировано; но если вы сумеете использовать компьютер для перебора всех идентификационных номеров (или паролей) данных систем, вы взломаете эти системы.

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

    Что все-таки делать, если вы не можете предотвратить словарные нападения? Один из приемов – найти более объемный словарь. Другой – прибавить случайные числа к паролям (как говорят, «посолить»). В работе должно быть несколько различных типов визуальных и графических паролей; идея состоит в том, что чем больше возможных паролей, тем, следовательно, сложнее устроить словарное нападение. Однако все это ограничено памятью пользователя.

    Пароли – это то, что знает пользователь. Другие техники проверки подлинности базируются на том, кем является пользователь, – на биометрических данных, и на том, что пользователь имеет, – на опознавательных знаках доступа.

    Биометрические данные

    Идея проста: вы сами подтверждаете свою подлинность. Ваш «отпечаток голоса» отопрет дверь в вашем доме. Сканирование сетчатки глаза пустит вас в офис. Отпечаток большого пальца зарегистрирует вас в вашем компьютере. Это использовалось даже в фильме «Звездный путь»: капитан Пикард «подписывает» электронный бортовой журнал отпечатком своего большого пальца.

    Биометрические данные – самые старая из форм опознавания. Физическое узнавание является биометрикой; наши предки использовали его задолго до того, как они эволюционировали в людей. Коты метят свою территорию. Дельфины издают индивидуальные, как подпись человека, звуки.

    Биометрические данные также используются для опознавания в системах связи. Если вы разговариваете по телефону, человек на другом конце провода идентифицирует вас по голосу. Ваша подпись в контракте идентифицирует вас как лицо, подписавшее его. Ваша фотография идентифицирует вас как лицо, на имя которого выдан именно этот паспорт.

    Для большинства методов биометрические данные нужно сохранять в базе данных, как и пароли. Голос Алисы будет служить биометрическим опознавательным знаком в разговоре по телефону, если вы Алису уже знаете. Если она незнакомка, то вам это не поможет. Точно так же и с почерком Алисы – вы можете узнать его, только если уже видели. Для разрешения этой проблемы карточки с подписями хранятся в банках в картотеке. Алиса пишет свое имя на карточке, когда открывает свой счет; эта карточка хранится в банке. Когда Алиса подписывает чек, банк сопоставляет ее подпись с той, что хранится в картотеке, для того чтобы убедиться, что чек имеет силу. (На практике это случается редко. Проверить письменную подпись так долго, что банк не побеспокоится сделать это за сумму, меньшую 1000 долларов. Он предполагает, что если возникнут проблемы, то кто-нибудь пожалуется. И разобраться с редкой проблемой дешевле, чем платить кому-либо за постоянную проверку.) Вы можете точно так же поступить и с Алисиным голосом – сравнив его с аналогичным образцом, хранящимся в центральной базе данных.

    Исключения составляют ситуации, где биометрические данные подтверждаются как часть запутанного и необычного протокола. Когда Алиса подписывает контракт, например, у Боба еще нет копии ее подписи. Однако протокол работает – так как Боб знает, что он сможет проверить подпись впоследствии, если возникнет такая необходимость.

    Существует много различных типов биометрических данных. Я уже упомянул почерк, звучание голоса, узнавание лица, отпечатки пальцев. К биометрикам также относятся линии на руке, сканирование сетчатки, сканирование радужной оболочки глаза, динамические характеристики подписи (не только то, как она выглядит, но и с каким нажимом, с какой скоростью она была начертана и т. д.) и другие. Одни технологии надежнее других – отпечатки пальцев намного надежней распознавания лица – но ситуация может измениться, поскольку технологии совершенствуются. Некоторые навязчивы – одна несостоявшаяся технология базировалась на образце отпечатка губ и требовала от пользователя поцеловать компьютер. В целом, биометрические данные будут считываться все лучше и лучше.

    «Лучше и лучше» имеет два разных смысла. Во-первых, это значит, что самозванец не будет неправильно опознаваться в качестве Алисы. В целом, роль биометрических данных заключается в том, чтобы доказать, что Алиса-претендент и есть настоящая Алиса. Таким образом, если самозванец может успешно одурачить систему, то она работает не очень хорошо. Это называется ложной уверенностью. Во-вторых, это значит, что система не будет пытаться представить Алису как самозванца. Вернемся к началу: если роль биометрических данных – доказать, что Алиса – это Алиса, и если она не может убедить систему, что она – это она «не поддельная», тогда система также работает плохо. Это называется ложным отрицанием.

    С течением времени биометрические опознавательные системы стали работать лучше в плане как ложной уверенности, так и ложного отрицания. Например, они устанавливают проверку отпечатков, так что ни пластиковый палец, ни чей-либо настоящий, но чужой палец не одурачат устройство, считывающее его отпечаток. Они лучше делают работу по отслеживанию ежедневных изменений в индивидуальных биометрических данных. Они более легки для использования.

    Вообще, вы можете настроить биометрическую систему как в сторону допущения ошибки ложной уверенности, так и в сторону ложного отрицания. Здесь весьма нечеткие границы: если система получает отпечаток пальца, который, похоже, принадлежит Алисе, впустит ли она ее внутрь? Это зависит от того, склонна она в большей степени допустить ложную уверенность, или ложное отрицание. Если Алиса уполномочена взять карандаш со склада, то лучше допустить ошибку ложной уверенности; здесь больше неприятностей с отказом законному пользователю, чем если бы несколько карандашей просто потерялись. Если система защищает большие суммы денег, то ложное отрицание предпочтительней: оставить неправомочных пользователей снаружи более важно, чем иногда отказать в доступе законному пользователю. Если система приступает к выполнению ряда последовательных операций для запуска ядерных ракет, страшны оба варианта.

    Биометрические данные значат очень много, так как на самом деле их сложно подделать: очень трудно нанести ложный отпечаток на свой палец или сделать сетчатку своего глаза похожей на чужую. Некоторые люди могут говорить голосами других (например, эстрадные имитаторы), а Голливуд способен сделать лица людей похожими на других. Но вообще подделать биометрические данные очень тяжело.

    С другой стороны, биометрические данные даже слишком легки для подделки: не проблема украсть биометрики после того, как были сделаны начальные измерения. Во всех случаях, которые мы обсуждали, проверяющему необходимо было бы удостовериться не только в том, что биометрические данные верны, но и в том, что они были введены правильно. Вообразим удаленную систему, которая использует узнавание лица как биометрику. «Для получения разрешения возьмите свою фотографию, сделанную „Полароидом", и отправьте ее нам. Мы сравним картинку с той, что хранится у нас в файле». Как здесь осуществить нападение?

    Легко. Чтобы выдать себя за Алису, возьмите ее фотографию, сделанную «Поляроидом», так, чтобы владелица об этом не знала. Потом, несколькими днями позже, используйте ее, чтобы обмануть систему. Это нападение работает потому, что получить фотографию Алисы просто, это совсем не то, что сделать свое лицо таким, как у нее. И так как система не проверяет, что это изображение вашего лица, а только то, что оно соответствует Алисиному лицу в картотеке, мы в состоянии обмануть ее.

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

    Мораль в том, что биометрические данные будут работать прекрасно только в случае, если проверяющий станет удостоверяться в двух вещах: во-первых, что они действительно поступили именно от лица, которое подлежит проверке, и во-вторых, что они соответствуют образцу в картотеке. Если система не в силах одновременно поддержать два эти условия, она ненадежна.

    Еще один пример: отпечатки больших пальцев для получения разрешения на вход в систему с удаленным доступом. Алиса помещает отпечаток своего большого пальца в считывающее устройство, находящееся на клавиатуре. (Не смейтесь, большое количество компаний хотят, чтобы так и было, а технология уже существует[27].) Компьютер посылает цифровой отпечаток хосту. Хост проверяет его, и если он соответствует отпечатку, хранящемуся в файле, дает Алисе доступ. Это не будет работать потому, что легко украсть цифровой отпечаток Алисиного большого пальца, и когда он у вас будет, то обманывать хост снова будет легко.

    Защищенные от несанкционированного вмешательства аппаратные средства помогают до тех пор (в пределах ограничений главы 14), пока они включают и устройство, считывающее биометрические данные, и механизм подтверждения.

    Это не сработает, если защищенное от несанкционированного доступа считывающее устройство посылает данные об отпечатке пальца через ненадежную сеть.

    Мы подошли ко второй главной проблеме с биометрическими данными: эта система плохо справляется с отказами. Представим, что Алиса пользуется отпечатком своего большого пальца как биометрикой, и кому-нибудь вздумается украсть его. Что теперь? Он не является цифровым сертификатом (мы вернемся к этому в главе 15), который некая доверенная третья сторона может ей заменить. Это ее большой палец. У нее их всего два. Как только кто-нибудь украдет ваши биометрические данные, они останутся таковыми на всю жизнь; и их нельзя будет вернуть обратно.

    Это та причина, по которой биометрические данные не могут выступать в роли шифровальных ключей (даже в том случае, если вам удастся разрешить противостояние между неясной логикой биометрических данных и безусловной математической логикой проблемы). Время от времени я вижу системы, которые используют шифровальные ключи, порожденные биометрическими данными. Это прекрасно работает до тех пор, пока данные не украдены. И я не думаю, что у кого-нибудь физически отрежут палец или нужный отпечаток пальца будет сымитирован на чьем-либо чужом пальце; я думаю, что кто-нибудь украдет цифровой отпечаток пальца. Однажды, когда это случится, система перестанет работать. (Ну, может быть, до тех пор, пока не будут украдены все 10 отпечатков пальцев…)

    Биометрические данные могут быть хорошим механизмом, подтверждающим подлинность, но использовать их надо должным образом.

    Опознавательные знаки доступа

    Третьим способом доказательства идентичности является использование чего-либо, что вы имеете: физического опознавательного знака любого рода[28]. Это старая форма контроля доступа: материальный ключ ограничивает доступ в сундук, комнату, здание. Обладание королевской печатью уполномочивает кого-либо на действия от имени короля. Более современные системы могут быть автоматизированными – электронные ключи в номере отеля – или ручными – распространенные предметы, предоставляющие доступ в здание. Основная идея та же самая; физический предмет служит подтверждением подлинности своего хозяина.

    Для этого можно пойти по нескольким путям. Наиболее простой путь, когда хозяин может просто доказать, что данный знак принадлежит ему. Есть компьютеры, включаемые физическим ключом; так работают компьютеры, которым требуется смарт-карта. Основная идея любого опознавательного знака в том, что вы помещаете знак в некоторое отверстие в каком-то месте, и после этого компьютер подтверждает, что вы действительно это сделали. Если это так, вы попадаете в систему.

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

    Кроме того, что знак могут украсть, кто-нибудь может скопировать его. Некоторые знаки скопировать легко, например физические ключи. Таким образом, знаки могут быть украдены, скопированы и перемещены без ведома своего владельца.

    Другая проблема в том, что должен быть некий путь, подтверждающий, что опознавательный знак в действительности там, где он должен находиться. Подумайте о знаке как о перемещаемой, изменяемой биометрике – и вы получите все проблемы проверки безопасности из предыдущего раздела. Однако здесь при необходимости знак может быть изменен.

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

    В этом – другая, относительно менее значимая проблема, которую можно наблюдать на примере некоторых знаков. Если пользователи могут оставить знак в отверстии, куда поместили его для операции, они часто это и делают. Если пользователи должны вставить смарт-карту в прорезь перед тем, как она загрузится, они, вероятно, оставят ее там на весь день и всю ночь, даже если их самих там не будет. На слишком долгое для идентификации время.

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

    Первая – это «вызов/ответ». Знак – устройство идентификации – карманный калькулятор с цифровой клавиатурой и маленьким экраном. Когда пользователь хочет подключиться, он вызывает удаленный хост. Он отправляет этот вызов со своего знака. Знак подготавливает соответствующий запрос, который передает в компьютер, а тот переправляет его хосту. Хост производит аналогичные вычисления и, если результат соответствует ожидаемому, подтверждает подлинность.

    Вторая технология основана на временной синхронизации. Знаком является аналогичный карманный калькулятор с одним экраном. На экране регулярно сменяются номера, обычно раз в минуту. Удаленный компьютер просит пользователя напечатать то, что показано на экране. Если ответ пользователя соответствует тому, что ожидает удаленный компьютер, он производит подтверждение подлинности. Таким образом работает адаптер SecurID[29].

    Конечно, полная система может также включать пароль, знак вызова/ответа, для начала работы может даже потребовать дополнительно ввода пароля; и другие вспомогательные меры безопасности. Основная идея все-таки в том, что некое секретное вычисление происходит внутри электронного ключа, который подменить нельзя. Нападающий не станет притворяться, будто у него есть знак, потому что не знает, как рассчитывать ответы, основанные на вызовах, или не знает, как рассчитывать величины, основанные на временной синхронизации. Сделать это можно только одним путем – имея настоящий знак.

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

    Напоследок обсудим еще один знак: записанный пароль. В сообществе, занимающемся проблемами безопасности, существует реакция коленного рефлекса на запись паролей, но если это сделано должным образом, то может значительно улучшить защиту. Кто-нибудь, кто записывает свой пароль, превращает то, что он знает (свой пароль), в то, что он имеет (клочок бумаги). Эта уловка позволяет ему использовать более длинные пароли, которые являются более надежными. Здесь есть все проблемы простого знака: он может быть скопирован или украден. Защита не будет работать, если Алиса написала свой пароль на желтом липком листочке, наклеенном на монитор ее компьютера. Для нее будет лучше положить свой пароль в бумажник – это надежнее. Возможно, лучшим решением будет иметь две части пароля: одну будет помнить Алиса, а другая будет записана на листочке, лежащем в ее бумажнике.

    Есть системы с одноразовыми паролями. У пользователя находится список паролей, записанных и используемых однократно. Конечно, это хорошая система подтверждения подлинности – список паролей является знаком – до тех пор, пока список находится в безопасном месте.

    Протоколы аутентификации

    Протоколы аутентификации – это криптографические способы подтверждения подлинности личности Алисы через сеть. Основной протокол аутентификации достаточно прост.

    1. Алиса набирает свое имя пользователя и пароль на компьютере-клиенте. Клиент отправляет эту информацию серверу.

    2. Сервер ищет указанное имя пользователя в базе данных и отыскивает соответствующий пароль. Если он соответствует паролю, набранному Алисой, ей предоставляется доступ.

    Проблема в том, что база данных паролей должна быть защищена. Решение в том, чтобы хранить не пароли, а хэш-функции паролей.

    1. Алиса набирает свое имя пользователя и пароль на клиенте. Клиент отправляет эту информацию серверу.

    2. Сервер хэширует набранный Алисой пароль.

    3. Сервер ищет имя пользователя с именем Алиса в базе данных и отыскивает соответствующее хэш-значение. Если это хэш-значение соответствует хэш-значению пароля Алисы, ей предоставляется доступ.

    Уже лучше. Главная проблема со вторым протоколом в том, что пароли открыто посланы по сети. Кто-нибудь, рыскающий по сети, может собирать имена пользователей и пароли. Решение включает в себя хэширование пароля перед тем, как отослать его (более старые версии Windows NT делают это), но словарные нападения в состоянии справиться и с этим.

    Так как словарные нападения стали более мощными, системы начали использовать прием, известный как «соление» (на самом деле они делали это и ранее, хороший пример предусмотрительности проектировщика). «Соль» – это известная случайная константа, хэшируемая вместе с паролем. Вследствие чего сделать словарные нападения сложней; вместо единственного хэш-значения для пароля «кот» могут быть 4096 различных вариантов для «кот» плюс 12 бит случайной «соли». Словари хэшированных паролей должны были бы быть в четыре раза «толще». Но способность произвести быстрые словарные нападения в реальном времени делает эту контрмеру устарелой; словари просто включают все возможные значения «соли».

    Kerberos («Цербер») является более хитрым протоколом аутентификации. Здесь Алиса должна иметь долгосрочный ключ, используемый совместно с надежным сервером в сети, называемым Kerberos-сервером. Чтобы войти во взятый наугад сервер в сети – назовем его сервером Боба, – выполняется следующая процедура:

    1. Алиса запрашивает разрешение у сервера Kerberos для входа на сервер Боба.

    2. Сервер Kerberos проверяет, допускается ли Алиса на сервер Боба. (Примечание: серверу Kerberos не нужно знать, что Алиса – та, кем она себя назвала. Если это не она, протокол прервется на шаге 6.)

    3. Сервер Kerberos высылает Алисе «билет», который она обязана отдать серверу Боба, и ключ к сеансу, который она может использовать, чтобы доказать Бобу, что она Алиса.

    4. Алиса использует ключ к сеансу с сервера Kerberos для создания «удостоверения», которое она будет использовать, чтобы убедить Боба, что она Алиса.

    5. Алиса посылает Бобу и билет, и удостоверение.

    6. Боб проверяет. Если все подтверждается, он дает Алисе доступ. (Боб также имеет используемый совместно с сервером Kerberos долгосрочный ключ. Билет – это сообщение с сервера, зашифрованное в долгосрочном ключе Боба.)

    Этот протокол защищен тем же способом, что и протоколы физических билетов. Сервер Kerberos печатает билеты. Он дает билеты Алисе, а она в свою очередь может предоставить их Бобу. Боб может утвердить билет, так как он знает, что Алиса получила его с сервера Kerberos.

    И у этого протокола есть несколько приятных свойств. Долгосрочные ключи Алисы и Боба, которые похожи на пароли, никогда не посылались по сети. Отрицательная сторона в том, что системе для работы нужен сервер Kerberos. Сервер Kerberos является доверенной третьей стороной. Это может стать «узким местом» в системе в 9:00 утра, когда каждый пытается войти в свой компьютер.

    Kerberos был изобретен Массачуссетским технологическим институтом в 1988 году и с того времени используется в мире UNIX. Kerberos является частью Windows 2000, но исполнение Microsoft отличается от стандартного и несовместимо с остальным миром Kerberos. Я могу только предполагать, что это было сделано намеренно по соображениям, связанным с рынком, но сделано таким образом, что ослабило защиту. Нельзя всего лишь изменить протокол безопасности и предполагать, что измененный протокол так же надежен.

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

    Однократная регистрация

    Вещь, которая изрядно раздражает пользователей в системе со строгими требованиями к безопасности, – это большое число паролей. Пользователь должен набирать один пароль для входа в свой компьютер, другой для входа в сеть, третий для входа на отдельный сервер в сети и т. д. Люди задают вопрос: не было бы лучше, если бы пользователь зарегистрировался один раз, с одним паролем, и затем мог бы управлять компьютерами как ему угодно, без использования других паролей?

    Однократная регистрация – это решение пользовательской проблемы. К несчастью, она не очень хорошо работает. Во-первых, нетрудно увязнуть в болоте различных приложений и мер безопасности, которые плохо согласуются между собой. Это значит не просто ограничиться выбором определенного пароля для каждого – что плохая идея, – но учесть все проблемы множества взаимодействующего программного обеспечения. Во-вторых, дополнительный риск связан с тем, что возможная уязвимая точка является единственной. Есть разница между потерей одной кредитной карточки и целого бумажника.

    Продукты с одноразовой регистрацией существуют, и в некоторых ситуациях они работают. Но они ни в коем случае не являются панацеей, как о том любят объявлять их продавцы.

    Глава 10
    Безопасность компьютеров в сети

    В этой главе я хочу поговорить об атаках, совершаемых через Интернет. Такие атаки можно считать компьютерными, тогда их следовало бы рассматривать в главе 8. Можно отнести их и к сетевым нападениям, о которых речь пойдет в главе 11. Но я выделяю эти атаки в самостоятельный класс и посвящаю им отдельную главу.

    Разрушительные программы

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

    К разрушительным программам кроме вирусов относятся так называемые «троянские кони» и «черви». Они обычно состоят из двух частей: «полезной нагрузки» и механизма распространения. «Полезная нагрузка» – это та составляющая, которая, собственно, и вызывает сбои. Традиционно нагрузка была не очень разнообразна – прототипы вирусов выводили на экран какое-либо надоедливое сообщение, переформатировали жесткий диск компьютера жертвы либо не делали вообще ничего. Но в некоторых случаях нагрузка способна причинить и большие неприятности: изменить установки контроля доступа компьютера, украсть секретный ключ и отправить его по электронной почте и т. п. Результат таких действий может оказаться опасным, и я считаю, что следует ожидать появления более коварных нагрузок в ближайшие годы[30]. В этой книге для нас наибольший интерес будут представлять механизмы распространения, по которым мы и классифицируем разрушительные программы.

    Компьютерные вирусы

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

    В 1983 году студент Фред Коэн (Fred Cohen) написал первый компьютерный вирус. Он сделал это, только чтобы создать прецедент (удивительно, но большинство людей не верили, что это возможно). Многие скопировали этот вирус, большинство этих людей хотели просто досадить окружающим. В настоящее время насчитывают от 10 000 до 60 000 вирусов (в зависимости от критериев подсчета), большинство которых написаны для IBM-совместимых персональных компьютеров. По некоторым оценкам, которые мне встречались, ежедневно создаются шесть новых вирусов, но я считаю, что это – ложь и паникерство. Всего несколько сотен вирусов встречаются «в диком виде» (имеется в виду «на жестком диске у людей, не принимающих непосредственного участия в исследованиях компьютерных вирусов»), но те, которые встречаются, могут быть разрушительными.

    Вирусы можно подразделить на три основных класса: файловые вирусы, загрузочные вирусы (вирусы, поражающие загрузочный сектор) и макровирусы.

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

    Большинство файловых вирусов уже вышли из употребления. Изменения в устройстве компьютеров привели к тому, что вирусы потеряли способность запускаться; программное обеспечение часто требует обновления при установке новой операционной системы или нового процессора. Многие файловые вирусы вымерли после того, как в 1992 году была выпущена Windows 3.1; вирусы просто рушили эту операционную систему и в результате не могли распространяться.

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

    Загрузочные вирусы могут мирно сосуществовать с Windows 3.1, но большинство из них не пережили появления Windows 95. Несовместимость при загрузке и появляющиеся на экране предупреждения сильно затруднили распространение вирусов. Были вирусы, созданные специально для Windows 95, но ни один из них не получил широкого распространения, поскольку никто уже не загружается с гибкого диска.

    Последний класс вирусов – это макровирусы. Они написаны на языке сценариев и заражают не программы, а файлы данных. Во многих текстовых процессорах, электронных таблицах и программах, работающих с базами данных, используются специальные языки разработки сценариев. Такие сценарии (программы на макроязыке, или просто макросы) используются для автоматизации задач и хранятся вместе с данными. Первый макровирус для Microsoft Word – Concept – впервые обнаружили в «диком виде» в 1995 году; в текстовом редакторе Emacs такие вирусы существовали уже в 1992 году.

    Макровирусы могут распространяться существенно быстрее других, поскольку люди гораздо чаще обмениваются данными, чем программами. А поскольку программное обеспечение электронной почты и передачи файлов делается все проще в обращении, эти вирусы станут распространяться еще быстрее. Бывают макровирусы, способные существовать в различных операционных средах: некоторые макровирусы для Microsoft Office могут заражать как компьютеры Windows, так и Macintosh.

    Макровирусы – это будущее компьютерных вирусов. Все вирусы, которые быстро распространяются по Интернету, – это макровирусы. Лучшие из вирусов используют психологические приемы, побуждающие пользователя установить, запустить или размножить их.

    Антивирусное программное обеспечение – это более выгодный бизнес, чем написание вирусов. (Я полагаю, это очевидно: за вирусы никто денег не платит.) Большинство антивирусных программ сканируют файлы, выискивая вирусы. В программах есть база данных, содержащая «отпечатки пальцев» вирусов – фрагменты кода, про которые известно, что они являются частью вирусов. Когда программа находит такой же отпечаток, она получает информацию, что файл заражен, и, чтобы «дезинфицировать» его, удаляет вирусный код. Метод сканирования «отпечатков» работает только после того, как компания, создавшая антивирусную программу, выделила вирус в лаборатории и включила в список новый отпечаток. Поэтому усовершенствование антивирусного программного обеспечения – бойкий бизнес.

    Все вирусы, которые встречались до сих пор, были направлены против крупных вычислительных машин, а не против периферийных или встроенных систем. Однако можно написать вирус на языке PostScript. Он мог бы распространяться от документа к документу. Он мог бы воздействовать на принтеры. Можно создать вирус, заражающий сотовые телефоны и распространяющийся по сотовой сети. Нам уже встречался вирус, специализирующийся на устройствах WebTV. Можно создать вирус, заражающий практически любую компьютерную систему. Если его еще нет, то только потому, что люди, которые обладают необходимыми знаниями и не отягощены строгой моралью, до сих пор не удосужились его создать.

    Чтобы обнаружить ранее не известные вирусы, полиморфные вирусы (видоизменяющиеся при каждом инфицировании) и зашифрованные вирусы (скрывающие свои «отпечатки» при помощи криптографии), некоторые антивирусные программы тестируют компьютерную систему, выискивая подозрительное поведение. (Обычные программы поиска вирусов довольно глупы – чтобы их обмануть, иногда достаточно просто изменить какую-нибудь мелочь.) Такие программы работают довольно хорошо, однако они перекладывают на пользователя бремя принятия решения: вирус это или ложная тревога?

    «Лекарства» от вирусов не существует. Математически доказано, что всегда можно написать вирус, который не сможет нейтрализовать ни одна из существующих антивирусных программ. (Даже модель Белла-Лападулы не предохраняет от вирусных атак.) Я не буду вдаваться в подробности, но основная идея в том, что если создатель вируса знает, что именно ищет антивирусная программа, он всегда имеет шанс разработать свой вирус, незаметный для нее. Конечно, после этого программисты, борющиеся с вирусами, могут усовершенствовать свою программу, которая будет определять уже и новый вирус.

    Черви

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

    Роберт Т. Моррис (Robert T. Morris) «выпустил» самого известного червя в 1988 году. Это был интернет-червь, который вывел из строя более 6000 компьютеров: 10% всех серверов Интернета. Червь появлялся на одной машине. Затем он предпринимал попытку проникнуть по сети в другие машины, используя несколько основных приемов. Когда это удавалось, червь засылал на новый компьютер копию своего кода. А затем эта копия повторяла весь процесс, пытаясь проникнуть в очередную машину. Обычно черви работают именно так. Тот червь мог бы причинить более крупные неприятности, если бы не счастливая ошибка. Изначально не планировалось, что 6000 зараженных компьютеров будут выведены из строя; червь должен был заразить их тайно, не привлекая всеобщего внимания. Ошибка в программе червя вызвала повреждение зараженных компьютеров. В главе 13 я более подробно расскажу о том, как работал тот червь и в чем конкретно заключалась ошибка.

    Еще один червь известен под названием Pretty Park. Эта программа, функционирующая в среде Windows, приходит по электронной почте как вложение в сообщение. Если вы запускаете эту программу, она рассылает свои копии всем адресатам вашей записной книги в Outlook Express. Кроме того, она пытается подсоединиться к серверу IRC (Internet relay chat)[31] и отправить сообщения участникам чата. Автор червя может к тому же использовать это соединение, чтобы получать информацию из вашего компьютера. ILOVEYOU и все его варианты по сути своей – тоже черви.

    Троянские кони

    Троянские кони – это разрушительные фрагменты, которые встроены в какие-то «нормальные» программы, чтобы одурачить пользователя, который будет думать, что это нечто полезное. Помните, откуда появилось это название? Греки десять лет осаждали Трою, но она не сдавалась. То ли от отчаяния, то ли от скуки Одиссей приказал греческим воинам построить большого деревянного коня, внутри которого могли бы спрятаться несколько человек. Этот сюрприз греки оставили троянцам как признание поражения, а затем сделали вид, что уплывают. Троянцы привезли деревянного коня в город – все художники изображают коня стоящим на платформе с колесами, – несмотря на предсказание Кассандры о том, что это приведет к гибели Трои. Ночью греки вылезли из коня, открыли ворота и впустили внутрь остальную греческую армию. После этого греки истребили троянцев, варварски разграбили и сожгли город. (По крайней мере, Гомер все описал именно так. Никто не знает, правда это или нет. Даже сам город считали мифом, пока Генрих Шлиман не обнаружил Трою в конце XIX века.)

    Аналогично, цифровой троянский конь – это код, преднамеренно помещенный в вашу систему, который маскируется под безвредную (или полезную) программу, но делает что-то неожиданное или нежелательное. (С формальной точки зрения код, который вы сознательно размещаете в вашей системе, – это троянский конь, а код, который вводит в вашу систему кто-то другой, называют логической бомбой). Программист вписывает такой код в крупное программное приложение, которое в результате может начать работать неправильно, если, например, программист будет исключен из платежной ведомости. Тимоти Ллойд (Timothy Lloyd), диспетчер сети в Omega Engineering, в 1996 году установил логическую бомбу, которая подорвала производственные мощности его бывших работодателей и обошлась им более чем в 12 миллионов долларов.

    Троянским конем может быть программа, которая тайно устанавливается в вашем компьютере, следит за буфером клавиатуры до тех пор, пока не обнаружит нечто, напоминающее номер кредитной карты, – правильное количество цифр, совпадение контрольной суммы, – и посылает этот номер кому-нибудь при помощи TCP/IP. Это также и приложение Java, которое прерывает соединение вашего модема и соединяет вас с 900 номерами в Молдавии (такой троянский конь на самом деле существовал).

    Атака троянского коня коварна и опасна, поскольку вы можете и не догадываться о его работе. Один из популярных троянских коней для Microsoft Windows называется Back Orifice. Если он имеется на вашем диске, удаленный пользователь может эффективно подсоединиться к вам через Интернет и хозяйничать в вашем компьютере. Он может загружать себе ваши файлы, а вам – свои, удалять файлы, запускать программы, изменять конфигурации, захватывать управление клавиатурой и мышью, видеть все, что отображается на экране сервера. Тот же удаленный пользователь может вести более разрушительную деятельность: перезагружать компьютер, показывать произвольные диалоговые окна, включать и отключать микрофон или камеру, перехватывать нажатия клавиш (и пароли). А кроме того, существует расширяемый язык, позволяющий писать модули. (Я все жду, что кто-нибудь распространит модуль, который будет автоматически выискивать и записывать закрытые ключи PGP или последовательности регистрации для Всемирной паутины.)

    Кроме Back Orifice и других хакерских инструментов по принципу троянских коней могут работать многие программы удаленного администрирования. DIRT (Data Interception by Remote Transmission, перехват данных с помощью удаленной передачи) – это троянский конь, разработанный правительством США и находящийся в распоряжении полиции.

    Это все грубо действующие троянские кони, но бывают и более коварные. Некоторые из них собирают и отсылают автору имена и пароли пользователей. Другие незаметно изменяют шифровальную программу так, что выбор ключей становится ограничен. (Мне встречались измененные таким образом версии PGP.) Вас могут заставить поверить во что угодно, подсунув на ваш компьютер фальшивый сертификат. (Эта идея использовалась для лабораторных демонстраций нападений на систему кодовых обозначений Microsoft.) Эти троянские кони не делают ничего такого, о чем вы могли бы легко догадаться, но они способны на многое, что никогда не придет вам в голову. Распределенные атаки, приводящие к отказу в обслуживании, осуществлявшиеся с помощью Интернета, используют троянских коней для заражения промежуточных компьютеров.

    Наиболее сложный этап при подобных атаках – это помещение троянского коня на компьютер ничего не подозревающей жертвы. Один из вариантов – проникнуть в офис жертвы и установить троянца на нужный компьютер; в следующей главе мы обсудим некоторые способы защиты от атак такого рода. Можно убедить жертву собственными руками установить троянского коня; о манипулировании людьми мы поговорим в главе 17. Можно атаковать компьютер через Интернет – мы вернемся к этому в главе 11. И наконец, можно проникнуть в компьютер при помощи самих разрушительных программ, создавая вирусы.

    Современные разрушительные программы

    Для программного обеспечения, призванного причинять неприятности, 1999 год стал переломным. Различные типы – вирусы, черви и троянские кони – слились и перемешались. И стали в результате еще более опасными. Новизна состояла не в автоматической пересылке разрушительных программ по электронной почте – до этого были Christma exec в 1987 году (через систему электронной почты PROFS (Professional Office System, профессиональная офисная система)) и ShareFun в 1997 году, – но 1999 год стал первым годом, когда распространяющиеся по электронной почте «вредные» программы смогли заразить крупные зоны Интернета. Новые типы этих программ игнорировали средства корпоративной защиты и тонеллировали сквозь брандмауэры. Это действительно значительный шаг.

    Вирус продолжает существовать, если он воспроизводится на новых компьютерах. До Интернета компьютеры сообщались в основном при помощи гибких дисков. Следовательно, большинство вирусов передавались при помощи дискет, и лишь изредка через электронные доски объявлений (bulletin board system, BBS).

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

    Во-вторых, перенос программ при помощи дискет легко блокировать. Большинство антивирусных программ могут автоматически сканировать все гибкие диски. Опасные программы на входе блокируются. Электронная доска объявлений способна все же доставить некоторые проблемы, но большинство пользователей приучили себя к тому, что не следует загружать программы с ненадежных BBS. А кроме того, антивирусные программы могут автоматически сканировать новые файлы в поисках опасного кода.

    И в-третьих, при таком способе распространения вирусов антивирусные программы справляются со своей задачей. Написать программу, блокирующую известные опасные программы, в общем, не сложно. Она будет работать по принципу сканирующего поиска кода, характерного для вируса (так называемых сигнатур). Найдя зараженный участок, программа автоматически удалит вирус и вернет все в нормальное состояние. Процедура удаления уникальна для каждого вируса, но разработать ее сравнительно нетрудно. Антивирусные программы включают десятки тысяч сигнатур, каждая из которых характерна для определенного вируса. Компании выпускают новые программы в тот же день, как узнают о новом вирусе. И при условии, что вирус распространяется медленно, такая защита работает. Ежемесячно происходит автоматическое обновление большинства антивирусных программ. До 1999 года такая защита была вполне удовлетворительна.

    Все изменилось с распространением электронной почты. 1999 год принес нам макровирус Melissa для Microsoft Word и червя Worm.ExploreZip, a 2000 год – червя ILOVEYOU и массу его разновидностей, не говоря обо всем остальном. Разрушительные программы такого типа размножаются по электронной почте и используют ее особенности. Эти программы отправляют себя по почте людям, с которыми переписывается хозяин инфицированного компьютера, обманом заставляя получателей открыть или запустить их. В таком случае процесс распространения вирусов занимает не недели и не месяцы, а считанные секунды.

    Антивирусные компании по мере возможности выпускают усовершенствованные версии программ, которые умеют ловить определенные вирусы, но если вирус может заразить 10 миллионов компьютеров в течение нескольких часов (так оценивают скорость распространения ILOVEYOU), то прежде, чем его удастся зафиксировать, он вызывает множество повреждений. А что если вирус постарается «спрятаться», чтобы его код не обнаружили в течение нескольких дней? Что, если червь нацелен на конкретную машину и удаляет свой код из всех компьютеров, у которых идентификатор пользователя не соответствует заданному? Сколько времени потребовалось бы на то, чтобы его обнаружить? Что, если этот червь отправляет по электронной почте в анонимный почтовый ящик копию регистрационного имени пользователя (в большинстве случаев содержащего пароль) и лишь затем самоуничтожается? Что, если такой код способен автоматически обновляться? Что, если он автоматически зашифровывает свои распространяющиеся копии при помощи системы PGP? А если он видоизменяется и ускользает от антивирусных программ? Или неделями прячется в системе? Даже минутные размышления на эту тему заставляют нас нарисовать себе довольно жуткую картину.

    Поскольку электронная почта встречается повсеместно, путешествующие с ее помощью опасные программы в силах проникнуть куда угодно. Они могут просочиться через такое интернет-соединение, через которое больше ничего не проходит. Их нельзя остановить брандмауэром; они проникают сквозь него, неожиданно оказываются внутри системы и производят повреждения. Эффективность брандмауэров будет снижаться по мере того, как мы будем расширять перечень используемых служб (e-mail, Веб и т. п.) и добавлять все более сложные приложения во внутреннюю сеть, а авторы разрушительных программ будут принимать все это во внимание. Такой метод «проникновения внутрь с последующей работой» еще более ухудшит ситуацию.

    В настоящее время, разрабатывая средства для защиты от вирусов, червей и троянов, стараются подражать биологическим принципам борьбы с вирусами. Тем не менее я настроен скептически по двум причинам. Прежде всего биологические вирусы эволюционируют медленно: удачные новые мутации со временем могут закрепиться, а затем медленно распространиться по виду. Биологические иммунные системы приспособлены именно к атакам такого рода. А компьютерные вирусы, в отличие от биологических, специально создают «смертельными».

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

    Мне кажется более интересным такое решение: связать компьютеры с центром автоматического выявления вирусов. Если какой-нибудь компьютер замечает подозрительный код, он отсылает его для последующего анализа. Такой подход имеет помимо перспективы и ряд новых опасностей. Кроме того, он все-таки не сможет обеспечить необходимую скорость обнаружения вирусов. Любая крупная рассредоточенная система в любом случае допускает возможность заражения вирусами. Если система безопасности не продумана снизу доверху, мы должны быть постоянно готовы к борьбе с попытками установить контроль над системой.

    Легко критиковать Microsoft за усугубление проблемы. Языки сценариев Microsoft являются довольно мощным средством, однако они созданы в предположении, что все, с чем вы работаете, заслуживает доверия. Эти языки позволяют иметь доступ ко всем ресурсам операционной системы (сравните с моделью безопасности Java). Они позволяют разрушительным программам использовать свойства Microsoft Outlook для автоматической рассылки своих копий корреспондентам пользователя. Microsoft, безусловно, заслуживает порицания за то, что созданные ею мощные средства – Word и Excel – размывают границы между исполняемыми файлами, которые потенциально таят опасность, и файлами данных, бывшими до сих пор безопасными. Он заслуживает осуждения и за то, что интегрированная в Outlook 2000 поддержка языка HTML допускает возможность внедрения основанной на HTML разрушительной программы при простой загрузке электронного сообщения (оно автоматически открывается в режиме предварительного просмотра). А также за то, что разрушительная программа может использовать интеграцию ActiveX в Internet Explorer 5.0, чтобы распространяться без участия пользователя. Microsoft создала операционную среду, в которой разрушительные программы легко создаются, легко распространяются и могут причинять множество неприятностей. Но основная проблема, состоящая в том, что мобильный код не заслуживает доверия, намного более остра.

    Модульная программа

    В прежние времена (в 1970-х) компьютерные программы были крупными и громоздкими, их было трудно писать, и еще труднее использовать. Затем кому-то пришла идея поделить большие программы на мелкие, более простые для понимания компоненты. Объектно-ориентированное программирование, C++, подключаемые модули – все это различные реализации этой идеи. Проблема в том, что современное программное обеспечение, в основе которого лежат небольшие компоненты, намного сложнее защитить.

    Рисунок 10.1 иллюстрирует принцип, по которому построены старые программы: большие приложения опираются на небольшую операционную систему. Большинство современных программ похожи на Приложение 1 – приложения с компонентами – или на Приложение 2 – приложения с компонентами, состоящими из компонентов (рис. 10.2).

    Рис. 10.1. Устройство старого программного обеспечения

    Рис. 10.2. Современная структура компонентно-ориентированного программного обеспечения

    Представьте себе, как устроен браузер. Одним из компонентов является виртуальная машина Java (Java Virtual Machine). Апплеты Java запускаются на самом верху этой конструкции. Некоторые апплеты Java могут заменяться. Имеются все виды макросов для вашего текстового редактора и электронных таблиц. Вы можете загружать сменные PGP для Eudora. He исключено, что каждую неделю вы загружаете те или иные сменные модули для своего браузера.

    В действительности, хотя браузер и продается как единая программа, он состоит из множества работающих вместе разнообразных компонентов. Так же устроены текстовый редактор и электронные таблицы; в Microsoft Word свыше тысячи компонентов. Таким образом, вы имеете дело со схемой Приложение 3: небольшое приложение-основа, к которой крепится множество компонентов, состоящих, в свою очередь, из компонентов. Даже операционная система построена по тому же принципу; на рис. 10.3 представлена модель Windows NT: компоненты состоят из компонентов.

    Рис. 10.3. Архитектура Windows NT

    Безопасность страдает из-за применения динамической компоновки. В старых программах фрагменты программы соединялись вместе изготовителем (так называемая линковка, сборка – на программистском жаргоне) еще до того, как вы ее купили. Программисты связывали части программ и проверяли, что все работает как надо. Сейчас компоненты часто связываются динамически при запуске приложения. Пользователи Windows знают о так называемых библиотеках динамической компоновки (Dynamic Link Libraries, DLL); пользователям UNIX и Macintosh они известны как библиотеки коллективного доступа (shared libraries).

    Проблемы безопасности нужно рассматривать одновременно с нескольких точек зрения. Во-первых, вы не можете быть уверены, что все модули надежны. В предыдущем разделе я рассказывал о «вредных» программах; возможно, что один или несколько модулей являются разрушительными или просто неисправными. Во-вторых, вы не должны допускать, что все модули написаны настолько хорошо, что будут работать во всех возможных конфигурациях. Достоинством крупных компьютерных программ было то, что они тестировались как единое целое. Браузер, работающий на вашем компьютере, со всеми дополнительными модулями, которые вы загружали в произвольном порядке, может быть совершенно уникален. Маловероятно, что это сочетание кто-то уже тестировал.

    И в-третьих, еще не существует такой операционной системы, которая помогла бы решить две вышеуказанные проблемы. При старом принципе построения программ различные части программного обеспечения сообщались только через операционную систему. Хорошая операционная система могла обеспечивать взаимодействие программ и не допускать, чтобы одна программа повреждала другую. Современные компоненты непосредственно обращаются друг к другу, без посредничества операционной системы, поэтому применяемые в последних меры безопасности могут не работать.

    Эти проблемы безопасности пытались решать с применением некоторых общих методов, одни из которых принесли больший, другие – меньший успех. Но все эти подходы лучше выглядят в теории, чем работают на практике.

    Автономность (Isolation) и защита памяти. Эта мера направлена на то, чтобы помешать одному из компонентов умышленно или случайно воздействовать на остальную систему: читать или вносить изменения в память другого компонента, выходить за пределы отведенной ему памяти и приводить к поломке системы или доставлять другие неприятности. Автономное использование памяти предполагает, что каждому компоненту отводится свой участок памяти, за пределами которого этот компонент не может ни читать, ни записывать. Время от времени контролирующие программы (program checkers), установленные на машине пользователя, проверяют коды компонентов, чтобы убедиться, что не происходит ничего недозволенного. Примером реализации этой идеи служит «песочница» (sandbox) Java: все компоненты вынуждены «играть» в отдельных «песочницах», из которых они не могут повредить друг друга. Этот принцип защиты работает хорошо, но некоторые ошибки он не позволяет обнаружить, кроме того, за него приходится расплачиваться скоростью работы программ.

    Контроль доступа в интерфейсе. Сделав компонент полностью изолированным, мы не решаем проблему полностью: ведь ему необходимо взаимодействовать с другими компонентами (а также с экраном, клавиатурой, мышью и т. д.). На рис. 10.2 показаны пути взаимосвязей между компонентами. Устанавливая правила контроля доступа в точках соприкосновения, мы можем надеяться, что компоненты правильно взаимодействуют друг с другом. Проблема в том, что вы должны выбрать политику контроля доступа, которая должна быть достаточно жесткой, чтобы приносить действительную пользу. «Песочницы» Java позволяют добиться хороших результатов, однако недостаток их политики состоит в том, что она либо чересчур бескомпромиссная, либо излишне либеральная – «золотой середины» в реальности не существует. (Java 2 имеет мелкомодульный контроль, но он недостаточно используется.)

    Подписывание кода (Codesigning). Представьте себе закрытую частную вечеринку, попасть на которую реально, только предъявив какой-нибудь солидный документ (например, водительские права). При таком подходе в дом смогут пройти только друзья хозяина. Такой же смысл имеет подписывание кода. Программист подписывает отдельные компоненты. На основании этих подписей пользователь принимает решение, какие компоненты допустить на свой компьютер, а какие – нет. (В случае ActiveX подписывание кода – основной способ защиты от злонамеренного кода.) В своем сегодняшнем виде подписывание кода имеет массу проблем. Во-первых, непонятно, исходя из каких соображений пользователь должен решать, заслуживает ли доверия автор подписи. Во-вторых, сам факт существования подписи у компонента не означает, что он безопасен. В-третьих, то, что каждый из двух компонентов имеет подписи, не означает, что их можно использовать вместе: совместная работа чревата множеством непредвиденных опасных ситуаций. В-четвертых, к проблеме безопасности не следует подходить с позиции «все или ничего»: существуют разные степени безопасности. И в-пятых, фиксирование компьютером нападения (сохранение подписи кода) практически бесполезно с точки зрения атаки: при ее осуществлении злоумышленник может удалить или изменить подпись или просто переформатировать диск, на котором она была сохранена. Чем больше приходится размышлять о подписывании кода, тем меньше смысла видится в этой процедуре.

    Новые технологии, зарождающиеся в университетских лабораториях, помогут когда-нибудь найти лучшее решение, но это произойдет не ранее, чем через несколько лет. Тем временем модульная программа, вероятно, станет еще большей проблемой безопасности. Все больше и больше программных пакетов обладают способностью к самоусовершенствованию, то есть регулярно загружают новые модули. Например, Internet Explorer 4.0 и последующие версии дают возможность подписаться на обновление программного обеспечения. Если вы этим пользуетесь, то программа автоматически обновляется, загружая новые модули с веб-страницы корпорации Microsoft. Это очень полезное свойство, если не пускать дело на самотек. В противном случае вы можете обнаружить, что среди ночи ваш компьютер автоматически подсоединяется к Интернету. Как может на это отреагировать пользователь, видно по следующему отрывку из программы новостей:

    «Ранним утром я полез в холодильник, и вдруг услышал, что компьютер сам подключился к Интернету, – рассказал один пользователь, занимающийся бета-тестированием

    ???

    повредить его рабочим взаимоотношениям с Microsoft. – Я очень испугался и вытащил телефонную вилку из розетки».

    Здесь нет ничего постыдного – пользователь просто не осознал, что происходит. Но большинство компьютерных пользователей не имеют ни малейшего представления, что происходит внутри их компьютеров. И если они привыкли, что их компьютер куда-то звонит среди ночи, они могут однажды с удивлением обнаружить, что какая-то гнусная программа резко увеличила сумму телефонного счета, позвонив по 900 номерам в Молдавии.

    Переносимый код

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

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

    Я уже говорил о вирусах и троянских конях; они распространились потому, что люди обменивались копиями готовых программ (иногда нелегально), не беспокоясь о проблемах безопасности. Антивирусные средства помогли решить проблему, и на протяжении последних 20 лет пользователи безоговорочно доверяли программному обеспечению.

    Однако с появлением Интернета эта прочно укоренившаяся вера стала создавать крупные проблемы.

    В предыдущем разделе я объяснил, почему появление сетей сделало разрушительные программы более опасными. Там приведены и примеры переносимого кода и связанные с ними проблемы. К сожалению, существуют и более серьезные неприятности.

    С появлением модульных программ все больше фрагментов программного обеспечения рассылается по Интернету. Сейчас любое ваше приобретение с большой вероятностью получено с веб-сайта: новый дополнительный модуль для браузера, драйвер для принтера, блестящая утилита или апплет на Java, который делает какие-то классные штучки. Поэтому вам следует задать себе следующие важные вопросы. Надежна ли эта программа? Надежен ли этот веб-сайт? Можно ли быть уверенным, что эта программа будет правильно взаимодействовать с остальным содержимым компьютера? И какая есть защита на случай, если эта программа окажется разрушительной? Редко встречаются пользователи, которые задаются подобными вопросами, но еще реже – те, которые могут на них ответить.

    JavaScript, Java и ActiveX

    JavaScript, Java, ActiveX и загружаемые дополнительные модули – все они имеют различные модели защиты. Я по очереди расскажу о каждом из них.

    JavaScript – это язык сценариев Netscape, при помощи которого можно вставлять фрагменты кода на веб-страницу. Его поддерживают все основные браузеры. Его сходство с Java исчерпывается первыми четырьмя буквами. При помощи программы на JavaScript можно проделывать обычные простые действия: открывать и закрывать окна, изменять формы на веб-страницах, настраивать параметры браузера и т. п. Все, чем докучают некоторые веб-сайты при попытке закрыть их страницы, – это тоже JavaScript[32].

    Сам по себе JavaScript достаточно безвреден, но именно он лежит в основе множества атак всех видов, предпринятых за последние несколько лет. Приведу несколько примеров: 1997 год – контроль посещаемости сайтов пользователями; 1998 – чтение случайно выбранных файлов на машине пользователя; тот же 1998 – перехват адреса электронной почты пользователя. Для большинства этих атак требуется слегка обмануть пользователя, заставив его сделать незначительную глупость, но это и не сложно. Недостатки в обеспечении безопасности браузеров, допускавшие такие атаки, были выявлены довольно быстро и устранены. Но регулярно обнаруживаются новые «дыры».

    В ActiveX применяется защита при помощи подписывания кода. По сути, у каждого фрагмента кода ActiveX, называемого «control», проверяется цифровая подпись. (Microsoft вводит для этого понятие кода аутентичности.) После этого браузер открывает диалоговое окно и показывает пользователю имя программиста или компании, которые подписали код. Если пользователь соглашается принять код, программа загружается в браузер.

    Любой подросток, к которому на вечеринку заявлялись случайные гости не лучшего сорта, знаком с этой проблемой. Безопасность системы полностью находится в руках пользователя. Как только код ActiveX проникает на машину пользователя, он может сделать все что угодно: переформатировать жесткий диск, изменить ваши однодолларовые ставки в тотализаторе на стодолларовые, собрать все ваши полные чувств любовные письма и послать их кинопродюсеру в Лос-Анджелес и пр. и пр.

    Microsoft возразила, что подписи, конечно, будут указывать на автора, но это знание будет небольшим утешением человеку, у которого только что «рухнул» компьютер. Это все равно, что обязать преступников носить визитные карточки и перестать запирать двери на замок. «Мы сожалеем, что они вошли в ваш дом, съели всю вашу еду, сломали всю вашу мебель и унесли все ваши ценности. Но, по крайней мере, мы знаем, кто они». Причем в случае Интернета может быть такое уточнение: «Это были два подростка из страны, с которой у США нет договора об экстрадиции. Вам стало легче?» Кроме того, предполагается, что вы сможете определить, какая именно программа из десятков имеющихся у вас на жестком диске вызвала проблемы. Один исследователь показал, что при соединении двух безвредных средств управления ActiveX они способны стать разрушительными; и кто будет виноват в этом случае?

    Существуют и более серьезные проблемы. В главе 17 подробно рассказывается о том, насколько сомнительно, что пользователи примут правильное и безопасное решение, здесь же достаточно сказать, что большинство людей не беспокоятся о том, каким средствам ActiveX можно доверять, а каким – нет. А это предполагает наличие инфраструктуры открытого ключа (PKI), поддерживающей подписи, о чем я еще буду сокрушаться в главе 15. Существует много возможностей обмануть PKI и заставить ее поверить, что средство управления подписано, когда это не так.

    На самом деле ActiveX – это расширение старой системы компонентов Microsoft, так называемой DCOM. Это система, при помощи которой, например, Internet Explorer открывает и показывает таблицы Excel. Большинство используемых программами DLL на самом деле служат только транспортным средством для объектов DCOM. Explorer просто вставляет внутреннее содержимое книги Excel посредством DCOM и ActiveX. Это – невероятно мощная система, более гибкая, более доступная, более интересная архитектурно и невообразимо более опасная, чем аналогичные способы в других операционных системах.

    В Java применяется совершенно иная модель. Это – просто язык программирования, специально разработанный для переносимого кода, создатели которого не забывали и о безопасности. Программы Java, запускаемые при помощи веб-браузера, называются апплетами, и им для работы отводится определенный участок памяти, «песочница», которая позволяет ограничить возможные повреждения. «Песочницы» защищаются по трем схемам.

    Во-первых, существует так называемый верификатор байтового кода. При каждой загрузке апплета Java верификатор байтового кода сначала проверяет программу. Верификатор гарантирует, что байтовый код имеет правильный формат и не создаст каких-либо общих проблем.

    Во-вторых, имеется загрузчик класса. Этот компонент определяет, как и когда апплет может быть добавлен к среде Java. Его задача – убедиться, что апплет не заменит уже существующую важную программу.

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

    Модель «песочницы» слишком сложна, но это лучшее, что у нас есть в настоящее время. Последние версии Java имели две модификации – хорошую и плохую. В Java 1.1 реализовано подписывание кода, что роднит его с ActiveX. Апплеты, которым пользователи доверяют, могут выходить за пределы «песочницы» и без ограничений работать на машине пользователя. Нужно ли говорить, насколько при этом делаются актуальными все проблемы безопасности модели ActiveX?

    В Java 2 усовершенствована модель «песочниц». Вместо подхода «все или ничего» – или в «песочнице», или за ее пределами – Java 2 обеспечивает большую гибкость модели безопасности. Апплеты получают именно такие полномочия, которые необходимы для выполнения их работы. Например, один апплет может иметь доступ к файловой системе компьютера, но не иметь сетевого доступа. Другому разрешен сетевой доступ, но запрещен доступ к файловой системе. Третий апплет может иметь только доступ к определенной части файловой системы. То есть каждому апплету предназначается своя «песочница». Такая система работает намного лучше, но, как оказалось, она сложна в использовании.

    Дополнительные модули хуже всего, поскольку они автоматически считаются надежными. Это – программные модули, которые вы можете добавить к своему браузеру, чтобы расширить его функциональные возможности, например средства просмотра файлов формата PDF, медиапроигрыватели или что-нибудь еще. У них нет никакой системы безопасности. Если вы их загружаете и устанавливаете, значит, вы им доверяете. Точка.

    Безопасность Веб

    HTTP (протокол, используемый в Веб), как и большая часть информации, блуждающей в Интернете, незашифрован и неаутентифицирован. Многие боятся доверять номера своих кредитных карт незашифрованной веб-связи. (Я не думаю, что в этом есть смысл, но кое-что я бы посылать по Сети незашифрованным не стал.) Чтобы решить эту проблему, в ранние версии Netscape Navigator включали специальный протокол, так называемый SSL. Этот протокол, который был со временем переименован в TLS, обеспечивает шифрование и аутентификацию веб-связи. SSL довольно хорош, и все его проблемы касаются сертификатов и их применения (подробности – в главе 15). Некоторые веб-сайты предоставляют вам возможность выбрать защищенный SSL сеанс связи с браузером. (Веб-страница должна иметь этот параметр; браузер не будет использовать SSL, если на сервере нет соответствующих установок.) Браузер и веб-сервер применяют шифрование открытым ключом для обмена ключами и симметричное шифрование для кодирования данных. Присутствие в нижней части браузера зеленого ключа или желтого замка дает пользователю возможность почувствовать себя намного свободнее.

    Однако нельзя упускать из виду, что пока пользователь не проверит вручную присланный сервером сертификат, он не имеет ни малейшего представления о собеседнике. Я повторяю, SSL устанавливает безопасную связь между браузером и кем-то на другом конце соединения. Если пользователь не проверит, кто находится на другом конце соединения, он не будет знать, с кем он секретничает. Представьте себе, что двое незнакомых друг с другом людей входят в абсолютно темную комнату со звуконепроницаемыми стенами. Они знают, что их разговор никто не подслушает. Но кто доверит свои секреты незнакомцу? Это одна из проблем, возникающих при использовании SSL-сертификатов.

    Кроме того, SSL не обеспечивает защиты данных на сервере. В начале 2000 года хакеры неоднократно взламывали веб-сайты и крали информацию: номера кредитных карт, информацию о лицевых счетах и многое другое. SSL не в состоянии это предотвратить.

    Взлом URL

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

    Один из способов получить чужой трафик – обмануть поисковую машину. Машины поиска в большинстве своем довольно глупы: вы спрашиваете их о сайтах про водопроводное оборудование и получаете в ответ все веб-страницы, на которых где-то в тексте есть словосочетание «водопроводное оборудование». (Более современные машины поиска чуть умнее, но основной принцип сохранился.) Некоторые сайты имеют на своих страницах посторонний текст в качестве приманки для поисковой машины. Этот текст не отображается на экране – он может быть спрятан (например, белый текст на белой странице), может быть представлен в виде ключевых слов или мета-тегов в непечатаемой части страницы, – но он просматривается поисковой машиной. Так, на порнографическом сайте могут находиться слова: «котировки ценных бумаг; погода; выборы президента; Кливленд; кулинария; садоводство», и при поиске по этим словам машина найдет, в числе прочих, этот порносайт.

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

    Атаки такого рода не ограничиваются веб-страницами и поисковыми машинами. Небольшие компании иногда включают в свои пресс-релизы название и эмблему более крупной компании, и в результате люди, которые ищут ту большую компанию, получат и этот пресс-релиз. Это называется столкновением наименований (ticker symbols mashing) и может выглядеть примерно так: «SmallCompany com объявила, что ее новая программа не имеет ничего общего с Microsoft». Даже при описании лота на аукционе eBay используются слова, которые будут притягивать к нему поиск: «Этот дешевый свитер (не Прада, не Армани) красного цвета».

    Возвращаясь к Веб, отмечу, что одним из способов подобных атак является регистрация сайтов, имена которых похожи на имена популярных сайтов. Этим занимаются тайпсквоттеры («пираты» опечаток). Например, адрес wwwpainewebber com (без точки, вместо www painewebber com) приведет кого-то на порнографический сайт. Люди, которые неправильно набрали название страховой компании (Geigo вместо Geico), окажутся на сайте, которым владеет Progressive Insurance. (Эти атаки, происходящие в результате опечаток пользователя, скорее всего, уже никому не повредят; во время написания книги проходили несколько судебных процессов как раз по такому поводу.)[33]

    Подобные инциденты могут возникать и спонтанно. Компания eToys попыталась возбудить судебный процесс против группы артистов etoy, несмотря на то что доменное имя etoy com было зарегистрировано за два года до того, как появилось eToys com. (Хотя имена доменов действительно совпали случайно, оказалось, что etoy занимались переключением страниц на сайты Playboy.)

    Все перечисленные выше случаи не относятся к киберсквоттингу. Этим термином обозначают регистрацию имени домена, которое может представлять интерес для кого-то. Например, кому-то другому, но не мне принадлежат имена applied-cryptography com и applied-cryptography com, а именно так называется моя первая книга[34].

    Веб-спуфинг (Web-spoofing), или получение доступа обманным путем, – еще один вариант мошенничества в Интернете. Подделывая адреса URL на сайте клиента, злоумышленник может вынудить жертву всегда совершать поиск через определенный сайт. Этот сайт, которым владеет злоумышленник, может перехватывать весь сеанс поиска жертвы. Злоумышленник может сохранить записи о том, на какие сайты заходила его жертва, ее различные учетные записи, пароли и т. п. Злоумышленник может также слегка изменять различные страницы, например менять адрес отправления купленного жертвой продукта.

    Такая атака возможна даже при SSL-связи. Как я отмечал ранее, SSL гарантирует только то, что канал связи недоступен посторонним. А если секретная связь установлена со злоумышленником, это мало поможет. Несколько других трюков облегчают нападение, поэтому выключение JavaScript в браузере дает некую защиту. Некоторые веб-сайты, например AskJeeves, усугубляют проблему, размещая у себя веб-страницы других людей и представляя их информацию как свою. В момент написания книги не было данных о существовании такого рода атак «в диком виде».

    Cookies

    Cookies – это программная хитрость, встроенная в браузеры Всемирной Сети изобретательными программистами. По своей сути cookies – это небольшие порции информации, которую веб-сервер поставляет браузеру. Браузер сохраняет эти данные на компьютере пользователя и отсылает их на сервер всякий раз, когда браузер возвращается к серверу. Cookies позволяют сделать массу полезных и хороших вещей. Но, к сожалению, они также допускают множество разрушительных действий. В первую очередь я объясню, как они работают, а затем расскажу о проблемах, с ними связанных.

    HTTP – по сути, протокол, не идентифицирующий пользователя. Это значит, что сервер не знает, кто с ним работает. Сервер просто обслуживает веб-страницы. Браузер запрашивает веб-страницу – сервер ему ее выдает. Сервер не имеет представления, тот ли это браузер, что и раньше, или другой – ему все равно. Такой подход замечательно работает для простых, статических веб-сайтов, содержащих только страницы с фиксированным содержанием.

    Сложные веб-сайты имеют динамическое устройство. На веб-сайтах розничной торговли есть «корзины», с которыми вы перемещаетесь при просмотре сайта. На информационных сайтах с платным доступом имя пользователя и пароль требуется вводить при переходе со страницы на страницу. (На мой взгляд, утомительно набирать имя пользователя и пароль каждый раз, когда я хочу посмотреть еще одну статью на веб-сайте New York Times.) Cookies дают возможность управиться с этим.

    Отправляя браузеру cookies, а затем запрашивая их обратно, сервер как бы вспоминает, кто вы. «А, конечно, вы – пользователь 12467, вот ваша корзина». Cookies позволяют браузеру добавлять возможность идентификации к протоколам Интернета. Это выглядит, как огромная рассредоточенная база данных, фрагменты которой хранятся в миллионах браузеров.

    До сих пор я рассказывал о пользе cookies. Они, главным образом, полезны, если сервер, их разместивший, играет по правилам. Сервер устанавливает, сколько времени действителен cookie: хорошее значение – несколько дней. Сервер может установить ограничения на доступ к cookie. Сервер может ограничивать доступ к другим серверам в том же домене; это значит, что если ваш cookie пришел с inchoate-merchant com, то только inchoate-merchant com может иметь к нему доступ.

    Проблемы возникают при нарушении правил игры. Некоторые серверы используют cookies, чтобы прослеживать пользователя от сайта к сайту, а некоторые с помощью cookies идентифицируют пользователя. Вот простой пример: компании занимаются перепродажей места для размещения рекламы на популярных сайтах. Одна из таких компаний – DoubleClick; именно через нее размещены многие объявления, которые вы видите на коммерческих сайтах. Если вы будете просматривать sex-site com, вы увидите часть того окна, которое пришло с DoubleClick com. DoubleClick com предоставляет вам cookie. Позже (в этот же день или, может быть, в другой) вы будете просматривать CDnow com, на котором DoubleClick разместила другую рекламу. DoubleClick может запросить cookie вашего браузера и установить, что он был создан в то время, когда вы посещали секс-сайт, после чего вам будет отправлена целевая реклама, хотя вы интересуетесь CDnow. Поскольку DoubleClick сотрудничает с целым рядом коммерческих сайтов, по ее cookies можно проследить пользователя на всех этих сайтах.

    Еще более серьезные проблемы вас ожидают, если вы оставите свой электронный адрес на каком-то из этих сайтов, а они отошлют эту информацию в DoubleClick. Все, что от вас требуется – один раз набрать этот адрес, заказать одну-единственную вещь, и он останется у них навечно. (Или до окончания срока cookies, что может затянуться на годы.)

    Такие действия не являются большим секретом. DoubleClick открыто признает, что собирает данные и использует их, чтобы направлять рекламу определенным пользователям. До 2000 года они отрицали создание идентификационных баз данных, но в конце концов признали это после сообщения в USA Today. С тех пор они отступили от идеи связывать cookies с именами и адресами. (Хотя, возможно, выплывут новые факты в результате какой-нибудь публикации.)

    Идем дальше. Сайты способны послать вам по электронной почте cookie, при помощи которого они могут вас идентифицировать, если вы позже посетите этот сайт. Вот как это работает: сайт посылает вам сообщение в формате HTML. (Это предполагает, что вы пользуетесь программами для электронной почты, поддерживающими сообщения HTML; среди таких программ – Microsoft Outlook и Outlook Express, Netscape Messenger и Eudora.) Сообщение содержит уникальный URL, скрытый графикой, который сайт может использовать, чтобы послать вам cookie. Если URL имеет вид www gotcha com/track-cgi=schneier@counterpane com/pixels gif, значит, у них в cookie – ваш адрес электронной почты. Тогда, если вы просматриваете сайт в какой-то последующий день, сайт может по cookie определить ваш адрес электронной почты и отследить ваши перемещения в Интернете.

    Сами cookies не умеют осуществлять активных действий. Они не могут похитить информацию из вашего компьютера. Cookies – это просто некоторые данные, которые сервер сообщает браузеру, а браузер позже возвращает. Cookies не могут украсть у вас пароли или файлы. (ActiveX, Java и JavaScript в этом отношении гораздо более опасны.) Cookies не в силах похитить номера ваших кредитных карт, но может оказаться так, что «глупые» сайты включат в cookie номер вашей кредитной карты.

    Из всего вышесказанного можно сделать вывод, что cookies – по своей сути полезный инструмент, но при неумелом обращении они могут работать на злоумышленников. Это простейший способ, позволяющий веб-программистам контролировать взаимосвязи. Большинство браузеров допускают полное отключение cookies, можно купить дополнительные программы, позволяющие лучше управляться с ними. Хотя некоторые сайты – например, Hotmail и Schwab Online – не соединяются с браузерами, не принимающими cookies.

    Веб – сценарии

    Мишенью всех атак, рассмотренных выше, является компьютер пользователя, а сейчас речь пойдет об атаке, направленной на сервер.

    Общий шлюзовый интерфейс (Common Gateway Interface, CGI) – это стандартный способ, которым веб-сервер передает запрос клиента размещенным на нем приложениям и отсылает ответ пользователю. Если вы посылаете поисковый запрос на веб-сайт – например, на сайт розничной электронной торговли, – веб-сервер передает запрос в приложение базы данных и затем форматирует ответ перед тем, как предоставить его пользователю. Или если посетитель заполняет анкету на веб-странице, то эта информация передается в соответствующее приложение для последующей обработки. Иногда вы можете видеть команды CGI в адресной строке браузера – это непонятные значки и цифры в конце URL; в других случаях они не видны пользователю. Это часть HTTP, все ею пользуются. Сценарии CGI – это небольшие программы на веб-сервере, которые работают с данными. Например, они задают принцип обработки анкет на веб-страницах.

    Сложности при работе со сценариями CGI в том, что каждый из них – потенциальная прореха в системе безопасности. Манипулируя сценариями CGI, можно совершать самые неожиданные веши. Вот ряд примеров (все они действительно имели место): загрузка файла с веб-сервера, просмотр всего содержимого базы данных, загрузка списка покупателей и их персональных записей, кража денег у клиентов электронного банка, торговля чужими контрольными пакетами акций и просмотр системных журналов веб-сервера, в которых записаны договоры клиентов.

    Другие похожие атаки проводятся путем помещения исполняемого кода (обычно сценарии Perl или код JavaScript) в текстовые поля. Таким путем можно заставить веб-сервер внести изменения в домашнюю страницу, показать секретный ключ SSL или доставить другие неприятности, о которых сказано в предыдущем абзаце. Этот метод также позволяет использовать переполнение буфера и другие ошибки программирования (см. главу 13), чтобы вызвать поломку веб-сервера или, что еще лучше, захватить этот сервер в свои руки.

    Один пример: в 1998 году в результате атаки против Hotmail стало возможным увидеть учетные записи электронной почты других людей. eBay также подвергся атаке; злоумышленники поместили троянского коня, написанного на JavaScript, в поле описания товара. Это поле видел любой, кто просматривал товары, выставленные на продажу, и в результате злоумышленники получали информацию о тысячах учетных записей.

    Один недостаток CGI позволил злоумышленникам загружать секретную персональную информацию с различных сайтов. Другие сценарии CGI использовались, чтобы взломать веб-сервер. В конце 1999 года были предприняты две атаки – атака Poison Null («отравленный» нуль), позволившая хакерам просматривать и изменять файлы на веб-сервере, и атака Upload Bombing (бомбежка при пересылке), наводнившая веб-серверы бесполезными файлами, которые очень быстро превращались в атаки-сценарии, так что любой мог при желании их использовать[35].

    Включения на стороне сервера (Server Side Includes, SSI) – это указания для вебсерверов, встроенных в HTML-страницы. Непосредственно перед отправкой страницы браузеру веб-сервер выполняет все SSI, содержащиеся на странице, и помещает на нее результаты своей работы. Атаковать SSI так же выгодно, как и все остальное.

    Можно атаковать уязвимые места в стороннем программном обеспечении: на специфических веб-серверах, в их приложениях. Сюда относятся приложения для баз данных, программы «корзины», сервер транзакций и другие. Эти атаки зависят не от того, как сайт использует приложение, а от самого приложения (СУБД Oracle, например). Злоумышленники могли бы загрузить исходную программу с веб-сервера, разрушить сервер, получить привилегии доступа на уровне администратора для входа на сервер, запустить на сервере произвольную программу и т. п. В отличие от прорех безопасности, вызванных сценариями CGI, установление уязвимых мест в дополнительных приложениях не находится под контролем сайта; это обязанность поставщиков стороннего программного обеспечения.

    Существует множество похожих атак. Внося изменения в скрытые поля на некоторых веб-страницах (эти поля можно увидеть при просмотре начала страницы), есть шанс взломать сценарии CGI и заставить некоторые программы «корзин» изменить цены предлагаемых товаров. (Вплоть до «назовите свою цену».) Некоторые атаки направлены на cookies: порча cookie. Злоумышленники входят на сервер и вручную меняют свои аутентификационные cookies на cookies других пользователей. Иногда эти cookies зашифрованы, но часто не очень надежно.

    Некоторые атаки носят название написания перекрестных сценариев. Это довольно неудачное название: атаки заключаются не столько в написании сценариев, и речь не идет о пересечении. То, что они так называются, сложилось исторически. Суть в том, что Веб скрывает в себе множество мелких хитростей; когда вы смешиваете сценарии CGI, JavaScript, фреймы и cookies, cookies и SSL, итог может оказаться неожиданным и нежелательным. Использование различных платформ одновременно – это спорный путь, в результате нетрудно получить непредсказуемое взаимодействие различных компонентов сложных систем.

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

    Атаки CGI – мощные, против них мало что устоит. Конечно, можно написать безопасный CGI-сценарий, но едва ли кто-то это сделает. Одна компания занималась проверкой веб-сайтов на предмет недостатков в приложениях вроде CGI-сценариев – она не нашла ни одного сайта, который нельзя взломать. Это – стопроцентная уязвимость.

    Веб – конфиденциальность

    Номинально веб-просмотр анонимен. В реальности существует много способов идентифицировать пользователя. Я уже говорил, что по cookies можно следить за перемещением пользователя с сайта на сайт и даже включить в cookie адрес электронной почты или другую личную информацию (если пользователь заполняет анкету или отвечает на электронное сообщение).

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

    Конечно, IP-адрес пользователя – это все же не имя пользователя, но многие веб-браузеры установлены на машинах с единственным пользователем, напрямую подключенных к Всемирной паутине. Те пользователи, которым приходится дозваниваться, обладают большей анонимностью, чем пользователи с кабельным модемом или DSL-соединением (Digital Subscriber Line, цифровая абонентская линия), но часто для идентификации достаточно установить провайдера. Например, в 1999 году неизвестный угрожал бомбой, отправив сообщение с регистрационной записи Hotmail. Электронная почта Hotmail содержит IP-адреса веб-браузеров, с которых отправляли почту. IP-адрес принадлежал America Online, и полиция, сравнив его и записи Hotmail, смогла проследить электронное сообщение до индивидуального пользователя America Online.

    В данном случае для нарушения конфиденциальности были экстренные причины, но большинство таких действий можно автоматизировать. Коммерческие веб-сайты, как правило, не слишком стараются защитить конфиденциальность клиента. Фактически, многие из них делают деньги на рекламе. Другие сайты сознательно посягают на конфиденциальность посетителя, чтобы осуществлять направленную рекламу: это разные «цифровые бумажники», список компаний, производящих программное обеспечение и всякое другое. Многие компании рассматривают целевую рекламу как своего рода бизнес при помощи Интернета.

    Глава 11
    Сетевая безопасность

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

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

    Существует множество различных типов сетей, но я собираюсь посвятить большую часть времени обсуждению интернет-протокола TCP/IP. Кажется, все сетевые протоколы используются в Интернете, так что разумнее всего говорить именно о Всемирной Сети. Это не значит, что протоколы Интернета менее надежны, чем другие, – хотя, конечно, при их разработке мало думали о безопасности. Как будет ясно из дальнейшего обсуждения, наиболее фундаментальным является вопрос, что предпочесть – общеизвестный протокол, который долгое время атаковался хакерами и чья надежность, следовательно, постоянно улучшалась, или протокол малоизвестный и, возможно, менее безопасный. Помните об этом во время чтения данной главы.

    Как работает сеть

    Компьютерные сети – это группы компьютеров, соединенных между собой. При этом компьютеры либо соединены физически – при помощи проводов офисной ЛВС, выделенной линии (возможно, ISDN или DSL), телефонной коммутации, оптического волокна, либо же используется электромагнитная связь – радио, высокочастотные волны и т. п.

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

    Компьютеры не используют цепи для переговоров друг с другом. Они не ведут разговоры, как люди, – они обмениваются небольшими пакетами данных. Эти пакеты могут содержать части самых разнообразных данных: посланий электронной почты, сжатых графических изображений обнаженных женщин, видео– и аудиопотоков, телефонных переговоров в Интернете. Для того чтобы облегчить передачу, компьютеры делят большие файлы на пакеты. (Представьте себе, что письмо объемом 10 страниц было отправлено по частям в 10 различных конвертах. Получатель вскрывает все послания и восстанавливает изначальный вид письма. При этом пакеты не обязаны прибывать в последовательности, соответствующей порядку расположения страниц, и приходить к адресату одними и теми же путями.)

    Эти пакеты посылаются через сеть по маршрутам. Есть разные протоколы – Ethernet, TCP и другие, – но базовые принципы их работы одинаковы. Маршрутизаторы перенаправляют пакеты по указанным в них адресам. Они могут не знать точно местонахождения адресата, но имеют некоторые представления о том, в каком направлении следует отправить пакет. Это несколько напоминает почтовую систему. Почтальон приходит в ваш дом, забирает всю исходящую корреспонденцию и доставляет ее в местное почтовое отделение. Там могут вовсе не знать, где находится дом 173 по Питтерпат Лэйн, Фингербон, Айдахо, в котором проживает мистер X, но располагают сведениями, что конверт вместе со всей остальной корреспонденцией нужно погрузить в автомобиль, который едет в аэропорт. Служащие почты аэропорта также не осведомлены, где живет мистер X, но знают, что должны отправить письмо самолетом в Чикаго. В почтовом отделении аэропорта Чикаго знают, что должны переложить письмо в самолет, вылетающий в Бойсе. В почтовом отделении города Бойсе знают, что письмо нужно доставить к поезду, который идет в Фингербон. И наконец, на почте Фингербона имеют точную информацию, где находится указанный адрес, и почтальон доставит письмо.

    Безопасность IP

    Нетрудно видеть, что любая сеть, построенная по этой модели, совершенно ненадежна. Рассмотрим Интернет. Так как пакеты проходят сначала по одному маршруту, затем по второму, третьему и т. д., их данные, иногда называемые полезной нагрузкой, открыты для каждого, кто захочет их прочесть. Предполагается, что маршрутизаторы считывают только адрес получателя в заголовке пакета, но ничто не может помешать им просматривать и содержимое. Большая часть трафика (с использованием межсетевого протокола IP) проходит по немногочисленным высокоскоростным соединениям, составляющим скелет Интернета. Между отдаленными пунктами, находящимися, например, в США и Японии, пакеты проходят только по нескольким определенным маршрутам.

    Хакеру сложно контролировать весь Интернет, но легко отслеживать, что происходит в небольшой части Сети. Все, к чему он стремится, – это получить доступ к отдельным компьютерам. Тогда он сможет просматривать все пакеты, проходящие через данный участок, в поисках интересующих его. Если он получает доступ к компьютеру, близко расположенному к компьютерам компании А, то, вероятно, сможет перехватывать все ее исходящие и входящие информационные потоки. (Конечно, имеется в виду «близко» в Сети, а не обязательно физически рядом.) Если ему не удастся проникнуть в компьютер рядом с компанией А, то он сможет перехватывать лишь малую часть информационного обмена этой компании (или не увидеть совсем ничего). Если он наиболее типичный хакер, которому все равно, какую компанию прослушивать, то это не имеет для него значения.

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

    Возможно не только прослушивание, но также и активные нападения… на самом деле их даже легче осуществить. В большинстве систем связи значительно проще вести пассивное прослушивание сети, чем вставлять и удалять сообщения. В Интернете все с точностью до наоборот: подслушать сложно, а послать сообщение просто; любой уважающий себя хакер способен это сделать. Так как процесс передачи информации основан на пакетах, и они путешествуют многими различными путями, встречаясь лишь у своего адресата, легко незаметно подсунуть один пакет вместе с остальными. Многие нападения основаны на вставке пакетов в существующие каналы связи.

    Это называется подменой адреса (IP-spoofing)[36] и легко осуществимо. В пакетах присутствует информация об источнике и адресате, но нападающий может изменить их как пожелает. Он может создавать пакеты, которые с виду прибывают от некоего отправителя, хотя на самом деле это не так. Компьютеры в Интернете не в состоянии проверить, соответствуют ли действительности сведения об отправителе и адресате; таким образом, если компьютер получает пакет, пришедший от известного ему отправителя, которому можно доверять, то содержимое пакета также считается заслуживающим доверия. Нападающий может с выгодой использовать эти отношения взаимного доверия, чтобы внедриться в машину: он отправляет пакет, который будет выглядеть, как поступивший от проверенного компьютера, в надежде, что адресат, на которого нацелено нападение, поверит ему.

    Это – атаки на маршрутизацию: нападающий сообщает двум узлам в Интернете, что кратчайший маршрут между ними пролегает через его компьютер. При этом легко можно прослушивать отдельные узлы. Данную тему можно продолжать и продолжать, многие книги уже написаны об атаках в Интернете.

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

    Фактически в Интернете уже реализуется шифрование пакетов. Программы типа SSH шифруют и аутентифицируют внешние связи пользователя с другими компьютерами через сеть. Протоколы типа SSL могут шифровать и подтверждать подлинность веб-трафика в Интернете. Протоколы типа IPsec, возможно, будут способны шифровать все и аутентифицировать всех.

    Безопасность DNS

    Domain Name Service[37] (DNS) – система доменных имен (механизм, используемый в Интернете и устанавливающий соответствие между числовыми IP-адресами и текстовыми именами), – по существу, огромная распределенная база данных. Большинство компьютеров в Интернете – узлы, маршрутизаторы и серверы – имеют доменные имена, вроде brokenmouse com или anon penet fi. Эти имена созданы для удобства запоминания и использования, например, в указателях информационного ресурса (URL) или адресах электронной почты. Компьютеры не понимают доменных имен; они понимают IP-адреса, наподобие 208.25.68.64. IP-адреса используются при отправке пакетов по сети.

    DNS преобразует доменные имена в IP-адреса. Когда компьютер получает имя домена, он запрашивает сервер службы доменных имен для перевода этого имени в IP-адрес. Тогда он знает, куда послать пакет.

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

    Несложно представить себе виды нападений, которые могут быть осуществлены при таком состоянии дел. Нападающий способен убедить компьютер, что ему можно доверять (изменив таблицы службы доменных имен так, чтобы компьютер нападающего выглядел как заслуживающий доверия IP-адрес). Нападающий в состоянии завладеть сетевым подключением (изменив таблицы таким образом, что кто-нибудь, желающий подключиться к legitimate company com, в действительности получит соединение с evil hacker com). Нападающий может сделать все что угодно. У серверов DNS есть процедура обновления информации: если один сервер службы доменных имен изменит запись, он сообщит об этом другим серверам DNS, и они поверят ему. Таким образом, если нападающий сделает изменения в нескольких точках, есть вероятность распространения этих поправок по всему Интернету.

    В 1999 году было совершено такое нападение: кто-то взломал систему службы доменных имен для того, чтобы трафик к Network Solutions – так называлась одна из компаний регистрации доменных имен – был переадресован другим компаниям, занимающимся аналогичной деятельностью. Подобная же атака, рассчитанная на огласку, была проведена в 1997 году. Это случилось до того, как регистрация домена стала предметом конкурентной борьбы. Евгений Кашпурев, владелец альтернативного сайта AlterNIC, в качестве акции протеста перенаправил трафик Network Solutions на свой собственный сайт. Он был арестован, осужден и получил два года условно.

    В 2000 году злоумышленники получили обманным путем доступ к таблицам службы доменных имен и присвоили домашнюю страницу RSA Security. Это не то же самое, что внедриться на веб-сайт и стереть страницу. Нападающий создает фальшивую домашнюю страницу и переадресует на нее весь трафик посредством манипулирования записями DNS. Хакер осуществляет вторжение, взламывая не DNS-сервер RSA, а серверы DNS в направлении, противоположном основному потоку в Сети. Умно и очень легко. Получение обманным путем доступа к записям службы доменных имен – это тривиальный путь взлома реального веб-сайта. И чтобы дела «похищенного» сайта обстояли еще хуже, взломщик вводит людей в заблуждение: они думают, что взломан веб-сайт компании А, в то время как на самом деле злоумышленниками контролируется сервер службы имен домена компании В.

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

    Нападения типа «отказ в обслуживании»

    В сентябре 1996 года неизвестный хакер или группа хакеров атаковали компьютеры нью-йоркского интернет-провайдера Panix. Они посылали сообщения hello (пакеты синхронизации SYN) на компьютеры Panix. Обычно предполагается, что удаленный компьютер отправляет Panix приветственное сообщение, ожидает ответа и после этого продолжает сеанс связи. Нападавшие фальсифицировали обратный адрес удаленных компьютеров, так что Panix пытался синхронизироваться с компьютерами, которые в действительности не существовали. Компьютеры Panix 75 секунд ожидали ответа удаленного компьютера, прежде чем прервать связь. Хакеры «топили» Panix со скоростью более 50 сообщений в секунду. Это превышало возможности компьютеров Panix, что и привело их к аварийному отказу. Такое нападение называется атакой синхронизации (SYN flooding).

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

    Существует возможность вызвать «отказ в обслуживании» обычного почтового сервиса: злоумышленник подписывает жертву на все каталоги почтовых заказов и на прочие издания, которые только могут прийти на ум. Жертва получает так много корреспонденции, допустим, 200 единиц в день, что шансы потери полезной почты среди ненужного хлама увеличиваются соответственно. Теоретически так обязательно и случится. Единственный способ воспрепятствовать этому нападению – ограничить количество рассылок ненужного хлама. А в Интернете почтовые серверы по определению рассылают почту. В 1995 году Фронт освобождения Интернета (Internet Liberation Front – это, скорее всего, вымышленное название, с тех пор о нем не было упоминаний) направил поток сообщений по электронной почте в журнал Wired и его автору Джошуа Квиттнеру. Поток был так велик, что компьютеры перестали работать.

    Эта атака известна как бомбежка почтой, и она весьма эффективна. Отправьте кому-нибудь достаточное количество почтовых посланий, и его почтовый сервер будет принимать почту до тех пор, пока не «захлебнется». Наилегчайший путь сделать это – подписать жертву на тысячи почтовых рассылок. На дисках жертвы может не остаться места, сетевое подключение может перестать работать, или компьютеры могут прийти к аварийному отказу. И если вы замаскируете происхождение потока электронной почты, никто вас не поймает.

    Есть другие нападения, приводящие к отказу в обслуживании. Некоторые нацелены на компьютеры, подобно только что описанному нападению на сервер электронной почты. Другие ориентированы на маршрутизаторы. Некоторые настроены на вебсерверы. Основная идея – та же самая: завалить цель таким большим количеством хлама, что он остановит ее работу. WinNuke может привести к аварийному отказу компьютеров с операционной системой Windows 95 и более ранней. Одиночное нападение в Интернете в апреле 1999 года вызвало сбой 6000 компьютеров с Windows 95.

    Иногда может быть трудно отличить нападение, приводящее к отказу в обслуживании, от неправильных действий. Представьте себе городские магистрали. В нормальное время по ним можно ехать быстро. В часы пик там много заторов. Во время демонстраций они вообще закрыты. В 1999 году демонстрация против Всемирной торговой организации парализовала движение в центре Сиэтла, что, несомненно, можно рассматривать как атаку типа «отказ в обслуживании». Несколько раньше, когда пилоты American Airlines стали сказываться больными намного чаще обычного и у компании возникли проблемы с обслуживанием рейсов, это было менее очевидной разновидностью этой атаки. В 2000 году после выхода в эфир специальной телевизионной программы «Кто хочет выйти замуж за мультимиллионера» веб-сайты телеканала были сокрушены наплывом желающих войти и зарегистрироваться для участия в шоу. Было ли это нападением, приводящим к отказу в обслуживании?

    Некоторые исследователи предложили средства защиты, вынуждающие клиента производить длительные вычисления, прежде чем он получит возможность соединения. Идея состоит в том, что если клиент должен потратить время на вычисления, то он не сможет «затопить» адресата многочисленными соединениями. Это хорошая идея, но она не будет работать против распределенных нападений типа «отказ в обслуживании», о чем мы поговорим в следующем разделе этой главы.

    Некоторые полагают, что всему виной недостаточная аутентификация в Интернете. Это утверждение бессмысленно. Нападения типа «отказ в обслуживании» причиняют вред тем, что присылают пакеты; будут ли пакеты аутентифицированы или нет, никакого значения не имеет. Обязательная аутентификация никак не сможет предотвратить такие нападения или помочь в идентификации нападающих. Было бы иначе, если бы аутентификация могла быть проверена в каждой точке Сети. Это привело бы к изменениям в способе работы Интернета и значительно уменьшило бы пропускную способность сетей: вместо простой маршрутизации пакетов все коммутаторы и маршрутизаторы должны были бы еще аутентифицировать их.

    Здесь может помочь крупномасштабная фильтрация сети интернет-провайдерами; если сеть в состоянии заблокировать нападение типа «отказ в обслуживании», оно никогда не достигнет цели. Здесь аутентификация может оказаться полезной. Но фильтрация интернет-провайдерами потребует больших усилий и значительно уменьшит сетевую пропускную способность. Подобным образом повсеместное использование коммутаторов и маршрутизаторов Интернета, в работу которых были бы внесены некоторые изменения, способствовало бы решению этой проблемы: они могли бы отказаться пересылать пакеты, которые явно подделаны. И опять-таки, это потребует значительных изменений.

    И наконец, несмотря ни на что, с нападениями, которые попросту заваливают адресата потоками информации, ничего нельзя поделать. Некоторые нападения основываются не только на использовании лавинного эффекта: они также эксплуатируют определенные слабые места в защите; и они могут быть предотвращены, если будут заблокированы эти уязвимые точки. Но если у нападающего достаточно мощный «пожарный брандспойт», он может «затопить» свою жертву.

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

    Это не говорит о том, что такие нападения не реальны или они не имеют значения. Для большинства крупных корпораций самый большой риск – это возможность потери дохода или репутации. И то и другое может быть изящно осуществлено при помощи блистательного нападения, приводящего к отказу в обслуживании. А если речь идет о компаниях, в режиме реального времени оперирующих данными, имеющими важное значение для решения критических задач или от выполнения которых может зависеть чья-то жизнь, нападения типа «отказ в обслуживании» буквально могут стать опасными для жизни людей.

    Распределенные нападения типа «отказ в обслуживании»

    Распределенные нападения, приводящие к отказу в обслуживании, – это поистине опасная разновидность атак такого типа. Автоматические инструментальные средства для этих нападений были выпущены в 1999 году. Университет Миннесоты стал первой целью в августе того же года, а поток высококлассных нападений в начале 2000 года привел к тому, что сообщения о них попали на первые полосы всех газет.

    Эти нападения точно такие же, как и традиционные нападения типа «отказ в обслуживании», только на сей раз нападение не имеет единственного источника. Нападающий сначала внедряется через Интернет в сотни или тысячи незащищенных компьютеров, называемых «зомби», и устанавливает программу атаки. После этого он координирует все эти машины для одновременного нападения. Поскольку цель подвергается нападению сразу из многих мест, ее традиционная защита не работает, и она падает «замертво».

    Сказанное можно проиллюстрировать на примере доставки пиццы: Алисе не нравится Боб, и она обзванивает сотни компаний, доставляющих пиццу на дом, и просит доставить пиццу Бобу домой в 11 часов утра. В 11 часов подъезд Боба заполнен сотней разносчиков пиццы, которые требуют от него оплаты доставки. Бобу кажется, что за ним охотится мафия пиццы, но ее разносчики тоже жертвы. Настоящий же виновник происшествия никому не будет известен.

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

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

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

    Уже было одно нападение типа «отказ в обслуживании», которое произошло по подобному сценарию. В 1999 году кто-то отправил по почте фальшивое обновление Internet Explorer, якобы исходящее от Microsoft. Это был настоящий троянский конь, который заставил инфицированный компьютер посылать пакеты компьютерам болгарской телекоммуникационной компании, что на долгое время создало для нее проблемы, связанные с отказами в обслуживании.

    Отслеживание нападающего также невероятно трудно. Возвращаясь к примеру с доставкой пиццы, можно сказать: единственное, что может предпринять жертва – это попросить разносчиков пиццы помочь ему поймать злоумышленника. Если бы все они сверили свои регистрационные записи заказов по телефону, возможно, удалось бы определить, кто заказал доставку всех пицц. Иногда подобное возможно в Интернете, но маловероятно, что промежуточные сайты аккуратно ведут журнал регистрации. К тому же легко скрыть свое местоположение в Интернете. И если нападающий действует из некоей восточно-европейской страны с неразвитым законодательством об уголовном преследовании компьютерных преступлений, продажной полицией, не участвующей в международных соглашениях о выдаче преступников, то в этом случае ничего нельзя поделать.

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

    Подлинное решение состоит в привлечении разнообразных средств «общественной гигиены». Подобно тому как малярия была побеждена в Вашингтоне (округ Колумбия) путем осушения всех болот, есть только один-единственный способ предотвращения этих нападений – это защита миллионов частных компьютеров в Интернете. К сожалению, «болото» разрастается с невероятной скоростью, и обезопасить всех невозможно. Даже если бы 99% индивидуальных пользователей установили брандмауэры, которые все функционировали бы отлично, все равно в Интернете еще осталось бы достаточное количество незащищенных компьютеров, которые можно было бы использовать для подобного рода атак.

    Будущее сетевой безопасности

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

    Телефонную систему решено было полностью перепроектировать. Современные протоколы телефонной коммутации, например SS7, или Система сигнализации 7, были разработаны с передачей сигналов вне полосы. Голосовые сообщения и сигналы управления были разделены, и стали передаваться по отдельным каналам. Сейчас не имеет значения, как сильно вы свистите в телефонную трубку: коммутаторы не слышат. Целые классы нападений просто не работают потому, что нападающие в конечных точках не имеют доступа к коммутатору посередине.

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

    В долгосрочной программе передача сигнала вне полосы является лучшим способом для того, чтобы исключить многие «слабые места» Интернета. Она не является панацеей – ненадежные узлы еще будут создавать проблемы, – но имеет перспективы.

    К сожалению, есть несколько проблем. Интернет был спроектирован как равноправная сеть: любой может «передвигаться» по нему путем простого соединения с другим компьютером. Система сигнала вне полосы должна будет управляться централизованно, как телефонная система. Будут иметься конечные точки и внутренние маршруты, и они будут различными. Эта система не имеет ничего общего с сегодняшним Интернетом.

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

    Глава 12
    Сетевые защиты

    Брандмауэры

    Брандмауэры впервые появились на поездах. У паровозов, топившихся углем, в машинном отделении топливо находилось поблизости от топки. Машинист лопатой бросал уголь в топку. При этом образовывалась легко воспламеняющаяся угольная пыль. Время от времени она вспыхивала, и в машинном отделении возникал пожар, который мог перекинуться на пассажирские вагоны. Так как гибель пассажиров сказывалась на доходах железной дороги, паровозы стали оборудовать железными переборками позади машинного отделения. Они препятствовали распространению огня на пассажирские вагоны, но не защищали машиниста, находившегося между углем и топкой. (Есть над чем призадуматься системному администратору.)

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

    Термины не всегда точны: дело в том, что понятие «брандмауэр» изменило свое содержание с тех пор, как оно появилось в компьютерных сетях. Первые сети были очень несовершенны и могли быть легко разрушены. Брандмауэры были созданы для того, чтобы препятствовать распространению сетевого программного обеспечения, содержащего множество ошибок, на всю сеть с одного ее участка. Подобно физическим брандмауэрам, они были средством локализации пожара в месте его возникновения.

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

    Я не собираюсь вести разговор о тонкостях устройства брандмауэров и о том, как они работают; об этом написаны многие тома. Я намереваюсь рассказать об общей концепции брандмауэров, о том, насколько эффективно они противодействуют угрозам и какое у них будущее.

    Первое: брандмауэр – это граница, линия обороны. Подобно стенам замка он служит для отражения нападений. Точно так же, как и стены замка, он бесполезен против вооруженного мятежа внутри. Билл Чесвик дал брандмауэру следующее определение: «твердая скорлупа, окружающая мягкое ядро». Как только нападающий преодолеет брандмауэр, последний станет бесполезным. И поскольку (согласно исследованиям Института компьютерной безопасности в 1998 году) около 70% всех нападений происходит внутри сети, об этом определенно стоит подумать.

    Конечно, можно установить внутренние брандмауэры для дополнительной защиты сегментов сети. Представьте себе замок с внешним и внутренним дворами.

    Второе: до изобретения артиллерийских орудий хороший замок был неуязвим; не было возможности забраться на его стены по лестнице, проломить их или сделать под ними подкоп. Однако терпеливый военачальник всегда может устроить осаду замка. Он надеется, что, лишив жителей продовольствия, воды и отрезав от внешнего мира, заставит защитников капитулировать. Иногда это действовало быстро, но некоторые осады продолжались годами. Если в стенах замка был колодец, это давало больше шансов его защитникам. Если из него были прорыты секретные тоннели наружу, они очень помогали. Если у жителей замка начиналась чума, замок не мог помочь им. (Антисанитария победила многих отважных защитников.) Точно так же можно морить голодом сеть, разорвав ее соединения с внешним миром.

    Третье: замок должен быть защищен со всех сторон. Не имеет смысла воздвигать отдельно стоящую стену, нападающие просто обойдут ее. Помните Линию Мажино? Франция выстроила ее, чтобы предотвратить немецкое вторжение. Это было сделано, когда была жива память о траншейных боях Первой мировой войны, и подобные укрепления казались неприступными. Но в последующие годы развитие производства танков изменило подходы к ведению войны, и немцы изобрели Блицкриг. Они просто обошли вокруг Линии Мажино, вторгшись во Францию с территории Бельгии. Точно так же брандмауэр должен служить барьером между внутренней сетью и всеми внешними точками доступа. Иначе нападающий просто обойдет брандмауэр и атакует какое-нибудь незащищенное подключение.

    И наконец, четвертое: замкам нужны ворота. Бесполезно и глупо строить замок, в который никто не может проникнуть ни при каких обстоятельствах: даже королям иногда нужно выходить на прогулку. Торговцы, курьеры, даже обычные горожане должны иметь возможность свободно входить в замок и выходить из него. Следовательно, в замках были привратники, чьей обязанностью было пропускать людей, желающих войти, или, наоборот, не пускать их.

    Великая Китайская Стена не произвела впечатления на Чингисхана. Ему приписывают слова: «Неприступность крепости зависит от отваги ее защитников». Пропускать все, что нужно, и при этом оставлять все, что может представлять опасность, снаружи является главной задачей любого компьютерного брандмауэра. Он должен действовать как привратник. Он должен выяснить, какой код представляет опасность, и не пропустить его. Он должен делать это без необоснованной задержки движения. (Для среднестатистического пользователя Интернета необоснованной задержкой является всякое заметное замедление.) Брандмауэр должен делать это, не раздражая законного пользователя. (Среднестатистический пользователь Интернета не способен отказаться от чего-либо наподобие загрузки новой интернет-игры от компании с названием «Подозрительное программное обеспечение» или прочтения электронной почты от ненадежной машины.) Но если привратник – брандмауэр – допустит ошибку, хакер может проникнуть внутрь сети и стать ее полновластным хозяином.

    Есть три основных способа преодолеть брандмауэр. О первом я уже говорил: просто обойти его с другой стороны. В обширной сети много соединений. Большие фотокопировальные устройства часто обладают возможностью подключения к Интернету; в сетевом оборудовании обычно присутствуют порты обслуживания модемной связи. Часто компании подключают свои сети к сетям поставщиков, клиентов и т. п.; иногда намного менее защищенным. Сотрудники компании могут использовать модемы, чтобы иметь возможность работать дома. Одна супружеская пара из Силиконовой Долины периодически работала, не выходя из дома. Муж проверял свою электронную почту, в то время как жена занималась программированием, их компьютеры были объединены в маленькую домашнюю сеть. Внезапно компьютеры его компании начали обнаруживаться в сети ее компании, и наоборот.

    Второе, и более сложное нападение – это украсть что-нибудь через брандмауэр. Чтобы сделать это, вы должны обмануть брандмауэр, чтобы он думал о вас, что вы хороший, честный и уполномочены сделать это. В зависимости от того, насколько хорош брандмауэр и насколько хорошо он был установлен, это просто, сложно или почти невозможно.

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

    Третье нападение – попытка захватить брандмауэр. Это похоже на подкуп и шантаж привратника. Как только вы сумеете заполучить его в свои ряды, он будет делать все, что вы пожелаете. Насколько это будет просто, зависит от брандмауэра. Некоторые брандмауэры работают с программным обеспечением, имеющим уязвимые места, что может помочь злоумышленникам. Некоторые используют в высшей степени ненадежные операционные системы, которые сильно облегчают задачу атакующим.

    Так или иначе, разработка брандмауэра сегодня включает все, что нужно для проектирования умного привратника. На самом простом уровне брандмауэр – это маршрутизатор с последовательным набором правил, проверяющий сетевые потоки, проходящие через него, и регулирующий движение в соответствии с правилами. Примером могло бы послужить ограничение движения, основанное на адресе источника, или на адресе назначения, или на типе протокола.

    Раньше это было относительно легко, но сегодняшним брандмауэрам приходится иметь дело с мультимедийным трафиком, загружаемыми программами, апплетами Java (переносимыми программами на Java, распространяемыми через вебстраницы) и другими видами разных непонятных вещей. Брандмауэр должен принимать решения, имея в наличии только неполную информацию: он должен решить, можно или нельзя пропустить пакет, до того как просматривать все пакеты в передаче.

    Ранние брандмауэры представляли собой пакетные фильтры. Брандмауэр просматривал каждый пакет, после чего пропускал или тормозил его в зависимости от того, соответствует ли заголовок пакета своду правил, которые известны брандмауэру. Первые пакетные фильтры были достаточно «неразумными» и позволяли попадать внутрь целым партиям пакетов, которые было бы лучше оставить снаружи. Со временем они стали умнее.

    Сегодня они изменяют параметры своего состояния в процессе исполнения: вместо индивидуального просмотра каждого пакета брандмауэры хранят информацию о состоянии сети и о том, какие типы пакетов ожидаются. Тем не менее у брандмауэров не такая уж долгая память, и медленные нападения зачастую могут пройти.

    Сейчас есть достаточно хорошие фильтрующие брандмауэры, но они по-прежнему имеют множество недостатков. Первый и самый главный заключается в том, что они трудны для правильного конфигурирования, а неподходящая конфигурация часто ведет к уязвимости защиты. Многие вещи, которые должны бы блокироваться, допускаются внутрь по умолчанию. Брандмауэры не изменяют пакетов; таким образом, если пакет проходит внутрь, он может сделать все что захочет. Есть группа скрытых нападений на пакетные фильтры: только вообразите бестолковую охрану, которая старается остановить поток опасных писем в замок, разглядывая конверты.

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

    Слабые места прокси-брандмауэров – слишком тонкая тема, чтобы обсуждать ее здесь. У них более длительные задержки и более низкая производительность, чем у пакетных фильтров. (Фактически, так как брандмауэры должны исследовать каждый пакет, все они замедляют быстрое сетевое соединение.) Для безошибочной работы брандмауэры-«заместители» должны быть надежно конфигурированы, так же как и пакетные фильтры; в то же время они намного сложнее для конфигурирования и обслуживания; тенденция состоит в том, чтобы прекратить беспокоиться о них.

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

    Я слышал, что к брандмауэрам иногда относятся как к усовершенствованному маршрутизатору. Это верно. Некоторые из лучших профессионалов, хорошо знакомые с работой брандмауэров, даже не принимают их во внимание; они уверены в том, что хорошо конфигурированный маршрутизатор с высокой надежностью в конечных пунктах обеспечивает большую степень безопасности, чем брандмауэр. У них могут быть для этого основания. Конечно, брандмауэры часто создают ложное ощущение безопасности в Интернете.

    Брандмауэры являются важной частью системы компьютерной безопасности любой компании, но они не могут обеспечить защиту полностью. Их модель защиты отражает ранние времена в сетевой безопасности, когда организациям нужно было обеспечить сохранность своего имущества и оставить «плохих парней» снаружи. Сегодня, когда ради успеха в торговле приходится открывать сети для покупателей и партнеров, брандмауэры кажутся анахроничными. Они могут играть важную роль, но не являются панацеей.

    Демилитаризованные зоны

    ДМЗ – это демилитаризованная зона. Примером тому является ничейная земля между Северной Кореей и Южной Кореей, на которую не претендует ни одна сторона.

    После всего сказанного о брандмауэрах вы понимаете, что именно в ДМЗ вы должны поместить свои общественные службы. В главе 10 я рассказывал обо всех видах нападений на веб-серверы. Вам не захочется поместить веб-сервер внутрь охраняемой брандмауэром территории, уязвимой для нападения. Вы не можете поставить веб-сервер снаружи брандмауэра, потому что тогда он будет еще более уязвим. Решение состоит в том, чтобы поместить его в ДМЗ.

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

    Для того чтобы выстроить ДМЗ, вам нужно два логических брандмауэра. Один из них защищает ДМЗ от внешнего мира. Другой имеет конфигурацию, которая предоставляет большие возможности для защиты внутренней сети от вторжений из ДМЗ. Результат состоит в том, что эта часть сети становится менее доступной и более защищенной. И эта идея работает.

    Частные виртуальные сети

    Частная виртуальная сеть (VPN) является просто безопасным соединением через открытую сеть. В прежние времена, если Алиса и Боб хотели связаться, они должны были потратиться на частную линию и организовать свою собственную частную сеть. Сегодня Алисе и Бобу выгоднее использовать общедоступную сеть. Но Интернет не обеспечивает безопасность связи, Алисе и Бобу следует защитить это соединение. Им нужно создать виртуальную частную сеть на основе физической открытой сети. Это и есть VPN.

    У виртуальных частных сетей есть два главных применения. Первое – соединить два удаленных отрезка одной и той же сети. У корпорации может быть два офиса в различных частях планеты. У каждого офиса есть собственная сеть, и две сети соединяются посредством организации VPN через Интернет. VPN более приватна, чем «частная линия», обеспеченная телефонной компанией.

    Второе применение состоит в том, чтобы соединить мобильных пользователей – работающих из дома и из номеров отелей. Старый путь для введения этих пользователей в большую открытую сеть заключался в том, чтобы подсоединить их непосредственно к сети компании, часто при этом приходилось производить очень удаленное сетевое подключение. Это дорого и вынуждает компанию обслуживать огромный банк модемов. Современный путь – в том, чтобы пользователи дозванивались до местного интернет-провайдера и затем с его помощью через Интернет подключались к компании. Для защиты этого соединения организуется VPN.

    Различные VPN обеспечивают защиту, используя различные протоколы шифрования. Наиболее распространен протокол IPsec, хотя вам будут попадаться и другие протоколы, в частности РРТР и L2TP. В некоторых VPN вообще не используется шифрование.

    Можно считать, что виртуальная частная сеть образует брешь в брандмауэре. Кто-нибудь, обладающий доступом к VPN, имеет возможность проникнуть через брандмауэр в сеть. И многие взломщики пользуются данной уязвимостью. По этой причине большинство систем безопасности, прежде чем разрешить соединение с VPN, проверяют, с кем имеют дело.

    Системы обнаружения вторжений

    Системы обнаружения вторжений (IDS) – это сетевые контролеры. Они пристально наблюдают за вашей сетью, выискивая нечто подозрительное. Их можно сравнить с детективами, рыскающими по городу в поисках преступника: они знают, что должно вызывать подозрение – это может быть исследование возможности доступа к системе или попытки обнаружить и использовать ошибки, и они внимательно следят за этим. Они знают, как выглядит нападение. Они знают, как выглядит преступление. Маркус Ранум сравнивал брандмауэр со шлемом и бронежилетом, который вы носите в сражении, а систему обнаружения вторжений – с санитаром, который смотрит на ваше кровоточащее тело и говорит: «Видимо, это проникающее ранение грудной клетки. Это нужно проверить». IDS не являются заменой действенной защиты.

    Что же делают системы обнаружения вторжений? Они информируют вас о свершившемся нападении или, возможно, даже о его развитии. Системы, которые работают хорошо, точны: они не воют волком и не заявляют о нападении там, где его нет, в то же время они не пропустят момент, когда оно случится. Хорошие системы реагируют своевременно: они предупреждают вас о нападении в то время, когда оно еще происходит. Они ставят диагноз: на что направлена атака, откуда она исходит, и предлагают лечебное средство.

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

    Предположим, у врача есть тест определения болезни с точностью 99%. Таким образом, если кто-то болен, то есть вероятность в 99%, что тест определит это, а если кто-то здоров, то есть вероятность в 99%, что тест подтвердит это. Предположим, что в среднем один из десяти тысяч людей болен. Действительно ли этот тест хорош?

    Нет. Если врач применяет тестирование к одному взятому наугад человеку и его тест положителен, то есть только однопроцентный шанс, что он на самом деле болен. Из-за того что здоровых людей намного больше, чем больных, тест дает ненадежные результаты, и поэтому бесполезен. (Это не столь просто понять, проще повторно протестировать человека. Но предположите, что ошибочный результат исследования повторится последовательно для этого человека.) Вывод кажется удивительным и противоречит интуиции, но он верен. Это означает, что если вы предположите, что сетевые нападения сравнительно редки, большая вероятность ошибки означает то, что ваши испытания должны быть действительно хороши, чтобы не заметить всех ложных тревог. Системы обнаружения вторжений, которые обычно сигнализируют вам в 3:00 утра о проблеме, которая в действительности не является проблемой, о ночной игре в Quake или о новом интернет-приложении, довольно быстро добьются того, что прекратят свое существование.

    Есть и другие проблемы. Первая из них – это своевременное предупреждение. Я упомянул медленное нападение в предыдущем подразделе. Когда система обнаружения вторжений решит, что было произведено нападение, и уведомит вас об этом? Что, если она подумает, что это лишь отчасти выглядит как нападение? Уведомит ли она вас об этом? Когда? Опять-таки, вспомните о проблеме ложного срабатывания. Если система ошибается слишком часто, вы перестанете прислушиваться к ней.

    И что вы будете делать, когда получите сигнал тревоги? Поучительные сообщения общего вида «вы подвергаетесь нападению» бесполезны, если у вас нет какого-нибудь способа защиты или даже нет времени, чтобы с этим разобраться. В 1999 году в eBay отключили электричество на 22 часа, и в течение всего этого времени система обнаружения вторжений постоянно подавала сигнал тревоги, но все были слишком заняты, чтобы ответить. В этом величайшая проблема IDS: разумно реагировать на их выводы.

    Системы обнаружения вторжений еще находятся на ранней стадии своего развития, и авторы различных идей наперебой заявляют об их превосходстве. Я собираюсь только коснуться некоторых из них, в детали углубляются многие другие книги.

    Для создания IDS есть два основных пути. Самый легкий – это обнаружение «неправильного» кода. IDS знают, на что похоже нападение, и ищут его. Подумайте о детекторе вирусов для сетевых пакетов. Как детекторы вирусов просматривают каждый файл, ища строки битов, указывающие на вирус, так и IDS просматривают каждый пакет, ища строки битов, которые свидетельствуют о несомненном нападении. Их легко привести в исполнение и использовать, у них низкая вероятность ложной тревоги, и они могут быть относительно быстры (принимая во внимание то, что они должны просмотреть каждый пакет).

    С другой стороны, у них больше промахов. Как детекторы вирусов не в силах обнаружить вирусы, которых они никогда не видели прежде, так и подобная IDS не может обнаружить нападение, на нахождение которого она не запрограммирована. Ее легко обмануть. Иногда это можно сделать, изменив порядок следования команд в коде, предназначенном для проведения атаки. Иногда проще организовать нападение таким образом, чтобы взламывать пакеты выборочно. Так же как антивирусным компьютерным программам нужно постоянное обновление и пополнение новыми образцами кода, этому типу системы обнаружения вторжений необходимо постоянное обновление базы данных образцов нападения. Не ясно, сможет ли когда-нибудь такая база данных не отстать в соревновании с инструментом хакера.

    Другим принципом работы системы обнаружения вторжений является обнаружение аномалии. IDS осуществляет некоторое статистическое моделирование вашей сети и вычисляет, что является нормой. Затем, если происходит какое-либо отклонение от нормы, она подает звуки тревоги. Здесь все может быть сделано по правилам (система знает, что нормально, и сигнализирует обо всем остальном), с использованием статистики (система статистически вычисляет, что нормально, и сигнализирует обо всем остальном) или с применением методов искусственного интеллекта.

    Существует множество проблем и здесь. Что, если вас атакуют во время обучения системы? Тогда атака рассматривается как норма. Новые вещи случаются в компьютерных сетях постоянно. Знает ли система обнаружения вторжений разницу между безобидной аномалией и аномалией, указывающей на нападение? И если все, что она знает, является нормой, как же она тогда собирается категоризировать нападения? Для этого вида систем вероятность ложной тревоги намного выше, и нападение на такой вид IDS включает выяснение возможности не бить в набат.

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

    Другие идеи IDS так или иначе основываются на одном из описанных выше принципов. Система обнаружения вторжения непрерывного действия (inline) может работать с сетевыми данными в реальном времени, тогда как проверяющая система использует контрольную информацию, сохранившуюся после совершения нападения. Есть IDS, базирующиеся на хостах (host-based IDS), и есть распределенные по сети IDS (network-based IDS).

    Это последнее различие было темой яростных обсуждений в сообществе IDS. В своей основе IDS, распределенные по сети, построены на концепции перехвата сообщений: датчики расположены в сети, они исследуют проходящие пакеты. У этих систем есть преимущество в скрытности – они могут быть развернуты без воздействия на остальную часть сети, и они в большей степени обеспечивают независимость от операционной системы. IDS, базирующиеся на узлах сети, исследуют систему, осуществляют контроль и регистрируют возможные нападения, помещаясь внутри отдельного компьютера. У этих систем имеется различный набор преимуществ и недостатков, составляющих их специфику.

    То, что в конечном счете вы можете найти на рынке, – чаще всего гибридные системы: они являются комбинацией систем обнаружения вторжения, базирующихся на главной машине и распределенных по сети, производящих обнаружение аномалии, основанное на ожидании в совокупности с выявлением «неправильного» кода. Вы также можете найти компании, занимающиеся проверкой систем защиты, которые анализируют результаты использования этих продуктов и отвечают на подаваемые ими сигналы тревоги. Подобно брандмауэрам, системы обнаружения вторжения будут становиться все лучше и лучше, поскольку разработчики получают все больше опыта при их проектировании. И так же как у брандмауэров, их надежность в конечном итоге будет зависеть от того, насколько хорошо они конфигурированы и насколько современны их версии. И всегда будут существовать нападения, которые пройдут через них.

    Приманки и сигнализации

    Сетевые сигнализации и приманки – это разновидности систем обнаружения вторжения, но они заслуживают отдельного раздела. Сигнализации – это особые системы в вашей сети, предназначенные для срабатывания в случае атаки. Приманки – это замаскированные сигнализации, которые выглядят особенно привлекательно для хакеров. Легко понять, что представляют собой сигнализации: особую сетевую команду или фиктивную сеть, про которую никто не думает, что она включает звуковой сигнал тревоги. Маркус Ранум развил эту идею дальше и предположил, что если обнаружено уязвимое место в программе, необходимо также выдавать сигнал предупреждения об опасности.

    Приманки используются чаще: целые фиктивные компьютеры и фрагменты сети проектируются для привлечения нападающих. Вы можете получить от этого большое удовольствие: присвойте компьютерам такие имена, как transactions bigcompany com или accounting bank com, маскируя их под производящие впечатление счета и файлы, и используйте их для защиты вашей сети. Когда хакер проникнет в сеть, приманка будет притягивать его, поскольку она выглядит как интересное место для исследования. Затем выдается сигнал тревоги, и приманка начинает следить за активностью хакера и собирать сведения для последующего обращения в суд. Некоторые компании продают заранее сделанные приманки, просто добавляя привлекательные имена.

    Интересно, что в обоих этих средствах используется одно и то же преимущество сетевого администратора над хакером: знание сети. Администратор знает, как выглядит сеть и что в ней может произойти. Он может установить сигнализацию точно так же, как домовладелец устанавливает сигнализацию на окна, которые не собирается открывать, или датчики движения в комнате, в которую не предполагает заходить. Администратор использует приманки, зная, что ни один из зарегистрированных пользователей не получит доступа к этим системам. Он может использовать любые виды сигнализации, включая и выключая их несколько раз в день, меняя их, в общем, может делать все, что он хочет. Эти средства действуют наверняка, потому что хакер не имеет информации, где и когда они могут появиться. В отличие от брандмауэров или IDS, где хакер знает, какая защита установлена, сигнализации и приманки специально разработаны для сетей, подвергающихся нападению.

    Сканеры уязвимостей

    Назначение сканеров, определяющих слабые места защиты, – автоматически сканировать сеть (или компьютер) на предмет обнаружения известных недостатков. Они делают свое дело и затем выдают точный отчет о том, какие уязвимые точки имеет сеть. Обладая этой информацией, вы можете решить – усилить защиту или пользоваться сетью, несмотря на обнаруженные недостатки.

    На самом деле с этими устройствами не все так ясно, и все сканеры, имеющиеся на рынке, действуют не совсем так. Если бы они работали так, как можно было бы предположить, то они испортили бы компьютеры и причинили ущерб сети. Никто не использует такие средства, поэтому приходится идти на ухищрения.

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

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

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

    Когда в 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 секунд полета, чтобы облегчить перезапуск системы в случае задержки запуска в последний момент перед стартом. Была резервная система, предназначенная дублировать основную в случае ее отказа, но она работала с тем же самым программным обеспечением, содержавшим те же самые ошибки.

    В результате всех этих событий работа системы управления, полностью запутавшей бортовой компьютер «Ариан 5», была прекращена. Это привело к ненужной корректировке курса ракеты и повлекло ее самоуничтожение.

    Три года спустя во время сложных маневров исчез искусственный спутник планеты Марс, запущенный NASA. Это не было делом рук марсианской противовоздушной обороны, а произошло вследствие ошибки преобразования данных. Инженеры NASA неудачно перевели значение силы сопротивления из английской системы мер в метрическую. Значения различаются в 4,45 раза: этого оказалось достаточно, чтобы научно-исследовательская станция опустилась на 50 миль ниже и сгорела в марсианской атмосфере.

    Эти две катастрофы не связаны с компьютерной безопасностью, но они могут служить для пояснения того, насколько сложно разработать и ввести в действие код без ошибок. И Европейское космическое агентство, и NASA располагают достаточно большими средствами и сильно заинтересованы в том, чтобы обеспечить качество программного обеспечения. Но они до сих пор не в состоянии сделать это.

    У других дела обстоят не лучше. В 1999 году eBay потеряла 22 часа из-за связанных с программным обеспечением ошибок в коде, полученном от Sun Microsystems. Выявление ошибки задержало выпуск карманных компьютеров Visor. А в 1998 году дефект в коммутаторах, произведенных компанией Cisco Systems, привел в нерабочее состояние передающую сеть компании AT&T Interspan, что отразилось на работе 6600 клиентов.

    Печальная действительность состоит в том, что подобные ошибки программного обеспечения возникают везде. Большинство из них не приводит к таким разрушительным последствиям (перезагрузка электронной таблицы после аварийного отказа вызывает всего лишь незначительное раздражение), но так как сложное программное обеспечение во многих случаях функционирует внутри жизненно важных систем (например, в системах уклонения от автокатастрофы, взлета и посадки самолетов, управления атомной электростанцией), мы, вероятно, станем свидетелями увеличения количества подобных случаев. Проводится большая работа по исправлению ошибок, устранению недостатков, это получило название отказоустойчивой стратегии: например, если в автомобиле откажет система уклонения от автокатастрофы, предполагается, что водитель будет вести себя, как в машине без компьютера, вместо того чтобы позволить ей врезаться в ближайшее дерево. Идея в том, чтобы была уверенность, что небольшие недостатки не приведут к потере контроля над ситуацией, как было в случае с «Ариан 5».

    Трудно обнаружить ошибки в программном обеспечении, влияющие на правильное выполнение задачи; обнаружить ошибки в системе безопасности еще труднее.

    Надежность означает, что компьютер, в первую очередь программное обеспечение, но также и любые специализированные технические средства должны работать даже при появлении случайных ошибок. Они могут возникать при проектировании (использование одинакового программного обеспечения в основной и резервной системах), при вводе в действие (отсутствие проверки наличия ошибок при преобразовании данных), это могут быть ошибки программирования (вспомните математическую ошибку в чипе Intel Pentium[39]) или ошибки пользователя. Время от времени такие ошибки появляются. Это похоже на компьютер Мерфи: сбои происходят… редко, но постоянно. Если компьютер ошибается время от времени, пусть даже редко, это заметно любому пользователю.

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

    Компьютерная защита более всего похожа на программирование для компьютера Сатаны. (Росс Андерсон ответствен за этот красивый оборот.) Чтобы быть безопасным, программное обеспечение должно работать, несмотря на появление неуловимых и опасных ошибок, которые могут быть преднамеренно внедрены способным нападающим с целью нанести поражение системе. Надежное программное обеспечение должно пережить и случайные ошибки, которыми может воспользоваться сообразительный хакер. (Представьте себе, что это некий хакер вызвал ошибку переполнения в программном обеспечении «Ариан 5» в самое неподходящее время.) Ошибки происходят случайно, и большинство из них редко встречается при обычном использовании. Но нападающие разыщут потенциальные ошибки и непременно воспользуются ими для достижения своих целей.

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

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

    Нападения на дефектный код

    Большинство проблем, связанных с компьютерной безопасностью, которые нам приходится наблюдать, являются результатом дефектов в программном коде. Вот некоторые примеры:

    • В 1988 году червь Морриса использовал ошибку в UNIX для получения полного доступа к компьютерам, выполняющим программы. Это привело к переполнению буфера, о чем будет рассказано в следующем подразделе.

    • В 1999 году некто обнаружил ошибку в сценарии Hotmail CGI, позволяющую пользователю получить доступ к записям электронной почты другого пользователя. Дефекты такого рода обсуждались в главе 10.

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

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

    Эти примеры вызывают больше беспокойства, чем проблема «Ариан» (несмотря на меньшую степень накала страстей), поскольку недостатки, которые могут быть использованы для взлома защиты, обычно не влияют на выполнение программ. Они незаметно присутствуют там до тех пор, пока кто-либо не воспользуется ими. Это очень важно и потому создание защиты сложнее, чем обеспечение надежности. Ошибка, повлекшая за собой катастрофу «Ариан», – это единственный случай, который затронул выполнение. Как только ошибка при выполнении найдена – и предварительное тестирование сможет обнаружить ее – она может быть исправлена. Дефекты защиты не влияют на выполнение и не проявляются в результатах предварительного тестирования. Подробнее о надежности тестирования будет рассказано в главе 22, но мораль в том, что люди постоянно спотыкаются о недостатки в системах безопасности, и только опытные эксперты на самом деле способны отыскать их.

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

    Огрехи защиты, однажды обнаруженные, будут использоваться до тех пор, пока не будут устранены. Предположим, что нападающий нашел брешь в защите торгового протокола, что позволило ему украсть номер кредитной карты или, что еще хуже деньги. Если его действия мотивировались желанием создать саморекламу, он известит о своем достижении прессу и эта ошибка будет исправлена. (Хотелось бы надеяться, что сначала он предупредит компанию.) Если его действиями управляет желание получить деньги, нападающий станет использовать эту возможность снова и снова. Он украдет столько, сколько сможет, пока еще кто-нибудь не обнаружит этот недостаток и не исправит его. В этом основное отличие: недостатки, влияющие на выполнение, заметны, в то время как недочеты защиты могут оставаться невидимыми в течение долгого времени.

    Эти недостатки не обязательно находятся в коде, относящемся к системе безопасности. Они могут присутствовать повсюду: в интерфейсе пользователя, в программах обработки ошибок, в любом другом месте. И как мы видели в главе 10, даже программы, не имеющие никакого отношения к компьютерной безопасности, могут повлиять на защищенность компьютеров, работающих в сети. Недостатки в текстовом процессоре, драйвере принтера или мультимедийном проигрывателе могут полностью подорвать систему безопасности вашего компьютера.

    Еще один вывод состоит в том, что ошибки в программном обеспечении (и, следовательно, недостатки защиты) неминуемы. Предположение, что огромное пространство Интернета может быть свободно от ошибок, настолько же невероятно, как, то, что программное обеспечение «Ариан 5» было полностью защищено от сбоев и лишь несчастливое стечение обстоятельств привело к таким катастрофическим последствиям.

    Мы наблюдали подобные вещи в Windows NT. He проходит и дня без объявления об обнаружении нового просчета в системе безопасности этой программы. Те же тенденции наблюдаются и в Windows 2000.

    Переполнения буфера

    Переполнения буфера (иногда называемые разрушением стека) являются обычным способом разрушения защиты. Их легко осуществить; атаки достигают своей цели чаще всего именно благодаря буферным переполнениям. Нападения такого рода могут быть разрушительными, часто они заканчиваются получением полного контроля над компьютером. Этот метод использовался во многих выдающихся нападениях. Поскольку уменьшение количества таких атак не наблюдается, стоит детально объяснить, что они собой представляют и как работают.

    Давайте начнем с аналогии. Если вы попытаетесь украсть что-нибудь из близлежащего магазина, то вам придется пробираться мимо продавца. Продавец не станет творчески подходить к делу. Скорее всего, он предпримет только те действия, которые предписаны инструкцией. Инструкция служащего – это большой набор протоколов, описывающих различные ситуации. Например: «контакт с лицом, утверждающим, что он служащий».

    • Шаг 1. Попросить показать удостоверение.

    • Шаг 2. Убедиться, что удостоверение не поддельное.

    • Шаг 3. Проверить, что на фотокарточке в удостоверении действительно изображен этот человек.

    • Шаг 4. Если это так, впустить его. Если нет, не впускать. Или: «контакт с водителем, привозящим товар»:

    • Шаг 1. Взять коробку.

    • Шаг 2. Расписаться за коробку.

    • Шаг 3. Убедиться, что водитель уезжает.

    Водитель не может пройти мимо служащего назад в магазин, потому что в инструкции ясно сказано, что после получения подписанной квитанции водитель должен уехать.

    Компьютеры работают почти так же. Программы подобны шагам в инструкции; компьютеры выполняют то, что написано в программах, и ничего больше. Сетевые компьютеры работают аналогично. У них есть набор протоколов, которым они следуют, – эти протоколы описывают процедуру входа в систему, ограничения доступа, защиту паролей, и определяют, кто может быть допущен, а кто нет. Тот, кто действует в соответствии с протоколами, будет пропущен, а кто действует иначе – войти не может.

    Один из способов нанести поражение такому протоколу состоит в изменении действующей компьютерной программы. Это подобно замене страницы в инструкции для служащего. Инструкции обычно пишутся для того, чтобы их исполнители не вдавались в размышления. Каждая страница – это шаг: «Если клиент дает вам кредитную карту, смотрите следующую страницу. Если клиент расплачивается наличными деньгами, смотрите страницу 264». Шаги, описывающие контакт с развозчиком товара, могут выглядеть следующим образом.

    • Страница 163. Возьмите коробку. Если она одна, смотрите следующую страницу. Если коробок несколько, смотрите страницу 177.

    • Страница 164. Возьмите форму для подписи, подпишите и верните ее. Смотрите следующую страницу.

    • Страница 165. Спросите водителя, хочет ли он что-нибудь купить. Если он хочет, смотрите страницу 13, если нет, смотрите следующую страницу.

    • Страница 166. Попросите водителя уехать. Если он… и т. д.

    Всякий раз, когда служащий магазина совершает какое-либо действие, он руководствуется открытой страницей в своей инструкции. Он не может посмотреть на вещи иначе.

    Нападение состоит в следующем: притворившись развозчиком, можно поменять страницу в инструкции служащего, когда он будет занят подписью квитанций. Все, что нужно сделать, это дать ему два листа вместо одного. Верхний лист – это квитанция, а нижний – поддельная страница инструкции:

    • Страница 165: Отдайте водителю все деньги из кассового аппарата. Смотрите следующую страницу.

    Это сработает. Служащий возьмет коробку, как написано на странице 163. Он посмотрит страницу 164 и возьмет квитанцию (вместе с фальшивой страницей). Он положит оба листа на открытую инструкцию, подпишет и вернет квитанцию (оставив фальшивую страницу в инструкции), затем, вернувшись к инструкции, увидит поддельную страницу. Он отдаст все деньги из кассы и увидит следующую страницу (настоящую страницу 165). Шоферу нужно ответить, что он не хочет ничего купить, и уехать. Если служащий магазина на самом деле такой же тупой, как компьютерная система, развозчик сможет уехать с деньгами. Можно использовать этот способ обмана, чтобы убедить служащего магазина пустить нас на склад или чтобы исполнить любой другой замысел. Подложив страницу в инструкцию, можно произвольно поменять его действия.

    По сути дела, это способ использовать ошибки переполнения буфера в компьютерных системах. Компьютеры хранят в памяти все программы и данные. Если компьютер запрашивает у пользователя пароль, который должен состоять из 8 символов, и получает пароль из 200 символов, то дополнительные символы могут записаться в какую-то другую область памяти. (Компьютер не может предположить, что происходит что-то неправильное.) Если это подходящая область памяти, и в нее записать нужные символы, то можно изменить команду «запретить подключение» на команду «разрешить доступ» или даже выполнить ваш собственный код.

    Червь Морриса является, вероятно, наиболее известным примером использования ошибки переполнения. Он использует переполнение буфера в программе для UNIX, которая должна идентифицировать пользователя по вводимым им данным. К сожалению, в ней не существовало ограничения на размер вводимой информации. Ввод более чем 512 байт приводил к переполнению буфера, и специальный длинный код Морриса позволял установить его мошенническую программу на компьютер, подвергшийся нападению, и выполнить ее. (Эта ошибка, конечно, была исправлена.)

    Описание этого червя особенно уместно в данном разделе, поскольку он сам содержит программную ошибку. Он должен был перепрыгивать с компьютера на компьютер в Интернете, копировать сам себя на каждый сервер и затем следовать дальше. Но опечатка в коде привела к тому, что вирус копировался неограниченное число раз на каждом компьютере. Результатом была поломка пораженных компьютеров. Крушение произошло на 6000 серверах Интернета, в то время это составляло 10% от их общего числа.

    Умелое программирование способно предотвратить этот род нападений. Программа может сокращать пароль до 8 символов, так что лишние 192 символа никогда не запишутся в память. Сделать это легко, но применить везде – сложно. Проблема состоит в том, что в любой части современного большого и сложного кода есть достаточно мест, где возможно буферное переполнение (которые не столь просто обнаружить, как в этом примере). Очень трудно гарантировать, что нет никаких проблем с переполнением, даже если у вас было время для проверки. Чем больше и сложнее код, тем больше вероятность нападения.

    В Windows 2000 содержится 35-60 миллионов строк кода, и никто, кроме самих разработчиков, не видел их.

    Вездесущность ошибочного кода

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

    По данным Университета Карнеги-Меллона, на 1000 кодовых строк обычно приходится от 5 до 15 ошибок. Большинство этих ошибок не влияет на выполнение программ и никогда не обнаруживается. Но любую из них можно использовать для взлома защиты.

    Создается впечатление, что код Интернета быстро улучшается. Недостатки защиты находят постоянно. Некоторые компьютерные журналы еженедельно публикуют сведения об ошибках в почтовых программах, обнаруженных за прошедший период. Создатели этих программ обычно довольно быстро исправляют ошибки, как только те становятся достоянием общественности; но до тех пор большинство из них не будут беспокоиться.

    Это, конечно, предполагает, что вы всегда ставите самые последние «заплаты». Обычно вслед за сообщением об уязвимости выпускается заплата. Если вы верите новостям, то история на этом завершится. Но в большинстве случаев заплаты никогда не устанавливаются. Главная проблема Интернета состоит в том, что внесенные исправления не обязательно доходят до пользователей программного обеспечения. «Эпоха Интернета» повлияла и на работу системных администраторов.

    Даже при том, что заплаты доступны, прореха остается. По существующим оценкам, более чем 99% всех нападений в Интернете могли быть предотвращены, если бы системные администраторы использовали самые свежие версии системного программного обеспечения. Поэтому сканирующие устройства, определяющие уязвимые места, являются такими подходящими инструментами и для хороших, и для плохих парней.

    Даже если предположить, что каждый пользователь всегда работает с последним обновлением какой-либо программы, положение не становится лучше. При выпуске каждой новой версии в ней появляются новые ошибки. Если в версии 1.0 были найдены и исправлены десятки или сотни ошибок защиты, то это ничего не говорит о надежности версии 2.0. Вероятно, версия 2.0 больше и имеет большее количество особенностей; в ней имеются все типы нового кода. Исправления, внесенные в первую версию программы, нельзя перенести во вторую, и, кроме того, там, вероятно, ошибок стало еще больше.

    Глава 14
    Аппаратные средства безопасности