Source code Review / SAST Tools
Linee guida e elenchi di strumenti
Strumenti Multi-Lingua
C'è un pacchetto gratuito per rivedere le PR.
È uno strumento Open Source.
Lingue Supportate
Categoria | Lingue |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Sperimentale | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Inizio Veloce
Puoi anche utilizzare l'estensione semgrep per VSCode per ottenere i risultati all'interno di VSCode.
Esiste una versione gratuita installabile.
Inizio rapido
CodeQL
Esiste una versione gratuita installabile ma secondo la licenza puoi utilizzare solo la versione gratuita di codeQL in progetti Open Source.
Installare
Quick Start - Preparare il database
La prima cosa che devi fare è preparare il database (creare l'albero del codice) in modo che successivamente le query vengano eseguite su di esso.
Puoi consentire a codeql di identificare automaticamente il linguaggio del repo e creare il database
Questo di solito attiverà un errore che dice che è stata specificata (o rilevata automaticamente) più di una lingua. Controlla le opzioni successive per risolvere questo problema!
Puoi farlo manualmente indicando il repo e la lingua (elenco delle lingue)
Se il tuo repo utilizza più di 1 linguaggio, puoi anche creare 1 DB per linguaggio indicando ciascun linguaggio.
Puoi anche consentire a
codeql
di identificare tutti i linguaggi per te e creare un DB per linguaggio. Devi fornirgli un GITHUB_TOKEN.
Inizio rapido - Analizza il codice
Ora è finalmente il momento di analizzare il codice
Ricorda che se hai utilizzato più linguaggi, un DB per linguaggio sarebbe stato creato nel percorso che hai specificato.
Inizio rapido - Scriptato
Puoi visualizzare i risultati in https://microsoft.github.io/sarif-web-component/ o utilizzando l'estensione di VSCode SARIF viewer.
Puoi anche utilizzare l'estensione di VSCode per ottenere i risultati all'interno di VSCode. Dovrai comunque creare un database manualmente, ma poi puoi selezionare qualsiasi file e cliccare su Right Click
-> CodeQL: Run Queries in Selected Files
C'è una versione gratuita installabile.
Quick Start
Puoi anche utilizzare l'estensione snyk per VSCode per ottenere risultati all'interno di VSCode.
È Open Source, ma sembra non mantenuto.
Linguaggi Supportati
Java (Maven e Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# e Javascript (Node.js).
Inizio Veloce
Gratuito per repo pubblici.
NodeJS
yarn
pnpm
nodejsscan: Scanner di sicurezza del codice statico (SAST) per applicazioni Node.js alimentato da libsast e semgrep.
RetireJS: L'obiettivo di Retire.js è aiutarti a rilevare l'uso di versioni di librerie JS con vulnerabilità note.
Electron
electronegativity: È uno strumento per identificare misconfigurazioni e anti-pattern di sicurezza nelle applicazioni basate su Electron.
Python
Bandit: Bandit è uno strumento progettato per trovare problemi di sicurezza comuni nel codice Python. Per fare ciò, Bandit elabora ogni file, costruisce un AST da esso e esegue plugin appropriati contro i nodi dell'AST. Una volta che Bandit ha terminato di esaminare tutti i file, genera un rapporto.
safety: Safety controlla le dipendenze Python per vulnerabilità di sicurezza note e suggerisce le opportune soluzioni per le vulnerabilità rilevate. Safety può essere eseguito su macchine di sviluppo, in pipeline CI/CD e su sistemi di produzione.
Pyt: Non mantenuto.
.NET
RUST
Java
Task | Command |
---|---|
Esegui Jar | java -jar [jar] |
Decomprimi Jar | unzip -d [output directory] [jar] |
Crea Jar | jar -cmf META-INF/MANIFEST.MF [output jar] * |
Base64 SHA256 | sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64 |
Rimuovi Firma | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Elimina da Jar | zip -d [jar] [file to remove] |
Decompila classe | procyon -o . [path to class] |
Decompila Jar | procyon -jar [jar] -o [output directory] |
Compila classe | javac [path to .java file] |
Vai
PHP
Wordpress Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
Burp:
Spider e scopri contenuti
Sitemap > filtro
Sitemap > clic destro sul dominio > Strumenti di ingaggio > Trova script
waybackurls <domain> |grep -i "\.js" |sort -u
Static Analysis
Unminimize/Beautify/Prettify
Vedi alcuni degli strumenti menzionati in 'Deobfuscate/Unpack' qui sotto.
Deobfuscate/Unpack
Nota: Potrebbe non essere possibile deobfuscate completamente.
Trova e usa i file .map:
Se i file .map sono esposti, possono essere utilizzati per deobfuscate facilmente.
Comunemente, foo.js.map mappa a foo.js. Cerca manualmente.
Usa JS Miner per cercarli.
Assicurati che venga condotta una scansione attiva.
Leggi 'Tips/Notes'
Se trovati, usa Maximize per deobfuscate.
Senza file .map, prova JSnice:
Riferimenti: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Suggerimenti:
Se usi jsnice.org, clicca sul pulsante delle opzioni accanto al pulsante "Nicify JavaScript" e deseleziona "Infer types" per ridurre il disordine nel codice con commenti.
Assicurati di non lasciare righe vuote prima dello script, poiché potrebbe influenzare il processo di deobfuscation e dare risultati inaccurati.
Per alcune alternative più moderne a JSNice, potresti voler guardare i seguenti:
Decompilatore Javascript, strumento di unpacking e unminify
Wakaru è il decompilatore Javascript per il frontend moderno. Riporta il codice originale da una sorgente impacchettata e transpiled.
Deobfuscate obfuscator.io, unminify e unpack javascript impacchettato
Un-minify codice Javascript usando ChatGPT
Questo strumento utilizza modelli di linguaggio di grandi dimensioni (come ChatGPT & llama2) e altri strumenti per un-minify codice Javascript. Nota che i LLM non eseguono alcuna modifica strutturale – forniscono solo suggerimenti per rinominare variabili e funzioni. Il lavoro pesante è svolto da Babel a livello di AST per garantire che il codice rimanga equivalente 1-1.
Utilizzando LLM per invertire la minificazione dei nomi delle variabili JavaScript
Usa
console.log()
;
Trova il valore di ritorno alla fine e cambialo in
console.log(<packerReturnVariable>);
in modo che il js deobfuscato venga stampato invece di essere eseguito.Poi, incolla il js modificato (e ancora obfuscato) in https://jsconsole.com/ per vedere il js deobfuscato registrato nella console.
Infine, incolla l'output deobfuscato in https://prettier.io/playground/ per abbellirlo per l'analisi.
Nota: Se vedi ancora js impacchettato (ma diverso), potrebbe essere impacchettato ricorsivamente. Ripeti il processo.
References
Tools
Less Used References
Last updated