Source code Review / SAST Tools
Orientações e Listas de Ferramentas
Ferramentas Multi-Linguagem
Há um pacote gratuito para revisar PRs.
É uma ferramenta de Código Aberto.
Linguagens Suportadas
Categoria | Linguagens |
---|---|
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
Você também pode usar a extensão semgrep para VSCode para obter as descobertas dentro do VSCode.
Há uma versão gratuita instalável.
Início Rápido
CodeQL
Há uma versão gratuita instalável, mas de acordo com a licença, você pode usar apenas a versão gratuita do codeQL em projetos de código aberto.
Instalar
Início Rápido - Prepare o banco de dados
A primeira coisa que você precisa fazer é preparar o banco de dados (criar a árvore de código) para que mais tarde as consultas sejam executadas sobre ele.
Você pode permitir que o codeql identifique automaticamente a linguagem do repositório e crie o banco de dados
Isso geralmente acionará 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 manualmente indicando o repo e o idioma (lista de idiomas)
Se o seu repositório estiver usando mais de 1 linguagem, você também pode criar 1 DB por linguagem indicando cada linguagem.
Você também pode permitir que
codeql
identifique todas as linguagens para você e crie um DB por linguagem. Você precisa fornecer um GITHUB_TOKEN.
Início Rápido - Analisar o código
Agora é finalmente hora de analisar o código
Lembre-se de que se você usou várias linguagens, um DB por linguagem teria sido criado no caminho que você especificou.
Início Rápido - Scriptado
Você pode visualizar os resultados 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 os resultados dentro do VSCode. Você ainda precisará criar um banco de dados manualmente, mas depois poderá selecionar quaisquer arquivos e clicar em Right Click
-> CodeQL: Run Queries in Selected Files
Há uma versão gratuita instalável.
Quick Start
Você também pode usar a snyk VSCode Extension para obter descobertas dentro do VSCode.
É Open Source, mas parece não mantido.
Linguagens Suportadas
Java (Maven e Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# e Javascript (Node.js).
Início Rápido
Gratuito para repositórios públicos.
NodeJS
yarn
pnpm
nodejsscan: Scanner de código de segurança estático (SAST) para aplicações Node.js alimentado por libsast e semgrep.
RetireJS: O objetivo do Retire.js é ajudar você a detectar o uso de versões de bibliotecas JS com vulnerabilidades conhecidas.
Electron
electronegativity: É uma ferramenta para identificar configurações incorretas e anti-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 um AST a partir dele e executa plugins apropriados contra os nós do AST. Uma vez que o Bandit tenha terminado de escanear todos os arquivos, ele gera um relatório.
safety: O Safety verifica as dependências do Python em busca de vulnerabilidades de segurança conhecidas e sugere as remediações adequadas para as vulnerabilidades detectadas. O Safety pode ser executado em máquinas de desenvolvedores, em pipelines de CI/CD e em sistemas de produção.
Pyt: Não mantido.
.NET
RUST
Java
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 |
Deletar do Jar | zip -d [jar] [arquivo a remover] |
Descompilar classe | procyon -o . [caminho para a classe] |
Descompilar Jar | procyon -jar [jar] -o [diretório de saída] |
Compilar classe | javac [caminho para o arquivo .java] |
Ir
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 <domain> |grep -i "\.js" |sort -u
Análise Estática
Desminimizar/Embelezar/Prettify
Veja algumas das ferramentas mencionadas em 'Deobfuscate/Unpack' abaixo também.
Deobfuscate/Unpack
Nota: Pode não ser possível deobfuscar completamente.
Encontre e use arquivos .map:
Se os arquivos .map estiverem expostos, eles podem ser usados para deobfuscar facilmente.
Comumente, foo.js.map mapeia para foo.js. Procure manualmente por eles.
Use JS Miner para procurá-los.
Certifique-se de que uma varredura ativa seja realizada.
Leia 'Dicas/Notas'
Se encontrado, use Maximize para deobfuscar.
Sem arquivos .map, tente 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.
Certifique-se de não deixar linhas em branco antes do script, pois isso pode afetar o processo de deobfuscação e dar resultados imprecisos.
Para algumas alternativas mais modernas ao JSNice, você pode querer olhar para as seguintes:
Ferramenta de descompilação, desempacotamento e desminificação de Javascript
Wakaru é o descompilador de Javascript para frontend moderno. Ele traz de volta o código original de uma fonte empacotada e transpilada.
Deobfuscar obfuscator.io, desminificar e desempacotar javascript empacotado
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 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 mude para
console.log(<packerReturnVariable>);
para que o js deobfuscado seja impresso em vez de ser executado.Em seguida, cole o js modificado (e ainda ofuscado) em https://jsconsole.com/ para ver o js deobfuscado registrado no console.
Finalmente, cole a saída deobfuscada em https://prettier.io/playground/ para embelezá-la para análise.
Nota: Se você ainda estiver vendo js empacotado (mas diferente), pode estar empacotado recursivamente. Repita o processo.
Referências
Ferramentas
Referências Menos Usadas
Last updated