Подтвердить что ты не робот

Зашифрована ли память?

Я хочу сохранить некоторые данные в переменной (и я знаю, что переменные хранятся в памяти). Зашифровываются ли эти данные в памяти? Кроме того, возможно ли, чтобы программное обеспечение могло читать имена переменных, хранящиеся в памяти, и иметь возможность фактически извлекать данные из него?

4b9b3361

Ответ 1

Память не зашифрована на любой платформе, о которой я знаю. В любом случае это будет иметь ограниченное значение, поскольку процессор должен, в общем, работать с данными открытого текста, поэтому данные должны находиться в открытом тексте на машине где-то.

Вместо этого современные операционные системы (и большинство исторических) используют защиту памяти, чтобы разрешить доступ только определенным процессам к определенным страницам памяти. Каждая страница памяти поставляется с правами на чтение, запись и (иногда) выполнение. Ядро операционной системы отвечает за обработку этих разрешений в контекстном коммутаторе, чтобы предоставить или запретить доступ к страницам памяти в процессе при необходимости.

Документ Saltzer and Schroeder 1975 Защита информации в компьютерных системах описывает механизм с сегментами, скорее чем страницы, но принцип оставался неизменным на протяжении десятилетий.

Как правило, любая страница памяти, принадлежащая процессу, читается процессом с достаточно высокой привилегией; ядро ОС, безусловно, может изменять любую страницу памяти, и она может также делегировать эту привилегию для пользовательских процессов. Системный вызов ptrace(2) на Linux предоставляет отладчик-бэкдор, который может использоваться для реализации систем проверки памяти только для чтения, таких как strace(1) или ltrace(1) или gdb(1), или систем модификации памяти, таких как gdb(1) и ptrace среды песочницы.

Или, в определенных ситуациях может быть сброшен файл ядра (см. core(5) и setrlimit(2) manpages), содержащий содержимое памяти процесса. Это одна из причин, по которой важно очистить память важных данных до выпуска.

Я был частью команды, которая работала над зашифрованными указателями (не-PTO-ссылка) в запуске программы. Накладные расходы были потрясающими, и количество угловых случаев было еще более удивительным. Использование этих методов для общих программ, вероятно, нецелесообразно, хотя я мог представить себе ограниченную среду, в которой зашифрованная память или структуры управления являются приемлемым подходом. (Хотя, вероятно, другие методы были бы более уместными.)

Ответ 2

Хорошо, поэтому я хочу сохранить некоторые данные в переменная (которая, я знаю, переменная хранятся в памяти) - эти данные в памяти зашифрованы?

НЕТ

Кроме того, возможно ли программное обеспечение иметь возможность читать имена переменных хранятся в памяти и могут действительно извлекать данные из него?

Имена или значения?

Для значений:

Вы имеете в виду другую программу, а не вашу, чтобы получить доступ к ней и прочитать ее? Да, возможно, в зависимости от ОС это может быть сложнее или сложнее, но выполнимо.

Для имен: Зависит от того, как вы создаете свое программное обеспечение - если вы оставите в нем информацию об отладке - это очень легко сделать.

Ответ 3

Нет. Обычно память не зашифровывается.

Память хранит данные, которые вы записываете в нее. В какой-то точке память будет содержать текстовую версию ваших данных, и это иногда используется как способ использования систем.

Тем не менее, как только у злоумышленника есть физический доступ к вашим машинам, их очень сложно обеспечить.

Есть некоторые специфические особенности языка, которые пытаются решить эту проблему, например С# SecureString , но даже они имеют свои ограничения.

Ответ 4

Зашифрованы ли эти данные в памяти?

Обычно нет. Я говорю "обычно" только потому, что вы могли бы сделать операционную систему или аппаратное обеспечение, которое шифрует память. Так что действительно, нет.

Возможно ли, чтобы программное обеспечение могло читать имена переменных, хранящиеся в памяти, и иметь возможность фактически извлекать данные из него?

Зависит. С кодом в интерпретируемом языке, таком как имена переменных PHP, где-то хранятся в памяти, так что это возможно. С помощью скомпилированного кода (например, С++) он может быть скомпилирован с помощью отладочной информации (а затем отладчик сможет видеть имена переменных и извлекать их значения), или он может быть скомпилирован без него, а затем имена переменных будут потеряны.

Кроме того, очень легко написать программу, которая считывает произвольные адреса памяти, но гораздо сложнее понять, что означают байты, которые вы читаете.

Ответ 5

Ответ sarnold на защиту памяти правильный. Однако есть атаки, которые могут обойти многие формы защиты памяти. К ним относятся скрытые каналы, остаточная информация в недавно выделенной памяти, атаки на основе DMA, такие как firewire, атака доверенного устройства с доступом, атака программ ядра, физические атаки и т.д. Комбинация шифрования и проверки целостности памяти может помочь с некоторыми из этих атак.

Если вы заинтересованы в зашифрованной памяти, вот несколько проектов для вас.

Процессор MIT AEGIS

Архитектура SecureCore

Архитектура SecureME

Система HAVEN на базе FPGA на воздушной силе

Для некоторых из них могут использоваться защищенные от несанкционированного доступа, криптопроцессоры. Они не просто общие цели.

Альтернативой, которая снова становится популярной, является внедрение всей платформы, ОС и всех, в управляемый или безопасный код типа. Это позволяет системе типа выполнять большую часть защиты памяти для вас. Примеры включают операционные системы и программное обеспечение Scheme48, SPIN, JX и Verve.

Ответ 6

Появляются решения, которые могут зашифровать память на стандартных микропроцессорах x86 из-за физического компрометации (атаки на холодную загрузку, кто-то уходит с энергонезависимыми модулями двойной встроенной памяти (NVDIMM), содержащие постоянные данные, подключая вредоносные карты ввода-вывода, которые делают Атаки прямого доступа к памяти (DMA) и т.д.).

Один из подходов - использовать гипервизор с высокой степенью уверенности, который работает в кэше последнего уровня CPU (кеш L3). Внутри процессора есть чистый текст, вне ЦП - зашифрованная память.

Обратите внимание, что вам по-прежнему необходимо защищать от привилегированных пользователей и исправлять свои приложения (все, что вы уже делаете), но новая технология защищает данные в использовании от физического компрометации.