Подтвердить что ты не робот

Как сохранить секретность потребителя OAuth безопасным и как реагировать, когда он скомпрометирован?

Этот вопрос связан с попыткой понять риски безопасности, связанные с внедрением oauth на мобильной платформе, такой как Android. Предположим, что у нас есть приложение для Android, в которое встроен ключ/секретный код потребителя.

Предполагая, что секрет потребителя был скомпрометирован, и хакер овладел им, каковы последствия этого?

Понятия о компромиссном потребительском секретности
Правильно ли я утверждаю, что скомпрометированный секрет потребителя как таковой не влияет на безопасность пользователя или какие-либо данные, хранящиеся в поставщике, поддерживающем OAuth, с которым пользователь взаимодействует. Сами данные не подвергаются риску и не могут быть получены хакером.

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

Что может сделать хакер со скомпрометированным секретом потребителя?
Правильно ли я также излагаю следующее:

  • Хакер может настроить/опубликовать приложение, которое имитирует мое приложение.
  • Хакер может привлечь пользователей, которые пойдут через поток OAuth, извлечение токен доступа через хакеров OAuth танец (использование скомпрометированного потребителя ключ/секретный).
  • Пользователь может подумать он имеет дело с моим приложением, так как он будет см. знакомое имя (потребительский ключ) во время процесса авторизации.
  • Когда потребитель выдает запрос через хакер, хакер может легко перехватить токен доступа и в сочетании с секретом потребителя может теперь подписываю запросы от моего имени получить доступ к моим ресурсам.

Влияние конечных пользователей
В предположении, что

  • У хакера есть приложение/ сайт, используя мою потребительскую тайну.
  • Один из моих пользователей был обманут в авторизацию доступ к этому приложению/сайту

Возможно следующее:

  • конечный пользователь может заметить, что происходит что-то подозрительное, и сообщить поставщику услуг (например: Google) о вредоносном приложении
  • поставщик услуг может затем отменить ключ/секрет пользователя

Влияние пользователя OAuth (мое приложение):
Мое приложение (содержащее секрет потребителя) необходимо будет обновить, так как в противном случае все мои клиенты не смогут разрешить моему приложению делать запросы от их имени больше (поскольку мой потребительский секрет больше не будет действительным).

Делегирование всего трафика OAuth
Хотя было бы возможно делегировать большое количество взаимодействий OAuth через промежуточный веб-сервер (выполняя танец OAuth и отправляя токен доступа пользователю), нужно было бы также проксировать все сервисные взаимодействия, поскольку требуется ключ/секрет пользователя для подписания каждого запроса. Это единственный способ сохранить ключ/секрет клиента за пределами мобильного приложения и сохранен в более безопасном месте на промежуточном веб-сервере?

Альтернативы
Существуют ли альтернативы для этого проксирования? Можно ли хранить секрет пользователя на промежуточном веб-сервере и иметь какой-то механизм, который приложение Android (опубликованное на рынке и должным образом подписанное) может сделать безопасный запрос промежуточному веб-серверу для получения секретности потребителя и его сохранения внутри приложения? Может ли быть реализован механизм, что промежуточный веб-сервер "знает", что это официальное приложение для Android, которое запрашивает получение секретности потребителя, и что промежуточный веб-сервер будет выдавать только секрет потребителя в этом конкретном приложении для Android?

4b9b3361

Ответ 1

Резюме. Я бы просто рискнул и сохранил секрет в клиентском приложении.

Альтернатива прокси-сервера:

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

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

Долгое обсуждение того, почему простой прокси не работал:

Некоторые люди, столкнувшись с проблема, подумайте: "Я знаю, я добавлю собственный прокси-сервер" Теперь у них есть два проблемы. (с извинениями перед Джейми Завински)

Ваши предположения в основном правы. До того момента, когда вы начинаете думать о своем собственном сервере, независимо от того, хранит ли он секрет и проксирует вызовы для клиентского приложения или пытается определить, является ли приложение легитимным и дает ему секрет. В обоих подходах вам все равно придется решить проблему "это запрос, исходящий из фрагмента кода, который я написал"?

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

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

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


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

Таким образом, любой алгоритм, который опирается на секретный файл, хранящийся на стороне приложения, может быть подделан. Сила OAuth заключается в том, что она никогда не дает учетных данных пользователя для приложения, вместо этого предоставляет временные учетные данные приложения, которые пользователь может аннулировать при необходимости.

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

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

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