В этом нет ничего сложного, программирование – простое дело. Во всяком случае, если мы достигнем успеха, мы завладеем опасным для Алисы документом с ее подписью. Мы можем размахивать им в суде или передать журналистам, обоснованно заявляя, что под документом стоит действительная подпись. Однако вероятнее всего, что нас постигнет неудача. Как только кто-нибудь напишет троянского коня, подделывающего подписи, он распространится повсеместно. И если документ будет предъявлен в суде, одна из сторон может представить свидетельство эксперта о существовании этого троянского коня и о том, с какой легкостью можно заставить кого угодно поставить свою подпись неведомо на чем. Примет ли суд эту подпись в качестве доказательства? Все зависит от обстоятельств, а не от математических методов.
Суть фундаментальной проблемы состоит в том, что у нас нет никакого представления, что же в действительности делает компьютер по нашей команде. Когда мы приказываем ему сохранить документ, или зашифровать файл, или сложить числа в столбце, у нас нет уверенности в том, что этот «черный ящик» выполнит задание правильно или даже вообще его выполнит. Мы вынуждены все принимать на веру. Насколько трудно поймать за руку вороватого работника, настолько же трудно выловить разрушительную программу. Дело обстоит даже хуже. Представьте себе, что этот сотрудник работает в одиночестве и за ним некому уследить, Все средства наблюдения, которые мы можем установить, – скрытые камеры и микрофоны – управляются самим же этим работником. Все, что мы можем сделать, – это сравнивать поступающие к нему («на входе») материалы с производимым им продуктом («на выходе»). Но и этого недостаточно для полной уверенности в его честности.
Если Алиса не может доверять компьютеру, на котором работает, то она не может быть уверена в том, что он точно выполняет ее команды. Хотя бы потому, что когда она велит ему подписать документ, это не означает, что он не способен поставить ее подпись под другим документом. Проблему можно исчерпать, когда Алиса станет подписывать документы лишь на совершенно надежном компьютере, а это трудно осуществить. Если речь идет о компьютере общего назначения, я никогда не поверю в то, что он достаточно надежен.
Вот если бы у Алисы был маленький компьютер с единственным назначением – создавать цифровые подписи, – тогда было бы на что надеяться. Я в состоянии представить карманное устройство с миниатюрной клавиатурой и экраном, в которое можно перенести документ с компьютера общего назначения. Алиса сможет просмотреть документ на экране – так как нет никакой гарантии, что «большой» компьютер загрузит именно то, о чем его попросят, – и ввести пароль с клавиатуры. Устройство создаст подпись под документом и передаст ее назад компьютеру общего назначения. Нам остается молиться о том, чтобы такая система была безопасной. Можно сконструировать ее так, чтобы устройство использовало только заводское программное обеспечение, а независимая проверяющая компания будет выдавать свидетельство о том, что программа работает правильно.
Однако при работе на небезопасном компьютере – то есть практически всегда – нет никакой гарантии того, что мы видим на экране именно то, что получили, или что оно работает так, как мы могли бы ожидать.
Внутренние враги
В главе 4 я уже рассказал о внутренних врагах. Стоит вспомнить о тех проблемах, которые с ними связаны. Основная проблема заключается в том, что они пользуются безоговорочным доверием. Для них не проблема стащить деньги из кассового аппарата, внести путаницу в отчетность и замести следы, скопировать и переправить китайцам военные секреты, похитить набор бланков кредитных карточек, набить карманы фишками в казино, найти другой путь, чтобы грабители могли безопасно вывезти на грузовике краденое добро, и многое другое. Часто никакие средства компьютерной безопасности не в состоянии предотвратить нападения такого рода (хотя тщательная проверка имеет шансы впоследствии выявить виновных).
Киберпространство особенно чувствительно в этом отношении. Тот, кто пишет программу защиты, может предусмотреть «черный ход» в нее. Тот, кто устанавливает брандмауэр, может оставить тайную брешь в защите. Тот, кто по роду своей деятельности обязан проверять работу системы безопасности, может сознательно пропустить какие-то вещи.
Вот только один пример. В Чикаго для оплаты проезда в метрополитене используются как жетоны, так и проездные билеты. Пассажиры должны либо отдать контролеру жетон, либо предъявить проездной, после чего их пропускают на платформу. Многие годы контролеры принимали от пассажиров жетоны, а отмечали их как владельцев проездных билетов. В конце концов, в 1991 году руководство узнало об этом, и контролеры были арестованы. По самым скромным оценкам, ущерб составил сотни тысяч долларов. Когда начали работать более честные контролеры, дневная выручка на некоторых станциях удвоилась. На решение этой проблемы ушло несколько лет.
Компании пытаются снизить риск ущерба от внутренних врагов различными способами. Наилучшее решение состоит в том, чтобы принимать на работу честных людей, но это легче сказать, чем сделать. Некоторые компании зашли так далеко, что проводят предварительный отсев претендентов, подвергая их проверке на честность. Другие пытаются распределить ответственность между сотрудниками и ограничить возможности причинения ущерба одним работником. Для того чтобы иметь возможность установить, какой вред причинен сотрудником, и предъявить ему обвинение в суде, необходимо проводить проверки. Тем не менее любая организация оказывается во власти работающих в ней людей.
Манипулирование людьми
В 1994 году французский хакер по имени Антоний Зборальски позвонил в вашингтонский офис ФБР и представился представителем этой организации, работающим в американском посольстве в Париже. Он убедил собеседника на другом конце провода, и тот объяснил ему, как подключиться к системе телеконференции ФБР. Его звонки за последующие семь месяцев стоили ФБР 250 000 долларов.
Вообще, это распространенный хакерский прием – позвонить ничего не подозревающему работнику и представиться системным администратором сети или руководителем службы безопасности. Если хакер достаточно осведомлен об особенностях корпоративной сети, чтобы выглядеть убедительно, он может выудить у работника пароли, учетные записи и другие важные сведения. В одно прекрасное мгновение хакер размещает на доске объявлений компании новый телефон «справочного стола»[48] – свой собственный. Сотрудники компании будут регулярно звонить ему, и он соберет богатый урожай паролей и данных по учетным записям в обмен на свою помощь.
Манипулирование людьми – это хакерский термин для обозначения такого рода мошенничества: убедить кого-нибудь сделать то, что вам нужно. Это весьма эффективно. Манипулирование людьми преодолевает и криптографию, и средства компьютерной или сетевой безопасности, и любые другие технические приемы. Оно направлено непосредственно на самое слабое звено любой системы безопасности: бедный человечек старается выполнить свою работу и готов выручить другого, если в силах чем-то помочь.
Печально, но это гораздо проще, чем можно подумать. Бывает достаточно появиться в компьютерной фирме с каким-нибудь «железом» в руках, нацепив соответствующую эмблему компании-поставщика. Если побродить вокруг и поинтересоваться, нельзя ли здесь где-нибудь примоститься и чуток поработать, скорее всего, можно оказаться за клавиатурой и получить выход в сеть: ясно ведь, что это – посетитель компании.
По большей части манипулирование людьми осуществляется по телефону, что затрудняет поимку злоумышленника. Один из них звонил разным людям и заявлял: «Это оператор. Вам звонит за ваш счет… (имярек) из такого-то города». Если жертва соглашалась принять звонок, «оператор» продолжал: «Функция соединения за ваш счет заблокирована. Сообщите мне, пожалуйста, номер вашей карты, и я соединю вас». Это происходило в действительности. Злоумышленник находил людей в конференциях Usenet и придумывал звонки за их счет от корреспондентов по конференции, что выглядело весьма правдоподобно.