Comment sécuriser le code automatiquement ?

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. png

Comme pour les bugs fonctionnels, plus on détecte les problèmes de sécurité tôt moins ils coûtent cher.

1. SAST (STATIC APPLICATION SECURITY TESTING)

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 :

FindSecBug

c'est le cousin de Findbug

Sonar

Dans Sonar, il y a une catégorie "Bug de sécurité"

Les outils en ligne et gratuits (mais pas vraiment Open source) :

Github code scanning

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.

2 SCA (SOFTWARE COMPOSITION ANALYSIS)

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é.

Repository et registry

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.

3 DAST (DYNAMIC APPLICATION SECURITY TESTING)

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

4 IAST (INTERACTIVE APPLICATION SECURITY TESTING)

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.

5 WAF (WEB APPLICATION FIREWALL)

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.

6 RASP (RUN-TIME APPLICATION SECURITY PROTECTION)

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.

7 Autres :

Outils de détections de secret dans un repository Git.

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.



Tags: blog, security

← Back home