Size: a a a

2019 July 29

EK

Evgeniy Kuznetsov in Android Guards
Ilya Chirkov
С рутом у всех есть доступ
Ну на старых версиях андроид были уязвимости, в новых я такого не слышал. Особенно если hardware backed keystore
источник

IC

Ilya Chirkov in Android Guards
Evgeniy Kuznetsov
Ну на старых версиях андроид были уязвимости, в новых я такого не слышал. Особенно если hardware backed keystore
Называется «отладчик»
источник

СП

Сергей П. in Android Guards
Но можно просто ключом хран. в сторе шифровать, а хэш от пина взять за алиас)
источник

IC

Ilya Chirkov in Android Guards
Никто не мешает даже банально счетчик попыток запатчить на любое нужное значение
источник

EK

Evgeniy Kuznetsov in Android Guards
Ilya Chirkov
Называется «отладчик»
Универсальный ответ, понял
источник

EK

Evgeniy Kuznetsov in Android Guards
Сергей П.
Но можно просто ключом хран. в сторе шифровать, а хэш от пина взять за алиас)
Слишком просто 😂
источник

IC

Ilya Chirkov in Android Guards
Evgeniy Kuznetsov
Универсальный ответ, понял
Ну а что, подключаемся отладчиком и дергаем какие душе угодно методы приложения
источник

IC

Ilya Chirkov in Android Guards
В обход любых проверок
источник

СП

Сергей П. in Android Guards
Ну отладчик на_удаленном_ телефоне из малвари нетривиально запустить. А если он в руки попал, то данные вытащатся
источник

IC

Ilya Chirkov in Android Guards
На удаленном-то и без шифрования, просто в префах плейнтекстом, данные достаточно надежно лежат
источник

EK

Evgeniy Kuznetsov in Android Guards
Ilya Chirkov
На удаленном-то и без шифрования, просто в префах плейнтекстом, данные достаточно надежно лежат
Если рута нет, опять же
источник

c

cyber in Android Guards
Evgeniy Kuznetsov
Тихо как-то в группе 😀 Предлагаю обсудить. Навеяно статьёй https://habr.com/ru/post/423753/, где автор (@NeonLost) писал, что пин нужно валидировать только на сервере. Думал, как можно проверять валидность пина локально на девайсе (для работы в оффлайн режиме, например), если будем шифровать данные ключём выведенным из пина, с помощью AES/CBC/NoPadding.
Пришёл к такой схеме:
1. Когда пользователь создал пин, мы выводим из него ключ (назовём его PinKey)
2. В это же время генерим ключ в Android KeyStore - AES или RSA, что позволяет Api level (KeyStoreKey)
3. Генерим рандом байты (Challenge)
4. Шифруем Challenge с помощью PinKey (PinEncryptedChallenge) и KeyStoreKey (KeyStoreEncryptedChallenge) и сохраняем в префы
5. Когда надо проверить пин (CandidatePinKey) локально расшифровываем KeyStoreEncryptedChallenge с помошью KeyStoreKey и получаем эталон Challenge. Расшифровываем PinEncryptedChallenge с помощью PinCandidateKey и получаем candidateChallenge. Сравниваем с эталоном - совпало CandidatePin - OK. Нет - NotOK.

Так как Challenge не зашит в приложении, реверсом его не достать и пин не забрутфорсить.

Такие мысли. Рабочая ли схема, или что-то упустил? Может какие подводные камни заметили?
там небыло речи про валидировать пин на сервере, там был момент с валидацией RT только а сервере
источник

EK

Evgeniy Kuznetsov in Android Guards
Да, если RT валидный - значит и пин валидный. Я это имел в виду
источник

c

cyber in Android Guards
Сергей П.
Мне кажется тут математику не обойти. Единственный способ исключить брутфорс подбор 4 значного пина за максимум 10000 попыток - это блокировка подбора после пары неудачных попыток. А локально оно или на сервере - уже неважно
еще как важно, локальную проверку можно забайпасить же...)
источник

c

cyber in Android Guards
Evgeniy Kuznetsov
Тихо как-то в группе 😀 Предлагаю обсудить. Навеяно статьёй https://habr.com/ru/post/423753/, где автор (@NeonLost) писал, что пин нужно валидировать только на сервере. Думал, как можно проверять валидность пина локально на девайсе (для работы в оффлайн режиме, например), если будем шифровать данные ключём выведенным из пина, с помощью AES/CBC/NoPadding.
Пришёл к такой схеме:
1. Когда пользователь создал пин, мы выводим из него ключ (назовём его PinKey)
2. В это же время генерим ключ в Android KeyStore - AES или RSA, что позволяет Api level (KeyStoreKey)
3. Генерим рандом байты (Challenge)
4. Шифруем Challenge с помощью PinKey (PinEncryptedChallenge) и KeyStoreKey (KeyStoreEncryptedChallenge) и сохраняем в префы
5. Когда надо проверить пин (CandidatePinKey) локально расшифровываем KeyStoreEncryptedChallenge с помошью KeyStoreKey и получаем эталон Challenge. Расшифровываем PinEncryptedChallenge с помощью PinCandidateKey и получаем candidateChallenge. Сравниваем с эталоном - совпало CandidatePin - OK. Нет - NotOK.

Так как Challenge не зашит в приложении, реверсом его не достать и пин не забрутфорсить.

Такие мысли. Рабочая ли схема, или что-то упустил? Может какие подводные камни заметили?
как уже написали выше весь прикол в том, что в статье имея полный доступ к телефону ты не получишь доступ в приложение, в твоем же случае имея доступ к телефону его можно получить как оффлайн вариант, так и онлайн.
источник

EK

Evgeniy Kuznetsov in Android Guards
cyber
как уже написали выше весь прикол в том, что в статье имея полный доступ к телефону ты не получишь доступ в приложение, в твоем же случае имея доступ к телефону его можно получить как оффлайн вариант, так и онлайн.
Что имеешь в виду под доступом в приложение?
источник

c

cyber in Android Guards
наверное узнать пин-код
источник

c

cyber in Android Guards
в твоем случае
источник

EK

Evgeniy Kuznetsov in Android Guards
cyber
наверное узнать пин-код
Как? Подключившись "отладчиком"? Что помешает сделать тоже самое в варианте только с онлайном?
источник

c

cyber in Android Guards
подключившись отладчиком, сдампив память девайса
источник