Как основатели Интернет оставили себе чёрный ход

Эта статья является продолжением серии о безопасности в Интернет, которая на самом деле небезопасна. Предыдущая статья "Кому выгоден JavaScript, и почему уничтожили Sun Microsystems" затронула один из аспектов этой небезопасности, а именно намеренно встроенную в язык описания стилей CSS возможность впрыскивать случайные данные и код в функциональность ресурсов, использующих библиотеки. Её и другие статьи серии полезно прочесть, чтобы лучше понять эту.

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

Дело в том, что в языке CSS присутствуют две директивы, позволяющие ему подменять содержание исходного кода страниц HTML: директивы before и after. Они предоставляют возможность при помощи CSS добавлять к элементам страниц другие элементы. Зачастую владельцы ресурсов не раздают пользователям все библиотеки стилей, а предоставляют браузерам пользователей скачивать эти библиотеки с сетей раздачи, чтобы сэкономить на объёме данных, который прокачивает сам ресурс. Таким образом контроль над библиотекой оказывается в руках тех, у кого она хранится, а не у владельца ресурса. Эти лица могут быть кем угодно, ведь автор библиотеки не обязательно строго следит, куда он её выкладывает, и кто владеет конкретным оборудованием где-то далеко на земном шаре.

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

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

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

Как это можно осуществить? Просто! Предположим, что злоумышленник выждал, пока страницы ресурса запросит некий пользователь (по любому признаку: IP-адресу, географическому положению, наличию файлов «куки» и прочим), подменил библиотеку и её контрольную сумму для запросов этого пользователя, и впрыснул на страницу ресурса свой код при помощи директивы before или after. Это означает, что, встретив в подменённом коде страницы ресурса одну из этих директив, браузер пользователя добавит к указанному элементу другие, указанные в подменённом файле библиотеки, например элемент script  или обработчик события, которые приведут к исполнению злонамеренного кода. Так имя пользователя, пароль, личные данные или другая информация могут быть перенаправлены злоумышленникам путём обращений к сторонним ресурсам.

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

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

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


Рецензии