Хук 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 считается поводом для проверки, поскольку он непригоден для целей безопасности, но законен как обычная контрольная сумма.
Только как повод для проверки в контексте безопасности и никогда как автоматическую находку, поскольку случайность законна для джиттера или порядка элементов в интерфейсе.
