
La sécurité des sites web (sites e-commerce, sites vitrines, plateformes SaaS et autres applications web) est un enjeu majeur pour les entreprises. Étant exposés au public, tous ces systèmes sont naturellement des cibles de choix pour des attaquants, qui profitent de nombreuses vulnérabilités au niveau des fonctionnalités et autres composantes des sites web : serveurs, données, composants tiers et autres fonctionnalités critiques tels que l’authentification, la gestion des sessions ou le contrôle d’accès.
Au-delà de l’aspect protection contre des intrusions malveillantes, la sécurité est également un argument commercial majeur et un aspect clé pour rassurer et donc convertir des prospects en clients. En effet, lors d’échanges avec un prospect pour la souscription à une application SaaS par exemple, il n’est pas rare que la question des démarches et actions cybersécurité réalisées par l’éditeur se pose. Ainsi, une certification (SOC ou ISO 27001), un certificat d’audit de sécurité ou un rapport de tests d’intrusion permettent de lever ce type de barrières. De la même manière, une plateforme e-commerce qui met en avant un sceau de sécurité délivré par un organisme tiers, aura plus de facilités à convertir ses visiteurs et réduire les abandons de panier.
Sécuriser un site web est donc vital et cela passe nécessairement par l’implémentation des meilleures pratiques en termes de développement, d’intégration, de suivi et de tests sécurité. Cet article ne vise pas l’exhaustivité. Il abordera la sécurité web uniquement sous l’angle des bonnes pratiques, avec quelques informations complémentaires sur les risques, les types d’attaques et les vulnérabilités qui peuvent être exploitées par des attaquants pour compromettre un site web et un système d’information pris dans son ensemble. Nous vous invitons donc à consulter notre article : Comment renforcer la sécurité des applications web pour contrer les attaques les plus courantes ? afin d’avoir une vision plus globale sur les enjeux et risques sécurité, liés aux sites web (applications web, sites e-commerce, etc.).
Entrons dans le vif du sujet avec un aspect essentiel, qui sera par ailleurs le fil conducteur et la synthèse globale de notre article : l’exposition d’une entreprise, autrement dit sa surface d’attaque.
La question de la surface d’attaque est centrale dans une démarche cybersécurité car elle est au cœur de la stratégie des attaquants. En effet, toute attaque informatique sur un site web, un réseau interne ou une infrastructure externe commence généralement par une phase de reconnaissance, permettant d’identifier les portes d’entrée potentielles. Par ailleurs, il est à noter que les pirates informatiques ne ciblent que très rarement une entreprise précise ou un site web spécifique. Ils recherchent en effet des cibles potentielles tous azimuts. Et leurs victimes favorites sont les entreprises les plus exposées publiquement, avec, de fait, la surface d’attaque la plus étendue.
La surface d’attaque peut concerner un site web, un logiciel, un réseau, elle peut être humaine ou physique.
Et la surface d’attaque d’une entreprise sera finalement composée de tous ces éléments.
Tous ces exemples sont des brèches qui, bien exploitées, peuvent permettre à des attaquants de compromettre un système d’information. Et ces scénarios sont bien réels. Il s’agit en effet de cas rencontrés durant des phases de reconnaissance – première étape de la méthodologie de tout test d’intrusion – dans le cadre de pentests de site web, de plateformes e-commerce, d’application web, de réseau interne, etc. ou lors d’audits de reconnaissance réalisés par les hackers éthiques que nous sommes.
Sécuriser un site web passe nécessairement par une maitrise de son exposition. Ainsi, cartographie et durcissement des systèmes sont les 2 étapes incontournables.
Pour réduire sa surface d’attaque, il est d’abord nécessaire d’en dresser une cartographie précise et complète. Il s’agira donc de lister tous les actifs, leurs versions et imbrications dans l’ensemble de votre SI. Des outils tels que censys ou shodan facilitent cette démarche.
Ainsi, vous pouvez cartographier la surface d’attaque d’une machine ou d’une application web spécifique. Pour une application web notamment, il s’agira de lister toutes les pages web dynamiques, formulaires, ports ouverts, comptes systèmes, toutes les applications ou service en cours d’exécution (APIs par exemple), etc.
Suite à cette cartographie, qui doit être exhaustive et continuellement actualisée car les systèmes ne sont jamais figés, il s’agira de réaliser une analyse détaillée de tous les éléments identifiés. Pour un port ouvert par exemple, on pourra chercher tout ce qui pourrait être utilisé par un attaquant pour profiter de l’exposition de ce port. Sur une application, en partant d’un compte utilisateur standard, on pourra tester les possibilités d’élévation de privilèges, etc.
Les résultats de cette analyse permettront d’identifier les points les plus critiques afin d’appliquer les mesures de durcissement nécessaires.
Ci-dessous des exemples de mesures de durcissement de systèmes qui participent à réduire votre surface d’attaque :
Les serveurs web, en raison des données sensibles qu’ils hébergent sont l’un des éléments les plus ciblés par des attaquants. La sécurité des serveurs est donc tout aussi importante que la sécurité de la couche applicative. Ci-dessous les mesures de sécurité et les bonnes pratiques à implémenter pour sécuriser un serveur web. Pour les risques sécurité liés au cloud, vous pouvez consulter notre article dédié sur ce sujet : Sécurité du cloud : quels sont les risques et les bonnes pratiques ?
Dans une installation par défaut d’un système d’exploitation et d’un serveur, de nombreux services et modules inutiles sont installés. Cependant, plus il y a des services, plus y aura des ports ouverts, laissant ainsi des brèches importantes qui peuvent être exploitées par des attaquants externes ou des utilisateurs malveillants. Désactiver les services inutiles libérera non seulement des ressources matérielles mais rendra votre serveur plus performant et plus sécurisé.
En effet, il est important de configurer votre serveur en fonction des seuls services indispensables à votre activité, en partant du principe que tout ce qui n’a pas besoin d’être autorisé doit être interdit, tout ce qui est inutile doit être désactivé ou supprimé, pour éviter les points d’accès superflus et potentiellement dangereux.
Pour des raisons de facilité, il est courant que le développement et le test d’application web s’effectuent directement sur le serveur de production. Cette pratique est à proscrire car ces applications contiennent généralement des vulnérabilités, qui peuvent facilement être découvertes et exploitées par un utilisateur malveillant.
Idéalement, le développement et le test d’applications web doivent toujours être effectués sur des serveurs isolés d’internet, et ne devraient jamais utiliser ou se connecter à des bases de données réelles pour réduire le risque d’attaque par rebond.
Les fonctionnalités les plus ciblées sur un site web par des attaquants sont sans aucun doute l’authentification, le système de gestion des sessions et le contrôle d’accès. Brute force, vols de session, élévation de privilèges, etc., les possibilités d’attaques sont nombreuses, mais les moyens des se défendre le sont tout autant.
Nous avons publié un article dédié aux bonnes pratiques permettant de sécuriser les systèmes d’authentification, de gestion de session et de contrôle d’accès des applications web.
Dans beaucoup d’applications web, les données sensibles telles que les identifiants et les informations d’authentification ne sont pas correctement protégées. Ces données sensibles doivent être chiffrées lorsqu’elles sont au repos ou en transit. En général les précautions ci-après doivent être prises :
La plupart des sites et applications web utilisent des composants tiers : librairies, frameworks, etc. Ces composants facilitent la tâche aux développeurs car ils permettent de réduire considérablement le temps nécessaire entre la phase conception et le déploiement en production. Ils peuvent cependant représenter un risque de sécurité important, avec des possibilités de vulnérabilités diverses : injections, XSS, mauvaise configuration, etc.
Nous avons décrit les problématiques de sécurité liées à l’utilisation des composants tiers dans notre article sur les vulnérabilités et attaques courantes des applications web. Vous pouvez vous référer à cet article pour la sécurité des composants tiers, ainsi que pour d’autres aspects tels les failles logiques sur les applications web.
Les sites et applications web sont des cibles particulièrement attrayantes pour les attaquants, en raison de leur exposition et de nombreuses vulnérabilités exploitables plus ou moins facilement. C’est pourquoi il est important d’évaluer la robustesse de votre site web face à des attaques réelles. C’est l’objectif d’un pentest (test d’intrusion).
Un pentest consiste à tester un système informatique, un réseau ou une application web pour trouver des failles de sécurité qu’un attaquant pourrait exploiter et proposer des correctifs de sécurité. Lors d’un pentest de site web, il s’agit notamment de rechercher des vulnérabilités à la fois côté serveur (services ouverts et mal sécurisés, logiciels non à jour, erreurs de configuration, etc.) et sur la couche applicative (injections, XSS, violation de gestion d’authentification et de session, exposition de données sensibles, etc.), avec 3 approches possibles : des tests en boite noire, en boite grise ou en boite blanche.
Quels que soient l’approche retenue ou le périmètre des tests, un rapport complet est réalisé suite à tout pentest. Il inclut la méthodologie suivie, les vulnérabilités identifiées, le niveau de criticité, l’exploitation possible ainsi que des recommandations de correction. Le pentest pourra être complété par une phase de validation des corrections permettant de vérifier leur bonne implémentation et l’absence d’effets de bord.