# Revisão de código fonte / Ferramentas SAST
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** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
## Orientação e Listas de ferramentas * [**https://owasp.org/www-community/Source\_Code\_Analysis\_Tools**](https://owasp.org/www-community/Source\_Code\_Analysis\_Tools) * [**https://github.com/analysis-tools-dev/static-analysis**](https://github.com/analysis-tools-dev/static-analysis) ## Ferramentas Multi-Idioma ### [Naxus - AI-Gents](https://www.naxusai.com/) Há um **pacote gratuito para revisar PRs**. ### [**Semgrep**](https://github.com/returntocorp/semgrep) É uma **ferramenta de código aberto**. #### Idiomas Suportados | Categoria | Idiomas | | ------------ | ----------------------------------------------------------------------------------------------------- | | GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX | | Beta | Kotlin · Rust | | Experimental | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · | #### Início Rápido {% code overflow="wrap" %} ```bash # 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 %} Você também pode usar a [**extensão semgrep para o VSCode**](https://marketplace.visualstudio.com/items?itemName=Semgrep.semgrep) para obter os resultados dentro do VSCode. ### [**SonarQube**](https://www.sonarsource.com/products/sonarqube/downloads/) Existe uma **versão gratuita** instalável. #### Início Rápido {% code overflow="wrap" %} ```bash # 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= \ -Dsonar.sources=. \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.token= ``` {% endcode %} ### 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 {% code overflow="wrap" %} ```bash # 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 %} #### Início Rápido - Preparar o banco de dados {% hint style="success" %} 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. {% endhint %} * Você pode permitir que o codeql identifique automaticamente o idioma do repositório e crie o banco de dados {% code overflow="wrap" %} ```bash codeql database create --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" %} 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! {% endhint %} * Você pode fazer isso **indicando manualmente** o **repositório** e o **idioma** ([lista de idiomas](https://docs.github.com/en/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#running-codeql-database-create)) {% code overflow="wrap" %} ```bash codeql database create --language --source-root # 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 o seu repositório estiver usando **mais de 1 idioma**, você também pode criar **1 BD por idioma** indicando cada idioma. {% code overflow="wrap" %} ```bash export GITHUB_TOKEN=ghp_32849y23hij4... codeql database create --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 %} * Você também pode permitir que o `codeql` **identifique todos os idiomas** para você e crie um BD por idioma. Você precisa fornecer um **GITHUB\_TOKEN**. {% code overflow="wrap" %} ```bash export GITHUB_TOKEN=ghp_32849y23hij4... codeql database create --db-cluster --source-root # 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 %} #### Início Rápido - Analisar o código {% hint style="success" %} Agora é finalmente hora de analisar o código {% endhint %} Lembre-se de que se você usou vários idiomas, **um BD por idioma** teria sido criado no caminho que você especificou. {% code overflow="wrap" %} ```bash # Default analysis codeql database analyze --format= --output= # 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 \ --sarif-category= \ --sarif-add-baseline-file-info \ --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 %} #### Início Rápido - Scriptado {% code overflow="wrap" %} ```bash 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 %} Você pode visualizar as descobertas em [**https://microsoft.github.io/sarif-web-component/**](https://microsoft.github.io/sarif-web-component/) ou usando a extensão do VSCode [**SARIF viewer**](https://marketplace.visualstudio.com/items?itemName=MS-SarifVSCode.sarif-viewer). Você também pode usar a [**extensão do VSCode**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) para obter as descobertas dentro do VSCode. Ainda será necessário criar um banco de dados manualmente, mas depois você pode selecionar qualquer arquivo e clicar em `Botão Direito` -> `CodeQL: Executar Consultas nos Arquivos Selecionados` ### [**Snyk**](https://snyk.io/product/snyk-code/) Há uma **versão gratuita instalável**. #### Início Rápido ```bash # 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**](https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner) para obter descobertas dentro do VSCode. ### [Insider](https://github.com/insidersec/insider) É **Open Source**, mas parece **desatualizado**. #### Idiomas Suportados Java (Maven e Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# e Javascript (Node.js). #### Início Rápido ```bash # 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 ``` ### [**DeepSource**](https://deepsource.com/pricing) Grátis para **repositórios públicos**. ## NodeJS * **`yarn`** ```bash # Install brew install yarn # Run cd /path/to/repo yarn audit npm audit ``` * **`pnpm`** ```bash # Install npm install -g pnpm # Run cd /path/to/repo pnpm audit ``` * [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)**:** Ferramenta de análise estática de código de segurança (SAST) para aplicações Node.js alimentada por [libsast](https://github.com/ajinabraham/libsast) e [semgrep](https://github.com/returntocorp/semgrep). ```bash # Install & run docker run -it -p 9090:9090 opensecurity/nodejsscan:latest # Got to localhost:9090 # Upload a zip file with the code ``` * [**RetireJS**](https://github.com/RetireJS/retire.js)**:** O objetivo do Retire.js é ajudá-lo a detectar o uso de versões de bibliotecas JS com vulnerabilidades conhecidas. ```bash # Install npm install -g retire # Run cd /path/to/repo retire --colors ``` ## Electron * [**electronegativity**](https://github.com/doyensec/electronegativity)**:** É uma ferramenta para identificar configurações incorretas e padrões de segurança em aplicações baseadas em Electron. ## Python * [**Bandit**](https://github.com/PyCQA/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. ```bash # Install pip3 install bandit # Run bandit -r ``` * [**safety**](https://github.com/pyupio/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. ```bash # Install pip install safety # Run safety check ``` * [~~**Pyt**~~](https://github.com/python-security/pyt): Não mantido. ## .NET ```bash # dnSpy https://github.com/0xd4d/dnSpy # .NET compilation C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs ``` ## RUST ```bash # Install cargo install cargo-audit # Run cargo audit #Update the Advisory Database cargo audit fetch ``` ## Java Java is a widely used programming language for building web applications. It is important to review Java code for security vulnerabilities. Here are some tools that can help with Java code review: ### FindBugs FindBugs is a static analysis tool that can help identify bugs and security vulnerabilities in Java code. It can be integrated into the build process to automatically scan code for issues. ### PMD PMD is another static analysis tool for Java code. It can help identify common programming flaws and potential security vulnerabilities. PMD can also be integrated into the build process for automated code review. ### Checkstyle Checkstyle is a tool that enforces coding standards in Java code. It can help ensure that code is written consistently and follows best practices. Checkstyle can be customized to enforce specific security guidelines as well. ### SonarQube SonarQube is a popular code review tool that supports multiple programming languages, including Java. It provides detailed reports on code quality, security vulnerabilities, and more. SonarQube can be integrated into the development workflow for continuous code analysis. ```bash # 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 ``` | Tarefa | Comando | | ---------------- | --------------------------------------------------------- | | Executar Jar | java -jar \[jar] | | Descompactar Jar | unzip -d \[diretório de saída] \[jar] | | Criar Jar | jar -cmf META-INF/MANIFEST.MF \[jar de saída] \* | | Base64 SHA256 | sha256sum \[arquivo] \| cut -d' ' -f1 \| xxd -r -p \| base64 | | Remover Assinatura | rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA | | Excluir do Jar | zip -d \[jar] \[arquivo a ser removido] | | Decompilar classe | procyon -o . \[caminho para a classe] | | Decompilar Jar | procyon -jar \[jar] -o \[diretório de saída] | | Compilar classe | javac \[caminho para arquivo .java] | ## Go ```bash https://github.com/securego/gosec ``` ## PHP [Psalm](https://phpmagazine.net/2018/12/find-errors-in-your-php-applications-with-psalm.html) e [PHPStan](https://phpmagazine.net/2020/09/phpstan-pro-edition-launched.html). ### Plugins do Wordpress [https://www.pluginvulnerabilities.com/plugin-security-checker/](https://www.pluginvulnerabilities.com/plugin-security-checker/) ## Solidity * [https://www.npmjs.com/package/solium](https://www.npmjs.com/package/solium) ## JavaScript ### Descoberta 1. Burp: * Spider e descobrir conteúdo * Sitemap > filtro * Sitemap > clique com o botão direito no domínio > Ferramentas de Engajamento > Encontrar scripts 2. [WaybackURLs](https://github.com/tomnomnom/waybackurls): * `waybackurls |grep -i "\.js" |sort -u` ### Análise Estática #### Desminificar/Embelezar * [https://prettier.io/playground/](https://prettier.io/playground/) * [https://beautifier.io/](https://beautifier.io/) #### Desofuscar/Desempacotar **Nota**: Pode não ser possível desofuscar completamente. 1. Encontrar e usar 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](https://github.com/PortSwigger/js-miner) para procurá-los. * Garanta que a verificação ativa seja realizada. * Leia '[Dicas/Notas](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)' * Se encontrados, use [Maximize](https://www.npmjs.com/package/maximize) para desofuscar. 2. 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. 3. Use console.log(); * Encontre o valor de retorno no final e altere para `console.log();` 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 ainda estiver vendo js empacotado (mas diferente), pode estar empacotado de forma recursiva. Repita o processo. Referências * 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 Ferramentas * https://portswigger.net/burp/documentation/desktop/tools/dom-invader #### Referências Menos Utilizadas * https://cyberchef.org/ * https://olajs.com/javascript-prettifier * https://jshint.com/ * https://github.com/jshint/jshint/
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.