Атаки такого рода не ограничиваются веб-страницами и поисковыми машинами. Небольшие компании иногда включают в свои пресс-релизы название и эмблему более крупной компании, и в результате люди, которые ищут ту большую компанию, получат и этот пресс-релиз. Это называется столкновением наименований (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, но знают, что должны отправить письмо самолетом в Чикаго. В почтовом отделении аэропорта Чикаго знают, что должны переложить письмо в самолет, вылетающий в Бойсе. В почтовом отделении города Бойсе знают, что письмо нужно доставить к поезду, который идет в Фингербон. И наконец, на почте Фингербона имеют точную информацию, где находится указанный адрес, и почтальон доставит письмо.