Как захватить Вселенную. Подчини мир своим интересам. Практическое руководство для вдохновленных суперзлодеев — страница 26 из 51

заодно работал и пароль «райанкрутой». (Можно использовать свое имя, но скромно замечу, что мое на какое-то время собьет власти с вашего следа: мой вам подарок.)

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

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

Тут вы наверняка подумали: «Но ты же сказал, что компиляторы – такие же компьютерные программы, как и любые другие, а значит, любой может заглянуть в исходный код компилятора и найти мои изменения. Стоит им убрать ту часть, которая делает „райанкрутой“ паролем, и моему замыслу конец».

И вы правы: так может сделать кто угодно. Но вы сами сказали: компиляторы – такие же программы, как и любые другие.

И значит, они сами скомпилированы.

И вот тут – самый коварный момент.


Шаг 1

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



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



И вот, как и в прошлый раз, вы успешно создали злодейский компилятор, но вас точно так же поймают, когда кто-нибудь проверит исходный код, где все ваши изменения лежат на виду. Хорошо, что мы еще пока не закончили!


Шаг 2

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



Отметим, что теперь новый злодейский компилятор ведет себя точно так же, как исходный, кроме двух особых случаев. Компилируя приложения, он, как и прежде, вставляет в них секретный бэкдор для пароля «райанкрутой»:



А когда злодейский компилятор меняет себя, то создает новый компилятор, который тоже вставляет бэкдор в любое приложение. Теперь ваши изменения невозможно выкорчевать, даже если кто-нибудь сделает новый компилятор на основе проверенного, надежного и неизменного исходного кода:


Шаг З

Ваше преступление близко к завершению. Осталось только удалить злодейские инструкции из исходного кода компилятора – и вы идеально замели следы. Теперь компилятор ведет себя, как положено (насколько видно со стороны), довольно создает программы, которые для всего мира выглядят неизмененными.

Но на самом деле он безнадежно скомпрометирован: он собирает приложения по вашим спецификациям и в любой созданный на нем компилятор втайне тоже встраиваются ваши указания.

И ни в одном исходном коде не остается ни единой подозрительной строчки.

Ну вот! Готово. Перенесите пример с паролями на «подсчет голосов в свою пользу» – и ваше преступление завершено.

А! И поздравляю с успехом в цифровом голосовании, госпожа президент.


Замечательно

Это замечательно! Просто замечательно. Вы, конечно, подумаете, что ваши жертвы могли бы просто вручную проверить двоичный код вашей программы, но это проще сказать, чем сделать, особенно если программа достаточно сложная и объемная. Рассмотрим для сравнения полное собрание сочинений Уильяма Шекспира (хотя бы написанных на английском!): оно составляет 6 Мб информации, и нужно несколько дней, чтобы прочесть более 50 млн бит данных. Один только браузер «Файрфокс» требует больше 200 Мб только для установки, а на компьютере есть и другие программы. Скорее всего, во всем мире нет ни одного живого человека, который прочел все 200 Мб этого двоичного кода. Ведь он даже записан на языке не для людей! И да, если кто-то заподозрит, что вы влезли в компилятор (чего никогда не произойдет, если вы все сделали правильно), он может хотя бы сравнить его с известным хорошим компилятором и сверить измененные разделы двоичного кода. Но даже если отложить вопрос, откуда возьмется хороший компилятор, проверка не скажет, в чем изменения, только то, что изменения есть. А чтобы разобраться, нужно переписать двоичный код с самого начала.

Лучшая (или худшая, как посмотреть) часть этого замысла – все это не секрет и известно уже несколько десятилетий. В 1984 году Кен Томпсон – создатель «Юникса», предшественника операционных систем на большинстве компьютеров и смартфонов, – написал статью «Размышления о доверии к доверию» (Reflections on Trusting Trust), где пришел к такому же выводу. «Мораль проста, – написал он. – Нельзя доверять коду, если не написали его сами целиком. (Особенно коду от компаний, где работают такие, как я.) Никакая проверка исходного кода вас не защитит…» Под «написали сами целиком» Томпсон имеет в виду не просто программу, а все, что только можно, вплоть до компилятора. Мало у кого хватит времени, умения и денег, чтобы собрать компьютер с нуля, включая все программное обеспечение. Похоже на контрольный выстрел в голову доверию к компьютерам. И скажем честно: если вам нравится издавать злодейский хохот, то сейчас самое время.

