
أداة تحليل ثابتة وديناميكية تقوم بتدقيق الحزم مفتوحة المصدر بحثًا عن السمات الخبيثة والضعيفة والخطيرة، مع تثبيت في وضع الحماية لمنع هجمات سلسلة التوريد.
Packj (تُنطق package) هي أداة للمساعدة في تخفيف هجمات سلسلة توريد البرمجيات. يمكنها اكتشاف الحزم الخبيثة، الضعيفة، المهجورة، ذات الأسماء المتشابهة (typo-squatting)، وغيرها من الحزم "الخطيرة" من سجلات الحزم مفتوحة المصدر الشهيرة، مثل NPM وRubyGems وPyPI. يمكن تخصيصها بسهولة لتقليل الضوضاء. بدأ Packj كمشروع بحث دكتوراه ويتم تطويره حاليًا بموجب منح حكومية متنوعة.
ملاحظة خادم Packj المستضاف ذاتيًا والعديد من عمليات التكامل قادمة في وقت لاحق من هذا الشهر 👊 تابع هذا المستودع للبقاء على اطلاع.

نحن ندعم عدة نماذج للنشر:
استخدم Packj لتدقيق التبعيات في طلبات السحب.```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 الأدوات التالية:
* [التدقيق](#auditing-a-package) - لمراجعة الحزمة بحثًا عن سمات "خطرة".
* [بيئة معزولة](#sandboxed-package-installation) - لتثبيت آمن للحزمة.
## تدقيق الحزمة ##
يقوم Packj بتدقيق حزم البرامج مفتوحة المصدر بحثًا عن سمات "خطرة" تجعلها عرضة لهجمات سلسلة التوريد. على سبيل المثال، الحزم ذات نطاقات البريد الإلكتروني منتهية الصلاحية (تفتقر إلى التحقق بخطوتين)، وفجوة زمنية كبيرة في الإصدار، وواجهات برمجة تطبيقات حساسة أو أذونات وصول، وما إلى ذلك، يتم وضع علامة عليها كخطرة.
يتم دعم تدقيق ما يلي:
- حزم متعددة: `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
[+] Fetching 'browserify' from npm..........PASS [ver 17.0.0]
[+] Checking package description.........PASS [browser-side require() the node way]
[+] Checking release history.............PASS [484 version(s)]
[+] Checking version........................RISK [702 days old]
[+] Checking release time gap............PASS [68 days since last release]
[+] Checking author.........................PASS [[email protected]]
[+] Checking email/domain validity.......RISK [expired author email domain]
[+] Checking readme.........................PASS [26838 bytes]
[+] Checking homepage.......................PASS [https://github.com/browserify/browserify#readme]
[+] Checking downloads......................PASS [2M weekly]
[+] Checking repo URL.......................PASS [https://github.com/browserify/browserify]
[+] Checking repo data...................PASS [stars: 14189, forks: 1244]
[+] Checking if repo is a forked copy....PASS [original, not forked]
[+] Checking repo description............PASS [browser-side require() the node.js way]
[+] Checking repo activity...............PASS [commits: 2290, contributors: 207, tags: 413]
[+] Checking for CVEs.......................PASS [none found]
[+] Checking dependencies...................RISK [48 found]
[+] Downloading package from npm............PASS [163.83 KB]
[+] Analyzing code..........................RISK [needs 3 perm(s): decode,codegen,file]
[+] Checking files/funcs....................PASS [429 files (383 .js), 744 funcs, LoC: 9.7K]
[+] Installing package and tracing code.....PASS [found 5 process,1130 files,22 network syscalls]
=============================================
[+] 5 risk(s) found, package is undesirable!
=> Complete report: /tmp/packj_54rbjhgm/report_npm-browserify-17.0.0_hlr1rhcz.json
{
"undesirable": [
"old package: 702 days old",
"invalid or no author email: expired author email domain",
"generates new code at runtime",
"reads files and dirs",
"forks or exits OS processes",
]
}
</details>
> تحذير: نظرًا لأن الحزم قد تنفذ كودًا خبيثًا أثناء التثبيت، فمن المستحسن استخدام `-t` أو `--trace` فقط عند التشغيل داخل حاوية Docker أو جهاز افتراضي.