
फ़ाइल शेयरों के लिए क्रेडेंशियल और संवेदनशील डेटा एक्सपोज़र ट्राइएज
फ़ाइल शेयरों के लिए क्रेडेंशियल और संवेदनशील डेटा एक्सपोज़र की ट्राइएज।
जब कोई खुला शेयर मिलता है, तो सवाल कभी यह नहीं होता कि "क्या इस रिपो में कोई लीक हुई कुंजी है"। सवाल होता है "अभी क्या एक्सपोज़ हुआ, और कारोबार बंद होने से पहले मुझे क्या रोल करना होगा।" sift इसी सवाल के लिए बनाया गया है: उच्च रिकॉल, तेज़ समीक्षा कतार, और एक फ़ीडबैक लूप, ताकि जो भी चीज़ आप आँखों से पहचानें, वह एक नियम बन जाए जो बाकी की दो सौ प्रतियों को खोज ले।

Python 3.11+, केवल स्टैंडर्ड लाइब्रेरी। कोई pip install नहीं, कोई इंटरनेट नहीं, कोई बिल्ड स्टेप नहीं। यह एक लॉक-डाउन IR लैपटॉप पर चलता है, और वहीं इसकी ज़रूरत होती है।```bash sift survey \fileserver\openshare # how big is this thing sift copy \fileserver\openshare C:\IR\case-4471 # take a throttled copy sift scan C:\IR\case-4471 # scan it, opens the triage UI
स्कैनिंग इन प्लेस भी काम करता है। पहले नकली क्रेडेंशियल्स के शेयर पर इसे आज़माएँ:```bash
sift demo C:\temp\demoshare
sift.cmd एक लॉन्चर है जो किसी भी निर्देशिका से काम करता है। पूर्ण पथ के बजाय sift टाइप करने के लिए, C:\Dev\sift को PATH में जोड़ें:```bash
setx PATH "%PATH%;C:\Dev\sift"
जिस मशीन पर Python बिल्कुल नहीं है, `python build_portable.py` बनाता है
`dist/sift-secrets-<version>-portable-win64.zip`: आधिकारिक python.org
एम्बेडेबल रनटाइम और यह सोर्स ट्री, बंडल किए गए `sift.cmd` के ज़रिए
अनज़िप-और-चलाएं। ~11 MB, कोई इंस्टॉल नहीं, कोई एडमिन अधिकार नहीं, और इसमें कुछ भी
compiled या repacked नहीं है — `build_portable.py` में docstring देखें कि यह
एक लॉक-डाउन IR लैपटॉप पर frozen .exe से बेहतर क्यों है।
---
## gitleaks या trufflehog ही क्यों नहीं
दोनों अच्छे टूल हैं जो एक अलग समस्या का समाधान करते हैं।
वे CI के लिए बनाए गए **precision** टूल हैं, जहाँ एक false positive डेवलपर की
दोपहर बर्बाद कर देता है, इसलिए वे मुख्य रूप से ऐसी चीज़ों पर काम करते हैं जो किसी
ज्ञात वेंडर API कुंजी की तरह दिखती हैं। trufflehog और आगे जाता है और ऐसे रहस्यों को
पसंद करता है जिन्हें वह वेंडर के API को कॉल करके *verify* कर सकता है, जो एक
वास्तव में बेहतरीन संकेत है जिसे regex दोहरा नहीं सकता।
Share triage इस अर्थशास्त्र को उलट देता है। एक इंसान पहले से ही हर hit को पढ़ रहा है,
इसलिए एक false positive की कीमत तीन सेकंड है। जो आपको नुकसान पहुँचाता है वह एक **miss** है।
वेंडर API कुंजियाँ निश्चित रूप से शेयरों पर लीक होती हैं - एक web-root बैकअप, एक deployment
स्क्रिप्ट, किसी का प्रोजेक्ट फ़ोल्डर जो विभागीय ड्राइव पर कॉपी किया गया है, और एक
`.env` है जिसमें एक लाइव Stripe कुंजी है। वे पकड़े जाने लायक हैं, और sift उन्हें पकड़ता है।
लेकिन वे वह हिस्सा भी हैं जिसे gitleaks और trufflehog पहले से अच्छी तरह संभालते हैं।
कमी बाकी सब कुछ है, और फ़ाइल शेयर पर यह अधिकांश भाग है:
| CI स्कैनर क्या मिस करते हैं | वे इसके पास से क्यों गुज़र जाते हैं |
|---|---|
| `web.config` जिसमें SQL कनेक्शन स्ट्रिंग है | कोई ज्ञात कुंजी प्रारूप नहीं, सत्यापन के लिए कोई वेंडर नहीं |
| `Map-Drives.ps1` जिसमें `net use ... /user:` | बस उसके बाद एक शब्द वाला शेल कमांड |
| `New Hire Setup Guide.docx` | Office फ़ाइल, बाइनरी के रूप में पढ़ी जाती है, पूरी तरह से छोड़ दी जाती है |
| `unattend.xml`, GPP `Groups.xml` | Windows deployment आर्टिफैक्ट जिनके लिए किसी ने डिटेक्टर नहीं लिखा |
| `confCons.xml`, `.rdg`, WinSCP.ini | प्रतिवर्ती रूप से संग्रहीत पासवर्ड, लेकिन कोई "secret format" नहीं |
| `passwords.xlsx` | यह एक ZIP है। प्लेन-टेक्स्ट स्कैनर बाइनरी देखते हैं और आगे बढ़ जाते हैं |
| `.kdbx`, `.pfx`, `id_rsa` | अपारदर्शी बाइट्स - *filename* ही निष्कर्ष है |
| एक `.bak` जिसके अंदर कनेक्शन स्ट्रिंग है | बाइनरी, इसलिए कभी नहीं पढ़ी जाती |
sift उन्हें कवर करता है, अपने स्वयं के वेंडर-कुंजी नियम उपलब्ध कराता है, और **अन्य टूल के
नियम पैक और निष्कर्षों को आयात करता है** - gitleaks TOML, Kingfisher/Titus YAML, और
trufflehog JSON - ताकि आपको टूलों के बीच चयन न करना पड़े।
सबसे नज़दीकी पूर्व कला [Snaffler](https://github.com/SnaffCon/Snaffler) है, जो
इसके फ़ाइलनाम-और-वर्गीकरण वाले आधे हिस्से में उत्कृष्ट है और फ़ाइलनाम नियमों के लिए
प्रत्यक्ष प्रेरणा है। जो चीज़ उसके पास नहीं है - और जो एक बार आपके पास 400 hits होने पर
वास्तविक अड़चन साबित होती है - वह एक समीक्षा लूप है।
---
## लूप
1. **स्कैन** करें शेयर को।
2. **कतार पर काम करें।** प्रत्येक निष्कर्ष अपनी आस-पास की पंक्तियों को हाइलाइट किए गए मैच के साथ दिखाता है। तीर कुंजियाँ संदर्भ को चौड़ा करती हैं; एक क्लिक उस पंक्ति पर VS Code में पूरी फ़ाइल खोलता है, या Notepad में।
3. **एक miss पहचानें।** आप पहचान लेंगे। इसे preview में हाइलाइट करें और `r` दबाएँ।
4. **sift पैटर्न प्रस्तावित करता है** और लाइव बताता है कि पहले से पढ़ी गई हर चीज़ में प्रत्येक पैटर्न कितनी बार मेल खाएगा।
5. **इसे सहेजें।** कैश्ड रीस्कैन में लगभग एक सेकंड लगता है, और नए hits कतार में आपके मौजूदा ट्राइएज निर्णयों को छुए बिना दिखाई देते हैं।
चरण 5 वह हिस्सा है जो बाकी को करने लायक बनाता है। निष्कर्ष `(path, rule, line, value-hash)` पर कुंजीबद्ध होते हैं, इसलिए एक रीस्कैन उन्हीं पंक्तियों को फिर से सम्मिलित करता है और आपकी स्थिति, नोट्स और owner साथ चलते हैं। इसके बिना आपको हर पुनरावृत्ति पर वही 300 hits फिर से समीक्षा करनी पड़ती और तीसरी बार में ही हार मान लेते।
---
## कमांड्स```bash
# size it up first: file count, total bytes, biggest folders, transfer estimates
sift survey \\fileserver\share
# take a rate-limited local copy (resumable; gentle = 5 MB/s by default)
sift copy \\fileserver\share C:\IR\case-4471 --speed gentle
# scan a share and open the triage UI
sift scan \\fileserver\share
# maximum recall: more noise, but a human is reading anyway
sift scan D:\dfs\dept --tier 3
# re-open the UI over the most recent scan
sift ui
# build a share of fabricated credentials, scan it, open the UI
sift demo C:\temp\demoshare
# inherit other tools' vendor-key rules, then use them in the live rescan loop
sift import-rules gitleaks.toml # gitleaks TOML
sift import-rules path/to/kingfisher/data/rules # a directory of YAML
# pull in what the other scanners found, into the same queue
trufflehog filesystem \\fileserver\share --json > th.json
sift import-findings th.json
# hand off to the incident record (redacted unless you say otherwise)
sift export --fmt pdf --status confirmed --out ir-4471.pdf
sift export --fmt csv --out ir-4471.csv
sift export --fmt pdf --no-redact # plaintext; handle as evidence
sift rules # what is loaded
sift selftest # detection tests against a synthetic share
# ask vendors whether confirmed findings are still live. NETWORK. Opt-in.
sift validate --status confirmed
जहाँ भी sift दिखाई दे, वहाँ आप C:\Dev\sift निर्देशिका से
python -m sift का उपयोग कर सकते हैं।
निष्कर्ष %LOCALAPPDATA%\sift\ के अंतर्गत एक प्रति-लक्ष्य फ़ोल्डर में जाते हैं, कभी कार्यशील निर्देशिका में नहीं - डेटाबेस में प्लेनटेक्स्ट क्रेडेंशियल होते हैं, और अपने होम निर्देशिका से टूल चलाने पर वहाँ चुपचाप एक नहीं गिरना चाहिए। प्रत्येक शेयर को अपना स्वयं का स्टोर मिलता है, इसलिए दो एंगेजमेंट कभी भी ट्राइएज कतार साझा नहीं करते। sift ui बिना किसी तर्क के सबसे हालिया को फिर से खोलता है; --data DIR ओवरराइड करता है।
कस्टम नियम वैश्विक होते हैं, %LOCALAPPDATA%\sift\user-rules.json पर, इसलिए एक एंगेजमेंट के दौरान लिखा गया पैटर्न अगले शेयर पर आपकी मदद करता है।
दोनों UI के हेडर में, पथ बॉक्स के बगल में, और CLI पर हैं।
आकार जाँचें एक केवल-स्टेट वॉक है। कुछ भी नहीं खोला जाता, इसलिए यह SMB पर भी सस्ता है, और यह आपको फ़ाइल संख्या, कुल बाइट्स, सबसे बड़े फ़ोल्डर, एक्सटेंशन द्वारा विभाजन, sift वास्तव में कितना पढ़ेगा, और प्रत्येक गति पर एक प्रतिलिपि कितनी देर लेगी, यह बताता है। किसी अज्ञात DFS रूट पर स्कैनर लगाना और इंतज़ार करना ही है कि दोपहर कैसे गायब हो जाती है।
स्थानीय रूप से कॉपी करें पहले शेयर को एक स्थानीय फ़ोल्डर में खींचता है। यह करना उचित है क्योंकि:
स्थानांतरण दर-सीमित है, डिफ़ॉल्ट 5 MB/s। दोपहर 2 बजे प्रोडक्शन फ़ाइल सर्वर के लिंक को संतृप्त करना आपकी जाँच को दूसरी घटना में बदल देता है। जब आप जानते हैं कि पथ निष्क्रिय है तो इसे खोलें।
| गति | दर |
|---|---|
| gentle (डिफ़ॉल्ट) | 5 MB/s |
| normal | 25 MB/s |
| fast | 100 MB/s |
| unlimited | लिंक जो भी दे |
स्थानांतरण फिर से शुरू होते हैं: समान आकार और mtime वाली गंतव्य फ़ाइल छोड़ दी जाती है, इसलिए 80% पर बाधित एक अधिग्रहण वहीं से जारी रहता है जहाँ वह रुका था। जो फ़ाइलें लॉक या अस्वीकृत हैं उन्हें दर्ज किया जाता है और रन को रोकने के बजाय छोड़ दिया जाता है।
PDF, CSV, MD, और JSON, UI हेडर से या sift export --fmt से।
PDF वह है जो घटना रिकॉर्ड को सौंपी जाती है: लक्ष्य के साथ एक कवर पेज, गंभीरता और ट्राइएज स्थिति द्वारा कुल, सबसे अधिक बार आने वाले नियम, फ़ाइलों में पुन: उपयोग किए गए मान, फिर गंभीरता द्वारा समूहीकृत निष्कर्ष। यह बिना किसी PDF लाइब्रेरी के सीधे उत्पन्न होता है, इसलिए यह ऐसी मशीन पर काम करता है जिसने कभी pip नहीं देखा।
एक्सपोर्ट डिफ़ॉल्ट रूप से संपादित (redacted) होते हैं। मान मास्क किए जाते हैं, हर पृष्ठ बैनर-चिह्नित होता है, और एंडपॉइंट केवल एक स्पष्ट redact=0 पर मास्किंग अक्षम करता है - एक छोटा या गलत अनुरोध लीक नहीं कर सकता। UI में redaction बंद करने के लिए चेतावनी संवाद की पुष्टि आवश्यक होती है, और परिणामी फ़ाइल हर पृष्ठ पर UNREDACTED - CONTAINS PLAINTEXT CREDENTIALS बैनर-चिह्नित होती है।
निष्कर्ष डेटाबेस अभी भी वास्तविक मान रखता है, क्योंकि एक विश्लेषक को यह जानना आवश्यक है कि कौन सा पासवर्ड लीक हुआ ताकि यह जान सके कि क्या बदलना है। सीमा वह है जो टूल से बाहर जाती है।
सब कुछ क्लिक करने योग्य है। परिणाम सूची के शीर्ष पर क्रमबद्ध नियंत्रण गंभीरता, फ़ाइल पथ, नियम, ट्राइएज स्थिति, या सबसे हालिया द्वारा पुन: क्रमबद्ध करता है, इसे उलटने के लिए एक बटन के साथ। साइडबार फ़ैक्ट गंभीरता, श्रेणी, नियम और पुन: उपयोग किए गए मान द्वारा फ़िल्टर करते हैं। ट्राइएज, संदर्भ विस्तार, फ़ाइल खोलना और नियम निर्माण सभी बटन हैं।
नीचे दिए गए कीबोर्ड शॉर्टकट एक लंबी कतार के लिए त्वरक हैं, इसे चलाने का एकमात्र तरीका नहीं।
स्नैपशॉट बटन हाइलाइट किए गए स्निपेट को घटना टिकट में पेस्ट करने के लिए PNG में रेंडर करता है; स्निपेट कॉपी करें मार्कडाउन के रूप में भी ऐसा ही करता है।
UI एक ब्राउज़र विंडो में लाइव प्लेनटेक्स्ट क्रेडेंशियल प्रस्तुत करता है, इसलिए:
127.0.0.1 से बाइंड होता है, और --unsafe-bind के बिना कुछ और अस्वीकार करता है;SameSite=Strict कुकी में रखा जाता है;Host हेडर को मान्य करता है, इसलिए एक शत्रुतापूर्ण पृष्ठ उस पर DNS-rebind नहीं कर सकता;/api/context मनमाना फ़ाइल पठन नहीं है और /api/open मनमाना प्रक्रिया लॉन्च नहीं है।निष्कर्ष डेटाबेस में डिज़ाइन द्वारा प्लेनटेक्स्ट क्रेडेंशियल होते हैं - एक IR विश्लेषक को यह जानना आवश्यक है कि कौन सा पासवर्ड लीक हुआ ताकि यह जान सके कि क्या बदलना है। %LOCALAPPDATA%\sift\<target>\findings.db को साक्ष्य के रूप में मानें: शेयर के समान हैंडलिंग, और एंगेजमेंट बंद होने पर इसे हटा दें। यदि यह घटना की सीमा से बाहर जाएगा तो --redact का उपयोग करें।
और स्पष्ट बात: sift केवल उन्हीं प्रणालियों पर चलाएँ जिन्हें एक्सेस करने के लिए आप अधिकृत हैं।
sift/rules_builtin.py - सामग्री नियम। sift/rules_filename.py - फ़ाइलनाम नियम। दोनों रॉ-स्ट्रिंग पैटर्न वाले सादे Python हैं, इसलिए वे पठनीय और तुलनीय (diffable) हैं; उपयोगकर्ता नियम .sift/user-rules.json पर JSON में रहते हैं।
तीन स्तर आपको परिशुद्धता के बदले रिकॉल का व्यापार करने देते हैं:
cpassword, NTLM डंप, LDAP बाइंड पासवर्ड। अकेला आकार ही प्रमाण है।एक नियम min_digits, min_lowercase, min_uppercase, और min_special भी रख सकता है, इसलिए एक एकल शोरगुल वाला नियम बाकी को छुए बिना कड़ा किया जा सकता है, और examples - ऐसी स्ट्रिंग जिनसे उसे अभी भी मेल खाना चाहिए।
examples उपयोगी आधा है। sift selftest हर नियम को उन स्ट्रिंग्स के विरुद्ध चलाता है जिनके लिए वह लिखा गया था, पूरे पथ से: मिलान, निष्कर्षण, फिर दमन फ़िल्टर। वह अंतिम चरण ही मायने रखता है, क्योंकि वास्तव में होने वाला प्रतिगमन कोई ऐसा पैटर्न नहीं है जो मेल खाना बंद कर दे - यह एक शोर फ़िल्टर है, जिसे कहीं और अच्छे कारणों से कड़ा किया गया है, और बाहर जाते समय चुपचाप एक वास्तविक निष्कर्ष को निगल रहा है।
यह तुरंत अपनी उपयोगिता सिद्ध करता है। मौजूदा नियमों में examples जोड़ने से एक जीवित अंतर सामने आया: एक अंडरस्कोर एक शब्द वर्ण है, इसलिए सामान्य-असाइनमेंट नियम में अग्रणी \b ने DB_PASSWORD, MYSQL_PASSWORD, या REDIS_PASSWORD के अंदर मेल खाने से इनकार कर दिया - अस्तित्व में सबसे सामान्य क्रेडेंशियल चर नामों में से तीन, चुपचाप मिस हो गए। उदाहरण स्पष्ट रूप से सही दिखता था और मेल नहीं खाता था, जो ठीक इसी के लिए है।
UI में आपके द्वारा लिखे गए नियमों को यह मुफ्त मिलता है: आपके द्वारा चुनी गई पंक्ति नियम के उदाहरण के रूप में सहेजी जाती है, इसलिए छह महीने बाद संपादित किया गया नियम आपको बताता है कि उसने उस चीज़ से मेल खाना कब बंद किया जिसने आपको इसे लिखने के लिए प्रेरित किया।
sift import-rules एक gitleaks .toml, एक Kingfisher/Titus-शैली .yml, या उनमें से एक निर्देशिका लेता है। Kingfisher के पैक के विरुद्ध यह 1,082 में से 1,073 नियम आयात करता है, उनकी एन्ट्रॉपी सीमाएँ, अंक और केस आवश्यकताएँ और examples को साथ लाता है। YAML को sift/yamlmini.py द्वारा पढ़ा जाता है, जो इन पैकों द्वारा उपयोग किए जाने वाले सबसेट के लिए एक रीडर है - कोई निर्भरता नहीं, और यह एंकर और टैग को समझने का दिखावा करने के बजाय उन पर raise करता है।
आते समय दो चीज़ें जानबूझकर हटाई जाती हैं:
validation: ब्लॉक, जो प्रति नियम एक URL निर्दिष्ट करते हैं। sift केवल validate.py में हार्डकोड किए गए होस्ट से संपर्क करता है। एक नियम पैक जो किसी एंडपॉइंट को निर्दिष्ट कर सकता है, यह चुन रहा होगा कि आपके निष्कर्ष कहाँ भेजे जाएँ, और एक नियम फ़ाइल डेटा है, निर्णय नहीं।[[:alnum:]] एक POSIX क्लास है; Python इसे शाब्दिक वर्णों के एक सेट के रूप में पढ़ता है, इसे खुशी से संकलित करता है, और गलत चीज़ से मेल खाता है। अनुवाद प्रत्येक नियम के examples के विरुद्ध जाँचा जाता है, इसलिए एक पैटर्न जो संकलन से बच गया लेकिन अर्थ बदल गया, चुपचाप कभी न चलने के बजाय अस्वीकार कर दिया जाता है। Kingfisher के बारह नियम उस जाँच में विफल होते हैं और आयात नहीं किए जाते।sift का अपना दमन किसी दिए गए उदाहरण को नष्ट करेगा या नहीं, यह नियम को अयोग्य नहीं ठहराता - वे पैक जानबूझकर नकली नमूने भेजते हैं (keyXXXXXXXX, ...EXAMPLE), इसलिए प्लेसहोल्डर फ़िल्टर उदाहरण के बारे में सही है और पैटर्न के बारे में कुछ नहीं कहता। उस पर सख्त होने से अंतर खींचे जाने से पहले 121 कार्यशील नियम नष्ट हो गए।
सामान्य गुप्त नियम शोर के कारण छोड़ दिए जाते हैं, इसलिए शोर फ़िल्टर पैटर्न के समान सावधानी से ट्यून किए जाते हैं। एक वास्तविक 6,000-फ़ाइल ट्री के विरुद्ध मापा गया, नीचे दिए गए दमन नियमों ने निष्कर्षों को 1,088 से 257 तक काट दिया, परीक्षण कोर्पस पर रिकॉल का कोई नुकसान नहीं:
password: process.env.DB_PASS एक चर है, मान नहीं। यह एक दमन स्रोत ट्री में अधिकांश सामान्य-नियम शोर हटा देता है।def login(user: str, password: str) एक सिग्नेचर है।.wrangler, .next, site-packages, node_modules, …) और मिनिफाइड बंडल और सोर्स मैप छोड़ दिए जाते हैं। मशीन-जनित पाठ केवल मशीन-जनित गलत सकारात्मक उत्पन्न करता है।जानबूझकर ढीली पूंछ वाला कोई https://user:pass@host सामग्री नियम नहीं है। स्पष्ट संस्करण एक dev ट्री पर 476 बार चला, क्योंकि मिनिफाइड JSON में कोई व्हाइटस्पेस नहीं होता और पैटर्न एक URL से उद्धरणों और अल्पविरामों के पार तब तक चलता रहा जब तक उसे सैकड़ों वर्ण बाद एक असंबंधित @ नहीं मिला।
python tests/run_all.py
बारह सूट: एक सिंथेटिक शेयर के विरुद्ध पता लगाना (इसमें विभाजित: "सीआई स्कैनर पहले से क्या पकड़ लेते हैं", "यह टूल जिस अंतर को लक्षित करता है", और "डिकॉय जिन्हें शांत रहना चाहिए"), कमांड लाइन, नियम-सुझाव रैंकिंग, सर्वेक्षण और थ्रॉटल्ड अधिग्रहण (दीवार घड़ी के विरुद्ध रेट लिमिट मापने सहित), पीडीएफ राइटर (पाठक के तरीके से वापस पार्स किया गया, यह साबित करने के लिए कि रिडक्शन पृष्ठ सामग्री तक पहुँच गया), gitleaks/trufflehog इम्पोर्टर, HTTP API जिसमें हर सुरक्षा गार्ड शामिल है, UI का स्थैतिक विश्लेषण, और बड़ी फ़ाइलों के लिए ब्लॉक रीडर (यह दावा करना कि अंतिम ब्लॉक में एक गुप्त रहस्य पूरी फ़ाइल में अपनी वास्तविक पंक्ति संख्या की रिपोर्ट करता है)।
खेलने के लिए एक शेयर पाने हेतु:```bash
sift demo C:\temp\demoshare
उस कोष में हर क्रेडेंशियल काल्पनिक है।
दो स्तर, क्योंकि उनमें बहुत अलग जोखिम होता है।
चेकसम मुफ़्त हैं और हमेशा चालू रहते हैं। ghp_, npm_, Atlassian ATATT,
Bitbucket ATCTT और GitLab के रूटेबल glpat- टोकन सभी अपने ही बॉडी पर CRC32 रखते हैं। इसे दोबारा गणना करने से ऑफ़लाइन वह उत्तर मिलता है जिसके लिए पहले इंटरनेट की ज़रूरत होती थी:
क्या यह असली टोकन है, या वह उदाहरण है जिसे किसी ने README में चिपकाया था? निष्कर्षों को कतार में checksum ok या malformed टैग किया जाता है। चेकसम रूप साबित करता है, जीवन नहीं — एक सुगठित टोकन एक साल पहले रद्द किया जा चुका हो सकता है।
लाइव सत्यापन तब तक बंद रहता है जब तक आप इसे चलाते नहीं। sift validate विक्रेता से पूछता है कि क्या कोई क्रेडेंशियल अभी भी काम करता है। यह एक अलग कमांड है, scan पर कोई फ़्लैग नहीं, और यह आपको एक प्रॉम्प्ट पर validate टाइप करने पर मजबूर करता है जो पहले हर उस एंडपॉइंट का नाम लेता है जिससे वह संपर्क करेगा। सुरक्षा नियम:
sift/validate.py में हार्डकोडेड हैं। कोई भी नियम — बिल्ट-इन, उपयोगकर्ता-लिखित, या किसी और के पैक से आयातित — URL प्रदान नहीं कर सकता। इसके बिना, एक नियम पैक आयात करना ही शेयर पर मौजूद हर क्रेडेंशियल को पैक लेखक की पसंद के पते पर भेजने के लिए पर्याप्त होता।--redact स्टोर के विरुद्ध चलने से इनकार करता है: यदि मान मास्क किए गए हैं क्योंकि डेटाबेस घटना की सीमा छोड़ रहा है, तो प्लेनटेक्स्ट संचारित करना ठीक वही चीज़ है जिससे बचाव किया जा रहा है।validation-log.json में लिखी जाती है — प्रदाता, एंडपॉइंट, समय, परिणाम — ताकि सहभागिता ठीक-ठीक बता सके कि किससे संपर्क किया गया था।सत्यापन प्रयास क्रेडेंशियल स्वामी के ऑडिट लॉग में, उस समय, आपके पते के साथ दर्ज होते हैं। यह कभी-कभी ठीक वही होता है जो आप चाहते हैं और कभी-कभी किसी प्रतिद्वंद्वी को संकेत देता है जो देख रहा है। इसे चलाने से पहले तय करें; इसीलिए यह पूछता है।
वर्तमान में GitHub, npm, Slack और Stripe। trufflehog अभी भी कहीं अधिक सत्यापित करता है — इसे चलाएँ और दोनों पाने के लिए import-findings करें।
import-findings करें; सत्यापित हिट शीर्ष पर क्रमबद्ध हो जाते हैं।.kdbx या .pfx नाम से रिपोर्ट किया जाता है; sift उसे खोलने का प्रयास नहीं करता।name=value में पुनः संयोजित किया जाता है, जिसके बिना गुप्त शब्द और उसका मान अलग-अलग कॉलम में बैठते हैं और कोई नियम जोड़ी नहीं देखता।.7z, .rar और नेस्टेड आर्काइव चिह्नित किए जाते हैं लेकिन निकाले नहीं जाते। केवल ZIP-आधारित प्रारूप और .eml संदेश अंदर पढ़े जाते हैं।--max-size से बड़ी फ़ाइलें ब्लॉकों में पढ़ी जाती हैं, कैश नहीं की जातीं। उन्हें स्कैन किया जाता है (4 GB .bak में एक कनेक्शन स्ट्रिंग उसकी वास्तविक पंक्ति संख्या पर मिल जाती है), लेकिन टेक्स्ट कैश केवल उतना ही रखता है जितना फिट होता है, इसलिए एक-सेकंड का कैश्ड पुनः-स्कैन उन्हें कवर नहीं करता — एक नया नियम अगले पूर्ण स्कैन पर बड़ी फ़ाइल तक पहुँचता है।Apache-2.0. देखें LICENSE।
पहचान परीक्षण कोष (sift/selftest.py, tests/) में जानबूझकर प्रारूप-सही लेकिन काल्पनिक क्रेडेंशियल हैं; उन पथों के लिए सीक्रेट-स्कैनिंग अलर्ट .github/secret_scanning.yml के माध्यम से दबाए गए हैं।
| Flag | प्रभाव |
|---|
--tier 1|2|3 | रिकॉल डायल। 1 = उच्च संकेत, 2 = डिफ़ॉल्ट, 3 = कुछ भी न छूटे |
--redact | स्टोर और एक्सपोर्ट में मान मास्क करें। यदि DB घटना की सीमा से बाहर जाता है तो उपयोग करें |
--no-ui | स्टोर भरें और बाहर निकलें, स्क्रिप्टेड रन के लिए |
--no-browser | UI सर्वर शुरू करें लेकिन ब्राउज़र न खोलें (RDP पर उपयोगी) |
--include/--exclude GLOB | वॉक को सीमित करें |
--no-archives | docx/xlsx/zip कंटेनर न खोलें |
--no-strings | बाइनरी पर strings पास न चलाएँ |
--no-large | --max-size से बड़ी फ़ाइलों को ब्लॉक में पढ़ने के बजाय छोड़ दें |
--jobs N | वर्कर प्रोसेस (डिफ़ॉल्ट: auto) |
--max-size MB | इससे ऊपर की फ़ाइलें छोड़ें (डिफ़ॉल्ट 25) |
--port N | UI पोर्ट (डिफ़ॉल्ट 8973) |
| कुंजी | क्रिया |
|---|
j / k | अगला / पिछला निष्कर्ष |
↑ / ↓ | संदर्भ ऊपर / नीचे विस्तृत करें |
c / f | पुष्टि करें / गलत सकारात्मक चिह्नित करें |
x | बल्क ट्राइएज के लिए चयन टॉगल करें |
o / n | VS Code में लाइन पर खोलें / फ़ाइल को Notepad में खोलें |
r | हाइलाइट किए गए पाठ से एक नियम बनाएँ |
y | मान कॉपी करें |
/ | खोजें |
.doc/.xls/.pdf (2007-पूर्व और PDF) वास्तविक पार्सर के बजाय स्ट्रिंग्स पास से गुजरते हैं, इसलिए उन पर रिकॉल OOXML प्रारूपों की तुलना में कम है।