हुक

crypto हुक: कमज़ोर क्रिप्टोग्राफ़ी पकड़ें

कमांड लाइन से कोडबेस में कमज़ोर क्रिप्टोग्राफ़िक प्रिमिटिव खोजें, या कोड के किसी एक टुकड़े को स्कोर दें।

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

स्कैन ज़्यादा से ज़्यादा दो सेक्शन छापता है। 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 / TypeScriptcreateCipher, CryptoJS.DES/RC4, कोट में लिखा *-ecb; MD5/SHA-1 वाला createHash/subtle.digest; Math.random()
Pythonpycryptodome का DES/ARC4/Blowfish.new, algorithms.TripleDES, MODE_ECB; hashlib.md5/sha1; random.*
Godes.NewCipher, rc4.NewCipher, blowfish.NewCipher, NewECBEncrypter; md5/sha1.Sum; math/rand
Java / KotlinCipher.getInstance("DES"/…/ECB"); MessageDigest.getInstance("MD5"), HmacMD5; java.util.Random
PHPopenssl_encrypt("des-…"/"…-ecb"), mcrypt_*; md5()/sha1(), hash("md5", …); rand()/mt_rand()
RubyOpenSSL::Cipher.new("des-…"), :ECB; Digest::MD5/SHA1; rand()/Random
RustRc4::, 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 के पीछे छिपा, या ऐसे रूप में लिखा गया प्रिमिटिव जिसे यह नहीं पहचानता, बचकर निकल सकता है। इस टेबल को एक मज़बूत शुरुआती आधार मानें, पूरी सूची नहीं।

tip

हुक न्यूनतम आधार की गारंटी देता है (ये कंस्ट्रक्ट मौजूद हैं): कुंजी प्रबंधन, IV का दोबारा इस्तेमाल और RSA पैडिंग ऐसे मामले हैं जिनमें विवेक चाहिए, और उन्हें अब भी crypto विशेषज्ञता कवर करती है।

अक्सर पूछे जाने वाले सवाल

crypto हुक को बिना किसी फ़्लैग के चलाएँ। टूटे हुए सिफ़र और ECB मोड निष्कर्ष हैं, जिन पर हुक नॉन-ज़ीरो एग्ज़िट कोड देता है। MD5/SHA-1 डाइजेस्ट समीक्षा के लिए एक सुराग है, क्योंकि वह सुरक्षा के काम के लिए टूटा हुआ है, पर साधारण चेकसम के रूप में जायज़ है।

सिर्फ़ सुरक्षा वाले संदर्भ में, समीक्षा के सुराग के रूप में, कभी अपने-आप बनने वाले निष्कर्ष के रूप में नहीं, क्योंकि जिटर या UI के क्रम के लिए रैंडमनेस का इस्तेमाल जायज़ है।