
Strumento di analisi statica e dinamica che verifica i pacchetti open-source per attributi dannosi, vulnerabili e rischiosi, con installazione in sandbox per prevenire attacchi alla supply chain.
Packj (pronunciato "package") è uno strumento per aiutare a mitigare gli attacchi alla supply chain del software. Può rilevare pacchetti dannosi, vulnerabili, abbandonati, typo-squatting e altri pacchetti "rischiosi" dai registry di pacchetti open-source più popolari, come NPM, RubyGems e PyPI. Può essere facilmente personalizzato per ridurre al minimo il rumore. Packj è nato come progetto di ricerca di dottorato e attualmente è sviluppato nell'ambito di vari finanziamenti governativi.
Nota Il server web Packj self-hostato e diverse integrazioni arriveranno entro la fine di questo mese 👊 Seguite questo repository per rimanere aggiornati.

Supportiamo molteplici modelli di deployment:
Usa Packj per eseguire audit delle dipendenze nelle pull request.```yaml
Visualizza su GitHub [marketplace](https://github.com/marketplace/actions/packj-security-audit). Esempio di [esecuzione PR](https://github.com/ossillate-inc/packj-github-action-demo/pull/3#issuecomment-1274797138).
### 2. Immagine Docker (consigliata)
Il modo più rapido per provare/testare Packj è utilizzare Docker. Podman è anche supportato per esecuzioni containerizzate (isolate).```
docker run -v /tmp:/tmp/packj -it ossillate/packj:latest --help
Clona questo repository,``` git clone https://github.com/ossillate-inc/packj.git && cd packj
Installa le dipendenze```
bundle install && pip3 install -r requirements.txt
Inizia con aiuto:``` python3 main.py --help
# Ecosistemi supportati #
Packj può verificare i pacchetti pubblicati dai registri NPM, PyPI, Rust, PHP e Rubygems. Il supporto per Rust e PHP è WIP. Stiamo aggiungendo attivamente supporto per altri registri. Supporta anche la verifica di pacchetti NPM e PyPI locali (non pubblicati).
| Registro | Ecosistema | Supportato |
| --------- | ---------- | ------------------ |
| 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: |
# Funzionalità #
Packj offre i seguenti strumenti:
* [Verifica](#auditing-a-package) - per verificare un pacchetto per attributi "rischiosi".
* [Sandbox](#sandboxed-package-installation) - per l'installazione sicura di un pacchetto.
## Verifica di un pacchetto ##
Packj verifica i pacchetti software open-source per attributi "rischiosi" che li rendono vulnerabili ad attacchi alla supply chain. Ad esempio, i pacchetti con domini email scaduti (mancanza di 2FA), grande intervallo di tempo tra le release, API sensibili o permessi di accesso, ecc. vengono segnalati come rischiosi.
La verifica supporta:
- più pacchetti: `python3 main.py audit -p pypi:requests rubygems:overcommit`
- file di dipendenze: `python3 main.py audit -f npm:package.json pypi:requirements.txt`
Per impostazione predefinita, `audit` esegue solo analisi statica del codice per rilevare codice rischioso. Puoi passare il flag `-t` o `--trace` per eseguire anche l'analisi dinamica, che installerà tutti i pacchetti richiesti sotto strace e monitorerà il comportamento durante l'installazione. Vedi l'esempio di output qui sotto.
<details>
<summary><h4>Mostra esempio di esecuzione/output</h4></summary>
$ docker run -v /tmp:/tmp/packj -it ossillate/packj:latest audit --trace -p npm:browserify