Hook

Hook crypto: rileva la crittografia debole

Analizza una codebase alla ricerca di primitive crittografiche deboli, oppure valuta un singolo frammento, dalla riga di comando.

L'hook crypto segnala le primitive crittografiche deboli nel punto della chiamata: un cifrario deprecato, una modalità non sicura o un digest compromesso. È consapevole del linguaggio, legge ogni file con le sue regole, così un costrutto Python non viene mai segnalato in un file Rust, ed è il motore deterministico dietro la specializzazione crypto, che puoi eseguire tu stesso in modalità scan o check.

Come eseguirlo​

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

L'analisi stampa fino a due sezioni. Weak cryptography found è l'insieme dei rilievi (DES/3DES/RC4/Blowfish/RC2, modalità ECB): ognuno è una primitiva di cifratura compromessa, quindi l'hook esce con un codice diverso da zero. Cryptography to review manually è un insieme di piste che non può giudicare da solo: un digest MD5/SHA-1 (compromesso per usi di sicurezza, ma legittimo come semplice checksum, quindi decide l'intento), un RNG non crittografico in un contesto di sicurezza o un confronto non sicuro rispetto ai tempi di esecuzione. Un'esecuzione pulita stampa no weak cryptography found.

Come leggere il verdetto​

VerdettoSignificato
weakIl frammento usa una primitiva di cifratura compromessa (DES/3DES, RC4, Blowfish, RC2 o modalità ECB).
reviewUna primitiva che dipende dall'intento: un digest MD5/SHA-1, o un RNG non crittografico in un contesto di sicurezza.
safeIl frammento usa la crittografia e non è stata trovata alcuna primitiva debole.
invalidIl frammento non contiene alcun costrutto crittografico riconoscibile da giudicare.

Opzioni della CLI​

OpzioneValoreDescrizione
--patternun frammento di codiceControlla un frammento. Ripetila per controllarne diversi, un verdetto per riga.
--langun linguaggioObbligatoria con --pattern: uno tra javascript, python, go, java, kotlin, php, ruby, rust, csharp, c, cpp.
--diruna directoryLimita l'analisi a una directory. Si ripete e si combina con --file.
--fileun fileLimita l'analisi a un singolo file. Si ripete e si combina con --dir.

Senza opzioni analizza l'intero progetto. --pattern richiede --lang e non si può combinare con --dir o --file.

Linguaggi supportati​

L'analisi legge questi linguaggi, riconosciuti dall'estensione del file, ognuno controllato rispetto alle proprie API crittografiche.

LinguaggioCifrari deboli (rilievo) e digest/RNG (da rivedere)
JavaScript / TypeScriptcreateCipher, CryptoJS.DES/RC4, *-ecb tra virgolette; 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()
Al meglio delle possibilità, non esaustivo

Legge il sorgente come testo, quindi una primitiva costruita a runtime, nascosta dietro un alias o scritta in una forma che non riconosce può sfuggirgli. Considera la tabella un solido punto di partenza, non un inventario completo.

suggerimento

L'hook garantisce la base (questi costrutti esistono): la gestione delle chiavi, il riutilizzo degli IV e il padding RSA restano valutazioni coperte dalla specializzazione crypto.

Domande frequenti

Esegui l'hook crypto senza flag. I cifrari compromessi e la modalità ECB sono rilievi che escono con un codice diverso da zero. Un digest MD5/SHA-1 è una pista da rivedere, perché è compromesso per usi di sicurezza ma legittimo come semplice checksum.

Solo come pista da rivedere in un contesto di sicurezza, mai come rilievo automatico, perché la casualità è legittima per il jitter o per l'ordinamento nell'interfaccia.