Size: a a a

2018 April 02

PV

Pavel Vasiliev in Android Guards
О, не знал, спасибо, ознакомлюсь
источник

D

Daniil in Android Guards
по такому принципу работает тройка
источник

PV

Pavel Vasiliev in Android Guards
Хотя наверное это не сильно простая задача. Теоретически же наверное нужно договариваться с опсосами
источник

PV

Pavel Vasiliev in Android Guards
Чтобы закинуть на симку своё приложение
источник

D

Daniil in Android Guards
не обязательно)
источник

PV

Pavel Vasiliev in Android Guards
Легально)
источник

D

Dmitriy in Android Guards
по ссылке: "пропатчьте сорцы андроида перед сборкой"
источник

D

Daniil in Android Guards
Dmitriy
по ссылке: "пропатчьте сорцы андроида перед сборкой"
да, ты прав)
источник

D

Daniil in Android Guards
короче мне только знакомо решение YubiKey, но опять же не уверен что он работает с android
источник

D

Daniil in Android Guards
может еще есть какой-нибудь свисток в микрофонный разьем, не знаю.
источник

PV

Pavel Vasiliev in Android Guards
Ок, спасибо
источник

D

Daniil in Android Guards
Pavel Vasiliev
Ок, спасибо
источник

NK

Nikita Kulikov in Android Guards
Pavel Vasiliev
Добрый день, друзья. Познакомился с этой группой на крайнем мосдроиде, Георгий упомянул её в докладе :) И, собственно, примерно по теме доклада и будет мой к вам вопрос.

Помогите пожалуйста советом. Столкнулся с неприятной необходимостью хранить внутри приложения секретную строку.
Я решил прибегнуть к следующему: использую AndroidKeystore, генерирую случайный SecretKey для AES и храню его в KeyStore. С помощью этого ключа шифрую и ложу в шаредпрефы свою строку.
Для того чтобы не палить строку в коде, сделал служебный экран, который используется для того чтобы принять от пользователя строку, сгенерить AESный ключ в кейсторе, зашифровать и сохранить её в префы. Т.е. потенциальное вытаскивание из исходников отметается. Девайс вроде как поддерживает Hardware backed ключи и операции с ними проводит в TEE.
Приложение будет использоваться нешироким кругом пользователей и только на одних определённых устройствах (там API 23).
Ситуация в том что конфиденциальность этой строки превыше всего. Устройства служебные и будут выдаваться на руки. Предполагаю что наша строка будет "прошиваться" нами в устройства руками, это не самый удобный сценарий, но для нас это ок. Если работоспособность приложения пропадёт, ничего страшного не случится. Главное не раскрыть строку.
При необходимости получить и использовать значение строки в коде я совершаю ряд проверок и в случае фейла хотя бы одной из них кейстор и префы зачищаются:
- Получаю ключ из кейстора, дергаю его KeyInfo и проверяю что isInsideSecureHardware() возвращает true
- Посильно проверяю на отсутствие рута (наличие известных бинарников su, пакетов известных менеджеров рут-доступа, readonly состояние системных директорий итд)
Есть мысли добавить проверки google safetynet, который помогает проверить что апкшник не был изменён после выкачивания из стора (не знаком с технологией лично, только почитал о ней) а также содержит какие то свои проверки на рут.

Подскажите пожалуйста, нормальное ли это решение и/или какие ещё меры нужно принять? Можно ли как то эту строку выпотрошить из приложения в рантайме? Моих знаний о безопасности андроида не хватает для полноценного решения этой задачи, поэтому обращаюсь к вам.
Заранее спасибо.
Внесу свою лепту. Надо четко разобрать от кого вы хотите защищаться:
- Обычный телефон
- Рутованный телефон
- Телефон с Xposed

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

NK

Nikita Kulikov in Android Guards
Как вариант неплохой, который я вижу, просить от пользователя пин и шифровать ключ очень сложным алгоритмом (чтоб нельзя было забрутфорсить) и при этом пин хранить только у пользователя
источник

NK

Nikita Kulikov in Android Guards
Таким образом строка без пина бесполезна будет
источник

PV

Pavel Vasiliev in Android Guards
Nikita Kulikov
Внесу свою лепту. Надо четко разобрать от кого вы хотите защищаться:
- Обычный телефон
- Рутованный телефон
- Телефон с Xposed

Если кейс "Если телефон попал человеку в руки, шоб он не смог достать ключ", то тут невозможно защититься, если сам аппарат уязвим. Обязательно надо включить шифрование и вот это все. Кароч, от хакера с рутом на аппарате нереально защититься, т.е. надо максимально усложнить установку рута на аппарате
Добрый день.
Да, кейс по сути именно такой "Если телефон попал человеку в руки, шоб он не смог достать ключ". Защищаемся от недобросоветсного пользователя который захотел на рабочий аппарат поставить рут и различные приблуды для анализа установленных приложений.
Строка сама зашифрована ключом, который лежит в AndroidKeystore, и хранится аппаратно (по крайней мере isInsideSecureHardware() возвращает true)
Мне вот интересно, насколько человек вооруженный рутом и/или xposedом на устройстве может поковырять AndroidKeystore?
источник

NK

Nikita Kulikov in Android Guards
Рутом спокойно
источник

R

Rtem in Android Guards
Какая версия ведра?
источник

NK

Nikita Kulikov in Android Guards
Там не Keystore слабое место
источник

NK

Nikita Kulikov in Android Guards
А ваше приложение
источник