Hooks

Hook crypto: find svag kryptografi

Gennemsøg en kodebase for svage kryptografiske primitiver, eller vurdér et enkelt kodeuddrag, fra kommandolinjen.

Hooken crypto markerer svage kryptografiske primitiver på kaldstedet: en udfaset cipher, en usikker tilstand eller en brudt digest. Den er sprogbevidst og læser hver fil efter dens egne regler, så en Python-konstruktion aldrig bliver markeret i en Rust-fil, og den er den deterministiske motor bag specialiseringen crypto, som du selv kan køre i tilstanden scan eller check.

Kørsel​

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

Scanningen udskriver op til to afsnit. Weak cryptography found er sættet af fund (DES/3DES/RC4/Blowfish/RC2, tilstanden ECB): hver er en brudt cipher-primitiv, så hooken afslutter med en kode forskellig fra nul. Cryptography to review manually er et sæt spor, den ikke kan vurdere alene: en MD5/SHA-1-digest (brudt til sikkerhedsbrug, men legitim som almindelig checksum, så hensigten afgør det), en ikke-kryptografisk RNG i en sikkerhedskontekst eller en sammenligning, der ikke er sikker mod timingangreb. En ren kørsel udskriver no weak cryptography found.

Sådan læser du afgørelsen​

AfgørelseBetydning
weakKodeuddraget bruger en brudt cipher-primitiv (DES/3DES, RC4, Blowfish, RC2 eller tilstanden ECB).
reviewEn primitiv, der afhænger af hensigten: en MD5/SHA-1-digest eller en ikke-kryptografisk RNG i en sikkerhedskontekst.
safeKodeuddraget bruger kryptografi, og der blev ikke fundet nogen svag primitiv.
invalidKodeuddraget indeholder ingen genkendelig kryptografisk konstruktion at vurdere.

CLI-indstillinger​

IndstillingVærdiBeskrivelse
--patternet kodeuddragTjek ét kodeuddrag. Gentag for at tjekke flere, én afgørelse pr. linje.
--langet sprogPåkrævet med --pattern: et af javascript, python, go, java, kotlin, php, ruby, rust, csharp, c, cpp.
--diren mappeAfgræns en scanning til en mappe. Kan gentages og kombineres med --file.
--fileen filAfgræns en scanning til en enkelt fil. Kan gentages og kombineres med --dir.

Uden indstillinger scanner den hele projektet. --pattern kræver --lang og kan ikke kombineres med --dir eller --file.

Vælg, hvad den scanner​

Den udelader det, Git ignorerer. For at udelade mere, eller for at scanne det, Git ignorerer, så giv crypto sine egne indstillinger:

npx lagune write add --ignore test/fixtures --checker crypto
{
"checkers": {
"crypto": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}

Konfigurér hooks beskriver alle indstillinger.

Understøttede sprog​

Scanningen læser disse sprog, bestemt ud fra filendelsen, og hvert sprog tjekkes mod sine egne kryptografiske API'er.

SprogSvage ciphers (fund) og digests eller RNG (gennemgang)
JavaScript / TypeScriptcreateCipher, CryptoJS.DES/RC4, *-ecb i anførselstegn; 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()
Efter bedste evne, ikke udtømmende

Den læser kildekoden som tekst, så en primitiv, der sættes sammen under kørslen, skjules bag et alias eller skrives i en form, den ikke genkender, kan slippe forbi. Betragt tabellen som et solidt udgangspunkt, ikke en komplet oversigt.

tip

Hooken garanterer minimummet (at disse konstruktioner findes): nøglehåndtering, genbrug af IV og RSA-padding er vurderinger, som specialiseringen crypto stadig dækker.

Ofte stillede spørgsmål

Kør hooken crypto uden flag. Brudte ciphers og tilstanden ECB er fund, der afslutter med en kode forskellig fra nul. En MD5/SHA-1-digest er et spor til gennemgang, da den er brudt til sikkerhedsbrug, men legitim som almindelig checksum.

Kun som et spor til gennemgang i en sikkerhedskontekst, aldrig som et automatisk fund, da tilfældighed er legitim til jitter eller rækkefølge i brugerfladen.