Les péchés mortels en matiÚre de sécurité des sites : ce que nous avons appris des statistiques du scanner de vulnérabilités en un an

Il y a environ un an, nous avons lancĂ© chez DataLine un service un service pour la recherche et l'analyse des vulnĂ©rabilitĂ©s dans les applications IT. À la base du service se trouve la solution cloud Qualys, dont nous avons dĂ©jĂ  parlĂ©. En un an d'utilisation de la solution, nous avons effectuĂ© 291 scans pour diffĂ©rents sites et accumulĂ© des statistiques sur les vulnĂ©rabilitĂ©s courantes dans les applications web. 

Dans l'article ci-dessous, je vais vous montrer quelles failles de sécurité des sites se cachent derriÚre différents niveaux de criticité. Voyons quelles vulnérabilités le scanner a détectées particuliÚrement souvent, pourquoi elles peuvent apparaßtre et comment se protéger. 

Les péchés mortels en matiÚre de sécurité des sites : ce que nous avons appris des statistiques du scanner de vulnérabilités en un an

Toutes les vulnérabilités des applications web sont divisées par Qualys en trois niveaux de criticité : faible, moyenne et élevée. En regardant la répartition par "gravel", il semble que ce ne soit pas si grave. Il y a peu de vulnérabilités critiques, la plupart étant non critiques : 

Les péchés mortels en matiÚre de sécurité des sites : ce que nous avons appris des statistiques du scanner de vulnérabilités en un an

Mais non critiques ne veut pas dire inoffensives. Elles peuvent aussi causer des dommages sérieux. 

