Вопрос или проблема
Я изучил эту статью – http://www.cs.kun.nl/~erikpoll/publications/AndroidSecureStorage.pdf ссылка на архив, в которой говорится, что если у злоумышленника есть доступ root к устройству, то легко использовать ключи хранилища с другим (хакерским) приложением. Так ли это все еще?
Я думаю, следует ли мне использовать Android keystore или BKS (BouncyCastle KeyStore), если я буду использовать пароль, введенный пользователем, и мне нужна максимальная безопасность?
Приложение с доступом root имеет полный контроль над системой и может делать что угодно, так как оно может отменять все (DAC тип *) ограничения безопасности. Поэтому короткий ответ – “да”.
(*) Пользователь root, ограниченный через SeLinux (MAC) может быть предотвращен от выполнения определенных действий, но это действительно зависит от ситуации. Лучше на это не полагаться.
злоумышленник имеет доступ root к устройству […] [но] мне нужна максимальная безопасность
Если злоумышленник имеет самый высокий уровень прав на системе, тогда по определению вы ничего не можете сделать, кроме как выключить устройство или выполнить что-то еще на физическом уровне, как, например, прошить новое изображение на основное хранилище.
Секретные токены могут храниться в модуле аппаратной безопасности или в любом другом устройстве, которое вы назовете (подумайте о TPM, смарт-картах, yubikey, SIM-картах или любом другом названии для хранилища, защищенного от несанкционированного доступа). Это то, как обычно смягчаются программные хакерские атаки: имея отдельное устройство внутри вашего устройства, которое хранит секреты, вы не получите доступ просто имея root на “родительском” устройстве (с которым общается модуль аппаратного обеспечения). С другой стороны, злоумышленник все равно может захватывать все, что входит или выходит, а также отправлять свои собственные запросы на расшифровку или подпись.
Фактически, вы ничего не можете сделать, чтобы предотвратить доступ к тому, что вы сохранили на устройстве, если у кого-то есть полный доступ к этому устройству. Если они не могут к этому получить доступ, значит, у них, очевидно, нет полного доступа.
Что и делает “рутирование” телефона важным: вы становитесь владельцем аппаратного обеспечения, заставляя программное обеспечение делать то, что хотите (как владелец аппаратного обеспечения). Риск того, что злоумышленник может получить те же полномочия, если пользователь предоставит root вредоносному приложению, – это риск, который следует принять; это довольно нормально и является стандартным для других операционных систем (и иногда все идет не так). Пытаться выяснить, имеет ли пользователь доступ к своему собственному устройству или злоумышленник получил root, – это игра в кошки-мышки, которую вы не сможете в конечном итоге выиграть: вы можете проверить все известные сигнатуры, которые указывают на то, что пользователь имеет этот доступ, но в конечном итоге ваша программа работает на аппаратном обеспечении, управляемом кем-то другим, и они могут выбрать, не показывать вам свои данные.
Вот почему хеширование паролей важно: устройства (такие как серверы) иногда подвергаются компрометации, но если пароль на самом деле не хранится там (только его криптографический производный), злоумышленнику сначала нужно сломать эти хеши, прежде чем полученные данные станут полезными для них. Если все данные на устройстве зашифрованы паролем, вводимым пользователем только время от времени, злоумышленнику придется либо угадать пароль, либо подождать, пока пользователь введет его.
Требование физического взаимодействия пользователя с использованием аппаратного модуля или зашифрованных данных будет максимальной безопасностью, которую вы можете получить в этом сценарии, где злоумышленник имеет полный доступ к программному обеспечению.
Ответ или решение
Уязвимость Android Keystore при получении прав root-доступа
Несомненно, устройства Android и их механизмы безопасности, такие как Android Keystore, представляют собой важные элементы для защиты конфиденциальных данных. Тем не менее, как демонстрирует исследование, на которое вы ссылаетесь, наличие root-доступа к устройству значительно ослабляет уровень безопасности, предоставляемый Android Keystore.
Риски, связанные с root-доступом
Когда злоумышленник получает root-доступ к Android-устройству, он фактически обретает полный контроль над операционной системой и может:
-
Обходить ограничения безопасности: Злоумышленник может изменять или удалять любые приложения, а также их данные, включая хранилище ключей.
-
Запускать собственные приложения с повышенными привилегиями: Это позволяет ему получать доступ к ключам, хранящимся в Android Keystore, и использовать их для подписи или расшифровки данных, что делает Android Keystore уязвимым в этой ситуации.
Максимальная безопасность: Android Keystore vs. BouncyCastle KeyStore
Выбор между Android Keystore и BouncyCastle KeyStore (BKS) зависит от сценария использования и требуемого уровня безопасности.
-
Android Keystore: Он обеспечивает интеграцию с аппаратными средствами устройства, которые могут предложить дополнительный уровень защиты (например, Trusted Execution Environment), но все это не приведет к адекватной защите в случае получения root-доступа.
-
BouncyCastle KeyStore: Это программное решение, которое может предложить большую гибкость. Однако, как и в случае с Android Keystore, наличие root-доступа означает, что злоумышленник может получить доступ к ключам, если они не защищены должным образом.
Оптимальные меры безопасности
При наличии root-доступа к устройству нет простого программного решения, которое может эффективно защитить ваши данные. Тем не менее, можно рассмотреть следующие рекомендации для повышения уровня безопасности:
-
Использование аппаратных модулей безопасности: Такие компоненты, как TPM, YubiKey, или SIM-карты, могут предоставить дополнительный уровень защиты, поскольку данные хранятся в аппаратно-защищенных модулях, а не в программном обеспечении устройства.
-
Физическая защита данных пользователя: Шифрование данных с использованием пароля, который периодически вводит пользователь, может сделать данные недоступными для злоумышленника даже при наличии root-доступа.
-
Хэширование паролей: Хранение лишь криптографической производной паролей, а не самих паролей, позволяет снизить риск в случае компрометации устройства. Злоумышленник должен будет сначала взломать эти хеши, прежде чем они станут полезными.
-
Интерактивное взаимодействие пользователя: Требование непосредственного ввода данных пользователем для критически важных операций может значительно усложнить задачу злоумышленнику.
Заключение
Итак, если злоумышленник получает root-доступ к Android-устройству, Android Keystore становится уязвимым, и никакие программные меры не могут гарантировать полную защиту. Для достижения максимальной безопасности стоит рассмотреть использование аппаратных модулей и дополнительное шифрование данных. Помните, что строгий контроль доступа и безопасность — это комплексный процесс, который требует многослойного подхода к защите информации.