
Инструмент статического и динамического анализа, который проверяет пакеты с открытым исходным кодом на наличие вредоносных, уязвимых и рискованных атрибутов, с изолированной установкой для предотвращения атак на цепочку поставок.
Packj (произносится как «пакедж») — это инструмент, помогающий смягчать атаки на цепочки поставок программного обеспечения. Он может обнаруживать вредоносные, уязвимые, заброшенные, с тайпо-сквоттингом и другие «опасные» пакеты из популярных реестров пакетов с открытым исходным кодом, таких как NPM, RubyGems и PyPI. Его можно легко настроить для уменьшения шума. Packj начинался как исследовательский проект в рамках докторской диссертации и в настоящее время разрабатывается при поддержке различных государственных грантов.
Примечание Самостоятельно размещаемый веб-сервер Packj и несколько интеграций появятся позднее в этом месяце 👊 Следите за этим репозиторием, чтобы быть в курсе.

Мы поддерживаем несколько моделей развертывания:
Используйте Packj для аудита зависимостей в pull request'ах.```yaml
Посмотреть на GitHub [marketplace](https://github.com/marketplace/actions/packj-security-audit). Пример [запуска PR](https://github.com/ossillate-inc/packj-github-action-demo/pull/3#issuecomment-1274797138).
### 2. Docker-образ (рекомендуется)
Самый быстрый способ попробовать/протестировать Packj — использовать Docker. Podman также поддерживается для контейнеризированных (изолированных) запусков.```
docker run -v /tmp:/tmp/packj -it ossillate/packj:latest --help
Клонируйте этот репозиторий,``` git clone https://github.com/ossillate-inc/packj.git && cd packj
Установите зависимости```
bundle install && pip3 install -r requirements.txt
Начните с справки:``` python3 main.py --help
# Поддерживаемые экосистемы #
Packj может проверять опубликованные пакеты из реестров пакетов NPM, PyPI, Rust, PHP и Rubygems. Поддержка Rust и PHP находится в разработке. Мы активно добавляем поддержку реестров.
Также поддерживается проверка локальных (неопубликованных) пакетов NPM и PyPI.
| Реестр | Экосистема | Поддерживается |
| ---------- | ---------- | ---------------- |
| NPM | JavaScript | :white_check_mark: |
| PyPI | Python | :white_check_mark: |
| Cargo | Rust | :white_check_mark: |
| Rubygems | Ruby | :white_check_mark: |
| Packagist | PHP | :white_check_mark: |
| Docker | Docker | :x: |
| Nuget | .NET | :white_check_mark: |
| Maven | Java | :white_check_mark: |
| Cocoapods | Swift | :x: |
# Функциональность #
Packj предлагает следующие инструменты:
* [Audit](#auditing-a-package) – для проверки пакета на «рискованные» атрибуты.
* [Sandbox](#sandboxed-package-installation) – для безопасной установки пакета.
## Аудит пакета ##
Packj проверяет пакеты открытого исходного кода на «рискованные» атрибуты, которые делают их уязвимыми для атак на цепочку поставок. Например, пакеты с истекшими доменами электронной почты (отсутствие 2FA), большим временным разрывом между релизами, чувствительными API или разрешениями доступа и т.д. помечаются как рискованные.
Поддерживается аудит:
- нескольких пакетов: `python3 main.py audit -p pypi:requests rubygems:overcommit`
- файлов зависимостей: `python3 main.py audit -f npm:package.json pypi:requirements.txt`
По умолчанию `audit` выполняет только статический анализ кода для обнаружения рискованного кода. Вы можете передать флаг `-t` или `--trace`, чтобы также выполнить динамический анализ кода, который установит все запрошенные пакеты под strace и отследит их поведение во время установки. Пример вывода приведён ниже.
<details>
<summary><h4>Показать пример запуска/вывода</h4></summary>
$ docker run -v /tmp:/tmp/packj -it ossillate/packj:latest audit --trace -p npm:browserify