
स्टैटिक और डायनेमिक विश्लेषण उपकरण जो ओपन-सोर्स पैकेजों में दुर्भावनापूर्ण, संवेदनशील और जोखिमपूर्ण गुणों की जाँच करता है, सैंडबॉक्सित इंस्टॉलेशन के साथ आपूर्ति-श्रृंखला हमलों को रोकता है।
Packj (उच्चारित 'पैकेज') एक उपकरण है जो सॉफ़्टवेयर आपूर्ति श्रृंखला हमलों को कम करने में मदद करता है। यह लोकप्रिय ओपन-सोर्स पैकेज रजिस्ट्रियों जैसे NPM, RubyGems और PyPI से दुर्भावनापूर्ण, कमजोर, परित्यक्त, टाइपो-स्क्वाटिंग और अन्य 'जोखिमपूर्ण' पैकेजों का पता लगा सकता है। इसे शोर कम करने के लिए आसानी से अनुकूलित किया जा सकता है। Packj एक पीएचडी शोध परियोजना के रूप में शुरू हुआ और वर्तमान में विभिन्न सरकारी अनुदानों के तहत विकसित किया जा रहा है।
नोट स्व-होस्टेड Packj वेबसर्वर और कई एकीकरण इस महीने के अंत में आ रहे हैं 👊 अपडेट रहने के लिए इस रेपो को देखें।

