Первый опыт общения Хью с фаззингом{26} (хотя в то время он этого еще не понял) состоялся, когда он учился в школе на Багамах. Хью захотел выпить газировки. Тогда, в 1980-х годах, машины по продаже прохладительных напитков только-только начали появляться в школах в столице страны Нассау. Багамы – довольно небольшой рынок для поставщиков таких машин, а кроме того, ситуация осложнялась уникальным положением национальной валюты. Официальной денежной единицей на острове выступает багамский доллар, искусственно привязанный к доллару США в соотношении один к одному. Багамские и американские доллары полностью взаимозаменяемы. Если вы покупаете в магазине шоколадку, то можете получить сдачу наполовину в американских, а наполовину в багамских долларах.
Наконец новые машины добрались и до школы, в которой учился Хью, однако к ним были прикреплены рукописные объявления: «Только 25-центовые монеты США». Когда Хью вместе со своими страдавшими от жажды друзьями добрался до одной из этих машин, ни у кого не оказалось американских четвертаков, и ребята начали экспериментировать. Один бросил в прорезь металлическую шайбу в надежде, что это каким-то волшебным образом поможет получить газировку. Шайба тут же выскочила обратно. Тогда они засунули в прорезь американский 10-центовик. Ничего. Багамский 25-центовик. Безрезультатно. Кто-то вспомнил, что в таких ситуациях иногда помогает соленая вода. Из этого тоже ничего не вышло, не считая того, что машина оказалась полностью мокрой. В течение получаса ребята запихивали в машину все, что только могли найти в карманах (в их защиту стоит сказать, что они к тому моменту еще не достигли пубертатного возраста). Ничего не получалось до тех пор, пока кто-то не бросил в прорезь багамскую монету в 10 центов.
Эта монета ничуть не похожа на 25-центовую американскую монету. Она обрезана по краям, что делает ее немного похожей на серебряный цветок. К немалому удивлению Хью и его друзей, на дисплее высветилась цифра «25» – машина ошибочно приняла монету за американский четвертак. Они пошарили по карманам и нашли еще три монетки в 10 центов. На дисплее последовательно высветились цифры «0,50», «0,75» и, наконец, «1,00» (на острове довольно высокие цены). Они нажали кнопку «Выбрать», и – ба-бам! – из ящика вылетела бутылка газировки. Это был один из самых примечательных моментов в детстве Хью.
Много лет спустя Хью узнал, что машина измеряла диаметр и вес каждого объекта, попадавшего в прорезь. По стечению обстоятельств, багамские 10-центовики имели почти тот же вес и диаметр, что и американские четвертаки. Не понимая механики машины, Хью и его друзья применили по сути метод случайных входных параметров в надежде на то, что это приведет к чему-то интересному. В этом и состоит суть фаззинга: применение входных параметров с тем или иным элементом случайности и последующим изучением неожиданных исходов.
Машина, торговавшая газировкой, нормально реагировала на обычное использование, однако отказала, столкнувшись с необычным сценарием. С этой проблемой сталкивалось множество систем, начиная от атомной станции в Фукусиме и заканчивая «Титаником». Люди, оценивающие подобные системы, обычно ограничены правилами логики, но реальный мир редко бывает столь же негибким. Говоря иными словами, системы немеют.
Именно в этот момент на сцене и появляется фаззинг. Тех, кто занимается им, можно сравнить с обезьянками на амфетаминах, пробующих любые действия в надежде что-то сломать. У них мало правил и почти нет ограничений. Они просто делают то, что считают нужным. Нормальный, рассудительный человек не будет вопить в течение часа на машину, торгующую газировкой, и ожидать, что в результате получит бесплатную бутылку. А заряженная амфетаминами мартышка вполне может это попробовать. И кто знает, может быть, в машине есть какой-нибудь сенсор, изучающий окружающую какофонию: думая, что звуки исходят от грузовика, развозящего воду, она разблокирует свою защиту. Современные системы настолько сложны, что никто не знает точно, к чему могут привести необычные стимулы. Хью лично столкнулся с этим во время своего полета из Лас-Вегаса в Орландо{27}.
Перед каждым сиденьем самолета был небольшой экран, вмонтированный в спинку. Пассажиры во время рейса могли смотреть один из нескольких телевизионных каналов или играть в несколько простых игр. Одна из игр выглядела поразительно похожей на классическую стратегическую игру «Тетрис», в которой игроки пытаются перемещать падающие объекты так, чтобы они образовывали завершенные горизонтальные линии. Причем предлагалось указать количество элементов, которые можно было заранее увидеть в ходе игры: «ноль» означал полную непредсказуемость, а «четыре» позволяло планировать на несколько шагов вперед. Для того чтобы получить максимальное преимущество, Хью начал нажимать большую кнопку со знаком «+» на экране и постепенно дошел до максимального значения, равного четырем.
26
Детальное техническое описание ошибки в машине по продаже напитков (и фаззинга в целом) приведено в статье, написанной Хью: Herbert H. Thompson, «Secure Software Needs Careful Testing – and Lots Of It», Information Week, November 28, 2009.
27
Узнать дополнительные детали этой истории можно в статье: Hugh Thompson, «How to Crash an In-Flight Entertainment System», CSO Online, February 9, 2007. blogs.csoonline.com/how_to_crash_an_in_flight_entertainment_system.