Использование скриптов в браузере
Поначалу веб-страницы представляли собой статичные HTML-файлы без исполняемого кода. Теперь же они, как правило, содержат небольшие программы, обычно написанные на языке JavaScript (и иногда скомпилированные в более эффективный формат Web Assembly). Поскольку скачивание и выполнение такого переносимого кода (mobile code) очевидным образом угрожает безопасности, были разработаны различные методы минимизации рисков.
У JavaScript нет формальной модели политики безопасности, зато есть длинная история реализаций с проблемами конфиденциальности. При этом каждая компания-разработчик пытается решить этот вопрос по-своему. Основная мера защиты нацелена на то, чтобы при отсутствии программных ошибок нельзя было нанести ущерб путем чтения и записи произвольных файлов, получения доступа к конфиденциальным данным других веб-страниц и т.д. В таких случаях говорят, что код выполняется в песочнице, то есть в изолированной среде (sandboxed environment). Однако ошибки все же случаются.
Корнем всех проблем является уже сам факт запуска стороннего кода на вашем компьютере — вы сами напрашиваетесь на неприятности. С точки зрения безопасности это то же самое, что пригласить в гости вора и пытаться внимательно следить за тем, чтобы он не проник из кухни в гостиную. Если вы на секунду отвлечетесь, может произойти все что угодно. Загвоздка в том, что переносимый код позволяет использовать эффектную графику и обеспечивает быстрое взаимодействие с пользователем. Многие веб-дизайнеры считают, что это гораздо важнее безопасности, тем более что риску подвергается чей-то чужой компьютер, а не их собственный.
Предположим, что веб-сайт, содержащий ваши личные данные, предлагает вам дать обратную связь в виде произвольного текста, который видят все остальные пользователи. Идея в том, чтобы клиенты могли сообщить компании, понравились ли им предоставленные услуги. Но если сайт недостаточно тщательно проводит очистку данных в форме обратной связи, то злоумышленник может, помимо текста, разместить в поле небольшой фрагмент JavaScript-кода. Теперь представьте, что вы зашли на этот сайт и решили прочитать отзывы других пользователей. При этом JavaScript-код будет отправлен в ваш браузер. Однако браузер не знает, что это часть текста обратной связи. Он воспринимает его как обычный JavaScript-код, который можно встретить на любой другой веб-странице, и начинает его выполнять. Это позволяет вредоносному коду выкрасть все конфиденциальные данные, которые ваш браузер использует для этого сайта (например, файлы cookie), и отправить их злоумышленнику. Такие атаки называют межсайтовым скриптингом (Cross-Site Scripting, CSS). Родственная разновидность атак, подделка межсайтовых запросов (Cross-Site Request Forgery, CSRF), позволяет злоумышленнику выдавать себя за пользователя.
Еще одной потенциальной проблемой является недостаточная безопасность самого движка JavaScript. Например, используя уязвимость браузера, вредоносный JavaScript-код может взять под контроль браузер или даже операционную систему. Эта атака называется теневой загрузкой (drive-by download): пользователь заходит на веб-сайт и, не зная об этом, подвергается заражению. Причем сам сайт может и не быть вредоносным — JavaScript-код может находиться в рекламе или, как мы видели ранее, в поле обратной связи. Особую известность получила атака на Google и ряд других IT-компаний, так называемая операция «Аврора». В ходе этой атаки злоумышленники применили теневую загрузку, чтобы охватить как можно больше компьютеров компании и получить доступ к репозиториям исходного кода.
Расширения браузера
Наряду с увеличением возможностей веб-страниц с помощью кода сегодня также активно развивается рынок браузерных расширений (browser extensions), аддонов, или дополнений (add-ons), а также плагинов, или подключаемых модулей (plug-in). Это компьютерные программы, расширяющие функциональность браузеров. Плагины позволяют интерпретировать или отображать определенный тип контента (PDF-документы или флеш-анимацию). Расширения и аддоны предоставляют новые функции (например, улучшенное управление паролями) или способы взаимодействия со страницами (маркировка страниц, просмотр сопутствующих товаров и т.д.).
Установить аддон, расширение или плагин очень просто: достаточно найти нужную программу в Сети и пройти по ссылке. Таким образом код загружается и встраивается в браузер. Все эти программы написаны в разных средах, в зависимости от того, в какой браузер они встраиваются. В любом случае в первом приближении они становятся частью доверенной вычислительной базы браузера. То есть если установленный код содержит ошибки, это может нарушить работу всего браузера.
Существуют еще две очевидные проблемы. Первая: программа может осуществлять вредоносные действия, например собирать личную информацию и отсылать ее на удаленный сервер. При этом браузер будет считать, что пользователь установил расширение именно с этой целью. Вторая проблема в том, что плагины дают браузеру возможность считывать новые типы контента. Часто это сам по себе полноценный язык программирования; хорошие примеры — PDF и Flash. Когда пользователи просматривают страницы с PDF и Flash, плагины выполняют соответствующий код. Он должен быть безопасным, ведь в браузере могут быть уязвимости, которыми код может воспользоваться. В силу этих причин аддоны и плагины лучше ставить по мере необходимости и скачивать только из надежных источников.
Трояны и другое вредоносное ПО
Трояны и прочие вредоносные программы — еще одна форма недоверенного кода. Обычно пользователи устанавливают их, даже не подозревая об этом. Либо они думают, что программа безобидна, либо запускают ее в скрытом режиме, открыв вложение, прикрепленное к письму, и в результате на компьютер устанавливается вредоносное ПО. Обычно оно первым делом заражает другие программы (на диске или в оперативной памяти), после чего запуск любой из них будет вести к выполнению вредоносного кода. Он может распространиться на другие компьютеры, зашифровать все документы на диске (с целью получения выкупа), проследить за вашими действиями и сделать множество других неприятных вещей. Некоторые вредоносные программы заражают загрузочный сектор жесткого диска, чтобы запускаться на этапе начальной загрузки компьютера. Подобное ПО превратилось в огромную проблему интернета и принесло многомиллиардные убытки. Какого-либо простого решения проблемы не существует. Возможно, положение спасет создание нового поколения операционных систем на основе защищенных микроядер, а также жесткое разделение пользователей, процессов и ресурсов.
46 Вид спекуляции на бирже, когда торговец берет акции в кредит и продает их по текущей цене. После падения акций он выкупает их по новой, низкой стоимости и возвращает их брокеру. — Примеч. ред.
8.13. Социальные вопросы
Интернет и технологии сетевой безопасности — это сферы, в которых сталкиваются социальные вопросы, государственная политика и технологии. Зачастую это приводит к серьезным последствиям. Ниже мы кратко рассмотрим три проблемы: приватность, свободу слова и авторские права. Стоит ли говорить, что это лишь верхушка айсберга. Более подробную информацию вы найдете в работах Андерсона (Anderson, 2008a), Баазе и Генри (Baase and Henry, 2017), Бернала (Bernal, 2018) и Шнайера (Schneier, 2004). Множество материалов по этой теме можно отыскать в интернете. Достаточно набрать в любой поисковой системе слова «приватность» (privacy), «цензура» (censorship) и «авторское право» (copyright).
8.13.1. Приватная и анонимная коммуникация
Имеют ли люди право на неприкосновенность частной жизни? Хороший вопрос. Четвертая поправка к Конституции США запрещает государству обыскивать жилье граждан, их имущество и личные бумаги без достаточных на то оснований. Перечень обстоятельств, в которых выдается ордер на обыск, ограничен. Таким образом, вопрос приватности стоит на повестке дня уже более 200 лет (по крайней мере, в США).
Что изменилось за последнее десятилетие? Теперь правительство может легко шпионить за гражданами, а те, в свою очередь, — без особых усилий избегать слежки. В XVIII веке для получения доступа к личным документам подданного требовалось по нескольку дней добираться до его фермы верхом, что было весьма непросто. В наши дни телефонные компании и интернет-провайдеры при виде ордера с готовностью предоставляют властям возможность прослушки. Это сильно упрощает работу полицейских, к тому же они больше не рискуют упасть с лошади.
Повсеместное распространение смартфонов выводит слежку государства за гражданами на новый уровень. Многие хранят на смартфоне всю информацию о своей жизни, а для его разблокировки часто используют технологию распознавания лиц. Это означает, что если, к примеру, сотрудник полиции хочет получить доступ к телефону подозреваемого, а тот отказывается снять блокировку, достаточно всего лишь подержать смартфон перед лицом задержанного. Как ни странно, мало кто предполагает такое развитие событий, когда активирует распознавание лиц (или более раннюю функцию распознавания отпечатков пальцев).
Однако использование криптографии сильно меняет дело. Тот, кто потрудился скачать и установить PGP и сгенерировать хорошо защищенный, надежный ключ, может быть уверен, что никто в мире не сможет прочесть его электронную почту (даже при наличии ордера). Правительства прекрасно это понимают, и, разумеется, им это не нравится. В реальности неприкосновенность частной жизни означает, что уполномоченным органам очень трудно следить не только за преступниками всех мастей, но и за журналистами, а также за политическими оппонентами. Неудивительно, что многие правительства запрещают использование и экспорт криптографии. К примеру, до 1999 года во Франции любая негосударственная криптография была вне закона (если только государству не предоставлялись все ключи).
В этом Франция не была одинока. В апреле 1993 года правительство США объявило о своем желании создать аппаратный криптопроцессор (clipper chip) и сделать его стандартом для любых сетевых коммуникаций. При этом, как было заявлено, гражданам гарантировалось право на приватность. Вместе с тем упоминалось, что государство сможет расшифровывать весь трафик криптопроцессоров за счет использования системы депонирования ключей (key escrow); эта система предоставила бы властям доступ ко всем ключам. И хотя представит