हम कई डिप्लॉयमेंट मॉडल का समर्थन करते हैं:
Pull requests में निर्भरताओं की ऑडिट करने के लिए Packj का उपयोग करें।```yaml
View on GitHub [marketplace](https://github.com/marketplace/actions/packj-security-audit). Example [PR run](https://github.com/ossillate-inc/packj-github-action-demo/pull/3#issuecomment-1274797138).
### 2. डॉकर इमेज (अनुशंसित)
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 ओपन-सोर्स सॉफ्टवेयर पैकेजों की "जोखिमपूर्ण" विशेषताओं के लिए ऑडिट करता है जो उन्हें आपूर्ति श्रृंखला हमलों के प्रति संवेदनशील बनाती हैं। उदाहरण के लिए, समाप्त ईमेल डोमेन (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
[+] 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>
> चेतावनी: चूंकि पैकेज स्थापना के दौरान दुर्भावनापूर्ण कोड निष्पादित कर सकते हैं, इसलिए केवल Docker कंटेनर या वर्चुअल मशीन के अंदर `-t` या `--trace` का उपयोग करने की अनुशंसा की जाती है।
ऑडिट Docker/Podman कंटेनरों में भी किया जा सकता है। कृपया जोखिमपूर्ण विशेषताओं और उपयोग के विवरण [ऑडिट README](https://github.com/ossillate-inc/packj/blob/main/packj/audit/README.md) पर देखें।
## सैंडबॉक्स्ड पैकेज इंस्टॉलेशन ##
Packj किसी पैकेज की `सुरक्षित स्थापना` के लिए एक हल्का सैंडबॉक्सिंग प्रदान करता है। विशेष रूप से, यह दुर्भावनापूर्ण पैकेजों को संवेदनशील डेटा निकालने, संवेदनशील फ़ाइलों (जैसे SSH कुंजियाँ) तक पहुँचने और मैलवेयर को बनाए रखने से रोकता है।
यह स्थापना-समय स्क्रिप्ट्स को सैंडबॉक्स करता है, जिसमें कोई भी मूल संकलन शामिल है। यह **strace** का उपयोग करता है (अर्थात **कोई** VM/कंटेनर आवश्यक नहीं)।
कृपया सैंडबॉक्सिंग तंत्र और उपयोग के विवरण [सैंडबॉक्स README](https://github.com/ossillate-inc/packj/blob/main/packj/sandbox/README.md) पर देखें।
<details>
<summary><h4>उदाहरण रन/आउटपुट दिखाएं</h4></summary>
$ python3 main.py sandbox gem install overcommit
Fetching: overcommit-0.59.1.gem (100%)
Install hooks by running `overcommit --install` in your Git repository
Successfully installed overcommit-0.59.1
Parsing documentation for overcommit-0.59.1
Installing ri documentation for overcommit-0.59.1
#############################
# Review summarized activity
#############################
[+] Network connections
[+] DNS (1 IPv4 addresses) at port 53 [rule: ALLOW]
[+] rubygems.org (4 IPv6 addresses) at port 443 [rule: IPv6 rules not supported]
[+] rubygems.org (4 IPv4 addresses) at port 443 [rule: ALLOW]
[+] Filesystem changes
/
└── home
└── ubuntu
└── .ruby
├── gems
│ ├── iniparse-1.5.0 [new: DIR, 15 files, 46.6K bytes]
│ ├── rexml-3.2.5 [new: DIR, 77 files, 455.6K bytes]
│ ├── overcommit-0.59.1 [new: DIR, 252 files, 432.7K bytes]
│ └── childprocess-4.1.0 [new: DIR, 57 files, 141.2K bytes]
├── cache
│ ├── iniparse-1.5.0.gem [new: FILE, 16.4K bytes]
│ ├── rexml-3.2.5.gem [new: FILE, 93.2K bytes]
│ ├── childprocess-4.1.0.gem [new: FILE, 34.3K bytes]
│ └── overcommit-0.59.1.gem [new: FILE, 84K bytes]
├── specifications
│ ├── rexml-3.2.5.gemspec [new: FILE, 2.7K bytes]
│ ├── overcommit-0.59.1.gemspec [new: FILE, 1.7K bytes]
│ ├── childprocess-4.1.0.gemspec [new: FILE, 1.8K bytes]
│ └── iniparse-1.5.0.gemspec [new: FILE, 1.3K bytes]
├── bin
│ └── overcommit [new: FILE, 622 bytes]
└── doc
├── iniparse-1.5.0
│ └── ri [new: DIR, 119 files, 131.7K bytes]
├── rexml-3.2.5
│ └── ri [new: DIR, 836 files, 841K bytes]
├── overcommit-0.59.1
│ └── ri [new: DIR, 1046 files, 1.5M bytes]
└── childprocess-4.1.0
└── ri [new: DIR, 272 files, 297.8K bytes]
[C]ommit all changes, [Q|q]uit & discard changes, [L|l]ist details:
</details>
# हमारी कहानी
**संक्षेप में** Packj एक पीएचडी शोध परियोजना के रूप में शुरू हुआ। इसे विभिन्न सरकारी अनुदानों द्वारा समर्थित किया गया है।
<details>
<summary><h4>लंबा उत्तर दिखाएं</h4></summary>
Packj एक अकादमिक शोध परियोजना के रूप में शुरू हुआ। विशेष रूप से, Packj द्वारा उपयोग की जाने वाली स्थैतिक कोड विश्लेषण तकनीकें जॉर्जिया टेक में हमारे शोध [समूह](http://cyfi.ece.gatech.edu) द्वारा [MalOSS](https://github.com/osssanitizer/maloss) परियोजना पर आधारित अत्याधुनिक साइबर सुरक्षा अनुसंधान पर आधारित हैं।
<a href="https://arxiv.org/pdf/2002.01139v1.pdf" target="_blank">
<img src="https://assets.kitploit.com/production/public/readmes/5562/c4061028051de04a9aebaf4188c08fdd1bcdb47efa8a818e959d3b3fc7bc5dc7.png" width="300" alt="अकादमिक पेपर">
</a>
Packj को [NSF](https://www.sbir.gov/node/2083473), [GRA](https://gra.org/company/227/OSSPolice.html), और [ALInnovate](https://innovatealabama.org) से उदार अनुदानों द्वारा समर्थित किया गया है।
</details>
# Packj क्यों
**संक्षेप में** वर्तमान सर्वोत्तम भेद्यता स्कैनर यह मानते हैं कि तृतीय-पक्ष ओपन-सोर्स कोड सुरक्षित है। इसलिए, ऐसे सभी उपकरण केवल सुरक्षित कोड में आकस्मिक प्रोग्रामिंग बग (जिसे CVEs जैसे Log4J के रूप में जाना जाता है) से उत्पन्न खतरों का समाधान करते हैं। वे Solarwinds जैसे आधुनिक सॉफ्टवेयर आपूर्ति श्रृंखला हमलों से रक्षा नहीं करते हैं, जो जानबूझकर बुरे (अर्थात दुर्भावनापूर्ण) कोड से उत्पन्न होते हैं, जो बुरे अभिनेताओं द्वारा आपूर्ति चैनल में नई कमजोरियों का उपयोग करके प्रसारित किए जाते हैं, जिनमें निर्भरता भ्रम, टाइपो-स्क्वाटिंग, प्रोटेस्टवेयर (तोड़फोड़), खाता अपहरण और सोशल इंजीनियरिंग शामिल हैं। एक हालिया (दिसंबर '22) उदाहरण PyTorch पैकेज है, जो निर्भरता भ्रम कमजोरी (कोई CVE असाइन नहीं) का उपयोग करके समझौता किया गया था।
Packj न केवल CVEs के लिए ऑडिट करता है, बल्कि गहन स्थैतिक+गतिशील कोड विश्लेषण और मेटाडेटा जांच भी करता है ताकि किसी भी "जोखिमपूर्ण" व्यवहार और विशेषताओं का पता लगाया जा सके, जैसे शेल का प्रसार, SSH कुंजियों का उपयोग, GitHub कोड बनाम पैकेज्ड कोड का बेमेल (प्रोवेनेंस), 2FA की कमी, और कई और। ऐसी असुरक्षित विशेषताएं CVEs के रूप में योग्य नहीं होती हैं, यही कारण है कि मौजूदा उपकरणों में से कोई भी उन्हें चिह्नित नहीं कर सकता है। Packj आपकी सॉफ्टवेयर आपूर्ति श्रृंखला में दुर्भावनापूर्ण, टाइपो-स्क्वाटिंग, परित्यक्त, कमजोर और अन्य असुरक्षित निर्भरताओं (कमजोर कड़ियों) को चिह्नित कर सकता है।
<details>
<summary><h4>लंबा उत्तर दिखाएं</h4></summary>
वर्तमान सॉफ्टवेयर आपूर्ति श्रृंखला खतरा मॉडल यह **मानता है** कि तृतीय-पक्ष ओपन-सोर्स कोड सुरक्षित है, और इसलिए, सुरक्षा कमजोरियों को केवल आकस्मिक प्रोग्रामिंग बग (जिसे CVEs कहा जाता है) के लिए ट्रैक किया जाता है। इस प्रकार, सभी मौजूदा ओपन-सोर्स भेद्यता स्कैनर **केवल** सार्वजनिक रूप से ज्ञात CVEs की रिपोर्ट करते हैं और सुरक्षित कोड में आकस्मिक बग से उत्पन्न खतरों का समाधान करते हैं।
आकस्मिक प्रोग्रामिंग बग का एक विशिष्ट उदाहरण उपयोगकर्ता इनपुट पर सीमा जांच का अभाव है, जो कोड को बफर ओवरफ्लो हमलों के प्रति संवेदनशील बनाता है। वास्तविक दुनिया के लोकप्रिय उदाहरणों में Log4J और HeartBleed शामिल हैं। हमलावरों को CVEs को ट्रिगर करने के लिए एक शोषण विकसित करने की आवश्यकता होती है (जैसे, HeartBleed के मामले में एक तैयार TCP/IP पैकेट या बफर ओवरफ्लो का कारण बनने के लिए संख्यात्मक रूप से उच्च इनपुट)। CVEs को पैच करके या लाइब्रेरी के नए संस्करण में अपग्रेड करके ठीक किया जा सकता है (जैसे, Log4J का नया संस्करण CVE को ठीक करता है)।
Solarwinds हमले के बाद आधुनिक सॉफ्टवेयर आपूर्ति श्रृंखला खतरा परिदृश्य **बदल गया**। बुरे अभिनेताओं ने नई कमजोरियां पाई हैं, लेकिन इस बार कोड में नहीं, बल्कि आपूर्ति चैनल में। ये नई कमजोरियां जैसे निर्भरता भ्रम, टाइपो-स्क्वाटिंग, प्रोटेस्टवेयर (तोड़फोड़), खाता अपहरण और सोशल इंजीनियरिंग, मैलवेयर प्रसारित करने के लिए शोषित की जा रही हैं। हजारों समझौता किए गए NPM/PyPI/Ruby पैकेजों की सूचना मिली है।
CVEs के विपरीत, मैलवेयर जानबूझकर बुरा (अर्थात दुर्भावनापूर्ण) कोड होता है। इसके अलावा, मैलवेयर स्वयं एक शोषण है और इसे पैच या नए संस्करण में अपग्रेड करके ठीक नहीं किया जा सकता है। उदाहरण के लिए, [निर्भरता भ्रम हमला](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610) जानबूझकर दुर्भावनापूर्ण था; इसने कोड में किसी आकस्मिक प्रोग्रामिंग बग का शोषण नहीं किया। इसी तरह, एक लोकप्रिय पैकेज का लेखक जो युद्ध के विरोध में [प्रोटेस्ट](https://en.wikipedia.org/wiki/Peacenotwar) के लिए अपने कोड को तोड़फोड़ करता है, वह बहुत ही जानबूझकर है और किसी CVE का शोषण नहीं करता है। टाइपो-स्क्वाटिंग एक और हमला वेक्टर है जिसका उपयोग बुरे अभिनेता लोकप्रिय ओपन-सोर्स पैकेज रजिस्ट्रियों में मैलवेयर प्रसारित करने के लिए करते हैं: यह डेवलपर्स की [टाइपो और अनुभवहीनता](https://discuss.python.org/t/improving-risks-and-consequences-against-typosquatting-on-pypi/5090) का शोषण करता है, कोड में आकस्मिक प्रोग्रामिंग बग या CVEs का नहीं।
मौजूदा स्कैनर जानबूझकर कमजोर (दुर्भावनापूर्ण) कोड से इन Solarwinds जैसे आधुनिक सॉफ्टवेयर आपूर्ति श्रृंखला हमलों का पता लगाने में **विफल** होते हैं। ये उपकरण केवल ओपन-सोर्स निर्भरताओं के लिए स्रोत कोड को स्कैन करते हैं, उपयोग की जा रही सभी निर्भरताओं की एक सूची संकलित करते हैं, और प्रभावित पैकेज संस्करणों की रिपोर्ट करने के लिए प्रत्येक <निर्भरता-नाम, निर्भरता-संस्करण> को एक डेटाबेस (जैसे NVD) में देखते हैं (जैसे, Log4J का कमजोर संस्करण, HeartBleed से प्रभावित LibSSL संस्करण)।
Packj न केवल CVEs के लिए ऑडिट करता है, बल्कि गहन स्थैतिक+गतिशील कोड विश्लेषण और मेटाडेटा जांच भी करता है ताकि किसी भी "जोखिमपूर्ण" व्यवहार और विशेषताओं का पता लगाया जा सके, जैसे शेल का प्रसार, SSH कुंजियों का उपयोग, GitHub कोड बनाम पैकेज्ड कोड का बेमेल (प्रोवेनेंस), 2FA की कमी, और कई और। ऐसी असुरक्षित विशेषताएं CVEs के रूप में योग्य नहीं होती हैं, यही कारण है कि मौजूदा उपकरणों में से कोई भी उन्हें चिह्नित नहीं कर सकता है। Packj आपकी सॉफ्टवेयर आपूर्ति श्रृंखला में दुर्भावनापूर्ण, टाइपो-स्क्वाटिंग, परित्यक्त, कमजोर और अन्य असुरक्षित निर्भरताओं (कमजोर कड़ियों) को चिह्नित कर सकता है। कृपया [ऑडिट README](https://github.com/ossillate-inc/packj/blob/main/packj/audit/README.md#faq) पर और पढ़ें।
</details>
# अनुकूलन #
Packj को आपके खतरा मॉडल के लिए आसानी से अनुकूलित (शून्य शोर) किया जा सकता है। बस अपने रिपॉजिटरी/प्रोजेक्ट की शीर्ष निर्देशिका में एक [.packj.yaml](https://github.com/ossillate-inc/packj/blob/main/.packj.yaml) फ़ाइल जोड़ें और अवांछित विशेषताओं को टिप्पणी करके अलर्ट थकान को कम करें।
# मिला मैलवेयर #
हमने इस उपकरण का उपयोग करके क्रमशः PyPI और Rubygems पर 40 से अधिक और 20 दुर्भावनापूर्ण पैकेज पाए। उनमें से कई को हटा दिया गया है। नीचे एक उदाहरण देखें:
<details>
<summary><h4>मैलवेयर का उदाहरण दिखाएं</h4></summary>
$ python3 main.py audit pypi:krisqian
[+] Fetching 'krisqian' from pypi...OK [ver 0.0.7]
[+] Checking version...OK [256 days old]
[+] Checking release history...OK [7 version(s)]
[+] Checking release time gap...OK [1 days since last release]
[+] Checking author...OK [[email protected]]
[+] Checking email/domain validity...OK [[email protected]]
[+] Checking readme...ALERT [no readme]
[+] Checking homepage...OK [https://www.bilibili.com/bangumi/media/md140632]
[+] Checking downloads...OK [13 weekly]
[+] Checking repo_url URL...OK [None]
[+] Checking for CVEs...OK [none found]
[+] Checking dependencies...OK [none found]
[+] Downloading package 'KrisQian' (ver 0.0.7) from pypi...OK [1.94 KB]
[+] Analyzing code...ALERT [needs 3 perms: process,network,file]
[+] Checking files/funcs...OK [9 files (2 .py), 6 funcs, LoC: 184]
=============================================
[+] 6 risk(s) found, package is undesirable!
{
"undesirable": [
"no readme",
"only 45 weekly downloads",
"no source repo found",
"generates new code at runtime",
"fetches data over the network: ['KrisQian-0.0.7/setup.py:40', 'KrisQian-0.0.7/setup.py:50']",
"reads files and dirs: ['KrisQian-0.0.7/setup.py:59', 'KrisQian-0.0.7/setup.py:70']"
]
}
=> Complete report: pypi-KrisQian-0.0.7.json
=> View pre-vetted package report at https://packj.dev/package/PyPi/KrisQian/0.0.7
</details>
Packj ने KrisQian (v0.0.7) को स्रोत रिपॉजिटरी की अनुपस्थिति और पैकेज स्थापना समय (setup.py में) के दौरान संवेदनशील API (नेटवर्क, कोड जनरेशन) के उपयोग के कारण संदिग्ध के रूप में चिह्नित किया। हमने गहराई से देखने का निर्णय लिया और पैकेज को दुर्भावनापूर्ण पाया। कृपया हमारा विस्तृत विश्लेषण [https://packj.dev/malware/krisqian](https://packj.dev/malware/krisqian) पर देखें।
हमारे द्वारा पाए गए मैलवेयर के और अधिक उदाहरण [https://packj.dev/malware](https://packj.dev/malware) पर सूचीबद्ध हैं। कृपया पूरी सूची के लिए हमसे [[email protected]](mailto:[email protected]) पर संपर्क करें।
# संसाधन #
Packj उपकरण या ओपन-सोर्स सॉफ्टवेयर आपूर्ति श्रृंखला हमलों के बारे में अधिक जानने के लिए, हमारा संदर्भ लें
[](https://www.youtube.com/watch?v=Rcuqn56uCDk)
[](https://www.youtube.com/watch?v=a7BfDGeW_jY)
- PyConUS'22 [वार्ता](https://www.youtube.com/watch?v=Rcuqn56uCDk) और [स्लाइड्स](https://speakerdeck.com/ashishbijlani/pyconus22-slides)।
- BlackHAT Asia'22 Arsenal [प्रस्तुति](https://www.blackhat.com/asia-22/arsenal/schedule/#mitigating-open-source-software-supply-chain-attacks-26241)
- PackagingCon'21 [वार्ता](https://www.youtube.com/watch?v=PHfN-NrUCoo) और [स्लाइड्स](https://speakerdeck.com/ashishbijlani/mitigating-open-source-software-supply-chain-attacks)
- BlackHat USA'22 Arsenal वार्ता [Detecting typo-squatting, backdoored, abandoned, and other "risky" open-source packages using Packj](https://www.blackhat.com/us-22/arsenal/schedule/#detecting-typo-squatting-backdoored-abandoned-and-other-risky-open-source-packages-using-packj-28075)
- जॉर्जिया टेक में हमारे समूह द्वारा ओपन-सोर्स सॉफ्टवेयर सुरक्षा पर अकादमिक [निबंध](https://cyfi.ece.gatech.edu/publications/DUAN-DISSERTATION-2019.pdf) और [पेपर](https://www.ndss-symposium.org/wp-content/uploads/ndss2021_1B-1_23055_paper.pdf) जिसने इस शोध को शुरू किया।
- Open Source Summit, Europe'22 वार्ता [Scoring dependencies to detect “weak links” in your open-source software supply chain](https://osseu2022.sched.com/overview/type/SupplyChainSecurityCon) - प्रस्तुति वीडियो [YouTube](https://www.youtube.com/watch?v=a7BfDGeW_jY) पर
- NullCon'22 में प्रस्तुति [वीडियो](https://www.youtube.com/watch?v=PgvlSjl-mrY) और [स्लाइड्स](https://drive.google.com/file/d/1qLXIXzsIhRlS0mo8nwWI9KmD12CImZY9/view?usp=sharing) [Unearthing Malicious And Other “Risky” Open-Source Packages Using Packj](https://archive.nullcon.net/website/goa-2022/speakers/unearthing-malicious-and-other-risky-open-source-packages-using-packj.php)
# फीचर रोडमैप #
* Rust विश्लेषक जोड़ें। Rust कार्य प्रगति पर है [ETA: फरवरी '24]।
* कई (TODO) "जोखिमपूर्ण" कोड और मेटाडेटा विशेषताओं का पता लगाने की कार्यक्षमता जोड़ें [ETA: फरवरी '24]।
* स्व-होस्टेड Packj वेबसर्वर और कई उपयोगी एकीकरण (जैसे, Gitlab रनर) [ETA: अप्रैल '24]।
अद्यतित रहने के लिए इस रिपॉजिटरी पर नज़र रखें :eyes:।
कोई सुविधा या समर्थन अनुरोध है? कृपया विचार-विमर्श और अनुरोधों के लिए हमारा [GitHub चर्चा पृष्ठ](https://github.com/ossillate-inc/packj/discussions/) पर जाएँ या हमारे [डिस्कॉर्ड समुदाय](https://discord.gg/qFcqaV2wYa) में शामिल हों।
# टीम और योगदानकर्ता #
Packj को [Ossillate Inc.](https://packj.dev/team) के साइबर सुरक्षा शोधकर्ताओं और बाहरी सहयोगियों द्वारा विकसित किया गया है ताकि डेवलपर्स को अविश्वसनीय तृतीय-पक्ष ओपन-सोर्स सॉफ्टवेयर निर्भरताओं को स्रोत करते समय आपूर्ति श्रृंखला हमलों के जोखिम को कम करने में मदद मिल सके। हम अपने डेवलपर्स और सहयोगियों का धन्यवाद करते हैं। यदि आपको हमारा काम पसंद आया तो हमें :star: देकर अपनी सराहना दिखाएं।
संस्थापक सदस्य:
* Ashish Bijlani
* Devdutt Patnaik
* Ajinkya Rajput
हम खुले हाथों से कोड योगदान का स्वागत करते हैं। [CONTRIBUTING.md](https://github.com/ossillate-inc/packj/blob/HEAD/CONTRIBUTING.md) दिशानिर्देश देखें। कोई बग मिला? कृपया एक मुद्दा खोलें। सुरक्षा मुद्दे की रिपोर्ट करने के लिए हमारे [SECURITY.md](https://github.com/ossillate-inc/packj/blob/HEAD/SECURITY.md) दिशानिर्देश देखें।
# सामान्य प्रश्न #
<details>
<summary><b>कौन से पैकेज मैनेजर (रजिस्ट्री) समर्थित हैं?</b></summary>
Packj वर्तमान में NPM, PyPI, और RubyGems पैकेजों को "जोखिमपूर्ण" विशेषताओं के लिए जांच सकता है। हम Rust के लिए समर्थन जोड़ रहे हैं।
</details>
<details>
<summary><b>Packj जोखिमपूर्ण/दुर्भावनापूर्ण पैकेजों का पता लगाने के लिए किन तकनीकों का उपयोग करता है?</b></summary>
Packj व्यापक ऑडिटिंग के लिए स्थैतिक कोड विश्लेषण, गतिशील ट्रेसिंग और मेटाडेटा विश्लेषण का उपयोग करता है। अकेले स्थैतिक विश्लेषण परिष्कृत मैलवेयर को चिह्नित करने के लिए पर्याप्त नहीं है जो कोड अस्पष्टता का उपयोग करके खुद को बेहतर छिपा सकता है। गतिशील विश्लेषण पैकेज को `strace` के तहत स्थापित करके और उसके रनटाइम व्यवहार की निगरानी करके किया जाता है। कृपया [ऑडिट README](https://github.com/ossillate-inc/packj/blob/main/packj/audit/README.md) पर और पढ़ें।
</details>
<details>
<summary><b>क्या यह अस्पष्ट कॉल पर काम करता है? उदाहरण के लिए, एक बेस 64 एन्क्रिप्टेड स्ट्रिंग जो डिक्रिप्ट होती है और फिर शेल को पास की जाती है?</b></summary>यह एक बहुत ही सामान्य दुर्भावनापूर्ण व्यवहार है। Packj कोड अस्पष्टीकरण के साथ-साथ शेल कमांड (exec system call) के स्पॉनिंग का भी पता लगाता है। उदाहरण के लिए, Packj `getattr()` और `eval()` API के उपयोग को फ़्लैग कर सकता है क्योंकि वे "रनटाइम कोड जनरेशन" का संकेत देते हैं; एक डेवलपर तब जाकर गहराई से देख सकता है। विवरण के लिए [main.py](https://github.com/ossillate-inc/packj/blob/main/packj/audit/main.py#L512) देखें।
</details>