Обновить

Второй фактор, который жил в чужой странице: как я выбросил WebAuthn из своего сервиса ключей

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели5.7K
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

Комментарии 1

Что-то здесь не так и чувствуется какая-то проблема в логике. Решали одну задачу, решили другую, при это проблем/рисков то ли столько же стало, то ли больше, первоначальная проблема усугубилась, и всё это под рассказы про безопасность.
Могу ошибаться, но прежде всего видна путаница в терминологии. Мне кажется, что под словом "клиент" у вас в разных местах разные сущности и разные риски. Где-то там пошли проблемы с логикой в расуждениях.

Во-вторых, вы много говорите о безопасности и угрозах, но у вас нет списка и приоритетов угроз - от чего именно и с какими приоритетами вы защищаетесь? Вы не можете защититься от всего - нужно выбирать, какие угрозы более приоритетны, какие менее. И дальше обязательно действовать в рамках это модели: каждый раз, когда у вас возникает вопрос о том, какое решение более безопасное/правильное, вы должны смотреть на свою модель и действовать в соответствии с ней. Если вы меняете модель, то пересматриваете все решения. А у вас вероятности и опасности угроз меняются прямо на ходу. И результат, честно говоря, очень сомнительный. Вы в какой-то момент начали защищаться от потери контроля на бекэндом, перелопатили совершенно всё, но в результате от заявленной угрозы не защитились и даже сделали хуже. Но зачем вы тогда это всё делали?

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

Кроме того:

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

"Общий вывод из всего этого получился короткий. Если страницу, в которой живёт твой второй фактор, отдаёт тот, от кого ты защищаешься, независимым фактором он не является."
Это очевидно-неверный вывод. Сам второй фактор при этом может быть защищен так, что контроль над страницей ничего не даст атакующему. Это ещё один признак того, что вы рассматривали угрозы фрагментарно и по ходу разработки, что-то там сами себе на ходу постулировали, без взгляда на всю ситуацию в целом. Даже просто прочитайте вот эту свою фразу - вы точно уверены, что она верная? Вы точно не можете придумать второго фактора, который не может быть скомпрометирован контролем над отдающей страницей? А если nouce, подписи и челендж со стороны клиента добавить? А потому подумайте, сколько неверных решений вы приняли из-за того, что в какой-то момент почему приняли вот эту фразу за постулат.

А ещё вы из-хз отсутствия модели угроз не рассмотрели случай, когда можно иметь ещё один сервер, находящийся в своём собственном изолированном контуре безопасности, и выполняющих какую-то очень простую изолированную задачу. Это решило бы практически все ваши проблемы. Но для этого нужно точно знать от каких именно угроз вы защищаетесь. От потери контроля над одним сервером? Без проблем. От потери контроля вообще над всем серверами? Так и вы сейчас от этого не защитились и нужно более тщательно сравнивать эти два варианта (ваш скорее всего проиграет). У вас сейчас потеря контроля над одним сервером/сервисом полностью рушить всю безопасность - зачем тогда вы всё это городили?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации