Критические действия: почему некоторые операции снова просят оба устройства

·6 мин. чтения·Автор: SSP Editorial Team
Обложка SSP Academy: критические действия и повторная подпись в SSP Enterprise

Критические действия: почему некоторые операции снова просят оба устройства

Вы вошли в систему. У вас роль администратора. Вы нажимаете «удалить участника» — и SSP просит подписать двумя вашими устройствами, ровно так, как если бы вы входили заново.

Это не трение ради трения. Это намеренно проведённая черта между операциями, которые сессионный токен авторизовать вправе, и теми, которыми не вправе, — и рассуждение за этой чертой стоит понимать, пользуетесь вы SSP или нет.

Сессии — про удобство, а не про последствия

Сессионный токен — это предъявительское удостоверение. Кто им владеет, тот и есть вы, с точки зрения сервера. Именно это делает сессии удобными — вы аутентифицируетесь один раз, а затем действуете свободно, — и именно это делает их плохой основой для необратимых решений.

Сессии крадут. Через ошибку межсайтового скриптинга, незаблокированный ноутбук, вредоносное ПО, утёкшую резервную копию или просто оставленный открытым браузер в общем офисе. Руководство OWASP по управлению сессиями рассматривает кражу сессии как ожидаемое условие, а не как крайний случай, и любая конструкция, полагающая иначе, оптимистична.

Для большинства действий это приемлемый риск, потому что большинство действий обратимы. Переименовать хранилище, добавить наблюдателя, поправить настройку уведомлений — если злоумышленник с украденной сессией сделает это, вы отмените.

Некоторые действия устроены иначе. Передача владения организацией отдаёт контроль другому. Исключение участника отрезает ему доступ. Удаление организации окончательно. Для них SSP требует доказательства, что действующий по-прежнему держит оба устройства прямо сейчас, — а не что держал их когда-то раньше в тот же день.

Тринадцать действий

Тринадцать операций требуют повторной подписи. Они распадаются на четыре группы.

Контроль над организацией

  • Передача владения
  • Удаление организации

Членство и роли

  • Исключение участника
  • Повышение участника до администратора
  • Понижение администратора

Идентичность аккаунта

  • Смена корпоративной почты
  • Удаление корпоративной почты

Жизненный цикл и администрирование хранилищ

  • Архивирование хранилища и его разархивирование
  • Заморозка хранилища и его разморозка
  • Повышение администратора хранилища и его понижение

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

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

Почему челлендж пишет сервер

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

Сообщение, которое вы подписываете, генерирует сервер. Клиент — никогда.

Критическое действие, шаг за шагом

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

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

К чему привязан челлендж

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

Точное действие. remove_member и transfer_ownership дают разные сообщения. Подпись для одного не может авторизовать другое.

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

Метка времени. Она занимает первые тринадцать символов сообщения — фиксированная позиция, потому что SSP Wallet проверяет этот формат до того, как что-либо показать. Челленджи истекают через пятнадцать минут.

Случайный nonce. Двенадцать байт криптографической случайности, что делает каждый челлендж уникальным даже для идентичного действия против идентичной цели в ту же секунду.

И челлендж одноразовый. При погашении сервер помечает его использованным в той же атомарной операции, что и проверяет, — так что воспроизведённая подпись отвергается с «уже использован», а не срабатывает тихо во второй раз. Истёкшие челленджи убирает автоматически TTL-индекс.

Записывается каждая попытка, включая неудачные

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

Это значит, что журнал включает брошенные попытки, попытки с неудавшейся подписью и отклонённые попытки. Одиночное неудавшееся критическое действие — обычно кто-то передумал. Их скопление в три часа ночи — это уже история.

Как и остальной аудиторский след SSP, эти записи не имеют срока хранения и задачи очистки. Ценность аудиторского журнала целиком живёт в тех частях, потребность в которых никто не предвидел.

Как это выглядит на практике

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

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

Не объединяйте их в пакет. Каждое критическое действие получает собственный челлендж и собственную подпись. Если вы удаляете трёх уходящих сотрудников, это три подписания. Это сделано намеренно: объединение означало бы одну подпись, авторизующую несколько изменений, — ровно то свойство, которого мы избегаем.

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

Более широкая картина того, что и чем обеспечивается — и почему повторная подпись находится в среднем слое, а не в самом сильном, — в материале что на самом деле останавливает транзакцию. О том, как складываются организация и её хранилища, начните с материала SSP Enterprise: мультиподписные хранилища для команд.

Поделиться статьёй

Похожие статьи