Hooks

hook crypto: اكتشف التشفير الضعيف

افحص قاعدة الكود بحثًا عن عناصر التشفير الضعيفة، أو قيّم مقتطفًا واحدًا، من سطر الأوامر.

ينبّه hook crypto إلى عناصر التشفير الضعيفة في موضع الاستدعاء: خوارزمية تشفير مُهملة، أو وضع غير آمن، أو دالة تجزئة مكسورة. وهو مدرك للغة البرمجة، يقرأ كل ملف بقواعده الخاصة فلا يُنبَّه أبدًا إلى بنية Python في ملف Rust، وهو المحرك الحتمي خلف التخصص 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): كل منها عنصر تشفير مكسور، لذلك ينتهي hook برمز خروج غير صفري. و Cryptography to review manually مجموعة مؤشرات لا يستطيع الحكم عليها وحده: دالة تجزئة MD5/SHA-1 (مكسورة للاستخدام الأمني، لكنها مشروعة كمجموع اختباري عادي، فالنية هي التي تحسم)، أو مولّد أرقام عشوائية غير تشفيري في سياق أمني، أو مقارنة غير آمنة من حيث التوقيت. والتشغيل النظيف يطبع no weak cryptography found.

كيف تقرأ الحكم​

الحكمالمعنى
weakيستخدم المقتطف عنصر تشفير مكسورًا (DES/3DES، أو RC4، أو Blowfish، أو RC2، أو وضع ECB).
reviewعنصر يعتمد على النية: دالة تجزئة MD5/SHA-1، أو مولّد أرقام عشوائية غير تشفيري في سياق أمني.
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"] }
}
}

تشرح صفحة إعداد hooks كل إعداد.

اللغات المدعومة​

يقرأ الفحص هذه اللغات، بحسب امتداد الملف، ويُفحص كل منها مقابل واجهات التشفير البرمجية الخاصة به.

اللغةخوارزميات التشفير الضعيفة (ملاحظة) ودوال التجزئة و 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()
أفضل جهد، لا تغطية شاملة

يقرأ الكود المصدري كنص، لذلك قد يفلت منه عنصر يُجمَّع وقت التشغيل، أو يختبئ خلف اسم بديل، أو يُكتب بصيغة لا يتعرف عليها. تعامل مع الجدول كنقطة بداية قوية، لا كجرد كامل.

تلميح

يضمن hook الحد الأدنى (وجود هذه البنى): أما إدارة المفاتيح، وإعادة استخدام IV، وحشو RSA، فهي أحكام يظل التخصص crypto يغطيها.

الأسئلة الشائعة

شغّل hook crypto دون أي خيار. خوارزميات التشفير المكسورة ووضع ECB ملاحظات تنتهي برمز خروج غير صفري. أما دالة التجزئة MD5/SHA-1 فمؤشر للمراجعة، لأنها مكسورة للاستخدام الأمني لكنها مشروعة كمجموع اختباري عادي.

فقط كمؤشر للمراجعة في سياق أمني، لا كملاحظة تلقائية أبدًا، لأن العشوائية مشروعة لإضافة تفاوت زمني أو لترتيب عناصر الواجهة.