Как зайти в Slack-пространство Хекслета (и не только) с черного хода, деликатно проигнорировав неявное требование о наличии смартфона.
- О двухфакторной аутентификации
- Так что же тут не так?
- ...дело рук самих утопающих
- Так что же это?
- И вот наконец-то практика: как работать с KeePassXC
- Вы великолепны
- Но как же альтернативы?
- P.S.
В этой статье рассказывается про старое комьюнити Хекслета в Slack. Теперь мы переехали в Telegram, куда точно не обязательно пользоваться двухфакторной аутентификацией.
Задавать вопросы и особенно отвечать на них — вот самая интенсивная часть обучения, как считают на Хекслете и не только. Помимо встроенного в сам сайт движка обсуждений с удобной группировкой по курсам и урокам, в Хекслете предлагают всем студентам присоединиться к чат-пространству, созданному на известной закрытой централизованной платформе Slack. В некотором смысле это тоже можно считать частью процесса обучения — Slack довольно популярен среди IT-компаний. Хорошо это или плохо, но выпускнику Хекслета весьма вероятно придётся встречаться с ним и в будущем, если тот решит продолжать идти по пути программиста.
Но так ли легко туда попасть? Помимо инспирированного историческими событиями решения о фильтрации некоторых диапазонов IP-адресов на этапе регистрации, существует и ещё одно затруднение. Причём оно явно не задумывалось как преграда, и даже напротив, призвано сделать Slack более защищённым. Речь идёт о двухфакторной аутентификации, которая активирована в обязательном порядке для всех получивших приглашение от Хекслета.
О двухфакторной аутентификации
Принцип двухфакторной аутентификации, или сокращённо 2FA, подразумевает применение помимо классической пары логина и пароля, которые теперь считаются первым фактором аутентификации, дополнительного второго фактора. Его отличие от первого — в непостоянности, или зависимости от времени, говоря иначе. Если логин и пароль как правило статичны — смена пароля чаще всего происходит вручную по инициативе пользователя, а логин в ряде случаев и вовсе поменять невозможно, — то второй фактор сменяется автоматически через небольшие отрезки времени. Достигается это при помощи дополнительного секретного ключа, из которого впоследствии по заранее известному алгоритму будут генерироваться так называемые одноразовые пароли — по крайней мере так, если говорить в самых общих чертах, устроен протокол TOTP (Time-based one-time passwords).
Кстати, для его корректной работы время на сервере и на клиентском устройстве должно быть синхронизировано, так как одним из аргументов функции генерации одноразового пароля является именно текущее точное время. Главная идея такого непостоянного фактора состоит в практической невозможности его подбора за отведённое время, что должно крайне затруднить неаутентифицированный доступ к защищённому вторым фактором аккаунту даже при утечке либо подборе «первого фактора» — логина и пароля.
Читайте также: Защищает от хакерских атак и повышает производительность: что такое обратный прокси
Так что же тут не так?
Классическая реализация клиента для протокола TOTP выглядит как приложение для современных смартфонов, которые и будут хранить вышеупомянутый дополнительный секретный ключ, а также генерировать одноразовые коды по запросу пользователя. Их характеристики практически идеальны для подобной задачи: они способны синхронизировать собственные часы с серверами точного времени, их вычислительной мощности с избытком достаточно для реализации алгоритма, а их размеры и типичный сценарий использования подразумевают, что «второй фактор» будет всегда под рукой. Возможность защиты аккаунта при помощи TOTP остаётся приятной возможностью для пользователя — ровно до тех пор, пока её использование не становится обязательным. Именно так настроено Slack-пространство Хекслета. К тому же теперь, после того, как целый GitHub анонсировал плавный переход на обязательную 2FA, проблема встала ещё острее.
...дело рук самих утопающих
Однако выход есть. К счастью, TOTP является открытым и документированным стандартом, что даёт возможность независимым программистам создавать собственные реализации протокола. Помимо альтернативных смартфонных реализаций (совпадение или нет, но документация Slack словно бы из корпоративной солидарности обходит стороной абсолютно все свободные реализации, такие как Mauth, Aegis, andOTP, FreeOTP+ и другие), существуют свободные варианты и для десктопа. Того самого десктопа, с которого вы сейчас читаете этот текст.
Так что же это?
Ответ прост: менеджеры паролей. Почти все так или иначе сталкивались с проблемой запоминания или хранения паролей в надежном месте, и возможно даже решили ее при помощи того или иного менеджера паролей. Один из них, универсальный графический менеджер паролей под названием KeePassXC, помимо основной функции, также содержит реализацию протокола TOTP, позволяя хранить в зашифрованной базе паролей в том числе и необходимый для TOTP секретный ключ.
И вот наконец-то практика: как работать с KeePassXC
KeePassXC содержится в репозиториях многих дистрибутивов, скорее всего вы найдете свой в списке. А если нет — смотрите варианты установки на официальном сайте. Итак, предположим, что KeePassXC уже установлен.
Создаём базу данных
KeePassXC хранит пароли и секретные ключи в зашифрованной локальной базе данных формата KDBX. Для работы с программой её необходимо создать.
Если вы не уверены в тонких параметрах, с которыми вы хотите шифровать вашу будущую базу с паролями, можете остановиться на предлагаемых по умолчанию настройках.
Для инициализации базы данных необходим придуманный вами мастер-пароль — естественно, чем более сложным он будет, тем лучше. Разумеется, восстановить его будет принципиально невозможно. О выборе запоминающихся и в то же время сложных для подбора паролей сказано уже достаточно, добавим лишь такой прием: чтобы убедиться, что вы запомнили пароль как следует, создайте новую базу данных и сразу же закройте ее, ничего пока не записывая. Если на следующий день вы сможете вспомнить пароль — можно начинать пользоваться. Ну а если не сможете, потерять пустую базу будет не страшно.
Дизайнеру интерфейсов на заметку: желтый цвет фона в поле подтверждения пароля будет означать, что пароль и подтверждение еще не совпадают, но в уже введённой части подтверждения ошибок нет, красный — что подтверждение и пароль совпадать перестали.
Создаем новую запись
Записи в KeePassXC организуются в иерархическую структуру, вы можете организовывать и сортировать записи любым удобным вам образом. Создаём новую группу — назовем ее Хекслет, и добавляем в него новую запись — назовем ее Slack.
Каждая запись соответствует одному аккаунту и может содержать несколько полей. То есть в одну запись можно сохранить как пароль от аккаунта, так и секретный ключ для TOTP. Разумеется, такой подход до некоторой степени нивелирует преимущества 2FA, принцип которой подразумевает отделение второго фактора от первого чем-то вроде относительного «воздушного зазора». Однако хранение ключей и паролей в зашифрованном виде в свою очередь сводит на нет главные недостатки такого подхода, по-прежнему оставляя в силе преимущество в виде невозможности простого подбора второго фактора. Но для дополнительной безопасности ключ TOTP можно сохранять в отдельной базе или даже на отдельном компьютере. Баланс между удобством и безопасностью всегда непрост, впрочем.
Добавляем TOTP
Теперь, когда запись создана, остается только добавить в неё секретный ключ. Для удобства использования вместе со смартфоном ключ TOTP (и некоторая дополнительная информация) обычно выводится в виде QR-кода. Конечно, распознать QR-код с картинки могут и некоторые свободные десктопные программы. Но Slack способен отдать ключ и в чистом текстовом виде, чем мы и воспользуемся.
Когда Slack предложит просканировать QR-код с параметрами — деликатно отказываемся, нажав на ссылку с надписью "Can't scan this barcode" (на скриншоте выделена жёлтым). Копируем открывшийся TOTP-ключ (набран малиновым моноширинным шрифтом) и переходим в KeePassXC. Там открываем контекстное меню нашего аккаунта в Slack, открываем пункт TOTP и выбираем «Настроить TOTP». Действуем без лишней спешки, но и без промедления! Slack не будет хранить один и тот же неподтверждённый TOTP-код вечно, и через какое-то время сгенерирует новый.
Далее вставляем скопированный ключ в соответствующее поле. Оставляем параметры по умолчанию — в Slack используются именно те параметры, что описаны в RFC 6238.
Активируем TOTP
Вот и все! Осталось лишь ввести сгенерированный код в Slack в первый раз, чтобы подтвердить, что мы все настроили правильно.
Вы великолепны
Готово! Мы только что зарегистрировались в Slack, используя лишь свой десктоп и свободные программы. Не ждите, пока барьеры и препоны расступятся перед вами — ищите пути обхода, и да пребудет с вами сила!
Но как же альтернативы?
Всецело зависеть от возможностей одной программы, пусть даже и качественной — не самая лучшая идея. На всякий случай лучше держать под рукой или хотя бы в уме пару возможных вариантов. Те, кто ищет альтернативы, или же предпочитает простоту и лаконичность текстовых интерфейсов, могут настроить и опробовать связку из pass и oathtool, двух отдельных консольных утилит в стиле Unix. К тому же это отличная возможность попрактиковаться в работе с консолью, если вы познакомились с ней лишь недавно.
P.S.
Возможно, вы обратили внимание, что в этой статье ни слова не сказано о настройке 2FA на GitHub, несмотря на относительно свежий новостной повод. О причинах такого решения вы (возможно) узнаете в одной из следующих статей. Подписывайтесь, комментируйте... так, стоп, не будем забегать вперёд!
Продолжайте учиться: На Хекслете есть несколько больших профессий, интенсивов и треков для джуниоров, мидлов и даже сеньоров: они позволят не только узнать новые технологии, но и прокачать уже существующие навыки