RE:NODE

Безопасность12 мин чтения

Двухфакторная защита аккаунта панели: TOTP и коды восстановления

Аккаунт панели может удалить все ваши серверы. Как работают TOTP-коды, как их включить и где хранить коды восстановления, которые вы не потеряете.

Обновлено

0 прочтений

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

До чего дотягивается украденный пароль от панели#

Прежде чем решать, сколько защиты соразмерно, стоит конкретно оценить масштаб ущерба. Аккаунт панели - это не один сервер.

файловый менеджерАккаунт панелипароль плюс TOTPОплатасчета, платежиКаждый серверзапуск, стоп, удалениеБэкапыскачать и удалитьФайлы и SFTPмиры, конфиги, ключи
До чего дотягивается один аккаунт панели

Тот, у кого есть ваш пароль, получает консоль каждого сервера, а значит, каждую админскую команду. Он получает файловый менеджер, а значит, ваш мир, пароли от баз данных, лежащие в конфиге, токены ботов в файле окружения. Он получает бэкапы, включая возможность их скачивать и удалять. Удаление сервера удаляет и его бэкапы, в том числе заблокированные, так что «восстановиться из бэкапа» - не защита от того, кто владеет аккаунтом. Эта асимметрия и есть весь довод: злоумышленнику нужен один работающий пароль, а вам нужно всё.

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

Что такое TOTP на самом деле#

Панель принимает шестизначный код из приложения-аутентификатора. Стандарт за этим называется TOTP, он определён в RFC 6238 поверх более раннего стандарта HOTP, и понимание механизма снимает большую часть путаницы вокруг него.

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

  1. Берут текущее время Unix и делят на шаг, обычно 30 секунд, отбрасывая остаток. Это счётчик.
  2. Вычисляют HMAC счётчика с общим секретом, обычно на основе SHA-1.
  3. Усекают результат до шести цифр.

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

QR-код кодирует URI, несущий все параметры:

code
otpauth://totp/Panel:you@example.com  ?secret=JBSWY3DPEHPK3PXP  &issuer=Panel  &algorithm=SHA1  &digits=6  &period=30

На деле это одна сплошная строка; здесь она разбита для читаемости.

ПараметрТипичное значениеЧто он означает
secretbase32, 16 или 32 символаОбщий ключ. Это и есть вся учётная запись
issuerназвание сайтаТо, что показывает ваше приложение в списке
algorithmSHA1Почти повсеместно; смена ломает большинство приложений
digits6Длина кода
period30Секунд на код

Включение и две минуты внимания, которых оно требует#

  1. Откройте раздел аккаунта в панели по адресу panel.renode.space и найдите двухфакторную аутентификацию.
  2. Отсканируйте QR-код приложением-аутентификатором.
  3. Отсканируйте его вторым устройством или приложением, прежде чем продолжить. Один и тот же секрет может жить в двух местах, и это лучшая страховка от потерянного телефона. Подойдёт старый планшет в ящике или настольный менеджер паролей, хранящий TOTP.
  4. Запишите на бумаге сам секрет base32 и положите к важным документам. Секрет можно потом ввести в любое новое приложение, а QR-код, которого у вас больше нет, - нельзя.
  5. Введите текущий код для подтверждения. Регистрация не завершена, пока сервер не увидел код, с которым согласен.
  6. Сохраните коды восстановления сейчас, пока не закрыли страницу. Считайте, что второй раз их не покажут.

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

Коды восстановления: то, в чём чаще всего ошибаются#

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

Где их хранить, в порядке предпочтения:

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

Где не хранить: заметка на телефоне, где работает аутентификатор, сообщение самому себе в Discord, та же папка скриншотов, что и всё остальное, или стикер под столом, за которым вы ещё и стримите.

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

Выбор приложения-аутентификатора#

Подойдёт любое приложение, реализующее TOTP, потому что стандарт есть стандарт. Различаются резервное копирование, экспорт и то, просуществует ли приложение ещё три года.

  • Приложения с открытым кодом и зашифрованными локальными бэкапами - безопасный вариант по умолчанию. У Aegis на Android есть зашифрованное хранилище и файл экспорта, который вы контролируете. 2FAS и Ente Auth работают на обеих платформах и активно поддерживаются.
  • Приложения вендоров с облачной синхронизацией обменивают часть контроля на удобство. Google Authenticator получил синхронизацию аккаунта после многих лет полного отсутствия бэкапа, из-за чего многие остались ни с чем; у приложения Microsoft бэкап есть давно. Если пользуетесь таким, убедитесь, что бэкап действительно включён, а не предполагайте.
  • Менеджеры паролей, хранящие TOTP, помещают оба фактора в одно хранилище. Это настоящий компромисс, и ответ зависит от хранилища: если сам менеджер защищён надёжным мастер-паролем и собственным вторым фактором на другом устройстве, всё в порядке, и так делают многие аккуратные люди. Если хранилище открывается четырёхзначным PIN на том же телефоне, у вас один фактор с лишними шагами.
  • Только настольные варианты, такие как KeePassXC, генерируют коды из вставленного вами секрета, что полезно как вторая регистрация из третьего шага выше.

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

