Как запретить Java VM создавать дампы при сбое / записи конфиденциальных данных на диск - PullRequest
8 голосов
/ 20 мая 2011

Я пишу программу на Java, которая хранит конфиденциальные данные (пароль и закрытые ключи) в памяти.Он будет свободно развернут на любой ОС.Я знаю, что пользователь может создать дамп памяти вручную практически в любой системе, но я беспокоюсь о том, что дамп создается реализацией ОС или JVM (включая, но не ограничиваясь, некоторый segfault самой JVM), который может поставить под угрозу конфиденциальностьконфиденциальных данных.

Могут ли быть предприняты какие-либо шаги для снижения этих рисков? Этот вопрос относится к POSIX, но дает ответ для этих платформ.У меня была одна не зависящая от платформы идея, которая включала установку UncaughtExceptionHandler ( как этот ) для класса, который будет перезаписывать конфиденциальные данные.Но что делать, если память выгружается?Что делать, если JVM дает сбой (например, ошибка сегментации) из-за ошибки JVM / JNI?Я знаю, что Linux может помешать переносу данных на диск, но есть ли Java-код для этой кроссплатформенности?В основном я беспокоюсь о возможности восстановления данных на магнитных запоминающих устройствах, поэтому любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

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

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

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

2 голосов
/ 20 мая 2011

Если вы пытаетесь остановить случайных пользователей, вам не нужно ничего делать.если вы пытаетесь остановить знающих / решительных пользователей и запускаете код на их компьютере, то вы ничего не можете сделать.

, если вас беспокоит толькопрограмма записывает материал на диск «случайно», тогда, опять же, вы ничего не можете сделать.Java-программы не генерируют дампы кучи, если вы специально не скажете им об этом.любые трассировки стека, которые получают выходные данные из неперехваченного исключения, вряд ли будут содержать в них что-либо чувствительное.файл, который записывается, когда jvm segfaults контролируемым образом, также вряд ли будет содержать в себе что-то чувствительное.единственной потенциально проблемной вещью будет дамп ядра в каком-либо варианте системы Unix.и, к сожалению, я не верю, что вы можете контролировать это на уровне программы, только на уровне конфигурации системы / пользователя (о чем упоминалось в первом вопросе, с которым вы связались).

...