Поиск по сайту:

Как смягчить атаки на цепочку поставок с помощью предварительной проверки


В последнее время риски атак на цепочки поставок стали очевидными после взломов SolarWinds и Codecov. Злоумышленники компрометируют поставщиков исходного кода, чтобы внедрить вредоносные источники в программные продукты.

Многие приложения загружают внешние зависимости во время процедуры сборки. Использование этих загрузок как есть может быть опасным. Как узнать, что файл на сервере не был заменен вредоносной версией?

curl https://example.com/install-script.sh | sh

Эта команда иллюстрирует простейшую атаку цепочки поставок. Внедрение сценария установки в вашу оболочку удобно, но рискованно. Если example.com был скомпрометирован, вы только что предоставили злоумышленнику беспрепятственный доступ к вашей системе.

Контрольные суммы файлов

Вы можете смягчить опасность этого подхода, проверив, соответствует ли загруженный файл известной контрольной сумме. Многие уважаемые проекты с открытым исходным кодом публикуют контрольную сумму, с которой вы можете сравнить. Запускайте файл только в том случае, если его вычисленная контрольная сумма соответствует известному вам значению.

Внедрение этой проверки в сценарии сборки может быстро стать повторяющимся. Preflight — это инструмент, который помогает вам выполнять сравнения контрольных сумм, чтобы вы могли избежать распространенных атак на цепочку поставок.

Предпечатная проверка принимает путь двоичного файла и контрольную сумму для сравнения. Если контрольная сумма файла совпадает, он будет выполнен как обычно. В противном случае команда прерывается, защищая сценарий сборки или конвейер CI от непреднамеренного включения вредоносного кода.

Использование предварительной проверки

Вы можете загрузить Preflight со страницы релизов GitHub. Инструмент также распространяется как preflight в менеджере пакетов Homebrew.

В самом простом случае Preflight можно использовать везде, где вы обычно используете | ш. Передайте еще одну команду в Preflight, предоставив контрольную сумму для совпадения, прежде чем что-либо будет выполнено.

curl https://example.com/install-script.sh | preflight run sha256=abc...123

Теперь скрипт установки будет выполняться только в том случае, если он соответствует известной контрольной сумме. Это дает вам уверенность в том, что содержимое файла не было изменено. Предварительная проверка поддерживает типы хэшей sha256, sha1 и md5.

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

Программные проверки

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

curl https://example.com/install-script.sh | preflight check sha256=abc...123

Команда завершится с кодом состояния 0, если контрольная сумма файла совпадает. Код состояния 1 будет выдан при наличии несоответствия. Preflight также выдаст сообщение об ошибке в стандартный поток вывода.

Создание хэшей с предварительной проверкой

Не все программные проекты публикуют хэши для своих выпусков. Preflight имеет встроенную поддержку для создания нового хэша, если он вам нужен для зависимости.

Скачайте файл с сайта производителя. Затем передайте его в preflight create, чтобы получить хэш содержимого файла.

wget https://example.com/install-script.sh
preflight create install-script.sh

Добавление сканирования вредоносных программ

Помимо базовых сравнений контрольных сумм, Preflight поддерживает опциональное сканирование вредоносных программ. Эта функция сканирует ваш файл на наличие известных сигнатур вредоносных программ.

Списки вредоносных программ предоставляются сторонними службами. Предпечатная проверка работает с любым текстовым файлом, содержащим список контрольных сумм известных вредоносных программ. Malshare является одним из поставщиков этих списков.

Установите переменную среды PF_FILE_LOOKUP, чтобы она указывала на местоположение вашего файла. Предварительная проверка обнаружит эту переменную и включит поиск вредоносных программ. Когда вы запускаете предварительную проверку или предварительный запуск, контрольная сумма целевого файла будет сравниваться с записями в списке вредоносных программ. Проверка не будет выполнена, если есть совпадение.

А как насчет других видов зависимости?

Preflight фокусируется на проверке статических файлов. Он лучше всего подходит для готовых бинарных загрузок, которые вы приобретаете непосредственно у поставщика.

Менее реалистично использовать Preflight с зависимостями, полученными через менеджеры пакетов. Риски, связанные с программным обеспечением, установленным через npm, Composer, NuGet или Maven, необходимо обрабатывать по-другому. Вы можете использовать функции диспетчера пакетов, такие как область действия поставщика, чтобы обеспечить установку зависимостей из доверенных репозиториев.

Предварительная проверка должна быть одним из компонентов вашей защиты от инъекций в цепочке поставок. Проанализируйте свои сценарии сборки, чтобы определить векторы вторжений, предоставляемые другими формами стороннего программного обеспечения.

Краткое содержание

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

Предпечатная проверка упрощает проверку безопасности сторонних скриптов и двоичных файлов. Однако есть определенная ирония: используя Preflight, вы становитесь зависимым от стороннего пакета, который вам нужно будет загрузить. Вы можете смягчить это, самостоятельно собрав Preflight из исходного кода и разместив двоичный файл на внутреннем сервере, которому вы доверяете.