Source code Review / SAST Tools
Conseils et listes d'outils
Outils multi-langages
Il existe un forfait gratuit pour examiner les PR.
C'est un outil Open Source.
Langages pris en charge
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 ·
Démarrage rapide
Vous pouvez également utiliser l'extension VSCode semgrep pour obtenir les résultats dans VSCode.
Il existe une version gratuite installable.
Démarrage rapide
CodeQL
Il existe une version gratuite installable mais selon la licence, vous ne pouvez utiliser la version gratuite de CodeQL que dans des projets Open Source.
Installation
Démarrage rapide - Préparer la base de données
La première chose à faire est de préparer la base de données (créer l'arborescence du code) afin que les requêtes puissent être exécutées dessus ultérieurement.
Vous pouvez permettre à codeql d'identifier automatiquement le langage du dépôt et de créer la base de données
Cela déclenchera généralement une erreur indiquant que plus d'une langue a été spécifiée (ou détectée automatiquement). Vérifiez les options suivantes pour corriger cela!
Vous pouvez le faire manuellement en indiquant le dépôt et la langue (liste des langues)
Si votre dépôt utilise plus d'une langue, vous pouvez également créer 1 BD par langue en indiquant chaque langue.
Vous pouvez également permettre à
codeql
d'identifier toutes les langues pour vous et de créer une base de données par langue. Vous devez lui donner un GITHUB_TOKEN.
Démarrage rapide - Analyser le code
Maintenant, il est enfin temps d'analyser le code
N'oubliez pas que si vous avez utilisé plusieurs langues, une base de données par langue aurait été créée dans le chemin que vous avez spécifié.
Démarrage rapide - Scripté
Vous pouvez visualiser les résultats sur https://microsoft.github.io/sarif-web-component/ ou en utilisant l'extension VSCode SARIF viewer.
Vous pouvez également utiliser l'extension VSCode pour obtenir les résultats dans VSCode. Vous devrez toujours créer une base de données manuellement, mais ensuite vous pourrez sélectionner n'importe quel fichier et cliquer sur Clic droit
-> CodeQL: Exécuter les requêtes dans les fichiers sélectionnés
Il existe une version gratuite installable.
Démarrage rapide
Vous pouvez également utiliser l'extension VSCode Snyk pour obtenir des résultats à l'intérieur de VSCode.
C'est Open Source, mais semble non maintenu.
Langages pris en charge
Java (Maven et Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C#, et Javascript (Node.js).
Démarrage rapide
Gratuit pour les dépôts publics.
NodeJS
yarn
pnpm
nodejsscan: Outil d'analyse statique de code de sécurité (SAST) pour les applications Node.js alimenté par libsast et semgrep.
RetireJS: L'objectif de Retire.js est de vous aider à détecter l'utilisation de versions de bibliothèques JS avec des vulnérabilités connues.
Electron
electronegativity: C'est un outil pour identifier les mauvaises configurations et les anti-patterns de sécurité dans les applications basées sur Electron.
Python
Bandit: Bandit est un outil conçu pour trouver des problèmes de sécurité courants dans le code Python. Pour ce faire, Bandit traite chaque fichier, construit un AST à partir de celui-ci et exécute des plugins appropriés contre les nœuds AST. Une fois que Bandit a terminé de scanner tous les fichiers, il génère un rapport.
safety: Safety vérifie les dépendances Python à la recherche de vulnérabilités de sécurité connues et suggère les correctifs appropriés pour les vulnérabilités détectées. Safety peut être exécuté sur les machines des développeurs, dans les pipelines CI/CD et sur les systèmes de production.
Pyt: Non maintenu.
.NET
RUST
Java
FindBugs
FindBugs est un outil d'analyse statique qui peut être utilisé pour rechercher des bogues dans le code Java. Il peut détecter un large éventail de problèmes de programmation, tels que les fuites de ressources, les erreurs de synchronisation, les erreurs de gestion de la mémoire, etc.
Pour exécuter FindBugs sur un projet Java, vous pouvez utiliser l'interface utilisateur graphique FindBugs ou l'intégrer dans votre processus de build en utilisant des plugins Maven ou Ant.
Pour lancer FindBugs en ligne de commande, vous pouvez utiliser la commande suivante :
PMD
PMD est un autre outil d'analyse statique pour le code Java. Il peut être utilisé pour rechercher des erreurs de codage, des pratiques de programmation douteuses, des performances inefficaces, etc.
Pour exécuter PMD sur un projet Java, vous pouvez utiliser l'interface utilisateur graphique PMD ou l'intégrer dans votre processus de build en utilisant des plugins Maven ou Ant.
Pour lancer PMD en ligne de commande, vous pouvez utiliser la commande suivante :
Exécuter Jar
java -jar [jar]
Dézipper Jar
unzip -d [répertoire de sortie] [jar]
Créer Jar
jar -cmf META-INF/MANIFEST.MF [jar de sortie] *
Base64 SHA256
sha256sum [fichier] | cut -d' ' -f1 | xxd -r -p | base64
Supprimer Signature
rm META-INF/.SF META-INF/.RSA META-INF/*.DSA
Supprimer du Jar
zip -d [jar] [fichier à supprimer]
Décompiler classe
procyon -o . [chemin de la classe]
Décompiler Jar
procyon -jar [jar] -o [répertoire de sortie]
Compiler classe
javac [chemin du fichier .java]
Go
PHP
Extensions Wordpress
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Découverte
Burp:
Spider et découvrir le contenu
Sitemap > filtre
Sitemap > clic droit sur le domaine > Outils d'engagement > Trouver des scripts
waybackurls <domain> |grep -i "\.js" |sort -u
Analyse statique
Désobfusquer/Embellez
Désembrouiller/Dépaqueter
Remarque: Il peut ne pas être possible de désembrouiller complètement.
Trouver et utiliser les fichiers .map:
Si les fichiers .map sont exposés, ils peuvent être utilisés pour désembrouiller facilement.
Couramment, foo.js.map correspond à foo.js. Recherchez-les manuellement.
Utilisez JS Miner pour les rechercher.
Assurez-vous qu'une analyse active est effectuée.
Lisez 'Conseils/Notes'
Si trouvés, utilisez Maximize pour désembrouiller.
Sans fichiers .map, essayez JSnice:
Références: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Conseils:
Si vous utilisez jsnice.org, cliquez sur le bouton d'options à côté du bouton "Nicify JavaScript", et désélectionnez "Infer types" pour réduire l'encombrement du code avec des commentaires.
Assurez-vous de ne laisser aucune ligne vide avant le script, car cela peut affecter le processus de désembrouillage et donner des résultats inexactes.
Utilisez console.log();
Trouvez la valeur de retour à la fin et changez-la en
console.log(<packerReturnVariable>);
pour que le js désembrouillé soit affiché au lieu d'être exécuté.Ensuite, collez le js modifié (et toujours embrouillé) dans https://jsconsole.com/ pour voir le js désembrouillé affiché dans la console.
Enfin, collez la sortie désembrouillée dans https://prettier.io/playground/ pour l'embellir pour l'analyse.
Remarque: Si vous voyez toujours du js empaqueté (mais différent), il peut être empaqueté de manière récursive. Répétez le processus.
Références
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
Outils
https://portswigger.net/burp/documentation/desktop/tools/dom-invader
Références Moins Utilisées
https://cyberchef.org/
https://olajs.com/javascript-prettifier
https://jshint.com/
https://github.com/jshint/jshint/
Last updated