Код отклонён, и почти всегда виноваты часы#

У TOTP ровно два входа, поэтому отклонённый код быстро локализуется.

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

bash
# Linux: check and enable network time$ timedatectl status$ sudo timedatectl set-ntp true# Windows: force a resync$ w32tm /resync

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

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

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

Код восстановления не в том поле. У кодов восстановления и TOTP-кодов обычно отдельные поля. Ввод одного в другое ничего не тратит, но отнимает время.

Слишком много попыток. Входы ограничены по частоте и защищены капчей, так что серия неудач замедляет вас, а не ускоряет. Остановитесь, исправьте часы и возвращайтесь.

Что двухфакторная защита не прикрывает#

Понимать это важно, потому что оставшиеся способы отказа - те, на которые стоит потратить оставшиеся усилия.

  • Фишинг в реальном времени. Убедительная поддельная страница входа может передать ваш код настоящему сайту в пределах его тридцатисекундного окна. TOTP от этого не защищает; защищает только проверка адресной строки. Панель находится по адресу panel.renode.space и больше нигде. Относитесь с подозрением к любой ссылке для входа, пришедшей в сообщении, и открывайте панель, набирая адрес или из собственной закладки.
  • Украденная сессия. Двухфакторная проверка работает при входе. Вредоносная программа на вашей машине или расширение браузера со слишком широким доступом могут забрать cookie сессии позже. Для этого и нужен список сессий: он показывает, где выполнен вход в аккаунт, и позволяет завершить эти сессии.
  • API-ключи. API-ключ аутентифицирует без входа, поэтому двухфакторная защита его вообще не покрывает. Ключи можно ограничить определёнными адресами, и это ограничение - равноценная защита. Относитесь к ключу как к паролю без второго фактора, потому что он таким и является.
  • SFTP и RCON. Учётные данные SFTP выдаются на сервер, а не на аккаунт, и у протокола передачи файлов второго фактора нет. RCON - это пароль на открытом порту. Оба - отдельные учётные данные с отдельной гигиеной: о них говорится в статьях RCON без риска и переменные окружения и секреты.
  • Ваша почта. Почта - корень большинства процедур восстановления где угодно, и счета за хостинг приходят туда. Если у вашего почтового аккаунта нет второго фактора, исправьте это раньше, чем этот.
  • Другие люди. Двухфакторная защита защищает ваш аккаунт. Соадминистратор без неё - незащищённая дверь в те же серверы, и об этом следующий раздел.

Как выдать помощь, не выдавая аккаунт#

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

Субпользователи получают гранулярные права на отдельные серверы: только консоль, только файлы, никогда оплата. Права живут в роли, люди - в команде, а выдача связывает команду с сервером, так что человек может помогать с одним сервером, не видя остального вашего аккаунта. Доступ можно ограничить по времени, приглашения рассылаются по ссылке, коду присоединения или почте, а у каждого сервера свой журнал действий, так что у вопроса «кто перезапустил» есть ответ. В статье субпользователи и минимальные привилегии разобрано, какие права безопасно выдавать, а какие - это владение под другим названием.

У самого аккаунта есть ещё несколько защит, о существовании которых стоит знать: пароли хранятся в виде хэшей bcrypt, вход закрыт капчей и лимитами частоты, список сессий позволяет выйти отовсюду сразу, а API-ключи можно ограничить по адресу. Ничто из этого не заменяет второй фактор. Всё это делает второй фактор стоящим дополнением, а не единственной стеной.

FAQ#

Каким приложением-аутентификатором пользоваться?

Любым, лишь бы вы могли сделать бэкап или экспорт секретов. Aegis, 2FAS и Ente Auth - хороший выбор с открытым кодом; приложения вендоров подходят, если их бэкап включён. Приложение значит гораздо меньше, чем секрет, зарегистрированный в двух местах, и записанные коды восстановления.

Я потерял телефон и коды восстановления. Может ли поддержка восстановить мой аккаунт?

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

Можно ли использовать аппаратный ключ или SMS вместо этого?

Панель принимает коды из приложения-аутентификатора, а также одноразовые коды восстановления. Аппаратные ключи и SMS здесь недоступны. Это меньший набор, чем у некоторых сервисов, а на практике TOTP со вторым зарегистрированным устройством и распечатанными кодами закрывает реалистичные угрозы аккаунту хостинга.

Нужна ли собственная двухфакторная защита людям, с которыми я делю сервер?

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

Защищает ли двухфакторная защита сам игровой сервер?

Не напрямую. Она защищает аккаунт панели, который им управляет. У сервера свои учётные данные - RCON, админка в игре, пароли баз данных, SFTP, - и ни одни из них не видят вашего второго фактора. Меняйте их отдельно, особенно после того, как кто-либо с доступом перестаёт быть причастным.

Безопасно ли хранить секрет TOTP в менеджере паролей?

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


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000