
credactor v2.6.0
स्कैन करें। रिडैक्ट करें। साफ कमिट करें।
Credactor
राज़ ढूँढ़ें। उसे ठीक करें। साफ़-सुथरा कमिट करें।
सीक्रेट स्कैनर अलार्म बजाने में तो अच्छे हैं, लेकिन आग बुझाने में ज़्यादा मददगार नहीं। वे आपको लीक हुई क्रेडेंशियल्स की एक सूची थमा देते हैं और सफ़ाई आप पर छोड़ देते हैं। Credactor इस चक्र को पूरा करता है: यह हार्डकोडेड सीक्रेट को ढूँढ़ता है और उसे उसी स्थान पर फिर से लिखता है, ताकि एक लीक का पता लगने से लेकर उसे ठीक करने तक का काम एक ही कमांड में हो जाए।
क्रेडेंशियल्स को सोर्स कोड से दूर रखना एक बुनियादी सुरक्षा अभ्यास है, कोई वैकल्पिक नहीं। Credactor उस बुनियादी स्तर को बनाए रखना सस्ता बनाता है, चाहे आपकी मशीन पर कमिट से पहले या CI में मर्ज से पहले। इसे अकेले चलाएँ, या अपने भरोसेमंद स्कैनर के साथ।
# Credactor को यह मिलता है:
db_password = "h8Tq2vKp9mRz4Wd"
# डिफ़ॉल्ट रूप से यह सीक्रेट को एक ऐसे सेंटिनल से बदल देता है जो रनटाइम पर ज़ोर से फेल होता है:
db_password = "REDACTED_BY_CREDACTOR"
# --replace-with env के साथ, यह एक रेफरेंस लिखता है जो पर्यावरण से पढ़ता है:
db_password = os.environ["DB_PASSWORD"]
रिडक्शन आपकी वर्किंग ट्री में फ़ाइलों को फिर से लिखता है। यदि कोई सीक्रेट पहले ही कमिट हो चुका है, तो कुंजी (key) को घुमाएँ (rotate) और इतिहास को भी साफ़ करें (उदाहरण के लिए,
git filter-repoके साथ)। किसी फ़ाइल को फिर से लिखना, लीक हुई क्रेडेंशियल को रद्द (revoke) करने का विकल्प नहीं है।
क्यों Credactor
- सिर्फ पता लगाना नहीं, बल्कि रिडक्शन। अधिकांश स्कैनर खोज पर ही रुक जाते हैं। Credactor सीक्रेट को उसी स्थान पर बदल देता है: डिफ़ॉल्ट रूप से एक ज़ोरदार
REDACTED_BY_CREDACTORसेंटिनल जो रनटाइम पर फेल होता है, या भाषा-जागरूक पर्यावरण-चर संदर्भ (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP, और शेल) जैसेos.environ["KEY"]। प्रतिस्थापन मान्य कोड है। यदि फ़ाइल में पहले से मेल खाने वाला import नहीं है (उदाहरण के लिएimport os), तो उसे जोड़ें। - डिफ़ॉल्ट रूप से सुरक्षित। परमाणु लेखन (atomic writes), स्वचालित
.bakबैकअप, सिमलिंक-बाउंड्री और फ़ाइल-अनुमति गार्ड, और हर आउटपुट में पूर्ण-सीक्रेट मास्किंग। यदि सुरक्षित बैकअप नहीं लिखा जा सकता है, तो Credactor फ़ाइल को आँख बंद करके फिर से लिखने के बजाय छोड़ देता है, और बीच में क्रैश होने पर मूल फ़ाइल बरकरार रहती है। - शून्य रनटाइम निर्भरता। शुद्ध Python 3.11+ मानक लाइब्रेरी, गैर-UTF-8 एनकोडिंग के लिए एक वैकल्पिक अतिरिक्त।
- पाइपलाइन के लिए बना। GitHub Code Scanning के लिए SARIF आउटपुट, सटीक एग्ज़िट कोड के साथ रीड-ओनली
--ciगेट, एक प्री-कमिट हुक (बीटा), और Gitleaks या TruffleHog रिपोर्ट का इन्जेशन (BETA, और आने वाले और)। Gitleaks या TruffleHog से पता लगाएँ, Credactor से उपचार करें।
इंस्टॉल करें
pip install credactor
Python 3.11+ चाहिए। कोई अन्य निर्भरता नहीं। Linux, macOS, और Windows पर चलता है (CI में Linux और Windows पर परीक्षित)।
स्रोत (source) से:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
credactor फिर किसी भी निर्देशिका से काम करता है।
त्वरित शुरुआत
पहले
--dry-runचलाएँ और रिडक्शन से पहले निष्कर्षों की समीक्षा करें। गलत सकारात्मक (false positive) संभव हैं, और--fix-allके तहत एक गलत सकारात्मक को फिर से लिखा जा सकता है। ज्ञात-सुरक्षित मानों को# credactor:ignoreया.credactorignoreप्रविष्टि से दबाएँ।
credactor --dry-run . # स्कैन करें, कुछ न बदलें
credactor . # स्कैन करें, फिर इंटरैक्टिव रूप से रिडक्ट करें (प्रति खोज y/n)
credactor --fix-all . # एक पुष्टि के बाद सब कुछ रिडक्ट करें
credactor --fix-all --yes . # गैर-इंटरैक्टिव रूप से रिडक्ट करें (CI / स्क्रिप्ट)
credactor --ci . # रीड-ओनली गेट: निष्कर्षों पर exit 1
credactor --replace-with env . # सेंटिनल के बजाय env-var संदर्भों में रिडक्ट करें
प्री-कमिट हुक (बीटा)
हुक एकीकरण बीटा में है। अकेले इस पर भरोसा करने से पहले मैन्युअल रूप से
credactor --dry-run .चलाएँ।
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.5.0 # नवीनतम रिलीज़ टैग पर पिन करें
hooks:
- id: credactor
पता लगाना (Detection)
Credactor उन क्रेडेंशियल प्रकारों का पता लगाता है जो सबसे अधिक लीक होते हैं, और प्रत्येक को एक गंभीरता (severity) प्रदान करता है ताकि आप एक नज़र में ट्राइएज कर सकें।
| श्रेणी | उदाहरण | गंभीरता |
|---|---|---|
| क्लाउड प्रदाता कुंजियाँ | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | गंभीर (Critical) |
| प्लेटफ़ॉर्म टोकन | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | गंभीर (Critical) |
| निजी कुंजियाँ | PEM ब्लॉक (-----BEGIN … PRIVATE KEY-----) | गंभीर (Critical) |
| JWT | eyJ… तीन-खंड वाले टोकन | उच्च (High) |
| कनेक्शन स्ट्रिंग्स | इनलाइन क्रेडेंशियल वाले URL (scheme://user:pass@host) | उच्च (High) |
| क्रेडेंशियल वेरिएबल | password = "…", api_key = "…", secret_key = "…" | उच्च/मध्यम/निम्न |
| XML विशेषताएँ | <add key="Password" value="…" /> | उच्च/मध्यम/निम्न |
| उच्च-एन्ट्रॉपी स्ट्रिंग्स | उद्धृत हेक्स (32–64 वर्ण) / Base64 (60+ वर्ण) | मध्यम/निम्न |
नियतात्मक प्रदाता टोकन (ऊपर के उपसर्ग) एन्ट्रॉपी की परवाह किए बिना चिह्नित किए जाते हैं। अनुमानात्मक (heuristic) डिटेक्टर (JWT, कनेक्शन स्ट्रिंग्स, हेक्स, Base64) को एन्ट्रॉपी फ़्लोर पार करना होता है। स्वतंत्र हेक्स या Base64 को केवल तभी चिह्नित किया जाता है जब वह उद्धृत हो। एक अनुद्धृत उच्च-एन्ट्रॉपी मान केवल क्रेडेंशियल-नामित वेरिएबल पर पकड़ा जाता है, जो git SHAs और चेकसम को बचाता है। पूर्ण पता लगाने और गंभीरता नियमों के लिए, मैनुअल देखें।
Credactor का मूल नियम सेट एक समर्पित स्कैनर की तुलना में संकीर्ण है, और कुछ प्रदाता प्रारूप (उदाहरण के लिए SendGrid, Twilio, और Slack वेबहुक) का पता नहीं चलता है। इसकी ताकत उपचार (remediation) है: सबसे व्यापक पता लगाने के लिए इसे Gitleaks या TruffleHog के साथ जोड़ें, या अकेले चलाएँ।
इसे किसी अन्य स्कैनर के साथ जोड़ें, सब रिडक्ट करें (BETA)
Credactor अपने आप में खड़ा होता है, और संगति में और मजबूत होता है। पहले से Gitleaks या TruffleHog चलाते हैं? उनकी रिपोर्ट Credactor को दें और यह संयुक्त सेट को रिडक्ट करता है, अपने स्वयं के निष्कर्षों के खिलाफ डीडुप्लिकेट किया जाता है (ओवरलैप पर, उच्च गंभीरता जीतती है)। एक उपचार पास आपके स्कैन और उनके दोनों को कवर करता है:
gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .
--from-gitleaks / --from-trufflehog (या .credactor.toml में [ingest] तालिका) के लिए एक निर्देशिका लक्ष्य आवश्यक है। CI एकीकरण गाइड देखें।
और सुविधाएँ
- इंटरैक्टिव या बैच रिडक्शन;
--replacementके माध्यम से कस्टम प्रतिस्थापन स्ट्रिंग; git कमिट इतिहास को स्कैन करने के लिए--scan-history - सुरक्षित बैकअप:
--secure-delete(ओवरराइट करें और.bakहटाएँ; आकस्मिक पुनर्प्राप्ति के खिलाफ बाधा बढ़ाता है, फोरेंसिक गारंटी नहीं) या रिपो से बाहर बैकअप संग्रहीत करने के लिए--secure-backup-dir - इनलाइन
# credactor:ignoreऔर.credactorignoreअनुमति सूची (ग्लॉब,file:line, मान शाब्दिक) - प्रति-रिपो कॉन्फ़िग
.credactor.tomlके माध्यम से - आउट ऑफ़ द बॉक्स 29 स्रोत/कॉन्फ़िग/नोट्स फ़ाइल प्रकार (
.txtसहित); JSON शामिल करने के लिए--scan-json; फ़ाइल पढ़े जाने पर विफल होने के लिए--fail-on-error
स्कैन किए गए फ़ाइल प्रकार
.py.js.ts.jsx.tsx.sh.bash.env.cfg.ini.toml.yaml.yml.rb.go.java.php.cs.kt.tf.hcl.conf.config.properties.xml.pem.key.crt.txt
साथ ही .env.* / .env-* वेरिएंट (.env.local, .env.production) और SSH / निजी-कुंजी फ़ाइलें (id_rsa, id_dsa, id_ecdsa, id_ed25519), सभी एक्सटेंशन के बजाय फ़ाइल नाम से मिलान किए जाते हैं। JSON को डिफ़ॉल्ट रूप से बाहर रखा गया है क्योंकि API प्रतिक्रियाएँ उच्च गलत-सकारात्मक दर उत्पन्न करती हैं; इसे शामिल करने के लिए --scan-json जोड़ें। कमांड लाइन पर सीधे नामित फ़ाइल को स्कैन किया जाता है, भले ही उसका एक्सटेंशन इस सूची में न हो।
एग्ज़िट कोड
| कोड | अर्थ |
|---|---|
0 | कोई निष्कर्ष नहीं, या सभी हल हो गए |
1 | अनसुलझे निष्कर्ष |
2 | त्रुटि (उदाहरण: गलत पथ, खतरनाक --replacement, --ci --fix-all, या --fail-on-error अपठनीय फ़ाइल के साथ) |
आपूर्ति श्रृंखला को मजबूत बनाना (Supply-chain hardening)
एक सुरक्षा उपकरण को केवल चलाने के लिए ही नहीं, बल्कि स्थापित करने के लिए भी सुरक्षित होना चाहिए। Credactor की बिल्ड और रिलीज़ पाइपलाइन अंत-से-अंत तक मजबूत है; पूरा विवरण सुरक्षा दस्त में।
- शून्य रनटाइम निर्भरता। एक डिफ़ॉल्ट
pip install credactorमें कोई तृतीय-पक्ष पैकेज शामिल नहीं होता (केवल वैकल्पिक[encoding]अतिरिक्त), इसलिए स्थापना के समय कुछ भी जाँचने की आवश्यकता नहीं है। - हैश-पिन्ड टूलचेन। CI और रिलीज़ बिल्ड एक
--require-hashesलॉकफ़ाइल से इंस्टॉल करते हैं, बैकएंड सहित (python -m build --no-isolationएक पिन्ड setuptools के खिलाफ), इसलिए एक छेड़छाड़ की गई निर्भरता बिल्ड को विफल कर देती है। - स्रोत के खिलाफ आर्टिफैक्ट्स की बाइट-जाँच। हर पुश पर और हर प्रकाशन से पहले,
scripts/audit_wheel.pyव्हील और sdist की तुलना प्रतिबद्ध स्रोत से बाइट दर बाइट (sha256 बनामgit HEAD) करता है; कोई भी जोड़ी गई, गायब या परिवर्तित फ़ाइल गेट को विफल करती है, इसलिए एक बिल्ड चरण बिना ध्यान दिए कोड इंजेक्ट नहीं कर सकता। - SHA-पिन्ड, न्यूनतम-विशेषाधिकार CI। GitHub Actions कमिट SHAs पर पिन करते हैं, और वर्कफ़्लो टोकन संकीर्ण रहते हैं — डिफ़ॉल्ट रूप से
contents: read, केवल प्रकाशन कार्य के लिएid-token: write।
दस्तावेज़
| दस्तावेज़ | विवरण |
|---|---|
| सेटअप गाइड | स्थापना, कॉन्फ़िगरेशन, CI/CD एकीकरण |
| मैनुअल | पूरा संदर्भ: हर फ्लैग, मोड और संयोजन, प्रतिस्थापन और बैकअप व्यवहार, पता लगाना और गंभीरता, एग्ज़िट कोड, और सीमाएँ (व्यवहार परीक्षण-सत्यापित) |
| उदाहरण | आउटपुट के साथ सामान्य वर्कफ़्लो |
| CI एकीकरण | प्री-कमिट हुक, CI पाइपलाइन |
| सुरक्षा | थ्रेट मॉडल, सख्ती के उपाय, ज्ञात सीमाएँ |
| चेंजलॉग | संस्करण इतिहास |
| योगदान | विकास सेटअप, कोड शैली, PR प्रक्रिया |
| अस्वीकरण | सीमाएँ, सुरक्षित उपयोग, वारंटी |
लाइसेंस
Apache 2.0. LICENSE देखें।