Top des vulnérabilités "non critiques"

  1. Vulnérabilités liées au contenu mixte.

    La norme de sécurité des sites suppose la transmission des données entre le client et le serveur via le protocole HTTPS, qui supporte le chiffrement et protÚge les informations d'interception. 

    Certains sites utilisent du contenu mixte: ils transmettent une partie des donnĂ©es via le protocole non sĂ©curisĂ© HTTP. Plus souvent, cela concerne du contenu passif – des informations qui affectent uniquement l'affichage du site : images, styles CSS. Mais parfois, cela concerne aussi du contenu actif: des scripts qui contrĂŽlent le comportement du site. Dans ce cas, un logiciel spĂ©cial peut analyser les informations provenant du serveur avec du contenu actif, modifier les rĂ©ponses en temps rĂ©el et forcer la machine Ă  fonctionner de maniĂšre non prĂ©vue par ses crĂ©ateurs. 

    Les navigateurs des nouvelles versions avertissent les utilisateurs que les sites avec du contenu mixte ne sont pas sécurisés et bloquent le contenu. Les développeurs de sites reçoivent également des avertissements du navigateur dans la console. Par exemple, voici à quoi cela ressemble dans Firefox: 

    Les péchés mortels en matiÚre de sécurité des sites : ce que nous avons appris des statistiques du scanner de vulnérabilités en un an

    Quels sont les dangers: Les cybercriminels utilisent un protocole non sĂ©curisĂ© pour intercepter les informations de l'utilisateur, substituer des scripts et envoyer des requĂȘtes au site en son nom. MĂȘme si le visiteur du site n'a pas saisi de donnĂ©es, cela ne le protĂšge pas contre le phishing – l'extraction d'informations confidentielles par des mĂ©thodes frauduleuses. Par exemple, Ă  l'aide d'un script, il est possible de rediriger l'utilisateur vers un site non sĂ©curisĂ©, qui se masque sous un site familier pour l'utilisateur. Dans certains cas, le site malveillant apparaĂźt mĂȘme mieux que l'original, et l'utilisateur peut lui-mĂȘme remplir un formulaire et transmettre ses donnĂ©es confidentielles. 

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: MĂȘme si l'administrateur du site a installĂ© et configurĂ© un certificat SSL/TLS, une vulnĂ©rabilitĂ© peut survenir en raison du facteur humain. Par exemple, si sur l'une des pages un lien absolu avec http a Ă©tĂ© mis au lieu d'un lien relatif, et de plus si les redirections de http Ă  https ne sont pas configurĂ©es. 

    Vous pouvez dĂ©tecter du contenu mixte sur le site Ă  l'aide d'un navigateur : recherchez dans le code source de la page, lisez les notifications dans la console du dĂ©veloppeur. Cependant, le dĂ©veloppeur devra passer beaucoup de temps Ă  fouiller dans le code. Le processus peut ĂȘtre accĂ©lĂ©rĂ© par des moyens d'analyse automatisĂ©s, par exemple : SSL Check, le logiciel libre Lighthouse ou le logiciel payant Screaming Frog SEO Spider.

    Une vulnĂ©rabilitĂ© peut Ă©galement survenir Ă  cause de problĂšmes avec du code hĂ©ritĂ© – du code qui a Ă©tĂ© transmis. Par exemple, si certaines pages sont gĂ©nĂ©rĂ©es Ă  partir d'un ancien modĂšle qui ne tient pas compte de la transition des sites vers https.    

  2. Cookies sans les indicateurs « HTTPOnly » et « secure ».

    L'attribut « HTTPOnly » protÚge les fichiers cookies du traitement par des scripts que les cybercriminels utilisent pour voler des données utilisateur. Le drapeau « secure » n'autorise pas la transmission des cookies en clair. L'échange de données sera autorisé uniquement si les cookies sont envoyés via le protocole sécurisé HTTPS. 

    Les deux attributs sont spécifiés dans les propriétés des cookies :

    Set-Cookie: Secure; HttpOnly

    Quels sont les dangers: Si le développeur du site n'a pas défini ces attributs, le criminel peut intercepter les informations de l'utilisateur à partir des cookies et en faire usage. Si les cookies sont utilisés pour l'authentification et l'autorisation, il peut pirater la session de l'utilisateur et effectuer des actions sur le site en son nom. 

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: En gĂ©nĂ©ral, dans les frameworks populaires, ces attributs sont dĂ©finis automatiquement. Mais vĂ©rifiez quand mĂȘme la configuration du serveur Web et activez l'option : Set-Cookie HttpOnly; Secure.

    L'attribut « HTTPOnly » rendra les cookies invisibles mĂȘme pour votre propre JavaScript.  

  3. Vulnérabilités basées sur les chemins.

    Le scanner signale une telle vulnérabilité s'il trouve un fichier ou un répertoire public sur le site contenant des informations potentiellement sensibles. Par exemple, il pourrait détecter des fichiers séparés contenant la configuration du systÚme ou un accÚs à l'intégralité du systÚme de fichiers. Cela peut se produire si les droits d'accÚs ne sont pas correctement définis sur le site.

    Quels sont les dangers: Si le systÚme de fichiers est « exposé », un attaquant peut accéder à l'interface du systÚme d'exploitation et essayer de trouver des dossiers contenant des mots de passe, s'ils sont stockés en clair (ne le faites pas !). Il peut aussi voler des hachages de mots de passe, tenter de déduire le mot de passe, et essayer d'élever ses privilÚges dans le systÚme pour progresser dans l'infrastructure.  

    Ce qu'un développeur web doit garder à l'esprit: N'oubliez pas les droits d'accÚs et configurez la plateforme, le serveur Web, l'application Web pour qu'il soit impossible de « fuir » en dehors du répertoire Web.

  4. Formulaires pour saisir des données sensibles avec la fonction de remplissage automatique activée.

    Si un utilisateur remplit souvent des formulaires sur des sites, son navigateur sauvegarde ces informations grùce à la fonction de remplissage automatique. 

    Les formulaires sur les sites peuvent inclure des champs contenant des informations sensibles, comme des mots de passe ou des numĂ©ros de cartes de crĂ©dit. Pour ces champs, la fonction de remplissage automatique du formulaire doit ĂȘtre dĂ©sactivĂ©e sur le site. 

    Quels sont les dangers: Si le navigateur de l'utilisateur sauvegarde des informations sensibles, un attaquant peut les intercepter plus tard, par exemple, par phishing. En gros, le développeur Web qui oublie ce détail met en péril ses utilisateurs. 

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: Dans ce cas, nous avons un conflit classique : confort vs sĂ©curitĂ©. Si le dĂ©veloppeur Web pense au confort de l'utilisateur, il peut choisir dĂ©libĂ©rĂ©ment le remplissage automatique. Par exemple, s'il est important de suivre Les Directives pour l'accessibilitĂ© du contenu Web – recommandations pour rendre le contenu accessible aux utilisateurs ayant des handicaps. 

    Pour la plupart des navigateurs, il est possible de désactiver le remplissage automatique avec l'attribut autocomplete="off", par exemple :

     <body>
        <form action="/fr/form/submit/" method="get" autocomplete="off" data-trp-original-action="/form/submit">
          <div>
            <input type="text" placeholder="Prénom">
          </div>
          <div>
            <input type="text" id="lname" placeholder="Nom de famille" autocomplete="on">
          </div>
          <div>
            <input type="number" placeholder="Numéro de carte de crédit">
          </div>
          <input type="submit">
        <input type="hidden" name="trp-form-language" value="fr"/></form>
      </body>

    Mais cela ne fonctionnera pas pour Chrome. On contourne cela avec JavaScript, un exemple de solution peut ĂȘtre trouvĂ©. ici. 

  5. L'en-tĂȘte X-Frame-Options n'est pas dĂ©fini dans le code du site. 

    Cet en-tĂȘte affecte les balises frame, iframe, embed ou object. Il permet de totalement interdire l'intĂ©gration de votre site Ă  l'intĂ©rieur d'un cadre. Pour cela, il suffit d'indiquer la valeur X-Frame-Options : deny. Ou vous pouvez spĂ©cifier X-Frame-Options : sameorigin, ce qui permettra l'intĂ©gration dans un iframe uniquement sur votre domaine.

    Quels sont les dangers: L'absence de cet en-tĂȘte peut ĂȘtre exploitĂ©e sur des sites malveillants pour le clickjacking.Pour ce type d'attaque, un cybercriminel crĂ©e un cadre transparent au-dessus des boutons et trompe l'utilisateur. Par exemple, des escrocs placent dans le cadre une page de rĂ©seaux sociaux. L'utilisateur pense qu'il clique sur un bouton sur ce site. Au lieu de cela, le clic est interceptĂ© et envoie la requĂȘte de l'utilisateur vers le rĂ©seau social oĂč il a une session active. Ainsi, les malfaiteurs envoient du spam au nom de l'utilisateur ou augmentent le nombre de ses abonnĂ©s et de ses likes. 

    Si cette possibilitĂ© n'est pas interdite, un malveillant peut placer le bouton de votre application sur un site nuisible. Il pourrait ĂȘtre intĂ©ressĂ© par votre programme de parrainage ou par vos utilisateurs.  

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: Une vulnĂ©rabilitĂ© peut apparaĂźtre si X-Frame-Options avec une valeur conflictuelle est dĂ©finie sur le serveur web ou le rĂ©partiteur de charge. Dans ce cas, le serveur et le rĂ©partiteur Ă©craseront simplement l'en-tĂȘte, car ils ont une prioritĂ© plus Ă©levĂ©e par rapport au code backend.  

    Les valeurs deny et sameorigin de l'en-tĂȘte X-Frame-Options peuvent interfĂ©rer avec le fonctionnement du webvisor de Yandex. Pour autoriser l'utilisation de l'iframe pour le webvisor, il faut Ă©crire une rĂšgle distincte dans les paramĂštres. Par exemple, pour nginx, cela peut ĂȘtre configurĂ© comme suit :

    http{
    ...
     map $http_referer $frame_options {
     "~webvisor.com" "ALLOW-FROM http://webvisor.com";
     default "SAMEORIGIN";
     }
     add_header X-Frame-Options $frame_options;
    ...
    }
    
    

  6. Vulnérabilités PRSSI (Importation de feuille de style relative au chemin).  

    Il s'agit d'une vulnĂ©rabilitĂ© dans les styles du site. Elle survient lorsque des liens relatifs tels que href="/somefolder/styles.css/" sont utilisĂ©s pour accĂ©der aux fichiers de styles. Un attaquant en profitera s'il trouve un moyen de rediriger l'utilisateur vers une page malveillante. La page substituera le lien relatif dans son URL et imiterait un appel aux styles. Cela donnerait une requĂȘte du type badsite.ru/.../somefolder/styles.css/, qui sous prĂ©texte de style pourrait rĂ©aliser des actions malveillantes. 

    Quels sont les dangers: Un escroc pourrait exploiter cette vulnérabilité s'il trouve une autre faille de sécurité. Cela pourrait permettre de voler des données utilisateur à partir des cookies ou des jetons.

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: DĂ©finissez l'en-tĂȘte X-Content-Type-Options : nosniff. Dans ce cas, le navigateur vĂ©rifiera le type de contenu pour les styles. Si le type diffĂšre de text/css, le navigateur bloquera la requĂȘte.

