J'ai donc été invité à proposer une possibilité automatisée de vérifier le code python (fourni par les développeurs) pour l'adhésion aux meilleures pratiques de crypto selon différentes recommandations (principalement des BSI allemands). La plupart du temps, cela revient à rechercher l'utilisation, par exemple, MD5, SHA1 ou la longueur de clé dans RSA et ce genre de choses.

Je pourrais le faire d'une manière ou d'une autre avec regex mais cela semble un peu lourd et je ne connais pas toutes les bibliothèques nécessaires et à quoi ressemblent les appels de fonction (pour créer l'expression régulière). Je sais que l'outil bandit sast a des règles pour trouver MD5 / SHA1 / ... mais celles-ci ne sont pas vraiment suffisantes (bien qu'un bon début).

Quelle serait une bonne possibilité d'identifier l'utilisation de ces fonctions non sécurisées? Juste Regex, écrire mes propres règles de bandit ou quelque chose de différent?

THX

6
pinas 17 mars 2019 à 23:47

2 réponses

Meilleure réponse

Je voudrais d'abord reformuler. Vous avez besoin d'un outil d'analyse statique qui effectuera des vérifications personnalisées, comme pour les problèmes de sécurité.

Je commencerais par pylint, avec ses extensions. Il existe un exemple de vérificateur sur github. Le bon point ici est que vous pouvez l'intégrer dans les outils CI/CD sans trop de travail. Le problème ici peut être que l'éditeur de liens peut être informé de ne pas traiter quelque chose comme un problème. D'une part, c'est parfait, puisque md5 peut être utilisé dans certains domaines, mais cela peut conduire à cette fuite... En regardant de cette façon - tout ce que vous pouvez faire est d'informer.

Une autre option est le vérificateur de sécurité capable de traiter le code python. J'utilise lynis sur mon serveur. Ils utilisent un shell Linux simple. En pratique, vous pouvez grep du code python pour voir si quelque chose ne va pas. Je conseillerais d'aller là-bas et de vérifier ce qu'ils recherchent et comment c'est fait. Si ce n'est pas pour aller dans ce sens - que peut-être pour l'inspiration. Les faux positifs doivent également être traités ici. La question est donc de savoir si vous souhaitez vous en occuper pour vous-même, ou vraiment pour les développeurs...

Je commencerais par quelques vérifications - comme celle-ci md5/sha1, puis je développerais. Assurez-vous que ce qui est coché et ce qui ne va pas est clair. Cela a l'air vraiment compliqué, mais je ferais un essai. Peut-être une extension open source vers pylint, sur github ? De cette façon, vous pouvez obtenir le soutien des autres! Si oui - faites le moi savoir :)

2
Michał Zaborowski 30 mars 2019 à 17:06

Vous pouvez créer une petite base de données ou un dictionnaire («nom de bibliothèque»: [méthode1, méthode2]) de bibliothèques de cryptographie populaires et à partir de ces bibliothèques, les méthodes qui sont attribuées à des cas d'utilisation non sécurisés.

Ensuite, vous devez d'abord rechercher si la bibliothèque (clé) est en fait utilisée par le projet et si elle utilise également des méthodes non sécurisées (valeur). Vous n'auriez pas besoin d'utiliser l'expression régulière, pensez simplement à la façon dont vous rechercheriez une seule chaîne dans un fichier texte. Mais si vous vouliez l'efficacité, cela pourrait être recommandé :) et quelque chose d'amusant à développer, c'est juste mes pensées.

Vous pouvez cependant utiliser Sonarqube et l'intégrer dans votre pipeline de build, il prend en charge python et je sais de première main qu'il vérifie la faible utilisation de la cryptographie dans les projets C #, c'est gratuit et complètement automatisé, donc c'est parfait pour les petites / grandes équipes :)

https://www.sonarqube.org

Bonne chance copain!

3
D Silveiro 30 mars 2019 à 19:12