
safe-chain v1.5.16
Защититесь от вредоносного кода, устанавливаемого через npm, yarn, pnpm, npx, pnpx, pip, uv и poetry, с помощью Aikido Safe Chain. Бесплатно, токены не требуются.
Aikido Safe Chain
- ✅ Блокирует вредоносное ПО на ноутбуках разработчиков и в CI/CD
- ✅ Поддерживает npm и PyPI — другие менеджеры пакетов уже в разработке
- ✅ Блокирует пакеты новее 48 часов, не ломая вашу сборку
- ✅ Без токенов, бесплатно, данные о сборке не передаются
Нужна защита за пределами npm и PyPI?
Aikido Device Protection развивает идеи Safe Chain, распространяя безопасность пакетов и расширений на большее число экосистем: npm, PyPI, VS Code, Open VSX — (Cursor, Windsurf, Kiro, Vs Codium, ...), Maven, NuGet, расширения Chrome, Go, навыки ИИ Skills.sh, Ruby, Rust и другие.
Получите централизованное управление политиками, процессы запросов и согласований, а также видимость по всем рабочим станциям разработчиков в вашей организации. Работает на той же ленте Aikido Intel. Разверните вручную или управляйте через ваш MDM-инструмент (Jamf, Fleet или Iru).
Aikido Safe Chain поддерживает следующие менеджеры пакетов:
- 📦 npm
- 📦 npx
- 📦 yarn
- 📦 pnpm
- 📦 pnpx
- 📦 rush
- 📦 rushx
- 📦 bun
- 📦 bunx
- 📦 pip
- 📦 pip3
- 📦 uv
- 📦 poetry
- 📦 uvx
- 📦 pipx
- 📦 pdm
Использование

