Задать вопрос
@d1sn3y_1337

Как обезопасить секрет в памяти?

Привет! Я начал разрабатывать достаточно чувствительное ПО и столкнулся с проблемой хранения секрета в памяти. Есть некоторый массив байт - как можно максимально обезопасить его так, чтобы извлечь секрет было невозможно с помощью WinApi-hooking, DLL-инъекций, руткитов, дампов и других подобных методов без доступа к 0-му кольцу? Возможно, это звучит как бред - если хочешь защищенное ПО, нужен доступ к драймерам - но существует ли способ максимально защитить секрет без таких прав? Неужели Windows не предоставляет разработчикам (у которых нет подписанных драйверов) никаких возможностей для защиты? или предоставляет только косвенные.

З.Ы. Важно, что секрет постоянно используется в программе для шифровки данных и иногда может меняться, отсюда вопроc: как в последствии безопасно пользоваться ключом?
  • Вопрос задан
  • 82 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Обезопасить полностью — никак. Можно только усложнить доступ к данным. Есть Windows Data Protection API — можно использовать его для хранения ваших данных. Есть Rfc2898DeriveBytes Class для получения ключа на основе пароля с использованием псевдо-случайного генератора. Вот тут ещё пишут на эту тему: How to securely save username/password

Так же не забываем про другие методики защиты приложения от попыток чтения памяти — ограничения прав, шифрование переменных в памяти и целых блоков, использование рандомизации выделения адресов и блоков в памяти, ссылочные типы, какая-нибудь изощрённая логика алгоритмов, пропущенная через какой-нибудь безумный оптимизатор, алгоритмы с бессмысленной логикой, определение попыток доступа к памяти, использование нестандартных компиляторов и языков программирования, и всё такое прочее. А ещё есть отдельные инструменты для защиты приложений типа Enigma Protector и Enigma Virual Box. Стандартный подход: усложнить взлом на столько, чтобы процесс взлома был дороже полученного результата.

Если кому-то очень будет надо — всё равно вскроют и достанут всё, что нужно, независимо от всех ваших усилий и их объёма.
Ответ написан
Комментировать
Vamp
@Vamp
Возможно подойдёт функция CryptProtectMemory.
Ответ написан
Комментировать
Используйте аппаратный ключ с ключом шифрования, который будет шифровать/дешифровывать ваши данные в памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы