Безопасный способ удаления файлов в разработке Android - PullRequest
0 голосов
/ 10 ноября 2018

После анализа моего приложения Android с помощью инструмента безопасности, оно обнаружило уязвимость высокого уровня «Проверка небезопасного удаления файла». Я исследовал это, и кажется, что проблема в том, что приложение использует «file.delete ()».

Эта функция считается небезопасной, поскольку теоретически данные могут быть получены с помощью инструмента, который сканирует все запоминающее устройство. Итак, если этот способ удаления является «небезопасным» ... каков «безопасный» способ удаления файлов в Android? (чтобы избежать той «ошибки безопасности», которая предположительно является «высокоуровневой»). Как правильно удалять файлы в Android Development?

Я получаю одно и то же предупреждение о безопасности в 2 разных приложениях, одно из которых написано на нативной Java, а другое - на Xamarin Forms. Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Это не проблема для Android. Это связано с тем, как работают файловые системы и с физическими носителями данных.

При удалении файла независимо от API на самом деле удаляется запись в таблице файлов.

Фактические данные на диске или флэш-накопителе остаются.

Существует метод безопасного удаления: Перед удалением файла несколько раз перезаписать его содержимое мусором или нулями.

Но этот метод работает только для магнитных носителей, таких как жесткие диски. Устройства Android используют NAND flash для хранения.

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

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

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

Если вы хотите обезопасить свое приложение, вы должны хранить зашифрованные конфиденциальные данные. Затем, даже если кто-то попытается прочитать исходное хранилище, он не сможет восстановить данные.

Не храните учетные данные пользователя (например, пароли) в обычных файлах на Android. Используйте API учетных записей Android и позвольте ОС управлять безопасностью.

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

0 голосов
/ 24 июня 2019

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

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

Тем не менее, в случае оценки уязвимости - то есть статического анализа кода - не сразу будет обнаружено, что вы призываете к удалению [через file.delete()] зашифрованных файлов. Или, может быть, вы просто вызываете удаление файлов, которым нечего скрывать

В обоих этих случаях найденная уязвимость будет просто ложным срабатыванием. Это часть игры, потому что вы можете догадаться, что автоматизированному инструменту довольно сложно понять, действительно ли что-то «заслуживает» защиты или нет

Чтобы избавиться от уязвимости, вы можете добавить логику для очистки файлов перед вызовом file.delete(). Для этого у вас есть образец здесь . Это решит проблему обнаружения уязвимостей

0 голосов
/ 10 ноября 2018

что такое "безопасный" способ удаления файлов в Android?

Нет ни одного для огромного большинства устройств Android. Вы используете delete() на File.

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

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

Итак, это действительно сводится к вашей цели:

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

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

...