crypto हुक कॉल की जगह पर ही कमज़ोर क्रिप्टोग्राफ़िक प्रिमिटिव पकड़ता है: अप्रचलित सिफ़र, असुरक्षित मोड या टूटा हुआ डाइजेस्ट। यह भाषा को पहचानता है और हर फ़ाइल को उसकी अपनी भाषा के नियमों से पढ़ता है, ताकि Rust फ़ाइल में Python का कोई कंस्ट्रक्ट कभी न पकड़ा जाए। यह crypto विशेषज्ञता के पीछे का नियतात्मक इंजन है, जिसे आप खुद scan या check मोड में चला सकते हैं।
चलाएँ
- कोडबेस स्कैन करें
- कोड का टुकड़ा जाँचें
npx lagune read crypto # scans the whole project
npx lagune read crypto --dir src # scans a directory
npx lagune read crypto --file hash.ts # scans a single file
npx lagune read crypto --lang javascript --pattern 'createCipher("aes-256-cbc", k)' # => weak
npx lagune read crypto --lang python --pattern 'hashlib.md5(data)' # => review
npx lagune read crypto --lang go --pattern 'sha256.Sum256(data)' # => safe
स्कैन ज़्यादा से ज़्यादा दो सेक्शन छापता है। Weak cryptography found निष्कर्षों का सेट है (DES/3DES/RC4/Blowfish/RC2, ECB मोड): इनमें से हर एक टूटा हुआ सिफ़र प्रिमिटिव है, इसलिए हुक नॉन-ज़ीरो एग्ज़िट कोड देता है। Cryptography to review manually ऐसे सुरागों का सेट है जिन पर हुक अकेले फ़ैसला नहीं कर सकता: MD5/SHA-1 डाइजेस्ट (सुरक्षा के काम के लिए टूटा हुआ, पर साधारण चेकसम के रूप में जायज़, इसलिए फ़ैसला इस्तेमाल के इरादे पर निर्भर है), सुरक्षा वाले संदर्भ में नॉन-क्रिप्टोग्राफ़िक RNG, या ऐसी तुलना जो टाइमिंग के लिहाज़ से असुरक्षित हो। कुछ न मिलने पर यह no weak cryptography found छापता है।
फ़ैसला कैसे पढ़ें
| फ़ैसला | मतलब |
|---|---|
weak | कोड का टुकड़ा टूटा हुआ सिफ़र प्रिमिटिव इस्तेमाल करता है (DES/3DES, RC4, Blowfish, RC2, या ECB मोड)। |
review | ऐसा प्रिमिटिव जिसका फ़ैसला इरादे पर निर्भर है: MD5/SHA-1 डाइजेस्ट, या सुरक्षा वाले संदर्भ में नॉन-क्रिप्टोग्राफ़िक RNG। |
safe | कोड का टुकड़ा क्रिप्टो इस्तेमाल करता है, और कोई कमज़ोर प्रिमिटिव नहीं मिला। |
invalid | कोड के टुकड़े में फ़ैसले के लिए कोई पहचानने लायक क्रिप्टोग्राफ़िक कंस्ट्रक्ट नहीं है। |
CLI विकल्प
| विकल्प | वैल्यू | विवरण |
|---|---|---|
--pattern | कोड का टुकड़ा | कोड का एक टुकड़ा जाँचें। कई जाँचने के लिए इसे दोहराएँ, हर लाइन में एक फ़ैसला। |
--lang | एक भाषा | --pattern के साथ ज़रूरी: javascript, python, go, java, kotlin, php, ruby, rust, csharp, c, cpp में से एक। |
--dir | एक डायरेक्टरी | स्कैन को एक डायरेक्टरी तक सीमित करें। इसे दोहराया जा सकता है और --file के साथ जोड़ा जा सकता है। |
--file | एक फ़ाइल | स्कैन को एक फ़ाइल तक सीमित करें। इसे दोहराया जा सकता है और --dir के साथ जोड़ा जा सकता है। |
कोई विकल्प न देने पर यह पूरा प्रोजेक्ट स्कैन करता है। --pattern के साथ --lang चाहिए, और इसे --dir या --file के साथ नहीं जोड़ा जा सकता।
चुनें कि यह क्या स्कैन करे
यह उन चीज़ों को छोड़ देता है जिन्हें Git अनदेखा करता है। और ज़्यादा छोड़ने के लिए, या Git की अनदेखी चीज़ों को भी स्कैन करने के लिए, crypto को उसकी अपनी सेटिंग्स दें:
npx lagune write add --ignore test/fixtures --checker crypto
{
"checkers": {
"crypto": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}
हर सेटिंग की जानकारी हुक कॉन्फ़िगर करें पेज पर है।
समर्थित भाषाएँ
स्कैन इन भाषाओं को फ़ाइल एक्सटेंशन से पहचानकर पढ़ता है, और हर भाषा को उसके अपने क्रिप्टोग्राफ़िक API के हिसाब से जाँचता है।
| भाषा | कमज़ोर सिफ़र (निष्कर्ष), डाइजेस्ट और RNG (समीक्षा) |
|---|---|
| JavaScript / TypeScript | createCipher, CryptoJS.DES/RC4, कोट में लिखा *-ecb; MD5/SHA-1 वाला createHash/subtle.digest; Math.random() |
| Python | pycryptodome का DES/ARC4/Blowfish.new, algorithms.TripleDES, MODE_ECB; hashlib.md5/sha1; random.* |
| Go | des.NewCipher, rc4.NewCipher, blowfish.NewCipher, NewECBEncrypter; md5/sha1.Sum; math/rand |
| Java / Kotlin | Cipher.getInstance("DES"/…/ECB"); MessageDigest.getInstance("MD5"), HmacMD5; java.util.Random |
| PHP | openssl_encrypt("des-…"/"…-ecb"), mcrypt_*; md5()/sha1(), hash("md5", …); rand()/mt_rand() |
| Ruby | OpenSSL::Cipher.new("des-…"), :ECB; Digest::MD5/SHA1; rand()/Random |
| Rust | Rc4::, Blowfish::, des::, ecb::; Md5::, Sha1::, Hmac<Md5>; SmallRng/XorShiftRng |
| C# | DES/TripleDES/RC2.Create, CipherMode.ECB; MD5/SHA1.Create, HMACMD5; new Random() |
| C / C++ | OpenSSL के DES_*/RC4/EVP_des_*, EVP_*_ecb; MD5()/SHA1(), EVP_md5; rand()/random() |
यह सोर्स कोड को टेक्स्ट की तरह पढ़ता है, इसलिए रनटाइम पर जोड़ा गया, किसी alias के पीछे छिपा, या ऐसे रूप में लिखा गया प्रिमिटिव जिसे यह नहीं पहचानता, बचकर निकल सकता है। इस टेबल को एक मज़बूत शुरुआती आधार मानें, पूरी सूची नहीं।
हुक न्यूनतम आधार की गारंटी देता है (ये कंस्ट्रक्ट मौजूद हैं): कुंजी प्रबंधन, IV का दोबारा इस्तेमाल और RSA पैडिंग ऐसे मामले हैं जिनमें विवेक चाहिए, और उन्हें अब भी crypto विशेषज्ञता कवर करती है।
अक्सर पूछे जाने वाले सवाल
crypto हुक को बिना किसी फ़्लैग के चलाएँ। टूटे हुए सिफ़र और ECB मोड निष्कर्ष हैं, जिन पर हुक नॉन-ज़ीरो एग्ज़िट कोड देता है। MD5/SHA-1 डाइजेस्ट समीक्षा के लिए एक सुराग है, क्योंकि वह सुरक्षा के काम के लिए टूटा हुआ है, पर साधारण चेकसम के रूप में जायज़ है।
सिर्फ़ सुरक्षा वाले संदर्भ में, समीक्षा के सुराग के रूप में, कभी अपने-आप बनने वाले निष्कर्ष के रूप में नहीं, क्योंकि जिटर या UI के क्रम के लिए रैंडमनेस का इस्तेमाल जायज़ है।
