Source code Review / SAST Tools
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
Adquira o swag oficial PEASS & HackTricks
Descubra A Família PEASS, nossa coleção exclusiva de [NFTs](https://opensea
# 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
Você também pode usar a extensão semgrep para o VSCode para obter os resultados dentro do VSCode.
Existe uma versão gratuita instalável.
Início Rápido
# 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>
CodeQL
Existe uma versão gratuita instalável, mas de acordo com a licença, você só pode usar a versão gratuita do CodeQL em projetos de código aberto.
Instalação
# 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
Início Rápido - Preparar o banco de dados
A primeira coisa que você precisa fazer é preparar o banco de dados (criar a árvore de código) para que posteriormente as consultas sejam executadas sobre ele.
Você pode permitir que o codeql identifique automaticamente o idioma do repositório e crie o banco de dados
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
Isso geralmente irá disparar um erro dizendo que mais de um idioma foi especificado (ou detectado automaticamente). Verifique as próximas opções para corrigir isso!
Você pode fazer isso indicando manualmente o repositório e o idioma (lista de idiomas)
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
Se o seu repositório estiver usando mais de 1 idioma, você também pode criar 1 BD por idioma indicando cada idioma.
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/*
Você também pode permitir que o
codeql
identifique todos os idiomas para você e crie um banco de dados por idioma. Você precisa fornecer um GITHUB_TOKEN.
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/*
Início Rápido - Analisar o código
Agora é finalmente hora de analisar o código
Lembre-se de que se você usou vários idiomas, um BD por idioma teria sido criado no caminho que você especificou.
# 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
Início Rápido - Scriptado
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
Você pode visualizar as descobertas em https://microsoft.github.io/sarif-web-component/ ou usando a extensão do VSCode SARIF viewer.
Você também pode usar a extensão do VSCode para obter as descobertas dentro do VSCode. Ainda será necessário criar um banco de dados manualmente, mas então você pode selecionar qualquer arquivo e clicar em Botão Direito
-> CodeQL: Executar Consultas nos Arquivos Selecionados
Há uma versão gratuita instalável.
Início Rápido
# 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
Você também pode usar a extensão do Snyk para o VSCode para obter descobertas dentro do VSCode.
É Open Source, mas parece desatualizado.
Linguagens Suportadas
Java (Maven e Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# e Javascript (Node.js).
Início Rápido
# 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>
Grátis para repositórios públicos.
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: Ferramenta de varredura de código de segurança estática (SAST) para aplicações Node.js alimentada por 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: O objetivo do Retire.js é ajudá-lo a detectar o uso de versões de bibliotecas JS com vulnerabilidades conhecidas.
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
Electron
electronegativity: É uma ferramenta para identificar configurações incorretas e padrões de segurança em aplicações baseadas em Electron.
Python
Bandit: Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns em código Python. Para fazer isso, o Bandit processa cada arquivo, constrói uma AST a partir dele e executa plugins apropriados contra os nós da AST. Uma vez que o Bandit tenha terminado de escanear todos os arquivos, ele gera um relatório.
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
safety: O safety verifica as dependências do Python em busca de vulnerabilidades de segurança conhecidas e sugere as correções apropriadas para as vulnerabilidades detectadas. O safety pode ser executado em máquinas de desenvolvimento, em pipelines CI/CD e em sistemas de produção.
# Install
pip install safety
# Run
safety check
Pyt: Não mantido.
.NET
# dnSpy
https://github.com/0xd4d/dnSpy
# .NET compilation
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs
RUST
# Install
cargo install cargo-audit
# Run
cargo audit
#Update the Advisory Database
cargo audit fetch
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
Go
https://github.com/securego/gosec
PHP
Plugins do Wordpress
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Descoberta
Burp:
Spider e descobrir conteúdo
Sitemap > filtro
Sitemap > clique com o botão direito no domínio > Ferramentas de Engajamento > Encontrar scripts
waybackurls <domínio> |grep -i "\.js" |sort -u
Análise Estática
Desminificar/Embelezar
Veja algumas das ferramentas mencionadas em 'Desofuscar/Descompactar' abaixo também.
Desofuscar/Descompactar
Nota: Pode não ser possível desofuscar completamente.
Encontre e use arquivos .map:
Se os arquivos .map estiverem expostos, eles podem ser usados para desofuscar facilmente.
Comumente, foo.js.map mapeia para foo.js. Procure manualmente por eles.
Use JS Miner para procurá-los.
Garanta que a verificação ativa seja realizada.
Leia 'Dicas/Notas'
Se encontrados, use Maximize para desofuscar.
Sem arquivos .map, tente o JSnice:
Referências: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Dicas:
Se estiver usando jsnice.org, clique no botão de opções ao lado do botão "Nicify JavaScript" e desmarque "Infer types" para reduzir a desordem no código com comentários.
Garanta que não haja linhas vazias antes do script, pois isso pode afetar o processo de desofuscação e fornecer resultados imprecisos.
Para algumas alternativas mais modernas ao JSNice, você pode gostar de olhar para o seguinte:
Decompilador, descompactador e kit de desminificação Javascript
Wakaru é o decompilador Javascript para frontend moderno. Ele traz de volta o código original de uma fonte agrupada e transpilada.
Desofuscar obfuscator.io, descompactar e desempacotar Javascript agrupado
Desminificar código Javascript usando ChatGPT
Esta ferramenta usa grandes modelos de linguagem (como ChatGPT e llama2) e outras ferramentas para desminificar código Javascript. Note que os LLMs não realizam alterações estruturais - eles apenas fornecem dicas para renomear variáveis e funções. O trabalho pesado é feito pelo Babel no nível AST para garantir que o código permaneça equivalente 1-1.
Usando LLMs para reverter a minificação de nomes de variáveis Javascript
Use
console.log()
;
Encontre o valor de retorno no final e altere para
console.log(<variávelDeRetornoDoPacker>);
para que o js desofuscado seja impresso em vez de ser executado.Em seguida, cole o js modificado (ainda ofuscado) em https://jsconsole.com/ para ver o js desofuscado registrado no console.
Por fim, cole a saída desofuscada em https://prettier.io/playground/ para embelezá-la para análise.
Nota: Se você ainda estiver vendo js empacotado (mas diferente), pode estar empacotado de forma recursiva. Repita o processo.
Referências
Ferramentas
Referências Menos Utilizadas
Last updated