2017 года, когда некоторые владельцы домов, подключенных к интернету, обнаружили, что не могут включить свет. Или выключить духовку. Или попасть в гараж.
Попытки выявить источник неполадок указывали на Amazon Web Services (AWS) – подразделение Amazon, отвечающее за облачный сервис. Когда в «умном» доме кто-то нажимает на кнопку, чтобы включить «умную» лампочку, уведомление об этом отправляется на облачный сервер (например, AWS), который может располагаться на расстоянии нескольких тысяч миль. Затем сервер посылает сигнал лампочке, и она включается. В тот февральский день некоторые серверы AWS ненадолго отключились от интернета, из-за чего множество домашних устройств перестало реагировать на команды [500].
В целом AWS очень надежна: компания обещает бесперебойную работу серверов 99,99 % времени, и именно такая надежность способствовала популярности облачных сервисов. Они стали настолько востребованными, что в последние годы AWS обеспечивает Amazon почти три четверти прибыли [501]. Однако широкое распространение облачных вычислений вкупе с возможными последствиями отказа сервера вызвали предположение, что система AWS «слишком велика, чтобы рухнуть» [502]. Если значительная часть сети зависит от одной компании, то мелкие проблемы в источнике могут многократно усугубляться. Аналогичные опасения высказывались в 2018 году, когда Facebook объявила, что миллионы пользователей могли пострадать из-за взлома системы безопасности. А поскольку многие используют аккаунт фейсбука для доступа к другим сайтам, такие атаки могут распространяться дальше, чем предполагают пользователи [503].
Мы не впервые сталкиваемся с подобным сочетанием скрытых связей и крупных хабов, в которых сходятся все цепочки. Именно эти особенности сети сделали уязвимой финансовую систему, которая существовала до 2008 года – пока события, казавшиеся локальными, не привели к глобальным последствиям. В онлайн-сетях этот эффект может проявляться еще сильнее. И это приводит к весьма необычным эпидемиям.
Вскоре после проблемы 2000 года в интернете появился «любовный вирус». В начале мая 2000 года люди в разных уголках планеты получили электронные письма с темой «ILOVEYOU». Сообщение было заражено компьютерным червем, замаскированным под текстовый файл с признанием в любви. Когда получатель открывал письмо, червь повреждал файлы на зараженном компьютере, а затем рассылал сам себя по всем электронным адресам из адресной книги. Он распространился довольно широко, парализовав работу электронной почты нескольких организаций, в том числе британского парламента. В конце концов технические отделы приняли меры, которые помогли защитить компьютеры от червя. Но потом произошло нечто странное. Червь не исчез, а остался жить в сети. Даже через год он входил в число самых активных вредоносных программ в интернете [504].
Специалист по информационным системам Стив Уайт заметил, что то же самое происходит с другими компьютерными червями и вирусами. В 1998 году он отмечал, что такие программы часто остаются в сети. «Это загадка, – писал Уайт [505]. – Данные об инцидентах с вирусами свидетельствуют о том, что в каждый момент времени несколько систем в мире оказываются заражены». Тот факт, что вопреки мерам противодействия вирусы живут так долго, свидетельствует об их высокой заразности; но при этом обычно они заражают небольшое число компьютеров, а это значит, что распространяются они не очень хорошо.
В чем причина этого парадокса? Через пару месяцев после атаки «любовного вируса» Алессандро Веспиньяни и его коллега, физик Ромуальдо Пастор-Саторрас, наткнулись на статью Уайта. Складывалось впечатление, что компьютерные вирусы ведут себя не так, как биологические, и исследователи задумались: не связано ли это со структурой сети? Годом ранее их исследование показало, что разброс в популярности сайтов в мировой паутине очень велик: ссылки на одни сайты можно пересчитать по пальцам, а на другие ссылаются чрезвычайно часто [506].
На примере болезней, передающихся половым путем, мы уже знаем, что реальное репродуктивное число инфекции будет тем выше, чем больше разброс в количестве сексуальных партнеров у разных людей. Инфекция, вспышка которой угасла бы, если бы все вели себя одинаково, может распространиться, если у некоторых людей сексуальных партнеров гораздо больше, чем у остальных. Веспиньяни и Пастор-Саторрас поняли, что в компьютерных сетях происходит нечто более серьезное [507]. Из-за огромной вариативности в количестве связей в сети выживают даже слабые на первый взгляд вирусы. Причина в том, что в такой сети каждый компьютер расположен всего в нескольких шагах от крупного хаба с большим числом связей, который может передавать вирусы множеству машин, играя роль суперраспространителя. Это гипертрофированная версия проблемы, с которой столкнулись банки в 2008 году, когда эпидемия развивалась за счет нескольких крупных хабов.
В тех случаях, когда вспышки обусловлены суперраспространением, сам процесс передачи крайне нестабилен. Если инфекция не достигнет крупного узла, она вряд ли распространится слишком далеко. Однако суперраспространение также делает вспышку менее предсказуемой. Хотя распространяются далеко не все вспышки, те, которым это все же удается, могут заявлять о себе удивительно долго. Вот почему некоторые компьютерные вирусы и черви продолжают жить в сети, хотя сами по себе они не так уж и заразны. То же самое можно сказать о многих трендах в соцсетях. Возможно, вам доводилось наблюдать за распространением какого-нибудь странного мема и удивляться его живучести; причина может заключаться в особенностях сети, а не в качестве контента [508]. Благодаря структуре онлайн-сетей инфекции в интернете обретают возможности, недоступные биологическим инфекциям.
22 марта 2017 года веб-разработчики по всему миру заметили, что их приложения работают неправильно. Самые разные компании, использующие язык программирования JavaScript, от Facebook до Spotify, обнаружили, что часть их программного обеспечения не работает. Пользовательские интерфейсы давали сбои, картинки не загружались, обновления не устанавливались.
Что произошло? Выяснилось, что пропали одиннадцать строк компьютерного кода, о существовании которых многие люди даже не догадываются. Этот код был написан Азером Кочулу, веб-разработчиком из Окленда (Калифорния). Одиннадцать строк представляли собой программу на JavaScript под названием left-pad. Сама программа была несложной: она просто доводила строки до нужной длины, вставляя пробелы в начале. Большинство программистов способны написать ее с нуля за несколько минут [509].
Но большинство программистов не пишут все с нуля. Ради экономии времени они используют инструменты, разработанные другими и выложенные в свободный доступ. Многие ищут их на онлайн-ресурсе npm, где собраны полезные программные модули вроде left-pad. Иногда разработчики встраивают эти инструменты в новые программы, которые затем тоже выкладывают в открытый доступ. Некоторые из таких программ, в свою очередь, встраиваются в следующие, и в результате образуется цепочка, в которой каждый новый продукт поддерживается предыдущим. Когда кто-то устанавливает или обновляет программу, ему также нужно загрузить всю предшествующую цепочку – в противном случае появится сообщение об ошибке. За месяц до исчезновения злосчастный