Le shift left est une idée qui vise à apporter de la sécurité dans la partie plus à gauche des schémas de cycle de développement. Nottons que cette notion fonctionne sur un cycle en V ou sur l'infini du devops.
Comme pour les bugs fonctionnels, plus on détecte les problèmes de sécurité tôt moins ils coûtent cher.
Un SAST est un outil d'analyse de code static, c'est-à-dire qu'il a accès en lecture au code. Il peut avoir cet accès depuis votre IDE, souvent par un plug-in. Il peut aussi avoir cet accès dans l'intégration continue. Les outils Open sources les plus efficaces sont :
c'est le cousin de Findbug
Dans Sonar, il y a une catégorie "Bug de sécurité"
Les outils en ligne et gratuits (mais pas vraiment Open source) :
Github a développé un moteur "maison" d'analyse sémantique de code. Pour utiliser ce moteur, Github a créé le langage QL
qui permet de faire des requêtes. Github à l'aide de la communauté a pu donc créer l'ensemble des règles de sécurité.
Snyk a annoncé début janvier 2021 un SAST pour très bientôt. Wait and see.
Je ne mentionnerai pas les offres payantes souvent très chères.
Le souci avec les SAST est qu'il est difficul de trouver un outil pertinent sur le langage que vous utilisez. Il est par exemple difficile d'avoir des résultats intéressants sur code Groovy
.
Même sur un langage plus populaire, l'analyse étant automatique, beaucoup de faut positif viennent polluer les résultats.
Attention, comme pour l'analyse de code en général, il est dangereux d'imposer un nombre maximum autorisé de bugs de sécurité, surtout avec un outil qui n'est pas pertinent.
Un SCA est un outil d'analyse de la composition des dépendances de votre application. L'outil va lire le fichier décrivant vos dépendances, pom.xml
, gradle.build
, package.json
ou package.lock
,... et chercher dans une base de données s'il existe des dépendances ou des sous dépendances qui contiennent des vulnérabilités connues. Cette base de données est souvent basé sur (VulnDB)[https://github.com/vulndb].
L'outil open source par excellence est l'OWASP dependency analysis, c'est un outil plutôt pertinent qui est bien outillé avec une CLI et pleins de plugins pour vos IDE.
L'outil gratuit (mais non open source) intéressant est Github dependabot, c'est un service que Github a racheté en 2019 qui créé un Pull request pour mettre à jour une dépendance de votre projet qui est sujet à une vulnérabilité.
Un repository (ou dépot) est le service où l'on stocke nos librairies comme npm, nexus, Jfrog ,... Un registry est un service où l'on stocke des images dockers comme DockerHub. Certains repositories ou registries intègrent directement une analyse du livrable que vous lui confiez.
C'est un outil qui scanne votre application Web via l'interface Web. C'est un test en boîte noire car contrairement aux outils de test de sécurité des applications statiques, les DASTs n'ont pas accès au code source et détectent donc les vulnérabilités en effectuant effectivement des attaques.
De par leur nature, les DASTs ne sont pas personnalisés à votre application et les résultats sont donc peu pertinents
Les IAST sont des DAST mais un peu plus avancées, car les outils ont accès au code source et au monitoring de l'application (mémoire, CPU, ...). Les solutions IAST scrutent les applications en déployant des agents et des capteurs en cours d'exécution et en analysant en permanence toutes les interactions d'application initiées par des tests manuels, des tests automatisés ou une combinaison des deux pour identifier les vulnérabilités en temps réel. Les IAST sont, en général, utilisés sur des environnements de tests.
Un WAF est une évolution d'un pare-feu. Il analyse les paquets HTTP(S) d'un serveur. Il peut donc être configuré finement en fonction des technologies du serveur à protéger.
Un RASP est une évolution d'un WAF. Un RASP s'exécute dans l'application par l'installation d'un agent. Il va analyser les requêtes (URL, paramètres, en-tetes, ...) à la recherche d'attaque. Le RASP agit sur la sémantique de la requête.
Les repositories Git publiques sont automatiquement scannés par des robots. Si vous laissez des accès AWS dans votre code, vous pouvez vous faire hacker en 20 minutes. Il est donc intéressant même pour un dépôt git privé d'avoir un outil de surveillance pour éviter à tout prix d'avoir des secrets au sein du code.