
Ferramenta de análise estática e dinâmica que audita pacotes de código aberto em busca de atributos maliciosos, vulneráveis e arriscados, com instalação em ambiente isolado para prevenir ataques à cadeia de suprimentos.
Packj (pronunciado pacote) é uma ferramenta para ajudar a mitigar ataques à cadeia de suprimentos de software. Ela pode detectar pacotes maliciosos, vulneráveis, abandonados, typo-squatting e outros "arriscados" de registros populares de pacotes de código aberto, como NPM, RubyGems e PyPI. Pode ser facilmente personalizada para minimizar ruído. Packj começou como um projeto de pesquisa de doutorado e atualmente está sendo desenvolvido sob várias bolsas governamentais.
Nota Servidor web Packj auto-hospedado e várias integrações chegarão ainda este mês 👊 Assista a este repositório para ficar atualizado.

Suportamos vários modelos de implantação:
Use Packj para auditar dependências em pull requests.```yaml
Ver no GitHub [marketplace](https://github.com/marketplace/actions/packj-security-audit). Exemplo [execução de PR](https://github.com/ossillate-inc/packj-github-action-demo/pull/3#issuecomment-1274797138).
### 2. Imagem Docker (recomendado)
A maneira mais rápida de experimentar/testar o Packj é usando o Docker. O Podman também é suportado para execuções conteinerizadas (isoladas).```
docker run -v /tmp:/tmp/packj -it ossillate/packj:latest --help
Clone este repositório,``` git clone https://github.com/ossillate-inc/packj.git && cd packj
Instalar dependências```
bundle install && pip3 install -r requirements.txt
Comece com ajuda:``` python3 main.py --help
# Ecossistemas suportados #
Packj pode auditar pacotes publicados dos registros de pacotes NPM, PyPI, Rust, PHP e Rubygems. O suporte para Rust e PHP está em desenvolvimento (WIP). Estamos ativamente adicionando suporte para registros.
Também suporta auditoria de pacotes NPM e PyPI locais (não publicados).
| Registro | Ecossistema | Suportado |
| ---------- | ----------- | ----------------- |
| 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: |
# Funcionalidade #
Packj oferece as seguintes ferramentas:
* [Auditoria](#auditoria-de-um-pacote) - para auditar um pacote quanto a atributos "de risco".
* [Sandbox](#instalação-de-pacote-em-sandbox) - para instalação segura de um pacote.
## Auditoria de um pacote ##
Packj audita pacotes de software de código aberto quanto a atributos "de risco" que os tornam vulneráveis a ataques à cadeia de suprimentos. Por exemplo, pacotes com domínios de e-mail expirados (sem 2FA), grande lacuna de tempo de lançamento, APIs sensíveis ou permissões de acesso, etc., são sinalizados como arriscados.
É suportada a auditoria do seguinte:
- multiple packages: `python3 main.py audit -p pypi:requests rubygems:overcommit`
- dependency files: `python3 main.py audit -f npm:package.json pypi:requirements.txt`
Por padrão, `audit` realiza apenas análise estática de código para detectar código arriscado. Você pode passar a flag `-t` ou `--trace` para realizar também análise dinâmica de código, que instalará todos os pacotes solicitados sob strace e monitorará o comportamento durante a instalação dos pacotes. Veja o exemplo de saída abaixo.
<details>
<summary><h4>Mostrar execução/saída de exemplo</h4></summary>
$ docker run -v /tmp:/tmp/packj -it ossillate/packj:latest audit --trace -p npm:browserify