Маленькая железка, которая защищает вас (пользователей моих интеграций)
Программист компании GitHub установил вредоносное расширение для VS Code, которое помимо прочего выкрало SSH-ключи для доступа к внутренним репозиториям. Ранее похожим образом были скомпрометированы компьютеры двух работников компании OpenAI.
Как эти новости связаны с man smart-home и зачем нужна эта странная «флешка»?
Разработчики ПО — цель для кибератак
А как вообще разраб GitHub умудрился установить подозрительное расширение? Разве он не понял, что это вирус?
Речь идёт о расширении Nx Console, которое не вызывает подозрений:
- Этот проект существует уже более 5 лет.
- У Nx Console хорошие оценки и полмиллиона скачиваний.
Как же так получилось, что такое популярное расширение оказалось зловредным?
Автора Nx Console взломали и от его имени выпустили вредоносное обновление, а ничего не подозревающие пользователи просто его скачали. Одним из таких пользователей оказался сотрудник компании GitHub.
Такая схема взлома называется Supply Chain Attack (атака на цепочку поставок): злоумышленники не атакуют жертву напрямую, а проникают в систему через сторонних поставщиков ПО или подрядчиков, которым организация доверяет.
Вы — конечная цель атаки
Скорее всего, вы знаете, что я автор интеграций для Home Assistant (и не только). Возможно, вы даже пользуетесь, например, аддоном CloudPub или интеграцией с YandexGPT.
Мои проекты не такие популярные, как Nx Console, и для злоумышленников я не настолько желанная цель, как сотрудники GitHub или OpenAI. Тем не менее хакеры всё равно могут заинтересоваться моей персоной: потому что через меня можно подобраться к вам — к пользователям моих интеграций.
Гипотетически, чтобы выпустить вредоносное обновление от моего имени, злоумышленникам нужно получить доступ:
- К моему аккаунту на сайте GitHub.com*;
- Или к SSH-ключу для доступа к репозиториям.
*Недавний взлом сотрудника GitHub мои проекты не затронул — пострадали только внутренние репозитории компании. Переживать не о чем.
Как я защищаю себя и вас?
Чтобы организовать работу над проектами удобно и безопасно, я приобрёл аппаратный ключ YubiKey 5 Nano. Эта маленькая штука обеспечивает безопасный доступ к репозиториям и аккаунту на GitHub, а ещё подписывает код цифровой подписью.
Защита доступа к репозиториям
Для публикации кода используется протокол SSH. Доступ по SSH не требует логина и пароля, но вместо них нужен приватный ключ.
Хранить его можно по-разному:
- SSH-ключ можно сохранить на диске в открытом виде, но рано или поздно его сопрут. С этим ключом злоумышленники смогут выпустить вредоносное обновление и скомпрометировать всех по цепочке.
- Более безопасный вариант — зашифровать ключ паролем или положить его в KeePassXC. Безопасно, но придётся часто вводить пароль.
- А если не хранить ключ на диске вообще, то получим максимально безопасный вариант.
И вот аппаратный токен — это и есть тот самый максимально безопасный вариант. Потому что извлечь приватный ключ из YubiKey невозможно.
Генерация и хранение ключа происходят внутри защищённого крипто-процессора, а сам ключ никогда не покидает пределов чипа. Поэтому его нельзя скопировать — тем более удалённо.
Сам девайс просто торчит из USB-порта. Когда нужно подключиться к серверу, то мне достаточно коснуться ключа пальцем, чтобы он одобрил соединение.
Аппаратные токены — это отличный баланс между удобством и безопасностью. Вместо ввода пароля — одно касание, вместо хранения на диске — чип, который не склонировать.
Помимо доступа к репозиториям на GitHub, аппаратные токены можно использовать для подключения к любым серверам по SSH. В последних версиях OpenSSH уже есть поддержка FIDO2, хотя в интернете до сих пор полно инструкций, где для SSH предлагают использовать PIV.
Единственное, что мои пользователи должны знать
Цифровая подпись — это то, как можно отличить мои коммиты от фальшивых.
К своему GitHub-аккаунту я привязал публичный GPG-ключ. Когда я подписываю коммит касанием YubiKey — GitHub сверяет подпись и показывает зелёную отметку Verified. Без физического доступа к моему токену такую подпись не сделать.
Если вы пользуетесь моими интеграциями и вдруг замечаете подозрительное обновление, то не поленитесь и зайдите на страницу проекта. В описании релиза должна быть зелёная отметка рядом с хэшем коммита — это значит, что коммит подписан моим приватным ключом.
Защита доступа к аккаунту
Всё, что я описал выше — это специфические программистские штуки. А вообще аппаратные ключи чаще используют для авторизации на сайтах (FIDO). Правда свой YubiKey я приобрёл не для этого. 🙂
Потому что двухфакторной аутентификации по TOTP-кодам достаточно для безопасного доступа к аккаунтам на сайте. Понятно, что вводить логин, пароль, а потом ещё лезть в приложение за одноразовым кодом — неудобно. Но если вы регулярно пользуетесь каким-то определённым сайтом, то процедуру авторизации нужно пройти один раз: дальше всё работает, пока не слетит сессия.
Тем не менее, раз уж у меня есть аппаратный ключ, то я его использую и для входа на сайты тоже. Процесс похож на доступ по SSH:
- Браузер запрашивает PIN-код, чтобы сайт мог посмотреть список ваших учётных записей.
- А затем нужно коснуться ключа, чтобы войти в аккаунт.
Обычно аппаратные токены настраиваются просто в дополнение к существующему способу входа. Но, например, Google предлагают программу дополнительной защиты. После вступления в программу авторизация по логину, паролю и TOTP отключается — войти можно будет только с помощью аппаратного ключа.
Выше я упомянул, что двухфакторная аутентификация — это уже безопасно, но аппаратные ключи всё равно безопаснее. 🙂 Потому что аппаратный ключ не даст вам авторизоваться на фейковом сайте githab.com или gooogle.com — токен проверяет адрес сайта, на который вы заходите.
Нужен ли аппаратный токен вам?
Этим постом я хотел показать, как защищаю свои проекты, а значит — и вас от атак по цепочке. Теперь вы знаете, на что обращать внимание, чтобы проверить подлинность моих коммитов и релизов.
Но нужен ли такой ключ лично вам? Я бы сказал, что двухфакторной аутентификации в большинстве случаев достаточно.
Google рекомендуют регистрироваться в программе дополнительной защиты журналистам, активистам, руководителям компаний и тем, кто участвует в выборах. Если вы в этом списке — задумайтесь о покупке аппаратного токена.
Единственное, в гугловый список я бы ещё добавил популярных блогеров и разработчиков open source проектов. Из-за своей публичности они часто становятся мишенью для кибератак. Я сам не настолько известен, но решил действовать на опережение. 🙂
Простые токены для авторизации на сайтах (без OpenPGP) стоят не очень дорого, но если вы пока не готовы тратить деньги на такой гаджет, то начните с создания passkey в KeePassXC или похожем менеджере паролей. Так вы хотя бы примерно поймёте что к чему.
безопасность
github
yubikey