22 KiB
Revisione del codice sorgente / Strumenti SAST
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Guida e elenchi di strumenti
- https://owasp.org/www-community/Source_Code_Analysis_Tools
- https://github.com/analysis-tools-dev/static-analysis
Strumenti multi-linguaggio
Naxus - AI-Gents
C'è un pacchetto gratuito per la revisione delle PR.
Semgrep
È 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 rapido
{% code overflow="wrap" %}
# Install https://github.com/returntocorp/semgrep#option-1-getting-started-from-the-cli
brew install semgrep
# Go to your repo code and scan
cd repo
semgrep scan --config auto
{% endcode %}
Puoi anche utilizzare l'estensione semgrep per VSCode per ottenere i risultati all'interno di VSCode.
SonarQube
Esiste una versione gratuita installabile.
Avvio rapido
{% code overflow="wrap" %}
# Run the paltform in docker
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
# Install cli tool
brew install sonar-scanner
# Go to localhost:9000 and login with admin:admin or admin:sonar
# Generate a local project and then a TOKEN for it
# Using the token and from the folder with the repo, scan it
cd path/to/repo
sonar-scanner \
-Dsonar.projectKey=<project-name> \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=<sonar_project_token>
{% endcode %}
CodeQL
Esiste una versione gratuita installabile, ma secondo la licenza puoi utilizzare solo la versione gratuita di CodeQL nei progetti Open Source.
Installazione
{% code overflow="wrap" %}
# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz
# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql
# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz
# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc
# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks #Get paths to QL packs
{% endcode %}
Guida rapida - Preparare il database
{% hint style="success" %} La prima cosa da fare è preparare il database (creare l'albero del codice) in modo che successivamente le query possano essere eseguite su di esso. {% endhint %}
- Puoi consentire a codeql di identificare automaticamente il linguaggio del repository e creare il database
{% code overflow="wrap" %}
codeql database create <database> --language <language>
# Example
codeql database create /path/repo/codeql_db --source-root /path/repo
## DB will be created in /path/repo/codeql_db
{% endcode %}
{% hint style="danger" %} Questo solitamente provoca un errore che indica che è stata specificata più di una lingua (o rilevata automaticamente). Controlla le opzioni successive per risolvere questo problema! {% endhint %}
- Puoi farlo manualmente indicando il repo e la lingua (elenco delle lingue)
{% code overflow="wrap" %}
codeql database create <database> --language <language> --source-root </path/to/repo>
# Example
codeql database create /path/repo/codeql_db --language javascript --source-root /path/repo
## DB will be created in /path/repo/codeql_db
{% endcode %}
- Se il tuo repository utilizza più di un linguaggio, puoi anche creare 1 DB per ogni linguaggio indicando ciascun linguaggio.
{% code overflow="wrap" %}
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --source-root /path/to/repo --db-cluster --language "javascript,python"
# Example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /path/repo/codeql_db --source-root /path/to/repo --db-cluster --language "javascript,python"
## DBs will be created in /path/repo/codeql_db/*
{% endcode %}
- Puoi anche permettere a
codeql
di identificare tutti i linguaggi per te e creare un database per ogni linguaggio. Devi fornire un GITHUB_TOKEN.
{% code overflow="wrap" %}
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --db-cluster --source-root </path/to/repo>
# Example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /tmp/codeql_db --db-cluster --source-root /path/repo
## DBs will be created in /path/repo/codeql_db/*
{% endcode %}
Guida rapida - Analizza il codice
{% hint style="success" %} Ora è finalmente il momento di analizzare il codice {% endhint %}
Ricorda che se hai utilizzato diversi linguaggi, verrà creato un DB per ogni linguaggio nel percorso specificato.
{% code overflow="wrap" %}
# Default analysis
codeql database analyze <database> --format=<format> --output=</out/file/path>
# Example
codeql database analyze /tmp/codeql_db/javascript --format=sarif-latest --output=/tmp/graphql_results.sarif
# Specify QL pack to use in the analysis
codeql database analyze <database> \
<qls pack> --sarif-category=<language> \
--sarif-add-baseline-file-info \ --format=<format> \
--output=/out/file/path>
# Example
codeql database analyze /tmp/codeql_db \
javascript-security-extended --sarif-category=javascript \
--sarif-add-baseline-file-info --format=sarif-latest \
--output=/tmp/sec-extended.sarif
{% endcode %}
Avvio rapido - Scriptato
{% code overflow="wrap" %}
export GITHUB_TOKEN=ghp_32849y23hij4...
export REPO_PATH=/path/to/repo
export OUTPUT_DIR_PATH="$REPO_PATH/codeql_results"
mkdir -p "$OUTPUT_DIR_PATH"
export FINAL_MSG="Results available in: "
echo "Creating DB"
codeql database create "$REPO_PATH/codeql_db" --db-cluster --source-root "$REPO_PATH"
for db in `ls "$REPO_PATH/codeql_db"`; do
echo "Analyzing $db"
codeql database analyze "$REPO_PATH/codeql_db/$db" --format=sarif-latest --output="${OUTPUT_DIR_PATH}/$db).sarif"
FINAL_MSG="$FINAL_MSG ${OUTPUT_DIR_PATH}/$db.sarif ,"
echo ""
done
echo $FINAL_MSG
{% endcode %}
Puoi visualizzare le scoperte su https://microsoft.github.io/sarif-web-component/ o utilizzando l'estensione di VSCode SARIF viewer.
Puoi anche utilizzare l'estensione di VSCode per ottenere le scoperte all'interno di VSCode. Dovrai comunque creare manualmente un database, ma successivamente puoi selezionare qualsiasi file e fare clic su Right Click
-> CodeQL: Run Queries in Selected Files
Snyk
C'è una versione gratuita installabile.
Avvio rapido
# Install
sudo npm install -g snyk
# Authenticate (you can use a free account)
snyk auth
# Test for open source vulns & license issues
snyk test [--all-projects]
# Test for code vulnerabilities
## This will upload your code and you need to enable this option in: Settings > Snyk Code
snyk test code
# Test for vulns in images
snyk container test [image]
# Test for IaC vulns
snyk iac test
Puoi anche utilizzare l'estensione Snyk per VSCode per ottenere risultati all'interno di VSCode.
Insider
È Open Source, ma sembra non mantenuto.
Lingue supportate
Java (Maven e Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# e Javascript (Node.js).
Inizio rapido
# Check the correct release for your environment
$ wget https://github.com/insidersec/insider/releases/download/2.1.0/insider_2.1.0_linux_x86_64.tar.gz
$ tar -xf insider_2.1.0_linux_x86_64.tar.gz
$ chmod +x insider
$ ./insider --tech javascript --target <projectfolder>
DeepSource
Gratuito per i repository pubblici.
NodeJS
yarn
# Install
brew install yarn
# Run
cd /path/to/repo
yarn audit
npm audit
pnpm
# Install
npm install -g pnpm
# Run
cd /path/to/repo
pnpm audit
- nodejsscan: Scanner statico di codice di sicurezza (SAST) per applicazioni Node.js alimentato da libsast e semgrep.
# Install & run
docker run -it -p 9090:9090 opensecurity/nodejsscan:latest
# Got to localhost:9090
# Upload a zip file with the code
- RetireJS: L'obiettivo di Retire.js è aiutarti a rilevare l'uso di versioni di librerie JS con vulnerabilità conosciute.
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
Electron
- electronegativity: È uno strumento per identificare errori di configurazione 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 ed esegue i plugin appropriati sui nodi AST. Una volta che Bandit ha finito di scansionare tutti i file, genera un report.
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
- 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 degli sviluppatori, nelle pipeline CI/CD e nei sistemi di produzione.
# Install
pip install safety
# Run
safety check
Pyt: Non mantenuto.
.NET
# dnSpy
https://github.com/0xd4d/dnSpy
# .NET compilation
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs
RUST
Rust is a systems programming language that focuses on safety, speed, and concurrency. It is designed to be memory safe and thread safe, making it a good choice for building reliable and efficient software. Rust's syntax is similar to C++, but it includes modern features such as pattern matching, type inference, and ownership semantics.
Code Review Tools
When performing a code review in Rust, there are several tools that can help identify potential vulnerabilities and improve code quality. Here are some commonly used code review tools for Rust:
-
Clippy: Clippy is a linter for Rust that provides helpful suggestions and warnings to improve code quality. It can catch common mistakes, enforce best practices, and identify potential bugs.
-
Rustfmt: Rustfmt is a tool for formatting Rust code according to the official Rust style guidelines. It automatically formats code to improve readability and maintain consistency across projects.
-
Cargo Audit: Cargo Audit is a tool that checks for known vulnerabilities in the dependencies used by a Rust project. It scans the project's Cargo.lock file and compares it against a database of known vulnerabilities.
-
Rust Analyzer: Rust Analyzer is an integrated development environment (IDE) tool that provides code analysis and navigation features for Rust projects. It offers features such as code completion, documentation lookup, and refactoring support.
-
RustSec: RustSec is a security advisory database for Rust crates. It provides information about vulnerabilities and security issues in Rust dependencies, allowing developers to stay informed and take necessary actions.
These tools can be used individually or in combination to perform a comprehensive code review and ensure the security and quality of Rust code. By leveraging these tools, developers can identify and fix potential vulnerabilities early in the development process, reducing the risk of security breaches and improving overall code reliability.
# Install
cargo install cargo-audit
# Run
cargo audit
#Update the Advisory Database
cargo audit fetch
Java
Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e multi-piattaforma. È ampiamente utilizzato per lo sviluppo di applicazioni web e mobili. Java è noto per la sua portabilità, sicurezza e robustezza.
Strumenti di revisione del codice Java
Esistono diversi strumenti di revisione del codice disponibili per l'analisi statica del codice Java. Questi strumenti aiutano a identificare potenziali vulnerabilità e problemi di sicurezza nel codice sorgente Java.
FindBugs
FindBugs è uno strumento di analisi statica del codice Java che individua potenziali bug e problemi di sicurezza. Utilizza un'ampia gamma di regole predefinite per identificare le vulnerabilità nel codice sorgente Java.
Esempio di utilizzo:
findbugs -textui -effort:max -html -output report.html MyJavaFile.java
PMD
PMD è uno strumento di analisi statica del codice Java che individua potenziali problemi di codifica e stili di programmazione non corretti. Può essere utilizzato per identificare vulnerabilità e migliorare la qualità del codice Java.
Esempio di utilizzo:
pmd -d MyJavaDirectory -f html -R ruleset.xml -r report.html
Checkstyle
Checkstyle è uno strumento di analisi statica del codice Java che applica regole di stile e convenzioni di codifica. Può essere utilizzato per garantire che il codice Java segua le linee guida di codifica stabilite.
Esempio di utilizzo:
checkstyle -c config.xml MyJavaFile.java
SonarQube
SonarQube è una piattaforma di analisi continua della qualità del codice che supporta diversi linguaggi di programmazione, inclusi Java. Fornisce un'ampia gamma di regole predefinite per identificare vulnerabilità, bug e problemi di sicurezza nel codice Java.
Esempio di utilizzo:
sonar-scanner -Dsonar.projectKey=myProject -Dsonar.sources=src -Dsonar.host.url=http://localhost:9000 -Dsonar.login=myToken
Conclusioni
L'utilizzo di strumenti di revisione del codice Java può aiutare a identificare e risolvere potenziali vulnerabilità e problemi di sicurezza nel codice sorgente Java. È consigliabile utilizzare una combinazione di questi strumenti per ottenere una copertura completa dell'analisi statica del codice Java.
# JD-Gui
https://github.com/java-decompiler/jd-gui
# Java compilation step-by-step
javac -source 1.8 -target 1.8 test.java
mkdir META-INF
echo "Main-Class: test" > META-INF/MANIFEST.MF
jar cmvf META-INF/MANIFEST.MF test.jar test.class
Compito | Comando |
---|---|
Esegui Jar | java -jar [jar] |
Decomprimi Jar | unzip -d [directory di output] [jar] |
Crea Jar | jar -cmf META-INF/MANIFEST.MF [jar di output] * |
Base64 SHA256 | sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64 |
Rimuovi Firma | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Elimina dal Jar | zip -d [jar] [file da rimuovere] |
Decompila classe | procyon -o . [percorso della classe] |
Decompila Jar | procyon -jar [jar] -o [directory di output] |
Compila classe | javac [percorso del file .java] |
Vai
https://github.com/securego/gosec
PHP
Plugin Wordpress
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Scoperta
- Burp:
- Spider e scopri il contenuto
- Sitemap > filtro
- Sitemap > clic destro sul dominio > Strumenti di coinvolgimento > Trova script
waybackurls <dominio> |grep -i "\.js" |sort -u
Analisi statica
Sminifica/Abbellisci
Deobfuscate/Decomprimi
Nota: Potrebbe non essere possibile deobfuscare completamente.
- Trova e usa i file .map:
- Se i file .map sono esposti, possono essere utilizzati per deobfuscare facilmente.
- Comunemente, foo.js.map mappa a foo.js. Cerca manualmente.
- Usa JS Miner per cercarli.
- Assicurati di condurre una scansione attiva.
- Leggi 'Consigli/Note'
- Se trovati, usa Maximize per deobfuscare.
- Senza file .map, prova JSnice:
- Riferimenti: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
- Consigli:
- Se si utilizza jsnice.org, fare clic sul pulsante delle opzioni accanto al pulsante "Nicify JavaScript" e deselezionare "Infer types" per ridurre l'ingombro del codice con commenti.
- Assicurarsi di non lasciare righe vuote prima dello script, poiché potrebbe influire sul processo di deobfuscazione e fornire risultati inaccurati.
- Usa console.log();
- Trova il valore di ritorno alla fine e cambialo in
console.log(<packerReturnVariable>);
in modo che il js deobfuscatato venga stampato invece di essere eseguito. - Quindi, incolla il js modificato (ancora obfuscatato) in https://jsconsole.com/ per vedere il js deobfuscatato registrato nella console.
- Infine, incolla l'output deobfuscatato in https://prettier.io/playground/ per abbellirlo per l'analisi.
- Nota: Se si sta ancora visualizzando js impacchettato (ma diverso), potrebbe essere impacchettato in modo ricorsivo. Ripetere il processo.
Riferimenti
- https://www.youtube.com/watch?v=_v8r_t4v6hQ
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
Strumenti
Riferimenti meno utilizzati
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.