2.3. Контролировать видеопамять
2.4. Контролировать шнур для подключения дисплея
3. Прочитать сообщение, хранящееся на диске отправителя (контрмера: использовать SFS для шифрования данных на жестких дисках) (И)
3.1. Получить доступ к жесткому диску (контрмера: установить замки на все двери и окна)
3.2. Считать файл, защищенный SFS
4. Прочитать сообщение, когда оно пересылается от отправителя к получателю (контрмера: использовать PGP) (И)
4.1. Перехватить сообщение во время пересылки (контрмера: использовать программу шифрования транспортного уровня)
4.2. Прочитать сообщение, зашифрованное PGP
5. Убедить получателя показать сообщение (ИЛИ)
5.1. Подкуп
5.2. Шантаж
5.3. Принуждение с помощью угроз
5.4. Обман
6. Подсмотреть сообщение во время его прочтения (ИЛИ)
6.1. Принимать электромагнитное излучение экрана монитора (контрмера: использовать TEMPEST)
6.2. Следить за изображением на экране
7. Прочитать сообщение, хранящееся на диске получателя (ИЛИ)
7.1. Получить сообщение с жесткого диска после его расшифровки (контрмера: использовать SFS для шифровки данных на диске) (И)
7.1.1. Получить доступ к жесткому диску (контрмера: установить замки на двери и окна)
7.1.2. Считать файл, зашифрованный SFS
7.2. Получить резервную копию расшифрованного сообщения
8. Получить бумажную распечатку сообщения (контрмера: хранить бумажные копии в сейфе) (И)
8.1. Получить доступ к сейфу
8.2. Открыть сейф
9. Украсть компьютер отправителя и попытаться извлечь из него сообщение
10. Украсть компьютер получателя и попытаться извлечь из него сообщение
Как создавать дерево атак? Вначале определите возможные цели нападения. Каждая цель формирует отдельное дерево атак, хотя различные деревья могут иметь общие узлы и одно дерево может являться частью другого. Затем обдумайте все возможные виды нападений на каждую цель и включите их в схему. Повторяйте все действия, спускаясь вниз по дереву, пока не закончите. Покажите схему еще кому-нибудь, чтобы он тоже поработал над ней. Проделывайте это столько раз, сколько потребуется; возможно, на анализ уйдет несколько месяцев.
Этот процесс требует творческого подхода, но часто вместо мозгового штурма для решения конкретной задачи используется рутинная методика. Не забывайте высматривать новые формы атак в ландшафте уязвимых точек и делайте это при исследовании каждого шага возможного нападения. Конечно, всегда есть вероятность, что какой-то вид нападения вы упустите из виду, но со временем все у вас будет получаться хорошо. Как и всякий другой вид исследования проблем безопасности, создание дерева атак требует определенного подхода и практических навыков.
Создав однажды дерево атак и проанализировав значения всех его узлов (эти значения будут меняться со временем, поскольку вы будете уточнять сведения о возможных нападениях), вы сможете использовать эту схему для принятия решений по вопросам безопасности. Значения корневого узла позволяют оценить степень уязвимости цели. Вы сможете определить, уязвима ли система для отдельных видов атак, например распределенной атаки, приводящей к отказу в обслуживании. Вы можете использовать дерево атак для того, чтобы очертить круг допущений, исходя из которых решаются вопросы безопасности системы: например, средства безопасности PGP созданы в предположении, что никто не сможет подкупить программиста[56]. Вы можете оценить последствия изменений в системе или значение вновь обнаруженного слабого места; вычислить новые значения узлов на основе полученной информации и определить, как это влияет на узел, содержащий цель. И наконец, вы можете сравнивать и классифицировать виды нападений по затратам, вероятности успеха и т. д.
Такого рода исследования приводят к удивительному выводу о том, что кажущиеся уязвимыми места на самом деле таковыми не являются. Те, кто используют PGP, обычно беспокоятся о длине ключа: что следует предпочесть – 1024-битовый RSA или 2048-битовый? Схема нападения показывает, что длина ключа RSA не имеет значения. Существует множество других видов нападений, намного более простых, чем взлом открытого ключа: внедрение программы, запоминающей ввод с клавиатуры, изменение программы на жестком диске жертвы. Увеличение длины ключа с 1024 до 2048 бит нисколько не усложняет дерево атак; гораздо более опасны нападения, направленные на преодоление мер компьютерной безопасности. Деревья атак позволяют оценить перспективы системы в целом.
Дерево атак обладает еще одним ценным свойством: содержащиеся в нем сведения остаются актуальны в дальнейшем. Однажды построив дерево атак PGP, вы сумеете использовать его в любой другой ситуации, когда речь идет о PGP. Эта схема может быть включена в другую, более обширную. Например, на рис. 21.2 представлена схема, целью которой является прочтение определенного письма, посланного с одного компьютера, использующего Windows 98, на другой. Если вы посмотрите на терминальные узлы дерева, то заметите, что целые деревья атак на PGP и на сейф вставлены в этот план нападения.
Такая возможность расширения схемы означает, что вам не обязательно знать все на свете. Если вы используете PGP, то вам не нужно знать детали дерева атак на PGP; все, что вы должны знать, – это значения корневого узла. Если вы эксперт в области компьютерной безопасности, вам не обязательно быть в курсе, насколько трудно взломать сейф определенной модели, нужна оценка значений корневого узла. Создав однажды библиотеку деревьев атак на определенные виды компьютерных программ, дверные и оконные замки, на сетевые протоколы безопасности и т п., вы можете затем использовать их где угодно.
Глава 22
Испытание и верификация программных продуктов
Мы уже неоднократно затрагивали тему испытания средств безопасности. В главе 7 обсуждался выбор криптографических примитивов. Там же была выдвинута идея, что наилучшим способом проверки надежности криптографии является открытый криптоанализ, проводимый в течение многих лет. В главе 8 мы рассматривали различные стандарты безопасности компьютера – Оранжевую Книгу и Общие Критерии, а также проверку их соответствия этим стандартам. В главе 13 обсуждались надежность программного обеспечения и то, как ошибки оборачиваются уязвимостью. Испытания позволяют проверить работоспособность системы безопасности: одно дело смоделировать угрозы, разработать политику безопасности и применить меры противодействия, но будут ли эти меры работать на самом деле? Несомненно, вы уже приобрели солидный брандмауэр или антивирусную программу, или VPN (виртуальную частную сеть), или систему защиты от мошенничества для платного телевидения, или систему биометрического контроля, или основанную на использовании смарт-карт систему расчетов, или программу шифрования электронной почты и т. п., но достаточно ли прочна их защита? Большинство программных продуктов ненадежны, и причина кроется в недостаточности тестирования.
Провести правильное испытание средств безопасности не удается по нескольким причинам. Во-первых, изъяны в системе защиты могут возникать когда угодно: при разработке модели безопасности, при создании системы, при реализации, они могут появиться в алгоритмах и протоколах, в исходном коде, при взаимодействии человека с компьютером, в используемой компьютерной системе (в аппаратной части, операционной системе или другом программном обеспечении). Во-вторых, одно-единственное упущение способно лишить продукт защиты. Вспомните, что безопасность – это цепь, надежность которой определяется самым слабым ее звеном. В-третьих, и это наиболее важно, эти недостатки не могут быть обнаружены во время бета-тестирования. Безопасность никак не связана с функционированием. Программы шифрования в состоянии работать нормально, будучи совершенно незащищенными. Недостатки остаются необнаруженными, пока кто-нибудь специально не примется искать их.
56
Создатель PGP Филип Зиммерман в руководстве пользователя к программе говорит, что «защита от подобных нападений попадает под категорию общих мер защиты от вирусных инфекций». PGP была разработана для однопользовательского персонального компьютера, а главный ключ к работе с PGP – доверие пользователя к самому себе. – Примеч. ред.