Как бэкапить 2FA типа Google Auth? Сесурити просвет

 Публичный пост для комнаты «Тех»
2 апреля 2024  196

TL;DR: OTP коды (то что в google auth) можно бэкапить и копировать всюду за 0 рублей. Делайте это по мере возможности.

Клубчане здравствуйте!

В милом моему средцу клубном чате Бенилюкса пероидически в обсуждении двухфакторной авторизации я слышу подобный аргумент против TOTP:

- Вот у тебя код в приложении на мобилке, мобилка сдохла, вот и конец твоему второму фактору!

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

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

Чё такое этот ваш OTP?

OTP расшифровывается как one time password, это такой подход к авторизации который в основном используется как второй фактор (но не всегда). Есть несколько подвидов этой техологии, например:

  • TOTP или time based. В этом подходе принимается за данность что на сервер и у вас время примерно одинаковое (округляется до какого-то шага в N секунд) и на основании времени и секретного хэша который вам даёт сервис генерируется код.
  • HOTP или hardware based. Например Ybikey или другой девайс который генерирует уникальные коды. Нет девайса - нет авторизации.
  • SMS. ага, это тоже one time password. Самый слабый и не любимый всеми специалистами, но всё ещё лучше чем просто пароль.
  • Список одноразовых кодов. Раньше это было популрянее ( за отсутствием других вариантов), но и сейчас некоторые сервисы могут дать список одноразовых паролей которые вы можете записать на бумажку.

Сегодня я хочу отметить только TOTP. На мой субъективный взгляд (который разделяют многие сесурити эксперты) это отличный способ двухфакторной авторизации обладающий наилучшим соотношением безопасность/удобство.

Его достоинства:

  • Не заканчивается как список одноразовых кодов.
  • Невозможно перехватить в отличии от SMS.
  • Не нужно подключения к интернету или мобильной связи, нужно только примерно верное время на девайсе.
  • Ничего не стоит в отличии от HOTP.
  • Можно бэкапить и копировать всюду за 0 рублей.

Вот ради последнего пункта весь пост и пишется =)

Каждый раз когда вас просят воспользоваться Google Auth™©Ⓡ, вы можете воспользоваться ЛЮБЫМ другим приложением. А приложений которые обладают данным функционалом множество, в основном для мобильных устройств, но и на десктоп есть. И во многих таких приложениях есть кнопка backup которой я вам рекомендую пользоваться)

Для 2FA с помощью TOTP кодов вам подойдут следующие приложения:

  • Почти любой современный менеджер паролей типа 1Password или Bitwarden, они не только в обычные пароли умеют. От себя порекомендую Bitrwarden, он хороший.
  • Aegis для Android. Потрясающее приложение. Читает много форматов бэкапа, может само делать шифрованные бэкапы, успешно проходило аудиты кода, полностью open-source и доступно из F-Droid.
  • Authy для iOs. На самом деле я ничего про него не знаю, это просто первый комент из треда на реддите) Встроенный менеджер паролей тоже может в TOTP и наверное даже бэкапит это всё в эпл-облако.
  • cotp для Linux. Маленькая консольная штучка которая хранит мои OTP ключи.
  • Что-нибудь другое по запросу "TOTP app for %platform_name%" в гугле.

Важно отметить: когда вы храните пароль и TOTP код в одном менеджере паролей (1Password, Bitwarden), вы всецело полагаетесь на него. Это ломает саму идею двухфакторной авторизации, потому что доступ к вашим данным можно получить через 1 фактор — ваш менеджер паролей. Не то чтобы это много кого реально волнует, менеджеры паролей неплохо защищены, но если вам действительно важна безопасность, не стоит класть все яйца в одну корзину.

Разберём TOTP код

Зайдём на например на Github.

вот так github предлагает авторизоваться через Authenticator app
вот так github предлагает авторизоваться через Authenticator app

Надо отдать им должное, эти ребята не принуждают вас к Google Auth, а напротив дают кучу альтернатив. Хочется их похвалить, но сдаётся мне просто Microsoft хочется немного подвинуть гугл)

Давайте теперь глянем внутрь QR кода. Вот такую строчку можно получить если прочитать QR любой читалкой (secret изменён)
otpauth://totp/GitHub:GRbit?secret=PLT14N8BQAOPOLXF&issuer=GitHub

Вот собственно и всё. Даже если вы пользуетесь олдскульным KeePass2, вы можете забэкапить эту строку и этого будет достаточно. Можно этот код сканировать бесконечным количеством приложений, копировать в менеджеры паролей, записывать на бумажке и лепить на монитор.

