Sécurité informatique : améliorez les logiciels, mais évitez les gaffes !
Récemment, une grave vulnérabilité des appareils Apple (consistant en une gestion incorrecte du chiffrement) a été rendue publique. Cette vulnérabilité a rendu la protection SSL/TLS inutile, et a permis à un attaquant qui « écoutait » un réseau sans fil de capturer ou de modifier des données dans les sessions chiffrées.
En d'autres termes, toutes les données confidentielles telles que les mots de passe, les informations bancaires, etc, ont pu être détournées par une attaque ciblée. Bien qu'Apple ait rapidement fourni des correctifs de sécurité pour les appareils iOS et Mac, c'est un remarquable exemple montrant que de petites erreurs peuvent conduire à de gros trous de sécurité. Voici le code correspondant, extrait du dépôt Open Source d'Apple. Pouvez-vous repérer le problème ?
1 static OSStatus
2 SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen)
3 {
4 OSStatus err;
5 ...
6 if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
7 goto fail;
8 if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
9 goto fail;
10 goto fail;
11 if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
12 goto fail;
13 ...
14 fail:
15 SSLFreeBuffer(&signedHashes);
16 SSLFreeBuffer(&hashCtx);
17 return err;
18 }
Vous y êtes ?!
Le bug a été introduit à la ligne 10, probablement en raison d’un copier/coller de trop. Alors que le « goto » de la ligne 9 n'est exécuté que si l'instruction « if » de la ligne 8 est vraie, le « goto » supplémentaire de la ligne 10 contourne les contrôles de sécurité suivants, laissant la connexion SSL non vérifiée.
De tels bugs se produisent aussi au CERN ! La sécurité fait partie intégrante du logiciel, de la même manière que la disponibilité, la fonctionnalité, la maintenabilité et la convivialité. Un code plus sûr signifie moins d'interventions pour corriger les problèmes, ce qui augmente la disponibilité et améliore la maintenabilité. Un code plus sûr signifie de meilleurs contrôles des interfaces utilisateur et des entrées fournies par l'utilisateur, améliorant ainsi la convivialité et la fonctionnalité. Par conséquent, nous vous recommandons fortement de faire des tests approfondis de votre logiciel avant son déploiement. Plus simple : activez les avertissements de votre compilateur (« gcc -Wall- Wextra - Werror » pour C/C++ ou « javac- Werror - Xlint:all » pour Java) et vérifiez les paramètres de votre éditeur de texte favori ou de votre environnement de développement.
N'hésitez pas à utiliser plusieurs compilateurs sur votre code : « clang » est une bonne alternative à « gcc ». Il peut vous aider à identifier les problèmes et dispose d'une sortie joliment colorée. Les avertissements du compilateur peuvent aussi vous informer de pratiques de programmation sous-optimales. De plus, utilisez des outils d'analyse statique de code. Ces outils sont censés examiner votre code rapidement, recherchant les potentiels bugs et vulnérabilités communes (liés à la sécurité ou non), augmentant ainsi la fiabilité et la sécurité de vos programmes. Cette même page web fournit également des recommandations sur la façon de garder les « secrets » secrets, sur la façon de sécuriser les applications web, ainsi qu'une « liste de contrôles de sécurité ».
Bien sûr, n'hésitez pas à nous contacter en écrivant à Computer.Security@cern.ch pour des conseils ou un audit de sécurité complet, ou assistez à nos sessions de formation sur la programmation sécurisée prévues au printemps et en été :
- Developing secure software (4 heures)
- Secure coding in C/C++ (1 jour)
- Secure coding in Perl (1 jour)
- Secure coding in Python (1 jour)
- Securing Java Applications (1 jour)
- Securing Java and Web Applications (1 jour)
- Securing PHP Web Applications (1 jour)
Pour plus d'informations, inscrivez-vous à nos cours de programmation sécurisée.
Si vous voulez en savoir plus sur les incidents et les problèmes de sécurité informatique rencontrés au CERN, consultez notre rapport mensuel (en anglais).
Et bien sûr, n'hésitez pas à contacter l'équipe de sécurité informatique ou à consulter notre site web.
Accédez à la collection complète d'articles de l'équipe de sécurité informatique ici.