Хук 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
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 (зламаний для потреб безпеки, але цілком доречний як звичайна контрольна сума, тож усе вирішує намір), некриптографічний генератор випадкових чисел у контексті безпеки або порівняння, вразливе до атак за часом. Чистий запуск виводить 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.
Підтримувані мови
Перевірка читає ці мови, визначаючи їх за розширенням файлу, і звіряє кожну з її власними криптографічними API.
| Мова | Слабкі шифри (знахідка) і геші та генератори випадкових чисел (перегляд) |
|---|---|
| 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() |
Хук читає вихідний код як текст, тож примітив, зібраний під час виконання, прихований за псевдонімом або записаний у формі, яку хук не розпізнає, може прослизнути. Сприймайте таблицю як надійну відправну точку, а не як повний перелік.
Хук гарантує мінімум (ці конструкції існують): керування ключами, повторне використання IV і доповнення RSA і далі охоплює спеціалізація crypto, бо це питання судження.
Часті запитання
Запустіть хук crypto без прапорців. Зламані шифри й режим ECB є знахідками, що завершуються з ненульовим кодом. Геш MD5/SHA-1 є зачіпкою для перегляду, бо він зламаний для потреб безпеки, але цілком доречний як звичайна контрольна сума.
Лише як зачіпку для перегляду в контексті безпеки, а не як автоматичну знахідку, бо випадковість цілком доречна для jitter чи порядку елементів в інтерфейсі.