Иногда чтобы ваше приложение прочитало подобный код оно должно быть в каком-то особом формате, но в целом вы можете это конвертнуть обратно в QR-code даже из командной строки линукса.

echo 'otpauth://totp/GitHub:GRbit?secret=PLT92N5BQBOUZLFF&issuer=GitHub' | qrencode -t UTF8
echo 'otpauth://totp/GitHub:GRbit?secret=PLT92N5BQBOUZLFF&issuer=GitHub' | qrencode -t UTF8

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

Ну... кажется это всё. Такая вот коротенькая просвет статья про секурити, надеюсь кому-то было полезно.

Спасибо большое @Magistr за идею и что вычитал текст)

13 комментариев 👇
Roman Y. Bogdanov Principal Infrastructure Engineer - NOC - Network Operations Center 3 апреля в 09:38

достать из гугла https://github.com/scito/extract_otp_secrets

храню в keeps xc + topt

vvatin Немножк devops-инженер 2 апреля в 15:44

Добавлю немного про macos. В экосистеме apple есть встроенный TOTP, который синхронизируется на все девайсы. Вытащить secret оттуда можно через десктопный safari (file>export>passwords). В сохраненном csv будут все пароли в plaintext, secret'ы для TOTP в том числе.

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

  Развернуть 1 комментарий

@SuperPrower, простите, я слишком стар и упомянул KeePass2 =)

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

  Развернуть 1 комментарий

@grbit, да и сервер у них можно на своих ресурсах поднять, vaultwarden легок и бесплатен.

  Развернуть 1 комментарий

@vvatin, что я и делаю)
Но я думаю обычным людям это только лишний гемор. Всё равно на сервере всё зашифровано, так зачем им это? Только если нужно пароли на много людей шарить "организации" делать и т.д.

  Развернуть 1 комментарий

Да, тоже часто сталкиваюсь с этим заблуждением.

Правда, в статье больше про то, когда ты только включаешь второй фактор.

А если уже добавлен, то для получения qr большинство сайтов требуют сбросить и добавить заново.

Google Authenticator, например, позволяет экспортировать код для переноса на другое устройство.

  Развернуть 1 комментарий

@bnn, я точно не горю желаниепытаться описать экспорт из всех позможных приложений хранилищ TOTP кодов. Мне вобще кажется что достаточно сказать "можно бэкапить" и это уже людям глаза открывает)

  Развернуть 1 комментарий

Декодировать QR не нужно: везде есть альтернатива "показать код" (на скрине с гитхаба это ссылка setup key), там ровно та же строка.

Дальше вне зависимости от платформы и любви к Safari - просто кидаем этот код себе в сохраненки telegram (и не забываем включить в tg блокировку приложения кодом/пальцем).
А вот если этого не сделать, то да: вместе с телефоном пока-пока авторизация; я так однажды месяц ждал восстановления.

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

  Развернуть 1 комментарий

@ppavel, github молодцы на самом деле, но сам код, увы, не всегда есть в текстовом виде. Это уже почти становится мйенстримом, но пока я сталкиваюсь с сервисами где выбора не дают.

  Развернуть 1 комментарий

Можно ли забекапить коды, уже загруженные в Google Authenticator? Рецепт из https://github.com/replydev/cotp?tab=readme-ov-file#migration-from-other-apps не работает, на моем телефоне нет такой папки.

  Развернуть 1 комментарий

@glader, Да, конечно. Слева сверху в меню есть пункт.

  Развернуть 1 комментарий

Authy для iOs. На самом деле я ничего про него не знаю, это просто первый комент из треда на реддите

Пользуюсь им много лет и могу кратко рассказать. Бэкапит и синхронизует через своё онлайн хранилище. Авторизация по телефону+паролю (как в телеге). Недавно перестали поддерживать десктопное приложение для макоси.

Твилио, разработчик, кажется, не очень чисты в плане репутации. Но в целом приложение пока норм и относительно удобное. Сравнивать с гугловым аутентификатором не могу, ибо он за годы сильно развился, а мне лень перевыпускать секреты. Так что вот скрин: i.vas3k.club/9503d3d00eee2b62eb9474141e6151e278b8343d9452b39e210741af5cb75e91.jpg

(сорян, я не разобрался, как его сделать поменьше или не картинкой, ссылка всё равно конвертится в img)

Тоже можно вытянуть секреты: https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93

  Развернуть 1 комментарий

😎

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

Что вообще здесь происходит?


Войти  или  Вступить в Клуб