Такое случается постоянно. Когда квалифицированный специалист производит анализ защиты программного обеспечения, он всегда обнаружит случайные недостатки, подрывающие систему безопасности. Всегда. Чем сложнее код, тем больше несовершенства в его защите.
Огрехи защиты, однажды обнаруженные, будут использоваться до тех пор, пока не будут устранены. Предположим, что нападающий нашел брешь в защите торгового протокола, что позволило ему украсть номер кредитной карты или, что еще хуже деньги. Если его действия мотивировались желанием создать саморекламу, он известит о своем достижении прессу и эта ошибка будет исправлена. (Хотелось бы надеяться, что сначала он предупредит компанию.) Если его действиями управляет желание получить деньги, нападающий станет использовать эту возможность снова и снова. Он украдет столько, сколько сможет, пока еще кто-нибудь не обнаружит этот недостаток и не исправит его. В этом основное отличие: недостатки, влияющие на выполнение, заметны, в то время как недочеты защиты могут оставаться невидимыми в течение долгого времени.
Эти недостатки не обязательно находятся в коде, относящемся к системе безопасности. Они могут присутствовать повсюду: в интерфейсе пользователя, в программах обработки ошибок, в любом другом месте. И как мы видели в главе 10, даже программы, не имеющие никакого отношения к компьютерной безопасности, могут повлиять на защищенность компьютеров, работающих в сети. Недостатки в текстовом процессоре, драйвере принтера или мультимедийном проигрывателе могут полностью подорвать систему безопасности вашего компьютера.
Еще один вывод состоит в том, что ошибки в программном обеспечении (и, следовательно, недостатки защиты) неминуемы. Предположение, что огромное пространство Интернета может быть свободно от ошибок, настолько же невероятно, как, то, что программное обеспечение «Ариан 5» было полностью защищено от сбоев и лишь несчастливое стечение обстоятельств привело к таким катастрофическим последствиям.
Мы наблюдали подобные вещи в Windows NT. He проходит и дня без объявления об обнаружении нового просчета в системе безопасности этой программы. Те же тенденции наблюдаются и в Windows 2000.
Переполнения буфера
Переполнения буфера (иногда называемые разрушением стека) являются обычным способом разрушения защиты. Их легко осуществить; атаки достигают своей цели чаще всего именно благодаря буферным переполнениям. Нападения такого рода могут быть разрушительными, часто они заканчиваются получением полного контроля над компьютером. Этот метод использовался во многих выдающихся нападениях. Поскольку уменьшение количества таких атак не наблюдается, стоит детально объяснить, что они собой представляют и как работают.
Давайте начнем с аналогии. Если вы попытаетесь украсть что-нибудь из близлежащего магазина, то вам придется пробираться мимо продавца. Продавец не станет творчески подходить к делу. Скорее всего, он предпримет только те действия, которые предписаны инструкцией. Инструкция служащего – это большой набор протоколов, описывающих различные ситуации. Например: «контакт с лицом, утверждающим, что он служащий».
• Шаг 1. Попросить показать удостоверение.
• Шаг 2. Убедиться, что удостоверение не поддельное.
• Шаг 3. Проверить, что на фотокарточке в удостоверении действительно изображен этот человек.
• Шаг 4. Если это так, впустить его. Если нет, не впускать. Или: «контакт с водителем, привозящим товар»:
• Шаг 1. Взять коробку.
• Шаг 2. Расписаться за коробку.
• Шаг 3. Убедиться, что водитель уезжает.
Водитель не может пройти мимо служащего назад в магазин, потому что в инструкции ясно сказано, что после получения подписанной квитанции водитель должен уехать.
Компьютеры работают почти так же. Программы подобны шагам в инструкции; компьютеры выполняют то, что написано в программах, и ничего больше. Сетевые компьютеры работают аналогично. У них есть набор протоколов, которым они следуют, – эти протоколы описывают процедуру входа в систему, ограничения доступа, защиту паролей, и определяют, кто может быть допущен, а кто нет. Тот, кто действует в соответствии с протоколами, будет пропущен, а кто действует иначе – войти не может.
Один из способов нанести поражение такому протоколу состоит в изменении действующей компьютерной программы. Это подобно замене страницы в инструкции для служащего. Инструкции обычно пишутся для того, чтобы их исполнители не вдавались в размышления. Каждая страница – это шаг: «Если клиент дает вам кредитную карту, смотрите следующую страницу. Если клиент расплачивается наличными деньгами, смотрите страницу 264». Шаги, описывающие контакт с развозчиком товара, могут выглядеть следующим образом.
• Страница 163. Возьмите коробку. Если она одна, смотрите следующую страницу. Если коробок несколько, смотрите страницу 177.
• Страница 164. Возьмите форму для подписи, подпишите и верните ее. Смотрите следующую страницу.
• Страница 165. Спросите водителя, хочет ли он что-нибудь купить. Если он хочет, смотрите страницу 13, если нет, смотрите следующую страницу.
• Страница 166. Попросите водителя уехать. Если он… и т. д.
Всякий раз, когда служащий магазина совершает какое-либо действие, он руководствуется открытой страницей в своей инструкции. Он не может посмотреть на вещи иначе.
Нападение состоит в следующем: притворившись развозчиком, можно поменять страницу в инструкции служащего, когда он будет занят подписью квитанций. Все, что нужно сделать, это дать ему два листа вместо одного. Верхний лист – это квитанция, а нижний – поддельная страница инструкции:
• Страница 165: Отдайте водителю все деньги из кассового аппарата. Смотрите следующую страницу.
Это сработает. Служащий возьмет коробку, как написано на странице 163. Он посмотрит страницу 164 и возьмет квитанцию (вместе с фальшивой страницей). Он положит оба листа на открытую инструкцию, подпишет и вернет квитанцию (оставив фальшивую страницу в инструкции), затем, вернувшись к инструкции, увидит поддельную страницу. Он отдаст все деньги из кассы и увидит следующую страницу (настоящую страницу 165). Шоферу нужно ответить, что он не хочет ничего купить, и уехать. Если служащий магазина на самом деле такой же тупой, как компьютерная система, развозчик сможет уехать с деньгами. Можно использовать этот способ обмана, чтобы убедить служащего магазина пустить нас на склад или чтобы исполнить любой другой замысел. Подложив страницу в инструкцию, можно произвольно поменять его действия.
По сути дела, это способ использовать ошибки переполнения буфера в компьютерных системах. Компьютеры хранят в памяти все программы и данные. Если компьютер запрашивает у пользователя пароль, который должен состоять из 8 символов, и получает пароль из 200 символов, то дополнительные символы могут записаться в какую-то другую область памяти. (Компьютер не может предположить, что происходит что-то неправильное.) Если это подходящая область памяти, и в нее записать нужные символы, то можно изменить команду «запретить подключение» на команду «разрешить доступ» или даже выполнить ваш собственный код.
Червь Морриса является, вероятно, наиболее известным примером использования ошибки переполнения. Он использует переполнение буфера в программе для UNIX, которая должна идентифицировать пользователя по вводимым им данным. К сожалению, в ней не существовало ограничения на размер вводимой информации. Ввод более чем 512 байт приводил к переполнению буфера, и специальный длинный код Морриса позволял установить его мошенническую программу на компьютер, подвергшийся нападению, и выполнить ее. (Эта ошибка, конечно, была исправлена.)
Описание этого червя особенно уместно в данном разделе, поскольку он сам содержит программную ошибку. Он должен был перепрыгивать с компьютера на компьютер в Интернете, копировать сам себя на каждый сервер и затем следовать дальше. Но опечатка в коде привела к тому, что вирус копировался неограниченное число раз на каждом компьютере. Результатом была поломка пораженных компьютеров. Крушение произошло на 6000 серверах Интернета, в то время это составляло 10% от их общего числа.
Умелое программирование способно предотвратить этот род нападений. Программа может сокращать пароль до 8 символов, так что лишние 192 символа никогда не запишутся в память. Сделать это легко, но применить везде – сложно. Проблема состоит в том, что в любой части современного большого и сложного кода есть достаточно мест, где возможно буферное переполнение (которые не столь просто обнаружить, как в этом примере). Очень трудно гарантировать, что нет никаких проблем с переполнением, даже если у вас было время для проверки. Чем больше и сложнее код, тем больше вероятность нападения.
В Windows 2000 содержится 35-60 миллионов строк кода, и никто, кроме самих разработчиков, не видел их.
Вездесущность ошибочного кода
Этот подраздел в основном посвящен Интернету и недостаткам в его безопасности. Это не означает, что в Интернете большее количество недоработок защиты, чем в других сетях. Недостатки Интернета чаще привлекают внимание просто потому, что большинство людей имеют дело с его программным обеспечением и находят там просчеты. Программное обеспечение в других областях киберпространства – в телефонной сети, в банковской электронной сети – точно так же содержит множество ошибок.
По данным Университета Карнеги-Меллона, на 1000 кодовых строк обычно приходится от 5 до 15 ошибок. Большинство этих ошибок не влияет на выполнение программ и никогда не обнаруживается. Но любую из них можно использовать для взлома защиты.
Создается впечатление, что код Интернета быстро улучшается. Недостатки защиты находят постоянно. Некоторые компьютерные журналы еженедельно публикуют сведения об ошибках в почтовых программах, обнаруженных за прошедший период. Создатели этих программ обычно довольно быстро исправляют ошибки, как только те становятся достоянием общественности; но до тех пор большинство из них не будут беспокоиться.
Это, конечно, предполагает, что вы всегда ставите самые последние «заплаты». Обычно вслед за сообщением об уязвимости выпускается заплата. Если вы верите новостям, то история на этом завершится. Но в большинстве случаев заплаты никогда не устанавливаются. Главная проблема Интернета состоит в том, что внесенные исправления не обязательно доходят до пользователей программного обеспечения. «Эпоха Интернета» повлияла и на работу системных администраторов.
Даже при том, что заплаты доступны, прореха остается. По существующим оценкам, более чем 99% всех нападений в Интернете могли быть предотвращены, если бы системные администраторы использовали самые свежие версии системного программного обеспечения. Поэтому сканирующие устройства, определяющие уязвимые места, являются такими подходящими инструментами и для хороших, и для плохих парней.
Даже если предположить, что каждый пользователь всегда работает с последним обновлением какой-либо программы, положение не становится лучше. При выпуске каждой новой версии в ней появляются новые ошибки. Если в версии 1.0 были найдены и исправлены десятки или сотни ошибок защиты, то это ничего не говорит о надежности версии 2.0. Вероятно, версия 2.0 больше и имеет большее количество особенностей; в ней имеются все типы нового кода. Исправления, внесенные в первую версию программы, нельзя перенести во вторую, и, кроме того, там, вероятно, ошибок стало еще больше.
Глава 14
Аппаратные средства безопасности
Это древняя идея. Она начала воплощаться, когда первый человек нарисовал линию, обозначающую вход в его пещеру, объявив тем самым, что с одной стороны этой границы находится его территория, и затем охранял свою пещеру от всех, кто был с этим не согласен. К аппаратным средствам безопасности можно отнести массу различных вещей: компьютерные помещения за запертыми дверями и охраняемые заграждения, помехоустойчивые устройства для платного телевидения, безопасные опознавательные знаки для контроля доступа, смарт-карты для приложений электронной коммерции и мины, которые взрываются, если вы пытаетесь обезвредить их. Реализация идеи создания безопасной территории различна в каждом из этих случаев, но основная мысль такова: намного легче построить систему компьютерной безопасности, если некоторые части системы останутся недоступными для большинства людей. Для этого можно использовать изначально заложенные в устройства физические средства защиты.
И это правда. Легче сконструировать безопасную систему платы за парковку, если вы способны предположить, что мошенники не смогут использовать парковочные счетчики, чтобы набить себе карманы. Легче представить себе охрану библиотеки и предположить, что люди не смогут вынести из здания книги, спрятав их под пальто. И легче создать электронный бумажник, если у вас есть основания считать, что люди не смогут присвоить любое количество денег.
Рассмотрим совершенную безналичную денежную систему: каждый имеет при себе бумагу, на которой написано число, представляющее денежную сумму, которой он располагает. Когда кто-нибудь тратит деньги, он зачеркивает старое и пишет меньшее число. Когда он получает деньги, то поступает наоборот. Если каждый честен, система работает. Как только некто заметит, что он может написать на бумаге любое число, которое захочет, системе придет конец.
Однако это в точности та же самая система, которую до эпохи компьютеризации банки использовали для депозитных счетов. Когда кто-то кладет деньги на депозит, это отражается в банковской книге, хранящейся в специальном помещении банка, другая книга находится в распоряжении клиента[40]. В банковской книге записано число, соответствующее количеству денег, которые данное лицо хранит в банке. Если оно вносит или снимает деньги со счета, банк записывает новую сумму в обеих книгах. Эта система работает потому, что одна из книг находится в охраняемом помещении банка. Она и есть «настоящая» книга; книга, которая у вкладчика, – это только ее копия, выдаваемая для его спокойствия. Если вкладчик подделает запись в своей книге, это приведет к несоответствию с записью в книге, хранящейся в банке. Кассир в банке обнаружит эту неувязку, возможно, проверит другие записи, чтобы удостовериться, что действительно была предпринята попытка мошенничества, и поступит соответственно обстоятельствам. Клиент не может изменить записи в книге, хранящейся в банке, поскольку не вправе проникнуть на охраняемую территорию. (Кассир, конечно, имеет гораздо больше возможностей совершить мошенничество.)
Этот пример показывает, насколько важно создать безопасную территорию: система безопасности не будет работать без нее.
Мы можем построить систему анонимных карточек для оплаты таким же образом. Клиенты носят смарт-карты в своих бумажниках. Смарт-карта содержит в памяти информацию о количестве долларов на счете, точно так же, как банковская книга. Смарт-карты могут взаимодействовать друг с другом через некий терминал пункта продажи. Когда клиент что-нибудь покупает, его смарт-карта вычитает сумму потраченных денег из количества, которое хранилось в памяти, и записывает в память новую, меньшую сумму. Когда торговец продает что-нибудь, его смарт-карта прибавляет стоимость товара к числу, хранящемуся в памяти. Такая операция может осуществляться только одновременно с обеими картами (это легко контролировать с помощью секретных ключей смарт-карт), так что всегда сохраняется баланс. И чтобы воспрепятствовать кому бы то ни было проникнуть внутрь смарт-карты и изменить баланс, карты должны быть защищены от вторжения.
Легко ли это? Безопасная территория находится внутри карты – там хранятся ее секреты, и посторонние не могут их узнать – это сразу отметает множество проблем. Без этого единственный способ заставить подобную систему работать – это использовать нудные процедуры обращения к базам данных.
Чеки работают так же, как в первом примере, о котором я говорил: представим себе, что некто хранит в своем бумажнике документ, в котором представлен баланс на его текущем счете. Он может выписать чеки на любую произвольную сумму: ничто не вынуждает его выписывать чек на сумму меньшую, чем находится на счете. Торговцы часто принимают такие чеки на веру; они не могут знать, действительно ли данная персона имеет на счете сумму, покрывающую этот чек. Но так как здесь нет безопасной территории, которая бы вынуждала людей быть честными, существует сложная межбанковская система проверки чеков. Продавец вносит чек на депозит, но не может получить деньги сразу. Банк продавца использует идентификационную информацию на чеке – номер счета, имя банка и т. д., чтобы выяснить, с какого счета должны быть переведены деньги. Затем он обращается в банк покупателя и требует произвести платеж. Банк покупателя проверяет его личный счет. Он снимает деньги со счета клиента и переводит их в банк продавца. Наконец, деньги поступают на его счет.
Конечно, реальная система проверки чеков работает не совсем так – она оптимизирована для большей скорости и эффективности, – но основная ее идея именно такова. Нельзя рассчитывать, что владельцы счетов не станут выписывать негодные чеки, так что банки вынуждают людей быть честными.
Сопротивление вторжению
Системы защиты от вторжения должны были бы помочь решить множество проблем компьютерной безопасности. Подумайте, насколько легче обеспечить защиту от копирования на вашем компьютере, если на нем находится процессор, снабженный такой системой, понимающей только зашифрованные команды. Или насколько легче было бы сконструировать систему условного депонирования ключей (см. главу 16), если бы аппаратные средства систем защиты от вторжения сигнализировали полиции о необходимости прослушивания. С аппаратными средствами систем защиты можно было бы реализовать в Интернете «счетчик», который фиксировал бы доступ к данным, подобно тому как электрический счетчик фиксирует количество использованной энергии.
Вообще говоря, аппаратные средства систем защиты от вторжения идеальны для сложных отношений доверия, когда одна сторона хочет передать в руки другой некий механизм безопасности и при этом иметь уверенность в том, что другая сторона не сможет изменить этот механизм. Например, когда банк хочет контролировать баланс счетов на устройстве, находящемся в руках его клиентов. Или когда полиция хочет хранить копни ключей шифрования, с тем чтобы иметь возможность прослушивать частные разговоры, даже когда люди используют механизмы шифрования. Или для дешифратора кабельного телевидения.
Основная проблема заключается в том, что таких средств защиты от вторжения не существует. Вы не можете создать механизм, в который невозможно проникнуть. Возможно даже, что вы и сделаете устройство, в которое невозможно проникнуть на данном уровне технологии. Но вы не можете создать устройство абсолютно защищенное.
Я мог бы посвятить целую книгу деталям, но они меняются так часто, что это было бы бесполезно. Достаточно сказать, что есть несколько закрытых лабораторий в Соединенных Штатах, в которых могут разрушить любую технологию систем защиты от вторжения. Гораздо больше лабораторий в различных корпорациях могут работать над разрушением сопротивления вторжению, хотя бы они и были созданы для других целей. Лаборатории разведывательного управления, разрабатывающие микросхемы, например, имеют оборудование, которое может быть использовано в основном для изучения микросхем систем защиты от вторжения, имеющихся на рынке.
В соответствии с этими реалиями, многие компании определяют название своих технологий как сопротивление вторжению, которое есть нечто подобное «защите от почти любого вторжения». Я думаю, это разумно: письмо, запечатанное в конверте, может рассматриваться как один из примеров сопротивления вторжению, хотя ЦРУ и другие подобные учреждения имеют потрясающий опыт вскрытия почты.
Проблемы с системами защиты от вторжения выявляются, когда происходит сопротивление реальному вторжению. Представьте себе, что вы создаете систему торговли, основанную на смарт-картах, которая использует в целях безопасности микросхему, обеспечивающую сопротивление вторжению. И это анонимная система, так что сопротивление вторжению – это вся защита, которую вы можете противопоставить широко распространенным подделкам. Насколько сильное сопротивление вторжению вам необходимо? Как вы определите, что защита вполне достаточна? Что вы будете делать, когда появятся новые технологии?
Определяя, насколько серьезное сопротивление вторжению вам необходимо, надо выдвигать выполнимые требования. Вероятно, вы сможете оценить величину возможного ущерба: сколько денег сумеет подделать тот, кто взломает систему сопротивления. Если вы сконструировали хорошую систему, ожидаемо, что вы можете ограничить количество денег, которые могут быть украдены с одной смарт-карты, скажем, сотней долларов. Следующая задача более трудная: как вы узнаете, что обеспечили такие меры по сопротивлению вторжению, что взлом системы обойдется дороже 100 долларов?
На самом деле никто не знает, насколько эффективны различные меры по сопротивлению вторжению. Конечно, в лаборатории скажут вам, сколько времени они потратили, взламывая систему, или сколько стоит оборудование, которое они при этом использовали, но некто в лаборатории на другом конце города способен воспользоваться другой техникой и получить совершенно другую картину. И помните об атаках ради огласки: некий студент последнего курса может позаимствовать оборудование и взломать вашу систему сопротивления вторжению просто шутки ради. А может быть, представители криминальных кругов купят необходимое оборудование и наймут квалифицированных взломщиков. Все это не имеет прямого отношения к простой оценке времени и денег, необходимых для осуществления атаки «в лоб» против имеющегося алгоритма шифрования.
И даже если возможно выяснить, насколько эффективна сегодня техника, отвечающая за сопротивление вторжению, вы ничего не можете сказать о том, насколько эффективна она будет завтра, или на следующий год, или через пять лет. Новые достижения в этой сфере появляются все время. Прогресс в этой области происходит от разнообразия технологий; они могут взаимодействовать неожиданным образом. То, что было трудно взломать в этом году, возможно, будет очень просто взломать в следующем. Наивно полагать, что сопротивление вторжению обеспечивает сколько-нибудь долговременную безопасность.
Другая возможность – создать систему обнаружения вторжения. Это легче, чем реализовать сопротивление вторжению: мы не заботимся о том, что некто может проникнуть в систему, мы заботимся только о том, чтобы он не остался при этом непойманным. Представьте себе игровое устройство с ручным управлением, снабженное такой системой. Игрок может взять его домой и выиграть или проиграть деньги. Поскольку мы собираемся позволить игроку взять устройство к себе домой, и мы знаем, что потенциально ему по силам выиграть тысячи долларов, самое лучшее, что мы можем сделать, – организовать сопротивление вторжению. Но поскольку мы знаем, что надежную систему сопротивления вторжению создать невозможно, в действительности мы полагаемся на обнаружение вторжения. Когда он возвратит игровое устройство и захочет забрать свой выигрыш, мы проверим устройство со всех сторон. Мы будем выяснять, не нарушена ли изоляция, не вскрывалась ли оболочка, не обрезаны ли провода. Конечно, самый лучший атакующий сможет все это замаскировать, но он не сможет сделать вид, что так оно и было.
Неплохо, но все же недостаточно хорошо. Я верю, что не существует абсолютно надежной системы обнаружения вторжения, хотя они имеют разную степень надежности. Использовать такую систему в качестве единственной меры безопасности было бы ошибкой.
Ничто не препятствует применению этих концепций в физическом мире. Многие системы используют устройства против вторжения. Это не обязательно плохо: устройства, осуществляющие сопротивление вторжению, защищают системы от большинства людей и от большинства атак. Меня беспокоит, когда полностью полагаются на средства сопротивления вторжению, вместо того чтобы рассматривать их как один из аспектов более разносторонней системы безопасности.
В качестве примера системы, которая эффективно использует средства сопротивления вторжению как часть общего механизма управления, приведу систему контроля за ядерными вооружениями в США. Риск реален: какой-нибудь недобросовестный командир может осуществить запуск оружия без разрешения, или случится, что тактическое ядерное оружие будет украдено или (если оно находится на заокеанской базе) попадет в руки союзников во время кризиса. Необходимо быть уверенным, что запуск ядерного оружия произойдет только при наличии соответствующей директивы из Вашингтона. Для решения этой проблемы используется система, называемая PAL (permissive active link, разрешающая активная связь), детали которой до сих пор являются секретом. Мы знаем только, что PAL может действительно быть полезной, если она запрятана глубоко внутри большой и сложной системы вооружений. Более простые виды вооружений хранятся в специальных контейнерах – это защитные системы предписанного действия (prescribed action protective systems, PAPS), которые наилучшим образом обеспечивают сопротивление вторжению.
Система сопротивления вторжению, обеспечивающая безопасность ядерных устройств, включает в себя разнообразные «ловушки для дурака»: химические вещества, которые делают ядерный материал непригодным к использованию, небольшие взрывные устройства, способные разрушить критические компоненты оружия и самого атакующего, и т. д. Только шифровальный код, поступивший из Вашингтона, сумеет отключить эти защитные механизмы и привести в действие ядерное оружие.
Эти защитные механизмы экстремальны, но и ситуация подобающая. Бывают экстремальные ситуации в коммерческом мире – ключи корневых сертифицирующих органов (см. главу 15), ключи, используемые банками для осуществления безопасных межбанковских телеграфных переводов, – но меры безопасности, существующие в подобных заботливо сконструированных системах, не являются продуктом массового производства. В обычных случаях меры безопасности в коммерческом мире значительно более примитивны.
И есть фундаментальное различие в системе управления. Ядерные вооружения находятся под экстремальным физическим контролем; это делает меры по сопротивлению вторжению более эффективными.
Представьте себе игровой автомат. Автомат находится на безопасной территории. Если вы сумеете вскрыть автомат, вы можете забрать оттуда все деньги или, что еще серьезнее, изменить микросхемы, так что он выплатит джекпот. Но этот автомат стоит на полу в казино. Там освещение, камеры наблюдения, охрана, люди… если кто-то подойдет слишком близко с дрелью или отверткой, он будет арестован. Теперь представьте, что в казино вам говорят нечто вроде: «Это игровой автомат. Возьми его домой. Играй сколько тебе угодно. Принеси его назад через несколько месяцев. Все выигрыши мы выплатим».
Это совсем другая ситуация. Злоумышленник принесет автомат в свою базовую лабораторию. Он может изучать машину как угодно. Он просветит ее рентгеном. Он может даже купить несколько таких же машин у производителей и разобрать их. В конце концов, у него намного больше возможностей атаковать систему, пользуясь своей базой, чем находясь в казино. И это верно не только для игровых автоматов, но и для банкоматов, банковских сейфов и тому подобных моделей безопасных систем.
(Это не означает, что игровой автомат, стоящий в казино, неуязвим. Деннис Никраш обеспечил себе хорошую жизнь – всего около 16 миллионов долларов, – взломав игровой автомат. Он практиковался на игровых автоматах дома и в конце концов понял, как вскрыть один из них в казино так, чтобы при этом не включилась сигнализация. Ему удалось заменить некоторые микросхемы. Системы блокировки (blockers) скрывали его от телекамер. В итоге он взял на «обработанной» им машине джекпот.)
Мораль этого раздела проста. Первое – сопротивление вторжению в значительной степени миф, но оно создает определенный барьер при входе в систему. Второе – средства сопротивления вторжению должны использоваться совместно с другими контрмерами. И третье – любая система, в которой устройства и секреты, заключенные внутри этих устройств, находятся под контролем разных людей, имеет фундаментальный изъян в системе безопасности. Можно конструировать подобные системы, но надо при этом осознавать, что они неотделимы от этого недостатка.
Нападения через побочные каналы
В последние годы в литературе стали появляться описания новых видов крипто-аналитических атак: атаки, целью которых являются определенные детали выполнения. Тайминг-атака (timingattack, атака, основанная на сравнительных измере ниях времени) вызвала большой шум в прессе в 1995 году: закрытые ключи RSA могли быть восстановлены с помощью измерения относительных интервалов времени операций шифрования. Такие атаки были успешно проведены против смарт-карт и других опознавательных знаков доступа, а также против серверов электронной коммерции в Интернете.
Исследователи обобщают эти методы, относя к ним нападения на системы с помощью измерения энергопотребления, уровня излучения и использования других побочных каналов. Такие атаки могут осуществляться против разнообразных симметричных алгоритмов шифрования с открытым ключом в устройствах аутентификации, снабженных системами сопротивления вторжению. Обобщающие исследования представили анализ нападения: в процессор, осуществляющий шифрование, преднамеренно вводятся ошибки, что дает возможность определить секретные ключи. Последствия такой атаки могут быть разрушительными.
Допустим, нападающий хочет узнать секретные ключи, находящиеся внутри модуля, защищенного от вторжения: смарт-карты, карты PCMCIA или чего-нибудь подобного. Он не может осуществить криптографический анализ алгоритмов или протоколов (они слишком хороши) и не способен взломать систему сопротивления вторжению.