Vulnérabilités critiques

  1. La page contenant un champ de mot de passe est transmise par le serveur via un canal non sécurisé (HTML form containing password field(s) is served over HTTP).

    La réponse du serveur sur un canal non chiffré est vulnérable aux attaques de type 'Man in the Middle'. Un attaquant peut intercepter le trafic et s'immiscer entre le client et le serveur lorsque la page passe du serveur au client. 

    Quels sont les dangers: Un escroc pourrait remplacer la page et envoyer à l'utilisateur un formulaire pour des données sensibles qui seront envoyées au serveur de l'agresseur. 

    Ce qu'un développeur web doit garder à l'esprit: Certains sites envoient aux utilisateurs un code temporaire par e-mail / téléphone au lieu d'un mot de passe. Dans ce cas, la vulnérabilité n'est pas aussi critique, mais cela complique la vie des utilisateurs.

  2. Soumission de formulaire avec identifiant et mot de passe par un canal non sécurisé (Login Form Is Not Submitted Via HTTPS).

    Dans ce cas, un formulaire avec identifiant et mot de passe est envoyé au serveur par un canal non chiffré.

    Quels sont les dangers: Contrairement Ă  l'exemple prĂ©cĂ©dent, il s'agit dĂ©jĂ  d'une vulnĂ©rabilitĂ© critique. Intercepter des donnĂ©es sensibles est plus facile, car il n'est mĂȘme pas nĂ©cessaire d'Ă©crire du code pour cela. 

  3. Utilisation de bibliothÚques JavaScript avec des vulnérabilités connues.

    Pendant la période d'analyse, la bibliothÚque la plus utilisée est devenue jQuery avec une large gamme de versions. Chaque version présente au moins une, voire plusieurs vulnérabilités connues. L'impact peut varier en fonction de la nature de la vulnérabilité.

    Quels sont les dangers: Pour les vulnérabilités connues, il existe des exploits, par exemple :

    Les péchés mortels en matiÚre de sécurité des sites : ce que nous avons appris des statistiques du scanner de vulnérabilités en un an

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: Revenez rĂ©guliĂšrement au cycle : recherche de vulnĂ©rabilitĂ©s connues – correction – vĂ©rification. Si vous utilisez des bibliothĂšques obsolĂštes de maniĂšre consciente, par exemple pour prendre en charge d'anciens navigateurs ou pour Ă©conomiser un budget, recherchez la possibilitĂ© de corriger les vulnĂ©rabilitĂ©s connues. 

  4. Scripts intersites (XSS). 
    Le Cross-Site Scripting (XSS) est une attaque sur une application web oĂč du code malveillant apparaĂźt dans la base de donnĂ©es. Si Qualys dĂ©tecte une telle vulnĂ©rabilitĂ©, cela signifie qu'un attaquant potentiel peut avoir insĂ©rĂ© ou a dĂ©jĂ  insĂ©rĂ© son script js dans le code du site pour exĂ©cuter des actions malveillantes.

    XSS stocké est plus dangereux, car le script est injecté sur le serveur et s'exécute à chaque fois que la page compromise est ouverte dans le navigateur.

    XSS rĂ©flĂ©chi est plus simple Ă  rĂ©aliser, car le script malveillant peut ĂȘtre injectĂ© dans la requĂȘte HTTP. L'application recevra la requĂȘte HTTP, ne validera pas les donnĂ©es, les empaquettera et les enverra immĂ©diatement. Si l'attaquant intercepte le trafic et insĂšre un script tel que

    <script>/*+Ń‡Ń‚ĐŸ+Ń‚ĐŸ+ĐżĐ»ĐŸŃ…ĐŸĐ”+*/</script> 

    alors une requĂȘte malveillante sera envoyĂ©e au nom du client.

    Un exemple frappant de XSS : des js-sniffers qui imitent des pages pour saisir le CVC, la date d'expiration de la carte, etc. 

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: Dans l'en-tĂȘte Content-Security-Policy, utilisez l'attribut script-src pour que le navigateur du client ne charge et n'exĂ©cute que le code provenant de sources de confiance. Par exemple, script-src 'self' autorise uniquement les scripts venant de notre site. 
    La meilleure pratique consiste à autoriser le code inline : permettez uniquement le javascript inline en utilisant la valeur unsafe-inline. Cette valeur autorise l'utilisation de js/css inline, mais n'interdit pas l'inclusion de fichiers js. En combinaison avec script-src 'self', nous interdisons l'exécution de scripts externes.

    Veillez Ă  enregistrer toutes les tentatives d'injection sur le site Ă  l'aide de report-uri.

  5. Injection SQL.
    La vulnĂ©rabilitĂ© indique la possibilitĂ© d'injecter du code SQL sur le site, qui s'adresse directement Ă  la base de donnĂ©es. L'injection SQL est possible si les donnĂ©es utilisateur ne sont pas Ă©chappĂ©es : elles ne sont pas vĂ©rifiĂ©es pour ĂȘtre conformes et sont immĂ©diatement utilisĂ©es dans la requĂȘte. Par exemple, cela se produit si le formulaire sur le site ne vĂ©rifie pas la correspondance des entrĂ©es avec le type de donnĂ©es. 

    Quels sont les dangers: Si un attaquant entre une requĂȘte SQL dans un tel formulaire, il peut faire tomber la base de donnĂ©es ou divulguer des informations confidentielles. 

    Ce qu'un dĂ©veloppeur web doit garder Ă  l'esprit: Ne faites pas confiance Ă  ce qui vient du navigateur. La protection doit ĂȘtre assurĂ©e Ă  la fois cĂŽtĂ© client et cĂŽtĂ© serveur. 

    CÎté client, écrivez une validation des champs à l'aide de JavaScript. 

    Les fonctions intĂ©grĂ©es dans les frameworks populaires aident Ă©galement Ă  Ă©chapper aux caractĂšres suspects sur le serveur. Il est Ă©galement recommandĂ© d'utiliser des requĂȘtes paramĂ©trĂ©es pour les bases de donnĂ©es sur le serveur.

    DĂ©terminez exactement oĂč se produit l'interaction avec la base de donnĂ©es dans l'application web. 

    L'interaction se produit lorsque nous rĂ©cupĂ©rons des informations : une requĂȘte avec un id (changement d'id), crĂ©ation d'un nouvel utilisateur, nouveau commentaire, – nouvelles entrĂ©es dans la base. Des injections SQL peuvent se produire ici. MĂȘme en supprimant une entrĂ©e de la base, une injection SQL est possible.

