Конфиденциальные данные в дампах Java-кучи - PullRequest
5 голосов
/ 30 марта 2011

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

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

Есть ли способы борьбы с этим, например, заставить JVM записать зашифрованный дамп?

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Я думал об обработке этого снаружи, если виртуальная машина.Наивный подход может состоять в том, чтобы jvm записал дамп на зашифрованное устройство обратной связи.Конечно, это не совсем безопасно, так как любой, у кого есть root-доступ, может добраться до точки монтирования, но я ожидаю такого решения.Я мог бы посмотреть, смогу ли я установить FIFO, в который jvm заканчивает писать.Я знаю имя файла, которое будет использовать виртуальная машина, поэтому это может работать в зависимости от того, как виртуальная машина справится с этим (позже: это не работает. JVM жалуется на «Файл существует»)

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

1 голос
/ 30 марта 2011

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

...