Защита памяти приложения от взлома - PullRequest
0 голосов
/ 25 мая 2010

Мы добавляем 256-битное шифрование AES на наши серверные и клиентские приложения для шифрования трафика TCP / IP, содержащего конфиденциальную информацию. Мы будем вращать ключи ежедневно. Из-за этого ключи будут храниться в памяти вместе с приложениями.

Процесс распространения ключа:

  1. Каждый сервер и клиент будут иметь список начальных ключей шифрования ключей (KEK) по дням

  2. Если клиент только что запустился или сервер только что запустился, клиент запросит у сервера суточный ключ, используя начальный ключ. Сервер ответит ежедневным ключом, зашифрованным начальным ключом. Ежедневный ключ - это случайно сгенерированный набор буквенно-цифровых символов. Мы используем 256-битное шифрование AES.

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

  4. Ночью клиент будет запрашивать новый ежедневный ключ с сервера, используя текущий ежедневный ключ в качестве текущего KEK. После того, как клиент получит новый ключ, новый ежедневный ключ заменит старый дневной ключ.

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

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

Мы используем C ++ и XP (Vista / 7 может стать вариантом в будущем, поэтому я не знаю, изменит ли это ответ).

Ответы [ 4 ]

4 голосов
/ 25 мая 2010

Ваш процесс распространения ключей небезопасен: если кто-то получит этот начальный набор ключей, все кончено.

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

3 голосов
/ 25 мая 2010

Я думаю, что у вас могут быть более фундаментальные проблемы в ваших руках.

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

В Windows процесс A может считывать память процесса B, если выполняется любое из следующих условий:

  1. имеет право открывать устройство памяти.
  2. имеет привилегии для открытия виртуальной памяти процесса B.
  3. у него есть друг в ядре.

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

Это, конечно, не уникально для Windows. Уникальным для Windows является объем вредоносного ПО для руткитов.

2 голосов
/ 25 мая 2010

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

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

1 голос
/ 25 мая 2010

На самом деле нет способа помешать другим процессам читать память вашего процесса.

Чтобы сделать вещи немного более устойчивыми к немотивированным атакам, вы можете рассмотреть возможность использования случайно сгенерированного ключа для шифрования реального ключа, пока он не используется. Вы можете генерировать новый случайный KEK при каждом запуске программы, возможно, даже изменяя его во время работы программы каждые несколько секунд. Расшифровывайте «настоящий» ключ только тогда, когда вам действительно нужно его использовать, а затем сразу обнуляйте память, в которой находится ключ, когда вы закончите.

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

...