Установка
Установить Aikido Safe Chain легко с помощью установочного скрипта.
Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh
&& rm /tmp/install-safe-chain.sh
### Windows (PowerShell)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
Remove-Item $installer -ErrorAction SilentlyContinue
throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer
Remove-Item $installer
Команды установки выше всегда ссылаются на конкретный релиз. Чтобы установить другую версию, замените версию на нужный вам номер версии. Все доступные версии находятся на странице релизов.
Целостность загрузки
Скрипты установки отдаются по URL версионированного релиза (releases/download/1.5.20/...). Релизы GitHub неизменяемы — после публикации артефакта по версионированному URL его нельзя изменить или заменить, поэтому загружаемый файл гарантированно является именно тем, что было выпущено.
Проверка установки
-
❗Перезапустите терминал, чтобы начать использовать Aikido Safe Chain.
- Этот шаг критически важен, так как он гарантирует, что псевдонимы оболочки для npm, npx, yarn, pnpm, pnpx, rush, rushx, bun, bunx, pip, pip3, poetry, uv, uvx, pipx и pdm загружены корректно. Если вы не перезапустите терминал, псевдонимы не будут доступны.
-
Проверьте установку, выполнив команду проверки: ```shell npm safe-chain-verify pnpm safe-chain-verify pip safe-chain-verify uv safe-chain-verify
Any other supported package manager: {packagemanager} safe-chain-verify
- Вывод должен отображать "OK: Safe-chain works!", подтверждая, что Aikido Safe Chain правильно установлен и работает.
-
(Необязательно) Проверьте блокировку вредоносного ПО, попытавшись установить тестовый пакет:
Для JavaScript/Node.js: ```shell npm install safe-chain-test
Для Python: ```shell pip3 install safe-chain-pi-test
- В выводе должно быть видно, что Aikido Safe Chain блокирует установку этих тестовых пакетов, так как они помечены как вредоносные.
При выполнении команд `npm`, `npx`, `yarn`, `pnpm`, `pnpx`, `rush`, `rushx`, `bun`, `bunx`, `pip`, `pip3`, `uv`, `uvx`, `poetry`, `pipx` и `pdm` Aikido Safe Chain автоматически проверяет пакеты, которые вы пытаетесь установить, на наличие вредоносного ПО. Он также перехватывает вызовы модулей Python для pip, когда это возможно (например, `python -m pip install ...`, `python3 -m pip download ...`). Если обнаружено вредоносное ПО, он предложит вам прервать выполнение команды.
Проверить установленную версию можно, выполнив:```shell
safe-chain --version
Как это работает
Блокировка вредоносного ПО
Aikido Safe Chain работает путём запуска лёгкого прокси-сервера, который перехватывает загрузки пакетов из реестра npm и PyPI. Когда вы запускаете команды npm, npx, yarn, pnpm, pnpx, rush, rushx, bun, bunx, pip, pip3, uv, uvx, poetry, pipx или pdm, все загрузки пакетов направляются через этот локальный прокси, который проверяет пакеты в реальном времени с помощью Aikido Intel - Open Sources Threat Intelligence. Если в каком-либо пакете обнаружено вредоносное ПО (включая глубокие зависимости), прокси блокирует загрузку до того, как вредоносный код достигнет вашей машины.
Минимальный возраст пакета
Safe Chain применяет проверки минимального возраста пакета к поддерживаемым экосистемам.
Текущее применение различается в зависимости от экосистемы:
- менеджеры пакетов на основе npm:
- во время обычного разрешения пакетов Safe Chain подавляет версии, которые новее настроенного минимального возраста, из метаданных пакета, возвращаемых реестром
- для прямых запросов на загрузку пакетов, которые обходят этот поток метаданных, Safe Chain может заблокировать сам запрос, используя кэшированный список недавно выпущенных пакетов
- менеджеры пакетов Python:
- во время разрешения пакетов Safe Chain подавляет слишком новые файлы и релизы из ответов метаданных PyPI
- для прямых запросов на загрузку пакетов, которые обходят этот поток метаданных, Safe Chain может заблокировать сам запрос, используя кэшированный список недавно выпущенных пакетов
По умолчанию минимальный возраст пакета составляет 48 часов. Это обеспечивает дополнительный уровень безопасности в критический период, когда недавно опубликованные пакеты наиболее уязвимы к содержанию необнаруженных угроз. Вы можете настроить этот порог или полностью обойти эту защиту — см. раздел Minimum Package Age Configuration ниже.
Интеграция с оболочкой
Aikido Safe Chain интегрируется с вашей оболочкой, обеспечивая бесшовную работу при использовании npm, npx, yarn, pnpm, pnpx, rush, rushx, bun, bunx и менеджеров пакетов Python (pip, uv, uvx, poetry, pipx, pdm). Он настраивает псевдонимы для этих команд, чтобы они оборачивались командами Aikido Safe Chain, которые управляют прокси-сервером перед выполнением исходных команд. В настоящее время мы поддерживаем:
- ✅ Bash
- ✅ Zsh
- ✅ Fish
- ✅ PowerShell
- ✅ PowerShell Core
Дополнительную информацию об интеграции с оболочкой можно найти в документации по интеграции с оболочкой.
Удаление
Чтобы удалить Aikido Safe Chain, используйте наш однострочный деинсталлятор:
Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/uninstall-safe-chain.sh | sh
### Windows (PowerShell)```powershell
iex (iwr "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/uninstall-safe-chain.ps1" -UseBasicParsing)
❗Перезапустите терминал после удаления, чтобы убедиться, что все алиасы удалены.
Конфигурация
Логирование
Вы можете управлять выводом Aikido Safe Chain с помощью флага --safe-chain-logging или переменной окружения SAFE_CHAIN_LOGGING.
Параметры конфигурации
Вы можете задать уровень логирования через несколько источников (в порядке приоритета):
-
Аргумент CLI (наивысший приоритет):
-
--safe-chain-logging=silent— подавляет весь вывод Aikido Safe Chain, кроме случаев блокировки вредоносного ПО. Вывод менеджера пакетов записывается в stdout как обычно, а Safe Chain выводит только короткое сообщение, если он заблокировал вредоносное ПО и вызвал завершение процесса.npm install express --safe-chain-logging=silent -
--safe-chain-logging=verbose— включает подробный диагностический вывод Aikido Safe Chain. Полезно для устранения неполадок или понимания того, что Safe Chain делает в фоновом режиме.npm install express --safe-chain-logging=verbose
-
-
Переменная окружения: ```shell export SAFE_CHAIN_LOGGING=verbose npm install express
Допустимые значения: silent, normal, verbose
Это полезно для установки уровня логирования по умолчанию для всех команд менеджера пакетов в вашей терминальной сессии или среде CI/CD.
Логирование в файл
Вы можете дублировать вывод Aikido Safe Chain в файл журнала с помощью флага --safe-chain-log-file или переменной окружения SAFE_CHAIN_LOG_FILE. Логирование в файл отключено по умолчанию и включается при указании пути. Формат файла (--safe-chain-log-file-format) и уровень детализации (--safe-chain-log-file-verbosity) управляются независимо от вывода в терминал.
Параметры конфигурации
Задаются любым из следующих способов (в порядке приоритета):
- Аргумент CLI (наивысший приоритет): ```shell
npm install express
--safe-chain-log-file=~/safe-chain.log
--safe-chain-log-file-format=plain
--safe-chain-log-file-verbosity=normal - Переменная окружения: ```shell
export SAFE_CHAIN_LOG_FILE=~/safe-chain.log
export SAFE_CHAIN_LOG_FILE_FORMAT=plain
export SAFE_CHAIN_LOG_FILE_VERBOSITY=normal
- Файл конфигурации (
~/.safe-chain/config.json): ```json { "logFile": "~/safe-chain.log", "logFileFormat": "plain", "logFileVerbosity": "normal" }
logFileFormat — json (по умолчанию) или plain.
logFileVerbosity — silent, normal или verbose (по умолчанию). Не зависит от --safe-chain-logging.
Минимальный возраст пакета
Вы можете настроить, как долго пакеты должны существовать, прежде чем Safe Chain разрешит их установку. По умолчанию пакеты должны существовать не менее 48 часов, прежде чем их можно будет установить.
Для менеджеров пакетов на основе npm эта проверка в настоящее время имеет два режима применения:
- Safe Chain скрывает слишком новые версии из метаданных пакета во время обычного разрешения зависимостей.
- Safe Chain блокирует прямые запросы на загрузку пакетов, когда они совпадают с кэшированным списком недавно выпущенных пакетов.
Для менеджеров пакетов Python эта проверка в настоящее время имеет два режима применения:
- Safe Chain скрывает слишком новые файлы и релизы из метаданных PyPI во время разрешения зависимостей.
- Safe Chain блокирует прямые запросы на загрузку пакетов, когда они совпадают с кэшированным списком недавно выпущенных пакетов.
Параметры конфигурации
Вы можете задать минимальный возраст пакета через несколько источников (в порядке приоритета):
- Аргумент CLI (наивысший приоритет): ```shell
npm install express --safe-chain-minimum-package-age-hours=48
- Переменная окружения: ```shell
export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=48
npm install express
- Файл конфигурации (
~/.safe-chain/config.json): ```json { "minimumPackageAgeHours": 48 }
Исключение пакетов
Исключите доверенные пакеты из фильтрации по минимальному возрасту с помощью переменной окружения или файла конфигурации (оба источника объединяются). Используйте @scope/*, чтобы доверять всем пакетам организации:```shell
export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="@aikidosec/*"
### Основные возможности
- **Мониторинг в реальном времени**: Непрерывный сбор и анализ событий безопасности
- **Обнаружение угроз**: Автоматическое выявление подозрительных действий
- **Оценка рисков**: Оценка потенциального воздействия инцидентов безопасности
- **Оповещения**: Настраиваемые уведомления для критических событий
- **Интеграция**: Бесшовная интеграция с существующими инструментами безопасности
- **Отчётность**: Комплексная отчётность и аналитика
### Варианты использования
- **Мониторинг безопасности**: Отслеживание событий безопасности в режиме реального времени
- **Реагирование на инциденты**: Быстрое выявление и реагирование на инциденты безопасности
- **Соответствие требованиям**: Поддержка требований соответствия и аудита
- **Анализ угроз**: Анализ закономерностей и тенденций угроз
- **Автоматизация безопасности**: Автоматизация задач безопасности и рабочих процессов
### Начало работы
#### Предварительные требования
- Python 3.8 или выше
- Необходимые зависимости (см. `requirements.txt`)
- Соответствующие разрешения для мониторинга системы
#### Установка
```bash
# Клонировать репозиторий
git clone https://github.com/example/security-monitor.git
cd security-monitor
# Установить зависимости
pip install -r requirements.txt
# Настроить параметры
cp config.example.yaml config.yaml
# Отредактировать config.yaml под вашу среду
Базовое использование
from security_monitor import SecurityMonitor
# Инициализировать монитор
monitor = SecurityMonitor(config_file='config.yaml')
# Запустить мониторинг
monitor.start()
# Обработать события
for event in monitor.get_events():
print(f"Событие: {event}")
Конфигурация
Инструмент использует файл конфигурации YAML для настройки:
# config.yaml
monitoring:
interval: 60
log_level: INFO
sources:
- system_logs
- network_traffic
- file_changes
detection:
rules:
- name: suspicious_login
enabled: true
severity: high
- name: file_modification
enabled: true
severity: medium
alerts:
email:
enabled: true
recipients:
- [email protected]
webhook:
enabled: false
url: https://example.com/webhook
Архитектура
Инструмент состоит из нескольких ключевых компонентов:
- Сборщик событий: Собирает события безопасности из различных источников
- Механизм обнаружения: Анализирует события на предмет закономерностей угроз
- Оценщик рисков: Оценивает уровень риска инцидентов безопасности
- Система оповещений: Отправляет уведомления о критических событиях
- Модуль отчётности: Генерирует отчёты и аналитику
Вклад в проект
Мы приветствуем вклад в проект! Пожалуйста, ознакомьтесь с нашими рекомендациями:
- Форкните репозиторий
- Создайте ветку для функции (
git checkout -b feature/amazing-feature) - Зафиксируйте изменения (
git commit -m 'Add amazing feature') - Отправьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
Лицензия
Этот проект лицензирован под лицензией MIT — подробности см. в файле LICENSE.
Поддержка
- Документация: https://security-monitor.readthedocs.io
- Проблемы: https://github.com/example/security-monitor/issues
- Обсуждения: https://github.com/example/security-monitor/discussions
Благодарности
- Спасибо всем участникам проекта
- Особая благодарность сообществу open-source за их вклад
- Вдохновлено лучшими практиками безопасности```json { "npm": { "minimumPackageAgeExclusions": ["@aikidosec/*"] }, "pip": { "minimumPackageAgeExclusions": ["requests"] } }
## Пользовательские реестры
Настройте Safe Chain для сканирования пакетов из пользовательских или приватных реестров.
Поддерживаемые экосистемы:
- Node.js
- Python
### Параметры конфигурации
Вы можете задать пользовательские реестры через переменную окружения или файл конфигурации. Оба источника объединяются вместе.
1. **Переменная окружения** (через запятую): ```shell
export SAFE_CHAIN_NPM_CUSTOM_REGISTRIES="npm.company.com,registry.internal.net"
export SAFE_CHAIN_PIP_CUSTOM_REGISTRIES="pip.company.com,registry.internal.net"
- Файл конфигурации (
~/.safe-chain/config.json): ```json { "npm": { "customRegistries": ["npm.company.com", "registry.internal.net"] }, "pip": { "customRegistries": ["pip.company.com", "registry.internal.net"] } }
Файл конфигурации PYPI
Если вы полагаетесь на файл pip.conf для конфигурации pip, вы должны явно указать pip на него через переменную окружения PIP_CONFIG_FILE, чтобы Safe Chain мог объединить его.
Safe Chain запускает pip за своим MITM-прокси и записывает временный файл конфигурации pip для внедрения своего сертификата и настроек прокси. Когда PIP_CONFIG_FILE установлен, Safe Chain объединяет свои настройки с копией вашего файла (ваш исходный файл никогда не изменяется), поэтому ваш index-url, учётные данные и другие параметры сохраняются. Когда PIP_CONFIG_FILE не установлен, пользовательская конфигурация pip (например, ~/.config/pip/pip.conf) может быть переопределена временным файлом Safe Chain, и ваши настройки не будут учтены.
Базовый URL списка вредоносного ПО
Настройте Safe Chain для получения баз данных вредоносного ПО и списков новых пакетов с пользовательского URL зеркала. Это позволяет вам разместить собственную копию базы данных вредоносного ПО Aikido.
Параметры конфигурации
Вы можете задать базовый URL списка вредоносного ПО через несколько источников (в порядке приоритета):
- Аргумент CLI (наивысший приоритет): ```shell
npm install express --safe-chain-malware-list-base-url=https://your-mirror.com
- Переменная окружения: ```shell
export SAFE_CHAIN_MALWARE_LIST_BASE_URL=https://your-mirror.com
npm install express
- Файл конфигурации (
~/.safe-chain/config.json): ```json { "malwareListBaseUrl": "https://your-mirror.com" }
Базовый URL должен указывать на сервер, который повторяет структуру https://malware-list.aikido.dev/, включая следующие пути:
/malware_predictions.json(база данных вредоносного ПО для экосистемы JavaScript)/malware_pypi.json(база данных вредоносного ПО для экосистемы Python)/releases/npm.json(список новых пакетов JavaScript)/releases/pypi.json(список новых пакетов Python)
Файл конфигурации проекта
В дополнение к файлу конфигурации в домашнем каталоге (~/.safe-chain/config.json), Safe Chain поддерживает файл конфигурации проекта, чтобы настройки можно было зафиксировать в репозитории и использовать совместно всей командой, вместо настройки на каждой машине отдельно.
Добавьте раздел safe-chain: в файл .aikido в корне вашего репозитория (тот же файл, который используется другими инструментами Aikido; Safe Chain читает только свой раздел safe-chain: и игнорирует остальное). При обнаружении его настройки объединяются поверх файла конфигурации в домашнем каталоге: значения, заданные в конфигурации проекта, имеют приоритет, а массивы (такие как customRegistries) объединяются из обоих файлов, а не заменяются одним другим.
Из файла конфигурации проекта можно задать только следующие настройки:```yaml safe-chain: minimumPackageAgeHours: 48 npm: customRegistries: - npm.company.com minimumPackageAgeExclusions: - "@aikidosec/*" pip: customRegistries: - pip.company.com minimumPackageAgeExclusions: - requests
Такие параметры, как `scanTimeout`, `malwareListBaseUrl` и опции `logFile*`, нельзя задать из файла конфигурации проекта — они могут поступать только из конфигурации в вашем домашнем каталоге, аргументов CLI или переменных окружения.
## Пользовательский каталог установки
По умолчанию Safe Chain устанавливается в `~/.safe-chain`. Это можно изменить, передав установщику явный каталог установки. Это полезно для общесистемных установок (например, внутри образа Docker) или когда нужно избежать конфликтов с другими инструментами.
Если он задан, все данные Safe Chain (бинарный файл, shims, скрипты, конфигурация) размещаются в пользовательском каталоге вместо `~/.safe-chain`.
### Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c - \
&& sh /tmp/install-safe-chain.sh --install-dir /usr/local/.safe-chain \
&& rm /tmp/install-safe-chain.sh
Windows```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -InstallDir 'C:\ProgramData\safe-chain' Remove-Item $installer
# Использование в CI/CD
Вы можете защитить свои конвейеры CI/CD от вредоносных пакетов, интегрировав Aikido Safe Chain в процесс сборки. Это гарантирует, что любые пакеты, устанавливаемые во время автоматических сборок, проверяются на наличие вредоносного ПО перед установкой.
## Установка для CI/CD
Используйте флаг `--ci`, чтобы автоматически настроить Aikido Safe Chain для сред CI/CD. Это создаёт исполняемые shims в PATH вместо псевдонимов оболочки.
### Unix/Linux/macOS (GitHub Actions, Azure Pipelines и т. д.)```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c - \
&& sh /tmp/install-safe-chain.sh --ci \
&& rm /tmp/install-safe-chain.sh
Windows (Azure Pipelines и т. д.)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -ci Remove-Item $installer
## Поддерживаемые платформы
- ✅ **GitHub Actions**
- ✅ **Azure Pipelines**
- ✅ **CircleCI**
- ✅ **Jenkins**
- ✅ **Bitbucket Pipelines**
- ✅ **GitLab Pipelines**
## Пример GitHub Actions```yaml
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install safe-chain
run: |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- name: Install dependencies
run: npm ci
Пример Azure DevOps```yaml
-
task: NodeTool@0 inputs: versionSpec: "22.x" displayName: "Install Node.js"
-
script: | curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c - sh /tmp/install-safe-chain.sh --ci rm /tmp/install-safe-chain.sh displayName: "Install safe-chain"
-
script: npm ci displayName: "Install dependencies"
## Пример CircleCI```yaml
version: 2.1
jobs:
build:
docker:
- image: cimg/node:lts
steps:
- checkout
- run: |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- run: npm ci
workflows:
build_and_test:
jobs:
- build
Пример Jenkins
Примечание: предполагается, что Node.js и npm установлены на агенте Jenkins.```groovy pipeline { agent any
environment { // Jenkins does not automatically persist PATH updates from setup-ci, // so add the shims + binary directory explicitly for all stages. // If you installed into a custom directory, replace ~/.safe-chain with that path here. PATH = "${env.HOME}/.safe-chain/shims:${env.HOME}/.safe-chain/bin:${env.PATH}" }
stages { stage('Install safe-chain') { steps { sh ''' set -euo pipefail
# Install Safe Chain for CI
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
'''
}
}
stage('Install project dependencies etc...') {
steps {
sh '''
set -euo pipefail
npm ci
'''
}
}
} }
## Пример Bitbucket Pipelines```yaml
image: node:22
steps:
- step:
name: Install
script:
- |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- export PATH=~/.safe-chain/shims:~/.safe-chain/bin:$PATH
- npm ci
После настройки все последующие команды менеджера пакетов в вашем CI-конвейере будут автоматически защищены обнаружением вредоносного ПО Aikido Safe Chain.
Пример конвейеров GitLab
Чтобы добавить safe-chain в конвейеры GitLab, необходимо установить его в образе, в котором выполняется конвейер. Это можно сделать следующим образом:
-
Определите Dockerfile для запуска вашей сборки ```dockerfile FROM node:lts
Install safe-chain
RUN curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh --ci
&& rm /tmp/install-safe-chain.shAdd safe-chain to PATH (update paths if you used a custom install dir)
ENV PATH="/root/.safe-chain/shims:/root/.safe-chain/bin:${PATH}"
-
Соберите образ Docker в вашем CI-конвейере ```yaml build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest
-
Используйте образ в вашем конвейере: ```yaml npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci
Полный конвейер для этого примера выглядит так:```yaml stages:
- build-image
- install
build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest
npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci
# Устранение неполадок
Возникли проблемы? Обратитесь к [Руководству по устранению неполадок](https://github.com/aikidosec/safe-chain/blob/main/docs/troubleshooting.md) за помощью в решении распространённых проблем.
# Сообщить о проблемах
Если вы столкнулись с проблемами:
1. Посетите [GitHub Issues](https://github.com/AikidoSec/safe-chain/issues)
2. Укажите:
* Операционную систему и версию
* Тип и версию оболочки
* Вывод команды `safe-chain --version`
* Вывод команд проверки
* Подробные логи сбойной команды (добавьте аргумент `--safe-chain-logging=verbose`)