left-pad был загружен более двух миллионов раз.
В тот мартовский день Кочулу удалил свой код из npm из-за разногласий по поводу названия его модуля, совпавшего с названием зарегистрированной торговой марки. Представители npm попросили его переименовать модуль после жалобы компании – владельца торговой марки, Кочулу отказался и в итоге удалил все свои пакеты с ресурса. Среди них был и left-pad. В результате внезапно оказались разрушены все цепочки программ, в которых использовался модуль Кочулу. Некоторые цепочки были настолько длинными, что разработчики даже не осознавали, что они зависят от этих одиннадцати строк кода.
Программа Кочулу – это лишь один пример компьютерного кода, который распространяется гораздо шире, чем мы можем предположить. Вскоре после инцидента с left-pad программист Дэвид Хейни обратил внимание, что еще один инструмент из npm – состоящий всего из одной строчки кода – стал критически важной частью семидесяти двух других программ. Он назвал еще ряд программ, которые в значительной степени зависели от простых фрагментов кода. «Я поражен тем фактом, что разработчики делают свой код зависимым от заимствованных функций длиной в одну строку, которые они должны уметь писать с закрытыми глазами», – недоумевал он [510]. Заимствованные фрагменты кода зачастую распространяются дальше, чем можно ожидать. Когда исследователи из Корнеллского университета проанализировали статьи, написанные с помощью LaTeX, популярного набора расширений для верстки научных текстов, они обнаружили, что ученые часто используют коды коллег. Некоторые файлы распространялись по профессиональным сетям более двадцати лет [511].
По мере распространения код может изменяться. После того как в конце сентября 2016 года трое студентов опубликовали код Mirai, в интернете появились десятки его вариантов, лишь незначительно отличавшихся от исходного. Внесение в код таких изменений, чтобы он стал инструментом масштабной атаки, было лишь вопросом времени. В начале октября, за несколько месяцев до инцидента с Dyn, специалисты по кибербезопасности из компании RSA обратили внимание на необычное объявление в даркнете: группа хакеров предлагала атаку мощностью 125 гигабит в секунду. За 75 тысяч долларов можно было купить доступ к бот-сети из 100 тысяч узлов, которая, как утверждалось, работала на основе модифицированного кода Mirai [512]. Но это был не первый случай изменения Mirai. За несколько недель до опубликования кода создатели программы внесли в нее более двадцати корректировок – вероятно, чтобы повысить заразность бот-сети. Одни вставки затрудняли обнаружение червя, другие блокировали прочие вредоносные программы, конкурирующие за доступ к уязвимым компьютерам. Став общедоступным, код Mirai продолжал изменяться на протяжении нескольких лет; новые варианты появлялись даже в 2019 году [513].
Когда Фред Коэн в 1984 году впервые описывал компьютерные вирусы, он отмечал, что вредоносное ПО со временем может меняться, так что его будет все труднее обнаружить. Экосистема компьютерных вирусов и антивирусных программ не достигнет устойчивого равновесия – она будет постоянно развиваться. «В результате эволюции равновесие нарушается, и результат неясен во всех случаях, кроме самых простых, – говорит Коэн [514]. – Это что-то сродни биологической теории эволюции и, возможно, генетической теории болезней».
Стандартный способ защиты от вредоносного ПО – установить антивирусную программу, которая будет выявлять известные угрозы. Обычно такая программа ищет знакомые сегменты кода, а затем распознанная угроза нейтрализуется [515]. Иммунная система человека действует подобным образом при заражении или после вакцинации. Клетки иммунной системы запоминают признаки патогена, воздействию которого мы подверглись, и при повторном инфицировании быстро реагируют на угрозу и нейтрализуют ее. Но эволюция порой затрудняет этот процесс – некогда знакомые патогены меняются, чтобы их не обнаружили.
Один из самых ярких и досадных примеров этого процесса – эволюция вируса гриппа. Биолог Питер Медавар однажды назвал вирус гриппа «фрагментом нуклеиновой кислоты, окруженным плохими новостями» [516]. Две особенно плохие новости живут на поверхности вируса: это пара белков под названием гемагглютинин и нейраминидаза, сокращенно HA и NA. HA позволяет вирусу прикрепляться к клетке-хозяину, а NA помогает выпускать новые частицы вируса с поверхности зараженных клеток. Эти белки могут иметь разную форму, что и определяет различия между штаммами вируса гриппа: H1N1, H3N2, H5N1 и так далее.
Зимние эпидемии гриппа обычно вызываются штаммами H1N1 и H3N2. Вирусы постепенно эволюционируют, и при этом меняется форма белков. Поэтому наша иммунная система не воспринимает мутировавший вирус как угрозу. Мы ежегодно сталкиваемся с эпидемиями гриппа – и ежегодно проходим вакцинацию – именно потому, что наш организм играет с вирусом в эволюционные «кошки-мышки».
Эволюция помогает выживать и искусственным инфекциям. В последние годы вредоносные программы научились автоматически меняться, чтобы их было сложнее обнаружить. Например, в 2014 году бот-сеть Beebone заразила тысячи компьютеров по всему миру. Червь, распространяемый ботами, менялся по нескольку раз в день, порождая миллионы уникальных вариантов. Когда антивирусные программы учились узнавать текущую версию кода, червь вновь менялся, искажая известную схему. В 2015 году Beebone наконец удалось полностью удалить из сети – но только после того, как специалисты выявили неизменную часть системы: для координации бот-сети использовались одни и те же доменные имена. Такой подход оказался более эффективным, чем попытки идентифицировать меняющихся червей [517]. Точно так же биологи надеются разработать более эффективные вакцины против гриппа, чтобы нацелить иммунную систему на те части вируса, которые остаются неизменными [518].
Вредоносные программы и дальше будут эволюционировать, чтобы избежать обнаружения, а власти продолжат попытки за ними угнаться. Меняться будут и пути передачи. Инфекции смогут не только находить новые мишени вроде бытовых приборов, но и распространяться посредством кликбейта и прицельных атак на соцсети [519]. Рассылая персонализированные сообщения конкретным пользователям, хакеры смогут увеличить вероятность того, что пользователь перейдет по ссылке и невольно загрузит вредоносное ПО. Но эволюция не только помогает инфекциям эффективно распространяться между компьютерами или людьми. Она также открывает нам новый способ остановить заражение.
Любовная связь закончилась покушением на убийство. Больше десяти лет Ричард Шмидт, гастроэнтеролог из Лафайета (Луизиана), встречался с медсестрой Дженис Трейхен, которая была младше его на пятнадцать лет. Она развелась с мужем, но Шмидт, несмотря на все свои обещания, не оставил жену и троих детей. Трейхен уже пыталась порвать отношения, но на этот раз твердо решила довести дело до конца.
Позднее она рассказала, что пару недель спустя, 4 августа 1994 года, Шмидт пришел к ней домой, когда она спала. Он сказал, что сделает ей укол витамина B12. Ранее он уже делал ей инъекции витаминов для повышения тонуса, но в ту ночь женщина отказалась. Однако прежде, чем она