Я иногда здесь пишу про разное не только в ML/AI, но и про другие штуки, которые мне интересны. Сейчас как раз такой случай. Вчера была одна из самых больших атак на Arch User Repository, - пользовательский репозиторий пакетов для дистрибутива Arch Linux. Были инфицированы более чем 1500 пакетов. И как-то эта атака недостаточно хорошо освещена, хотя в ней есть очень много вещей, которым можно поучиться не только пользователям арча, но и маководам, и всем-всем-всем.
Вектор атаки был следующий:
* Челы автоматически просканировали AUR, чтобы найти orphaned пакеты, - пакеты, имеющие такой статус, считаются "ничейными", и любой пользователь может их забрать под свой контроль.
* Атакующие наплодили фейковых учёток, забрали кучу orphaned пакетов под своё управление и выпустили для них вредоносный патч.
* Сам вредоносный патч ставил в систему инфицированный пакет через npm (который наверно уже пора переименовать в mpm - malware package manager)
* Вредоносный npm-пакет дальше делал всю грязь: искал на устройстве ssh-ключи, читал сохранённые в chromium-based браузерах пароли, и много всего разного. Дальше отправлял это куда-то в Интернет.
Это не проблема исключительно AUR или Arch Linux. Похожий вектор работает в npm, PyPI, Homebrew, VS Code Marketplace, GitHub Actions. Меняется только экосистема. Так что выводы - для всех. Вот, например, в этом году LiteLLM компрометировали.
Мораль какая:
1. Ставьте как можно меньше всего в вашу хост-систему. Почти весь софт, в том числе клиентский, нужно запускать в нормальных сандбоксах. Если вы пишете код, то вы его потом запускаете где-нибудь в докере, верно? Вот для клиентского софта это тоже актуально. Если пакет есть в Flatpak (актуально почти для всех пакетов), - ставьте его через Flatpak, а затем дополнительно затягивайте ему гайки через Flatseal. Чем меньше прав имеет приложение - тем лучше, тем меньше оно нанесёт вреда, если будет компрометировано. Если вдруг чего-то нет во флатпаке - напишите манифест сами, дайте приложению минимум прав, в этом сейчас вам поможет любой клод код. В идеале в хост-системе должна жить только ваша система (включая десктоп), необходимые драйвера, штуки для запуска всего остального в сандбоксах.
2. Если вы используете AUR - обязательно проверяйте все диффы перед обновлениями любого пакета оттуда. Такую возможность предоставляют каждый AUR Helper - не ленитесь! Разработчики сами настоятельно рекомендуют так делать. AUR всегда был исключительно user-maintained ресурсом, без своей модерации, работающей по принципам "любой может загрузить свой пакет, любой может установить чужой пакет, всё at your own risk". И это в целом работало, ведь по умолчанию просто так поставить пакет из AUR нельзя, нужно вручную зайти в документацию, прочитать что это такое, увидеть красную большую надпись про возможные риски, вручную поставить какой-нибудь пакетный менеджер с доступом до AUR, в общем, отдать отчёт тому, что ты делаешь. Но современные дистрибутивы на базе Arch Linux, такие как CachyOS, решили включать в себя AUR Helpers по умолчанию, поэтому пользователи начали всё чаще воспринимать AUR как какой-то 'базовый минимум, да и чё с ним будет, несколько лет оттуда пакеты ставлю и ничё'. Ну вот, собственно, к чему это и привело. Всегда знайте что вы устанавливаете, откуда, и какой уровень доверия к этому 'откуда'. То же самое относится к PPA в Ubuntu и прочим 3rd party экосистемам.
3. Защищайте SSH-ключи пассфразами, используйте хардварный ключ. YubiKey и пассфраза сможет спасти вас, если даже базу вашего менеджера паролей и ключики сольют, - без физической части паззла они будут просто тыквой.
4. Используйте дев-контейнеры. Это защитит вас от малварей в PyPI/npm/... . Агентов тоже прячьте в дев-контейнеры: вот пример с клод кодом.