
समुदाय के लिए एक सार्वजनिक पैकेज स्कैनर
बेहद सरल, Docker‑प्रथम npm आपूर्ति‑श्रृंखला स्कैनर। एक compose फ़ाइल चलाती है:
यह केवल कंटेनर संस्करण है। प्रोजेक्ट को EC2, SQS और RDS का उपयोग करके स्केल करने के लिए बनाया जा सकता है। अधिकांश सेटअप टूलसेट में इसके लिए तैयार है।
scan.yml के माध्यम से कॉन्फ़िगरेबल नियम (अनुमति सूची, सीमाएँ, YARA)scan_runs) उपयोग के लिए तैयार~/.aws के माध्यम से क्रेडेंशियल)docker-compose.yml – सेवाएँ: db, enumerator, fetcher, analyzer, dashboard, init-dbenumerator/ – Node वर्कर जो NDJSON कतार बनाता हैfetcher/ – Node वर्कर जो tarballs डाउनलोड करता है (+ S3 पर अपलोड करता है यदि सक्षम हो)analyzer/ – Python स्थैतिक विश्लेषक (+ वैकल्पिक इनलाइन YARA)dashboard/ – Streamlit ऐप (पोर्ट 8501)infra/migrations.sql – मुख्य DB स्कीमा (पैकेज, संस्करण, findings, स्कोर, इंडेक्स)infra/20251106_scan_runs.sql – स्कैन इतिहास तालिकाscan.yml – विश्लेषण कॉन्फ़िगरेशन (नियम, स्कोरिंग, अनुमति सूची, YARA)scripts/run_pipeline.sh – enumerate → fetch → analyze चलाएँscripts/init_db.sh – DB स्कीमा बूटस्ट्रैप करेंscripts/test_setup.sh – स्वचालित सेटअप सत्यापनSCANNING_GUIDE.md – विस्तृत स्कैनिंग रणनीतियाँ और उदाहरणपूर्वापेक्षाएँ: Compose v2 के साथ Docker Desktop (या इंजन)।
curl -fsSL https://raw.githubusercontent.com/MHaggis/Package-Inferno/main/install.sh | bash
यह रिपो को ~/package-inferno में क्लोन करता है और आरंभ करने के लिए निर्देश देता है।
GitHub Container Registry से पूर्व-निर्मित कंटेनर खींचें और चलाएँ:
# कॉन्फ़िग फ़ाइलों और स्क्रिप्ट के लिए रिपो क्लोन करें
git clone https://github.com/MHaggis/Package-Inferno.git
cd Package-Inferno
# पूर्व-निर्मित इमेज के साथ चलाएँ
docker compose -f docker-compose.ghcr.yml up -d db
./scripts/init_db.sh
SEEDS="lodash,express" docker compose -f docker-compose.ghcr.yml run --rm enumerator
docker compose -f docker-compose.ghcr.yml run --rm fetcher
docker compose -f docker-compose.ghcr.yml run --rm analyzer
उपलब्ध इमेज:
ghcr.io/mhaggis/package-inferno/enumerator:mainghcr.io/mhaggis/package-inferno/fetcher:mainghcr.io/mhaggis/package-inferno/analyzer:mainअपनी स्थापना को मान्य करने के लिए परीक्षण स्क्रिप्ट चलाएँ:
./scripts/test_setup.sh
यह:
docker compose up -d db
./scripts/init_db.sh
./scripts/run_pipeline.sh
docker compose up -d dashboard
# http://localhost:8501 खोलें
findings ./out/findings/*.findings.json में और findings तालिका में (जब DB सक्षम हो) संग्रहीत होती हैं।
PackageInferno आपके लक्ष्यों के आधार पर कई स्कैनिंग रणनीतियों का समर्थन करता है:
| मोड | उपयोग मामला | गति | कवरेज | कमांड |
|---|---|---|---|---|
| विशिष्ट सीड्स (बीज) | ज्ञात पैकेजों का परीक्षण/जांच | सबसे तेज़ | लक्षित | SEEDS="pkg1,pkg2" |
| छोटा बैच | सेटअप मान्य करें, नमूना स्कैन | तेज़ | 10-100 पैकेज | MAX_CHUNKS=2 CHUNK_LIMIT=10 |
| पूर्ण रजिस्ट्री | व्यापक आपूर्ति श्रृंखला ऑडिट | घंटे-दिन | 2M+ पैकेज | MAX_CHUNKS=0 CHUNK_LIMIT=100 |
| परिवर्तन फ़ीड | नए रिलीज़ की निगरानी (स्वचालित रूप से शामिल) | रीयल-टाइम | हालिया अपडेट | अंतर्निहित |
उन पैकेजों को लक्षित करें जिनका आप विश्लेषण करना चाहते हैं:
# सीड्स के साथ एकल कमांड
export SEEDS="lodash,express,axios"
./scripts/run_pipeline.sh
# या फ़ाइल से
echo -e "react\nvue\nangular" > packages.txt
export SEEDS_FILE=packages.txt
./scripts/run_pipeline.sh
मैंने प्रारंभिक परीक्षण कैसे किया: त्वरित सत्यापन के लिए SEEDS="is-odd,is-even" का उपयोग किया।
_all_docs)npm की रजिस्ट्री से पेजिनेटेड पैकेज स्कैन करें:
# पिछली रन साफ़ करें
rm -rf downloads/* out/*
# 2 पेज प्रत्येक में 10 पैकेज स्कैन करें (20 पैकेज)
export MAX_CHUNKS=2 # पेजों की संख्या
export CHUNK_LIMIT=10 # प्रति पेज पैकेज
unset SEEDS # महत्वपूर्ण: सीड्स मोड अक्षम करें
# बेहतर दृश्यता के लिए व्यक्तिगत चरण चलाएँ
docker compose run --rm enumerator # खोजें और कतारबद्ध करें
docker compose run --rm fetcher # tarballs डाउनलोड करें
docker compose run --rm analyzer # खतरों के लिए स्कैन करें
उदाहरण आउटपुट:
config: chunkLimit=10, maxChunks=2
checking recent changes feed...
changes feed: enqueued 2 new versions
enumerating via _all_docs (fresh scan)
page 1/2 count: 10
page 2/2 count: 10
done, enqueued 22 (22 new versions)
संपूर्ण npm रजिस्ट्री स्कैन करें:
export MAX_CHUNKS=0 # 0 = असीमित
export CHUNK_LIMIT=100 # दक्षता के लिए बड़े बैच
./scripts/run_pipeline.sh
चेतावनी: यह घंटों/दिनों तक चलेगा और सैकड़ों हजारों पैकेज स्कैन करेगा। डिस्क स्थान और डेटाबेस आकार की निगरानी करें।
Enumerator ./out/enumerator_state.json में कर्सर स्थिति के साथ स्थिति सहेजता है:
{
"last_seq": "0",
"last_startkey": "package-name",
"last_run": "2025-11-23T19:24:49.123Z",
"last_processed": 22,
"last_new": 22
}
बस पाइपलाइन को फिर से चलाएँ और यह अंतिम कर्सर से फिर से शुरू होगी:
./scripts/run_pipeline.sh # स्वचालित रूप से फिर से शुरू होता है
नए सिरे से स्कैन करने के लिए:
rm -f out/enumerator_state.json
./scripts/run_pipeline.sh
22 पैकेजों के 2-पेज स्कैन से, PackageInferno ने यह पाया:
-- स्कोर के अनुसार शीर्ष संदिग्ध पैकेज
SELECT p.name, s.score, s.label, COUNT(f.id) as findings
FROM packages p
JOIN versions v ON p.id = v.package_id
JOIN scores s ON v.id = s.version_id
LEFT JOIN findings f ON v.id = f.version_id
GROUP BY p.name, s.score, s.label
ORDER BY s.score DESC;
-- परिणाम:
name | score | label | findings
-----------------------+-------+------------+----------
rendition | 606 | malicious | 153
vs-deploy | 454 | malicious | 119
--123hoodmane-pyodide | 213 | malicious | 46
rendition इतना संदिग्ध क्यों था?
url_outside_allowlist - अनुमति सूची में नहीं डोमेनsuspicious_pattern - शेल/eval पैटर्नadvanced_obfuscation - हेक्स एन्कोडिंग, XOR, स्ट्रिंग ऐरेbig_base64_blob - बड़े एन्कोडेड पेलोडurl_in_code - एम्बेडेड URLsस्कोरिंग सिस्टम (scan.yml में कॉन्फ़िगर किया गया) इन findings को एकत्रित करके एक जोखिम स्कोर और लेबल (clean, suspicious, या malicious) उत्पन्न करता है।
docker compose up -d dashboard चलाने के बाद http://localhost:8501 खोलें