Но, несмотря ни на что, мы все равно доверяем компьютерам во всем! Как так? Почему мы по своей воле пользуемся этими адскими машинами?

Все сводится к тем же требованиям легитимных выборов: открытые, честные, анонимные, прозрачные и точные.

Во многом, для чего мы используем компьютеры… черт, да просто многому в реальной жизни либо не нужны все эти требования, либо нужны, но только ставки не так высоки. Люди спокойно платят кредитными картами в Сети, но лишь потому, что эмитенты этих карт готовы покрыть убытки от мошенничества как обычные издержки, главное, чтобы деньги (и доходы) текли свободно. Банки исходят из тех же соображений, когда гарантируют безопасность транзакций через свои сайты: иногда преступники похищают деньги, но банк покроет убытки, поскольку цена доверия к их сайту гораздо выше, чем потери от действий мошенников. Онлайн-опросы по мелочам работают, поскольку ставки ниже: если результаты подделают, проигнорируют или не примут, судьба демократии не повиснет на волоске – это всего лишь дурацкий опрос в интернете. А когда в Сеть утекают нюдсы, то чаще всего потому, что ими поделились с кем-то, кто не стоит доверия и их слил, а не потому, что был взломан компьютер с изображениями[78]. В действительности компьютеры удобные и прикольные, и есть не так уж много случаев, когда к ним требуется абсолютное доверие.

Но выборы – не из таких случаев.

На выборах взлом может повлечь масштабные и непоправимые последствия, потому что выборы не так легко изменить. И они по природе чрезвычайно публичны: заранее известно, где и когда они будут происходить. Хуже того, у изменения исхода выборов есть очевидная, желаемая, мотивирующая и потенциально очень большая выгода (особенно это касается других стран, которым легче выделить ресурсы для аферы такого масштаба): похищение самой демократии. И этот взлом можно осуществить и с помощью физического доступа к компьютерам, и через удаленный интернет-доступ, и с одной-единственной USB-флешкой, вставленной в машину частной внутренней сети.

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

Как саботировать атомную программу другой страны ради развлечения и выгоды

В 2010 году был обнаружен вредоносный код, распространявшийся через неизвестные в то время уязвимости в Microsoft Windows, – сетевой червь Stuxnet. Примечательности ему придавала узконаправленность: он ничего не делал, пока не обнаруживал, что заразил промышленные контрольные системы Siemens, и это не совпадение, что именно их технологии использовались на установках обогащения урана в Иране. А еще Stuxnet был скрытным: он не только не вредил другому оборудованию в случае заражения, но и был запрограммирован на полное самоуничтожение 24 июня 2012 года. Но до этой даты, оказавшись на нужном оборудовании, Stuxnet совершил нечто по-настоящему изощренное: через неравные промежутки времени случайным образом менял параметры центрифуг. Он разгонял их так быстро, что они буквально разрывались во вращении на части, и одновременно делал так, чтобы компьютеры не показывали ошибок. Наверняка этот невидимый баг привел иранцев в ярость и бессилие: записи и датчики показывали, что все работает идеально, вот только иногда безо всяких причин очень дорогое оборудование саморазрушалось.

И судя по тому что нам известно, Stuxnet работал: иранские власти так и не признали причину но в 2009–2010 годах количество поломок и отказов на их фабриках по обогащению урана сильно превысило обычный уровень. Инспекторы ООН видели, как на обогатительном заводе в Нетензе остановили, разобрали и заменили около 2000 из 9000 центрифуг. Stuxnet контролировался через интернет (получал команды и обновления с особых серверов в Дании и Малайзии) и распространялся с помощью зараженных USB-флешек, подключавшихся к управлению центрифугой – или в любой компьютер под управлением Windows, подсоединенный к внутренней, якобы защищенной сети.