Лучшие практики борьбы со злоупотреблением пользовательской схемой URL для проведения фишинговых атак ios

Сценарий:

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

При его реализации (с использованием схемы URL) мы начинаем задаваться вопросом, насколько безопасен этот метод? Теоретически вредоносное приложение может подписаться на ту же схему URL, и, по словам Apple:

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

Реализация пользовательских схем URL от Apple

В таком сценарии, если пользователь нажимает на URL-адрес внутри письма, неизвестно, какое из двух (или более приложений) будет запущено — наше или вредоносное. Допустим, запускается другое приложение — если оно действительно вредоносное, теоретически оно может имитировать страницу входа в систему нашего приложения и захватить учетные данные пользователя.

Существуют ли какие-либо передовые практики, которые обрабатывают такой сценарий? Я прочитал много статей по этой проблеме, и все они утверждают, что единственное решение — подождать, пока Apple сделает эти схемы URL уникальными. пример1, пример2

Я хотел бы услышать о любом решении проблемы, если таковое существует. Заранее спасибо!


person goldengil    schedule 26.05.2015    source источник


Ответы (2)


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

Один из вариантов может быть:

  1. В рамках регистрации создайте пару открытого и закрытого ключей и сохраните ее в своем приложении.
  2. Отправьте открытый ключ на свой веб-сервер в рамках процесса регистрации.
  3. Кодируйте полезную нагрузку вашего URL-адреса, используя этот открытый ключ.

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

Закодированные данные могут быть токеном, который мы можем использовать для аутентификации пользователя и, следовательно, никогда не требовать от него повторной аутентификации в приложении. Тогда нет экрана входа в систему, который можно было бы имитировать (хотя умной подделки может быть достаточно, чтобы обмануть пользователей и заставить их раскрыть свои учетные данные).

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

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

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

person Jonah    schedule 27.05.2015
comment
Эти варианты очень интересны, и все же, как вы упомянули, это будет означать решение только для одного устройства. Ходят слухи, что iOS9 будет сосредоточена на безопасности (наряду со стабильностью и оптимизацией) — так что, возможно, ожидаемое решение (Apple исправит проблему) не за горами. Большое спасибо! - person goldengil; 28.05.2015

Попробуйте что-то вроде этого:

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

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

edit: подумав об этом дальше, пока у вас есть активный злоумышленник, вы в значительной степени облажались. Злоумышленник может продолжать эмулировать ваше приложение, эффективно используя MITM, независимо от того, что вы делаете, пока он может перехватить этот первоначальный URL-адрес. Мое решение будет работать только в самых простых случаях, не очень надежно.

person Endareth    schedule 27.05.2015
comment
Вредоносное приложение может захватить этот токен и выполнить любое действие на стороне клиента, которое обычно выполняет предполагаемое приложение-получатель. - person Jonah; 27.05.2015
comment
Да, я подумал о чем-то подобном вскоре после публикации... все сводится к тому, сколько усилий готов приложить злоумышленник. К сожалению, вся эта ситуация, кажется, оставляет злоумышленника навсегда впереди игры. Чем больше я думаю об этом, тем больше я не вижу никакого решения, кроме как для Apple, чтобы исправить основную причину. - person Endareth; 27.05.2015