Recommandations générales

Ne rĂ©inventez pas la roue – utilisez des frameworks Ă©prouvĂ©s. En gĂ©nĂ©ral, les frameworks populaires sont plus sĂ»rs. Pour .NET, il s'agit d'ASP.NET MVC et d'ASP.NET Core, pour Python – Django ou Flask, pour Ruby – Ruby on Rails, pour PHP – Symfony, Laravel, Yii, pour JavaScript – Node.JS- Express.js, pour Java – Spring MVC.

Restez attentif aux mises à jour du fournisseur et mettez à jour réguliÚrement. Une vulnérabilité sera découverte, un exploit sera rédigé, rendu public, et tout recommencera. Abonnez-vous aux mises à jour des versions stables du fournisseur de logiciels.

Vérifiez les droits d'accÚs. Du cÎté du serveur, traitez toujours votre code comme s'il avait été rédigé par votre pire ennemi, désireux de casser votre site et de compromettre l'intégrité de vos données. D'autant plus que parfois, c'est vraiment le cas.

Utilisez des clones, des environnements de test, puis passez à la production. Cela permettra d'éviter, d'une part, des erreurs et des faux pas dans l'environnement de production : l'environnement de production génÚre des revenus et son inactivité est critique. Lors de l'ajout, de la correction ou de la résolution de problÚme, il est conseillé de travailler dans un environnement de test, puis de vérifier la fonctionnalité et les vulnérabilités détectées avant de planifier des opérations dans l'environnement de production. 

Protégez l'application web avec un Web Application Firewall et intégrez les rapports du scanner de vulnérabilités avec celui-ci. Par exemple, chez DataLine, les services Qualys et FortiWeb sont utilisés comme lien.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster