Повестка дня и протокол совещания 08.06.2023 по последующим действиям и профилактике
Чтобы собрание было продуктивным, мы пригласили узкий круг участников. от сообщества, в основном люди, работающие над репозиториями модов, и люди, которые помогали организовать реагирование на инцидент.
Встреча была записана и отредактирована, чтобы включить идентификаторы говорения. Вы можете посмотреть запись на YouTube или PeerTube.
2023-06-08 16:00 UTC
Руководители совещания:
- Emi (первоначальный обнаружитель, организатор)
- Jasmine (органзизатор)
Секретарь собрания/протокол:
- williewillus (журналист происшествий; Violet Moon)
Члены сообщества (В алфавитном порядке):
- Adrian (Modrinth)
- cpw (Forge)
- Doctor Oyster (Руководитель команды сообщества Overwolf)
- Emma (Modrinth)
- Fury (Глава Overwolf)
- gdude (Quilt)
- Geometrically (Modrinth)
- IMS (CaffeineMC)
- Jared (BlameJared Maven)
- kennytv (PaperMC)
- Mikey (FTB)
- modmuss (Fabric)
- Slowpoke (FTB)
- Starchild (Quilt)
- timoreo (Prism Launcher)
- ZekeZ (Prism Launcher)
(в основном это делается для того, чтобы посетители могли быстро их понять - это не нужно читать вслух или что-то в этом роде)
fractureiser
это новый самовоспроизводящийся вирус, который заражает плагины Bukkit, Forge Mods, Fabric Mods и ванильные jar-файлы Minecraft. Зараженные jar-файлы после загрузки будут работать как обычно, но автоматически загружают серию полезных нагрузок, которые крадут токены входа, сохраненные пароли браузера / платежную информацию и криптовалюту. После заражения компьютера каждый применимый jar-файл в скомпрометированной системе будет заражен, так что если они станут общими и запущены на другом компьютере, заражение будет распространяться. Скомпрометированные токены входа CurseForge использовались для получения доступа к крупным проектам модов и распространения зараженных файлов jar среди пользователей.
Обсуждение и ответы на этот вопрос начались всерьез 6 июня. Образцы постепенно обнаруживались, идентифицировались и декомпилировались. Источник полезной нагрузки, которая распространяет вредоносное ПО и крадет пароли/токены, был идентифицирован и быстро удален его хостом, Serverion. Зараженные jar-файлы больше не могут распространяться или распространять вредоносное ПО, но инфекции, возникшие до того, как узел был отключен, все еще могут быть активны.
На момент написания статьи, образцы продолжают подвергаться реинжинирингу в надежде, что, если злоумышленники попытаются создать новую итерацию вредоносного ПО, его хосты управления и контроля можно будет вывести из строя как можно быстрее. 7 июня злоумышленник попытался создать новый узел, который снова был быстро отключен его хостом. Веб-URL, указывающий на этот ныне несуществующий узел, был найден и активно отслеживается.
У нас есть около часа, поэтому давайте потратим максимум 15 минут на каждую тему. я организовал темы по моему (виллиевиллусовскому) чувству вероятности того, что произойдет что-то действенное. чем менее реалистично что-то, тем оно ниже. Если время ограничивает нас, мы можем отказаться от этих темы.
- Что CurseForge/Modrinth делает при просмотре мода?
- Вставьте мем "что ты здесь делаешь" :)
- Какие автоматические проверки используются?
- ?
- Какие автоматические проверки следует внедрить?
- Статический анализ?
- Можем ли мы получить репозитории модов для выполнения этих планов действий?
- Semi-OT: Можем ли мы получить алгоритм контрольной суммы (checksum), отличающиеся от MD5, для CF? MD5 был
известный сломан в течение многих лет, и это заставило нас опасаться попыток редактирования/коллизии атак для дольшего, чем необходимо
- Что использует Modrinth?
Протокол:
Fury: генеральный директор Overwolf. Eng работает над противодействием, так что я здесь Re: проверки. С точки зрения высокого уровня. Не хочу быть слишком открытым о проверках потому что люди могут найти способы обойти. Поймите, что двусмысленность вызывает беспокойство, поделюсь чем смогу. Все моды имеют автопроверки. Ручная проверка для некоторых. Технически, начните с сканирования антивирусом/антивредоносным ПО. Проверить тип файла/соответствие файловой структуре. API фактически поддерживает SHA-1. Больше улучшений на стороне клиента, чтобы обеспечить это в хорошем смысле. Ручная проверка, когда автоматическая проверка отмечает это, человек проверяет мод. Изменение текста/изображений также требует ручного просмотра. Постоянно развивающийся процесс, обновлены автоматические тесты для поиска этой уязвимости.
Emi: Переходим на Modrinth, чтобы всё было быстро
Geo/Jay: Основатель Modrinth. Наша модерация довольно жесткая. Новый проект: проверка вручную. Проверьте описание, изображения. Также проверьте исходный код, особенно. для новых/неизвестных авторов. Закрытый исходный код, иногда декомпилирует моды, но не часто. Проверяет на бэкенде файловую структуру. Вредоносное ПО в модифицированном MC обычно никогда не обнаруживается антивирусом. Отклоняли моды в прошлом из-за подозрительного кода. Поймите, этот процесс ошибочен. После первоначального рассмотрения мы впоследствии полагаемся на отчеты. Наш код с открытым исходным кодом, нам нужен прозрачный инструмент, который может использовать сообщество. Полагается на доверие сообщества (известный автор), но это тоже ошибочно.
Emi: Когда вы проверяете моды с открытым исходным кодом, вы проверяете, соответствует ли источник jar-файлу?
Geo: Нет, но мы могли бы сделать так, чтобы пользователи могли загружать источник проверенного значка, как то, что недавно сделал npm. Может быть, не самый идеальный.
Emi: Какой хэш использует Modrinth?
Geo: Мы используем SHA-1/SHA-512. Доступный в API. Лаунчер который мы делаем проверяет эит. Перехэшировали все файлы в SHA-512 год назад.
Одна вещь, которая помогла бы в части ответа «сканирование на наличие поддельных модов», было, если бы мы знали, что конкретная версия мода имеет только один возможный двоичный выход. То есть, воспроизводимые сборки с учетом проверки исходного кода. Мы могли бы просто пересобрать мод в вопрос из источника, взял его хеш и сравнил с просматриваемым файлом, чтобы обнаружить инфекция стадии 0, вместо того, чтобы выполнять сложные упражнения по сканированию для подписи в коде.
Сколько наших модов имеют плагины скриптов сборки или дополнения с незакрепленными плавающими?
-SNAPSHOT
спецификатором версии в них?
Я готов поспорить на всех, потому что оба Fabric и Forge имеют примеры модов, которые делают именно это.
Плагины Gradle, такие как Loom и FG, традиционно делали это, чтобы они могли отправлять исправления и выполнять итерации быстро без действий пользователя, но сейчас важно иметь возможность аудита.
Атаки на цепочку поставок из-за случайного взлома моддинга Maven'ов — очень реальная угроза.
- Прекратите продвигать использование
-SNAPSHOT
в примерах шаблонов и документации в пользу фиксированные номера версий - Обновить Fabric-example-mod и подделать пример MDK, чтобы использовать проверку контрольной суммы Gradle и/или блокировку?
- https://docs.gradle.org/current/userguide/dependency_verification.html
- Это традиционный подход "записать хэши в файл и проверить их".
- https://docs.gradle.org/current/userguide/dependency_locking.html
- Это "заблокировать любые объявления ранжированных зависимостей, такие как
[1, 2)
, к одному конкретному версия, пока не будет сказано обновить"
- Это "заблокировать любые объявления ранжированных зависимостей, такие как
- https://docs.gradle.org/current/userguide/dependency_verification.html
- Создайте рабочую группу в Loom/FG для изучения воспроизводимых сборок, когда gradle флаг установлен. Может быть недетерминизм, введенный частями цепочки инструментов для моддинга, такими как переназначения jar-файлов. Каждый экземпляр должен быть искоренен, чтобы мод создавался воспроизводимо. из коробки.
- Сумасшедшая идея: стиль F-Droid, отправить исходный код, и он будет собран из репозитория модов?
- Дорогая емкость, вряд ли произойдет.
Starchild: Что касается Quilt, здесь есть одна проблема — подписи. Мы не можем воспроизвести подпись.
willie: Но если подпись распространяется отдельно, должно быть нормально?
Geo: Мы никогда не сможем быть в безопасности на 100%. Мы можем потратить много времени на просмотр каждого файла. Один главное доступность. Многие люди не знают, как работает Gradle/что воспроизводимые сборки есть. Шаблонные моды существуют, но даже кодовая подпись сложна для мобильных разработчиков. Мы получаем тысячи заявок в день.
Fury: Одна вещь, которую мы предлагаем, для авторов, которые решили пройти дополнительную проверку, имеют отметьте свой мод, чтобы геймеры могли видеть, чтобы повысить доверие.
Моды, загружающие внешние файлы, содержащие исполняемый код, уязвимы для атаки на цепочку поставок.
Некоторые существующие примеры модов, которые делают это:
- Essential
- Автоматический апдейтер загружает любые обновления без запроса пользователя. Если главное серверы обновлений скомпрометированы, вредоносный код будет загружен при запуске Minecraft.
- Моды, зависящие от owolib, такие как gadget
- Предложит пользователю загрузить owo-lib, который загрузит jar-файл из Modrinth. Если вредоносный jar-файл добавлен в modrinth правильной версии, он может провести атаку на цепочку поставок.
Если один из самых популярных модов, например Essential, будет скомпрометирован, это позволит вредоносным программам быстро распространиться среди миллионов пользователей.
- Должны ли быть разрешены загрузки модов, загруженных на платформы (Modrinth, CurseForge и т. д.)
файлы, содержащие исполняемый код из внешних источников?
- Я думаю, что нет, но как мы будем добиваться этого? Запусти игру с модом и проверь ничего нового в папку с модами не скачивает?
Fury: просматривайте вручную, когда мы видим, что этот шаблон происходит
willie: Но вы можете отправить вредоносный код позже
Fury: посмотрите на репутацию автора и прочие атрибуты безопасности.
Starchild: Не так уж и плохо, чтобы запретить загружать все из Интернета. Посмотреть некоторые законные варианты использования. Мы можем пометить мод на платформе как загружающий внешний код. Может иметь такие политики, как «должен делать через https» и т. д. Мы можем создать его в сообществе.
willie: Уточнение: я имею в виду загрузку кода, а не данных.
Lambda: TODO(willie, я пропустил первую половину) У Quilt было предложение сделать зависимость скачивание. В более общем плане разрешайте загрузку только того, что было объявлено заранее. (например, с хешем). Даже если мы разрешим моды, которые делают это, я все равно буду подозревать.
Бинарные артефакты, выпущенные в репозитории модов, должны быть подписаны их автором.
Шаблоны и справочные документы, например. Fabric Loom и ForgeGradle должны максимально упростить UX. возможно:
- Сборка релизов в CI
- Подписывать jar-файлы в CI во время сборки
- Загрузите подписанные jar-файлы в репозитории модов в CI.
Перенос создания релизов в CI — это уже больше, чем то, что делают многие моддеры (большинство людей не даже отмечайте их выпуски). Имейте в виду, что многие моддеры — программисты-любители, которые не работал в промышленности и не знаю, что это такое.
Я не могу не подчеркнуть, насколько важно, чтобы это было так же хорошо задокументировано, легко и готовый к использованию, насколько это возможно, иначе никто не будет его использовать.
В конце концов, репозитории модов должны требовать подписи для каждой загрузки и отклонять любые неподписанный артефакт начисто. Для этого потребуется период развертывания, и по-прежнему требуются хорошие учебные материалы.
- Где должны храниться открытые ключи и ассоциироваться с их авторами? Другими словами, что
не позволяет хакеру заменить открытый ключ, а также подписанный двоичный файл одновременно
время?
- В учетной записи пользователя modrinth (за 2FA)?
- Без учетных записей организации это может раздражать моды, которые могут быть загружены несколько человек?
- Если Modrinth скомпрометирован, хакер может заменить открытый ключ и загрузить новый подписанный ключ. бинарный одновременно
- В учетной записи пользователя modrinth (за 2FA)?
- Подписание PGP или java jarsigner?
- PGP является стандартом и используется для Maven Central. У меня сложилось впечатление, что никто не использует java конкретные вещи. Подпись OpenSSH также является опцией, но она намного новее и не имеет устоявшаяся экосистема. К сожалению, PGP, вероятно, лучший выбор. Мы можем автоматизировать избавьтесь от всех дрянных частей с помощью помощников в плагинах Gradle.
- предшествующий уровень техники
- Forge уже много лет поддерживает сигнатуры, и они не используются. Что мы можем учиться на нем?
- Лаунчеры, вероятно, должны включать элементы пользовательского интерфейса, чтобы указать статус проверки подписи мода.
- Немедленные последующие действия
- Modrinth и CurseForge разрабатывают, как будет работать ассоциация/хранилище открытых ключей.
- Загрузчики модов пишут обширную документацию о том, как:
- Создавайте релизы в CI, используя теги git
- Автоматически подписывать и загружать артефакты из CI
Emi: это не требует обязательного процесса
Starchild: Что мы хотим предотвратить здесь и где? Репозиторий модов может просто связать ключ с пользователем и потребовать его при загрузке, но принудительное выполнение/проверка также может произойти в погрузчик.
Jasmine: Недавно я загрузила в Maven Central, который обеспечивает подписание кода. Процесс был в основном безболезненно через скрипты сборки, сложнее всего было найти документы.
Emi: Ретрансляция из текстового чата, какой смысл подписываться? Основная причина заключается в выявление актеров.
cpw: Писал код для Forge, был там около 10 лет. Возможно, он обнаружил stage0 и вероятно, stage3, если подпись не была удалена. Мы хотели, чтобы люди это делали. Большинство люди в Forge используют его в наши дни. Отпечатки пальцев для подписей отображаются в журналах отладки, и т.д. Это основная цель. ИМО нужно поднять на уровень выше. Нет никакого механизма распределять доверие. Моддер может сказать, что их собственный jar хорош, но пользователь этого не сделает. Что требуется доверенный орган в экосистеме mc. Настройка одного — сложная задача. Только жизнеспособным субъектом являются CF и Modrinth, поскольку они уже отслеживают то, что вам нужно отслеживать. +1 на значках в репозиториях модов. Делать это на стороне клиента? Мы слишком поздно для этого в момент. Если бы вся экосистема была подписана, мы могли бы вернуться к ней.
Emi: Возможно ли иметь совместно контролируемый сторонний ЦС? Добавление двух шагов многовато.
cpw: вы можете подписывать сразу несколько ЦС, так что в этом нет необходимости.
Fury: Мы можем изучить это.
cpw: Если вы делаете это, это здорово :)
Geo: IMO было бы лучше, если бы это делала доверенная третья сторона. Diff платформы имеют diff политики. Modrinth тоже заинтересован в этом, но нам нужно действовать осторожно.
Emi: Готовы ли вы работать с CurseForge для стороннего ЦС?
Geo: Ага. Каждый должен отложить свои разногласия ради безопасности, хотя Modrinth не было затронуто, это все еще было косвенно, так как "
cpw: Было бы неплохо увидеть движение через 10 лет
Песочница процесса Minecraft — еще одна защитная стратегия, которую можно использовать для ограничения взрывной радиус атак, исходящих от вредоносного кода мода.
В общем, сложная проблема.
Minecraft должен иметь доступ только к:
- Интернет, для аутентификации, входа на серверы и т. д.
- Доступ файловой системы к папке экземпляра
.minecraft
и ее рекурсивным потомкам
Здесь главное заблокировать доступ к файловой системе.
В Windows, кажется, нет простой для развертывания системы песочницы (кроме «играть в рок»). Ближайший - Chromium модель что потребует значительных инвазивных изменений в игре.
В macOS мы могли использовать встроенную систему песочницы Apple, известную как "Seatbelt". Он уже применяется в магазине приложений Apple, но не во внешних приложениях, таких как Minecraft. Однако по-прежнему невозможно использовать его для ограничения сетевого доступа к определенным сайтам. Ниже приведено изображение, показывающее конфигурацию прав доступа к файлам, которую мы можем использовать для ограничения доступа. Это может оказаться достаточно хорошим для того, что необходимо для ограничения вредоносных программ и атак из кода.
В Linux у нас есть несколько вариантов. Во-первых, это SELinux/AppArmor. Эти рамки печально известны тем, что их безумно сложно настроить, и в результате они не получили широкого распространения. развернут. Тем не менее, политики, которые мы ищем, довольно просты, поэтому, возможно, это может быть проспект.
На языке OpenBSD все, что мы хотим сделать, это unveil(2)
, чтобы
все пути в корне экземпляра, но, к сожалению, этот интерфейс недоступен в Linux.
Во-вторых, использует такую систему, как Flatpak.
Тиморео: Выполнение ненадежного кода всегда небезопасно, независимо от того, в какой песочнице вы находитесь. иметь. Песочница всегда является вашим последним средством. У нас есть плоский пакет Prism, который находится в песочнице. и ограничивает много доступа. Предотвратил эту конкретную атаку. Может быть сложно, например. ты может подумать, что вы можете ограничить микрофон, но что, если мод, добавляющий голосовой чат, захочет этого? Нуждается в быть ограниченным, но предоставить свободу для моддеров. В Linux много приемов, можно ограничивать почти все.
ZekeZ: Основная проблема — Windows и macOS, особенно Windows.
Emi: Беспокойство по поводу нескольких модов. Блокировка доступа к fs может быть проблематичной для модов, которые нужны глобальные независимые от экземпляра конфигурации
ZekeZ: В чем проблема с EMI?
Emi: У пользователя есть возможность хранить вещи в ~/.minecraft, а не в инстансе. местный
timoreo: Вы можете разрешать файлы в каждом конкретном случае. В любом случае, что с сетью?
Вывод
kennytv: Привет из Paper. Некоторые пересекаются с моддингом и имеют собственный репозиторий плагинов. Было бы интересует один ремонтопригодный сканер для выявления актуального вредоносного ПО. есть куча прямо сейчас. При подписании контракта у Spoonge также было это какое-то время. Они в основном дали на это, потому что люди не знали, как им пользоваться. Очень трудно заставить новичков понять это.
Lambda: Хотелось бы увидеть хостинг модов, чтобы добавить больше 2FA. Или даже разрешить API/CI только загрузить. Это может немного раздражать, но позволяет избежать кражи токенов, что может привести к плохим результатам. загрузки. В настоящее время не знаю, есть ли у Modrinth 2FA. В CurseForge он есть, но только для выплаты. Хочется увидеть это расширенным.
Geo: Работали над 2FA до того, как это началось. Также будут разрешены токены с ограниченной областью действия (например, неподписанные билды только с этого токена, подписанные билды только с этого токена) у 2FA есть недостаток который ваш токен сеанса по-прежнему уязвим для компрометации. LTT YouTube был скомпрометирован этот. Через пару недель планирую запустить новый авторизационный материал.
Эми: Хочу отметить, что у авторов LPS была 2FA.
Вилли: Повторяю мысль о создании, подписании и выпуске в CI.
Geo: одна вещь, которую платформы должны сделать, — это общий контрольный список, когда они впервые загружают проект. На Modrinth у нас есть руководство буквально для всего. Когда мы добавили описания и значки в новый контрольный список загрузки, скорость загрузки подскочила.
Эми: Недавно реализована публикация CI. Только что скопировал еще один файл рабочего процесса Github. Этот не ремонтопригоден.
Lambda: CI — это не то, что будет делать начинающий моддер. Есть кривая обучения, чтобы моддинг: экспериментируйте, затем публикуйте, затем исправляйте вещи после того, как вы станете популярными. Это очень сложно для новичка из-за отсутствия документации для рабочих процессов моддинга. CI не действительно в пример шаблоны модов.
Jared: Принимайте знатока BlameJared с множеством проектов. Поощряйте людей как можно чаще использовать CI насколько это возможно. MDK по умолчанию просто публикует артефакт, даже не источник. Нужно больше примеров и руководства по настройке jenkins и т. д.
willie: GH Actions, наверное, проще для новичков, чем Jenkins, нет?
Jared: Не знаком с GH сейчас. Все файлы на моем maven создаются локально, не уверен как будет работать удаленная публикация.
Emi: Для многих модов Maven не обязателен. Можно использовать CurseMaven/Modrinth's знаток Полезно для модов, которые намеренно не представляют себя как API.
willie: +1, что Maven'ы второго порядка, большинство модов - это моды листового контента, которые не нужны Издательство Мавен.
Jared: CurseMaven — это не долгосрочный вариант. Никто не заметил, но CurseGradle был снято с гитхаба. Его источник исчез. Никто не заметил и не сказал об этом.
willie: общий обзор действия
Furry: Спасибо всем. Overwolf вырос за эти годы. Некоторые люди протянули руку и предоставил ценную информацию. Если у вас есть дополнительная информация, свяжитесь с нами. очень поможет.