Одним из интересных методов фальсификации является семейство атак типа rowhammer. Если вы думаете об оперативной памяти как о множестве плотно упакованных ячеек, каждая из которых содержит либо ноль, либо единицу, то вы попали в точку, и это очень маленькая точка. По мере увеличения плотности оперативной памяти ток может просачиваться из одной ячейки в соседнюю и фактически приводить к тому, что бит переключается, потому что, как заметил философ инженерии Мартин Гор, все имеет значение в больших количествах. А при больших объемах записи в соседнюю физическую ячейку памяти биты могут быть переключены, то есть подделаны. После того как был анонсирован rowhammer, создатели памяти добавили технику, называемую обновлением целевой строки, для защиты от него [Ducklin, 2021]. Если вы работаете со стандартными компонентами ПК, это, скорее всего, не является проблемой для вас, но, если вы производите оборудование, стоит убедиться, что ваши компоненты защищены от этой и других связанных с ней атак.
Еще один интересный метод вмешательства – через страницы советов в интернете. Этот метод эксплуатирует очень сильно сбитого с толку представителя, человека-владельца некой системы, который пытается решить какую-то проблему. Даже отличный «контент, созданный пользователями», может включать в себя небезопасные шаги, но эти сайты могут быть полны и злоумышленниками, которые намеренно или случайно дают плохие советы. Ссылки с этих сайтов могут быть плохими с самого начала, или адреса ссылок могут устареть и быть заменены злоумышленниками, распространяющими вредоносное ПО.
Защита
Целостность обеспечивается превентивным контролем и контролем обнаружения. Любой из них может работать криптографически или полагаться на что-то с бóльшими полномочиями: ядро безопасности, поставщика облачных услуг или оборудование. Вариант с ядром безопасности работает только тогда, когда весь доступ к файлам осуществляется через него, что обычно означает локальный компьютер или облачный сервис, который является посредником в доступе к его хранилищу.
Криптография может предотвратить взлом со стороны вредоносных хранилищ или сетевых злоумышленников. К вредоносному хранилищу относится любое хранилище, которое может контролироваться злоумышленником. Простой пример – USB-накопитель, подключенный к компьютеру злоумышленника. Вы больше не можете доверять операционной системе в том, что она защитит вас. А в сети нет операционной системы для защиты пакетов.
Криптозащита включает в себя как асимметричные, так и симметричные технологии. Для защиты сообщений можно использовать симметричные криптографические схемы, при которых обе стороны совместно используют один и тот же ключ. Например, методы хэширования с ключом могут защитить сообщения от подделки. Асимметричные методы (с открытым ключом) обеспечивают защиту целостности по принципу «один ко многим»; например, все могут видеть, что именно этот файл был подписан именно этим ключом, который связан с Adobe и используется для подписи обновлений программного обеспечения. Таким образом, асимметричные методы также могут быть использованы для аутентификации файлов после того, как они прошли через потенциально ненадежное хранилище или между различными системами, находящимися под вашим контролем, сохраняя при этом секретную часть пары открытых ключей на одной машине.
Ядро – часть операционной системы, которая исполняет весь код пользовательского уровня, – является каноническим примером чего-то, обладающего бóльшими полномочиями. Сегодня более полный список включает в себя не только ядро, но и гипервизор, чип безопасности, корпоративный инструмент управления идентификацией и доступом (Identity and Access Management – IAM) и многое другое. Что бы то ни было, до тех пор, пока оно действительно контролирует весь доступ к вашим данным, оно может обеспечить защиту целостности.
Независимо от того, как «оно» реализовано, важно сообщить «ему», что вы хотите, чтобы произошло, и убедиться, что ваше намерение ясно, с помощью разрешений. Ваша локальная операционная система имеет ядро безопасности, так же как и ваш мобильный телефон, и ваш поставщик облачных услуг. Каждое из них обладает уникальными и важными свойствами.
Мобильные операционные системы (iOS, Android) обычно защищают приложения от несанкционированного доступа друг к другу во время работы, защищают их от несанкционированного доступа к хранилищу других приложений и ограничивают установку приложений магазином приложений. Они также проверяют подпись магазина приложений перед загрузкой приложения, защищая его от вмешательства на уровне устройства.
Облачные сервисы имеют уровни администрирования, службы поддержки и «корпоративного» администрирования. Поставщики инфраструктуры или платформы как услуги, которые поощряют своих клиентов загружать мощный и гибкий код, подвержены вмешательству со стороны этих клиентов. (Это относится к расширению полномочий и другим понятиям, более подробно рассмотренным в главе 6.)
Сообщить ядру, что делать, может быть сложнее, чем вы ожидаете, когда разрешения наследуются различными способами, когда несколько ролей могут устанавливать разрешения (например, вы и администратор приложений Office) и когда разрешения, предоставляемые ядром, изменяются. Отладка или исправление разрешений на бегу часто приводит к тому, что «теперь все работает», но с разрешениями куда более широкими, чем предполагалось.
Аппаратное обеспечение не сделано из волшебной пыли безопасности. От памяти с доступом только для чтения до изолированного исполнения, зашифрованной памяти или даже отдельного чипа, аппаратное обеспечение может гарантировать безопасность на все более надежном уровне выполнения, чтобы защитить вас от вмешательства и других угроз. Память с доступом только для чтения может быть жестко прошитым ПЗУ, или она может быть защищена различными способами, начиная от переключателя, который необходимо перекинуть, провода, который должен быть перерезан, или просто оперативной памяти, к которой только специальный чип имеет доступ на запись. Стоит учитывать угрозы для каждого из них, когда вы можете их конкретизировать: например, если вы проектируете подключенное устройство, в котором интегрируется оборудование, программное обеспечение и, возможно, облачный сервис в единый пакет. Специалисты по безопасности часто шарахаются от идеи принятия защиты, в качестве которой не уверены. Такая неопределенность характерна для аппаратного обеспечения. Это сложно и дорого проверить, даже если порт JTAG остается открытым. Разумно полагаться на оборудование, даже в том случае, когда вы не можете точно указать, каким оно будет. Скорее всего, его сложнее атаковать, чем более высокие уровни, на которых вы работаете.
Когда нет ядра, на которое можно было бы положиться, например если злоумышленник может вмешаться в локальное хранилище на уровне ОС или под ним, от него трудно защититься. Заманчиво, конечно, посыпать все волшебной криптопылью, но злоумышленник, который может модифицировать файлы, скорее всего, может изменить ваши процедуры проверки, ваш пользовательский интерфейс или другие элементы, которые могут вас обмануть. Другими словами, ядро, которое позволит играть с вашими файлами, также будет играть с вашим кодом. Таким образом, вероятно, не стоит беспокоиться об этом в пределах ОС или приложения, но на уровне предприятия или системы нужно время от времени проверять файлы с помощью электронно-криминалистической визуализации, удаленных проверок целостности или других подобных механизмов. Гораздо выгоднее защищать хранилище, находящееся в сети или облаке. Такое хранилище можно проверить криптографически.
При обнаружении сбоя целостности его можно устранить, выбросив поврежденные куски и получив чистую копию – скажем, повторно загрузив файл или восстановив его из резервной копии. Поврежденные куски редко могут быть восстановлены. Обнаружение также может привести к расследованию причин повреждения и выявит либо аварийные случаи, либо атаки.
Обнаружение также может быть дополнением к превентивным мерам контроля. Может быть затруднительно установить правила именно так, как вы хотите, и разрешения, предоставленные учетной записи, будут использованы неавторизованным пользователем этой учетной записи. Такое обнаружение может быть выполнено с помощью журналов аудита или криптографии. Криптографическая защита иногда включается в инструменты «управления целостностью файлов».
Заключение
Когда ваш противник имеет неограниченный доступ к большой сложной системе, такой как «Тысячелетний сокол», обнаружение установленного им маленького маяка слежения может быть похоже на поиск иголки в стоге сена. Это происходит даже в том случае, если система регулярно и надлежащим образом обслуживается. Если бы каждая подсистема была защищена по отдельности, работа была бы проще, поэтому вы должны убедиться, что каждая составляющая имеет соответствующую целостность.
3Отказ от ответственности и доказательства
Лэндо Калриссиан. Вы сказали, что они останутся под моим присмотром!
Дарт Вейдер. Я изменил условия сделки. Молись, чтобы… в последний раз.
Здесь мы видим Дарта Вейдера, отказывающегося выполнять условия сделки. Он просто денонсирует ее, после чего угрожает Лэндо.
Введение
Отказ от ответственности – это угроза того, что какая-либо сторона откажется выполнять обязательства или будет их отрицать. Товар не прибыл, оплата не прошла. Утверждение о том, что сторона не несет ответственности, может быть правдой, а может и нет. Слово «отказ» может спровоцировать более широкие размышления об отвержении, отречении и даже о словах, которые не начинаются с от-.
Отказ от ответственности (repudiation) – необычное выражение. Если бы я мог, я бы отказался от его включения в мнемонику STRIDE, но замены ничуть не лучше, поэтому начнем с определений. Отказ от ответственности – это специфическая форма отрицания или отвержения. Вот несколько примеров, вдохновленных словарными определениями.