Maison > Article > interface Web > Résumé des vulnérabilités courantes dans JavaScript et introduction à la technologie de détection automatisée
Avant-propos
Avec le développement du Web2.0 et la popularité du framework Ajax, les applications Web clientes riches (Rich Internet Applications, RIA) se multiplient de jour en jour. Une grande partie de la logique a commencé à passer du côté serveur au client, et cette logique est généralement écrite en langage JavaScript. Mais malheureusement, les développeurs ne prêtent généralement pas beaucoup d’attention à la sécurité du code JavaScript. Selon le rapport sur les tendances à mi-parcours 2011 d'IBM X-Force, 40 % des sites Web Fortune 500 et des sites Web connus présentent des vulnérabilités de sécurité JavaScript. Cet article montrera aux lecteurs les vulnérabilités de sécurité JavaScript courantes en combinaison avec le code, dans le but d'aider les lecteurs à éviter ces vulnérabilités de sécurité dans le travail de codage quotidien. De plus, les principes des vulnérabilités de sécurité JavaScript côté client sont légèrement différents de ceux des vulnérabilités de sécurité côté serveur. Il existe actuellement des difficultés techniques majeures dans la détection automatique des vulnérabilités de sécurité JavsScript. Cet article utilisera des cas pour partager avec les lecteurs comment utiliser le. nouvelles fonctionnalités d'IBM Rational AppScan Standard Edition V8.0 (la technologie JavaScript Security Analyzer (JSA) détecte automatiquement les vulnérabilités de sécurité JavaScript.
Fulnérabilités de sécurité JavaScript courantes
En décembre 2010, IBM a publié un livre blanc sur les vulnérabilités de sécurité JavaScript côté client dans les applications Web, qui présentait le JavaScript de l'IBM Security Research Institute. enquête sur l'état de sécurité menée. L'échantillon de données comprend 675 sites Web, dont des sites Web de sociétés Fortune 500 et 175 autres sites Web bien connus, notamment des sociétés informatiques, des sociétés de services de sécurité d'applications Web, des sites de réseaux sociaux, etc. Afin de ne pas affecter le fonctionnement normal de ces sites Web, les chercheurs ont utilisé un robot d'exploration non intrusif et n'ont analysé qu'un sous-ensemble de pages accessibles sans connexion, pas plus de 200 pages par site. Ces pages ont été enregistrées et les chercheurs ont utilisé la technologie d'analyse de sécurité JavaScript d'IBM pour analyser ces pages hors ligne, en se concentrant sur les vulnérabilités de script intersite et de redirection basées sur DOM.
Les résultats des tests sont étonnants. 14 % de ces sites Web bien connus présentent de graves problèmes de sécurité JavaScript. Les pirates peuvent utiliser ces vulnérabilités pour implanter des logiciels malveillants, implanter des sites de phishing et détourner des sessions utilisateur. Ce qui est encore plus étonnant, c'est qu'avec la maturité et le développement de la technologie d'analyse de sécurité JavaScript d'IBM, le rapport X-Force de mi-2011 a montré qu'IBM avait retesté les sites Web bien connus mentionnés ci-dessus et découvert davantage de vulnérabilités de sécurité. Environ 40 % des sites Web ont Failles de sécurité JavaScript.
Code source du cadre de sécurité des autorisations universelles Java au niveau de l'entreprise SpringMVC mybatis ou hibernate+ehcache shiro druid bootstrap HTML5
L'article suivant combinera le code pour montrer aux lecteurs ces vulnérabilités de sécurité JavaScript courantes, de sorte que les lecteurs peuvent pratiquer le processus de codage réel. Faites attention à ces problèmes de sécurité et évitez ces risques le plus tôt possible.
Cross Site Scripting basé sur DOM
Nous avons tous entendu parler de XSS (Cross Site Script, cross-site scripting, également connu sous le nom d'attaque de cross-site scripting) , Cela signifie que l'attaquant insère un code de script malveillant (généralement du code HTML et du code JavaScript) dans une page Web légitime, puis soumet une requête au serveur. Le serveur répond ensuite à la page et se voit implanter le code de script malveillant de l'attaquant. l'attaquant peut utiliser ces codes de script malveillants pour mener des attaques telles que le détournement de session. Les scripts cross-site sont généralement divisés en types réfléchissants et persistants : les scripts cross-site réfléchissants se produisent lorsque les données de la demande sont rendues non codées et non filtrées dans la page de réponse du serveur. Les données persistantes font référence à des données de demande contenant du code malveillant. Elles sont stockées sur le serveur du serveur ; Application Web. Chaque fois que l'utilisateur visite une certaine page, le code malveillant sera automatiquement exécuté. Ce type d'attaque est particulièrement courant pour les sites de réseaux sociaux de type Web2.0, et la menace est également plus grande. Il existe deux manières principales de gérer les scripts intersites : premièrement, ne faites confiance à aucune entrée de l'utilisateur et essayez d'utiliser la technologie de liste blanche pour vérifier les paramètres d'entrée. Deuxièmement, échappez au contenu fourni par l'utilisateur lors de la sortie.
Mais on sait peu de choses qu'il existe un troisième type de vulnérabilité de script intersite. En 2005, Amit Klein a publié le livre blanc « DOM Based Cross Site Scripting ou XSS of the Third Kind » (« DOM Based Cross Site Scripting ou XSS of the Third Kind »), qui a révélé la compilation de scripts intersites basés sur DOM. du contenu n'a pas besoin de s'appuyer sur des réponses côté serveur. Si certaines pages HTML utilisent des attributs d'éléments DOM tels que document.location, document.URL ou document.referer, les attaquants peuvent utiliser ces attributs pour implanter des scripts malveillants afin d'implémenter DOM-. basées sur des références croisées.
Ci-dessous, nous démontrerons le principe du script intersite basé sur DOM à travers une page HTML très simple. Supposons qu'il existe une page HTML statique (affichée dans le listing 1) qui affiche un message invitant l'utilisateur à se connecter avec succès.
Listing 1. Code HTML avec XSS basé sur DOM
<HTML> <TITLE>Welcome!</TITLE> Hi <SCRIPT> var pos=document.URL.indexOf("name=")+5; document.write(document.URL.substring(pos,document.URL.length)); </SCRIPT> <BR> Welcome to our system …</HTML>
Selon la logique du code JavaScript de cette page, elle acceptera le paramètre de nom passé dans l'URL et affichez-le Message de bienvenue, comme indiqué dans le listing 2 :
Listing 2. Accédez à l'URL dans des circonstances normales
http://www.vulnerable.site/welcome. html? name=Jeremy
Mais si un attaquant malveillant entre un script similaire au suivant, voir le listing 3, la page exécutera le script JavaScript injecté.
清单 3. 访问 URL 中注入脚本
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
很明显,受害者的浏览器访问以上 URL 的时候,服务器端会跟正常情况下一样返回清单 1 中所示 HTML 页面,然后浏览器会继续将这个 HTML 解析成 DOM,DOM 中包含的 document 对象的 URL 属性将包含清单 3 中注入的脚本内容,当浏览器解析到 JavaScript 的时候会执行这段被注入的脚本,跨站点脚本编制攻击即成功实现。
值得关注的是,通过以上示例可以看出,恶意代码不需要嵌入服务器的响应中,基于 DOM 的跨站点脚本编制攻击也能成功。可能某些读者会认为:目前主流浏览器会自动转义 URL 中的 "" 符号,转义后的注入脚本就不会被执行了,基于 DOM 的跨站点脚本编制也就不再有什么威胁了。这句话前半段是对的,但后半段就不准确了。我们要意识到攻击者可以很轻松地绕过浏览器对 URL 的转义,譬如攻击者可以利用锚点 "#" 来欺骗浏览器,如清单 4 所示。浏览器会认为 "#" 后面的都是片段信息,将不会做任何处理。
清单 4. 访问 URL 中结合锚点注入脚本
http://www.vulnerable.site/welcome.html#?name=<script>alert(document.cookie)</script>
通过 URL 重定向钓鱼
网络钓鱼是一个通称,代表试图欺骗用户交出私人信息,以便电子欺骗身份。通过 URL 重定向钓鱼指的是 Web 页面会采用 HTTP 参数来保存 URL 值,且 Web 页面的脚本会将请求重定向到该保存的 URL 上,攻击者可以将 HTTP 参数里的 URL 值改为指向恶意站点,从而顺利启用网络钓鱼欺骗当前用户并窃取用户凭证。清单 5 给出了较为常见的含有通过 URL 重定向钓鱼漏洞的代码片段。
清单 5. 执行重定向的 JavaScript 代码片段
<SCRIPT> … var sData = document.location.search.substring(1); var sPos = sData.indexOf("url=") + 4; var ePos = sData.indexOf("&", sPos); var newURL; if (ePos< 0) { newURL = sData.substring(sPos); } else { newURL = sData.substring(sPos, ePos); } window.location.href = newURL; … </SCRIPT>
可以看出,这些 JavaScript 脚本负责执行重定向,新地址是从 document.location、document.URL 或者 document.referer 等 DOM 元素的属性值中截取出来的,譬如用户输入清单 6 所示。
清单 6. 执行重定向的 URL
http://www.vulnerable.site/redirect.html?url=http://www.phishing.site
显然用户一旦执行了清单 6 所示 URL,将被重定向到钓鱼网站。这个漏洞的原理很简单,比服务器端的重定向漏洞更好理解。但通过 URL 重定向钓鱼的情况下,钓鱼站点的网址并不会被服务端拦截和过滤,因此,这个漏洞往往比服务器端重定向漏洞更具有隐蔽性。
客户端 JavaScript Cookie 引用
Cookie 通常由 Web 服务器创建并存储在客户端浏览器中,用来在客户端保存用户的身份标识、Session 信息,甚至授权信息等。客户端 JavaScript 代码可以操作 Cookie 数据。如果在客户端使用 JavaScript 创建或修改站点的 cookie,那么攻击者就可以查看到这些代码,通过阅读代码了解其逻辑,甚至根据自己所了解的知识将其用来修改 cookie。一旦 cookie 包含了很重要的信息,譬如包含了权限信息等,攻击者很容易利用这些漏洞进行特权升级等攻击。
JavaScript 劫持
许多 Web 应用程序都利用 JSON 作为 Ajax 的数据传输机制,这通常都容易受到 JavaScript 劫持攻击,传统的 Web 应用程序反而不易受攻击。JSON 实际上就是一段 JavaScript,通常是数组格式。攻击者在其恶意站点的页面中通过 <script> 标签调用被攻击站点的一个 JSON 动态数据接口,并通过 JavaScript Function Hook 等技术取得这些 JSON 数据。如果用户登录被攻击网站后(假定其身份认证信息是基于 Session Cookie 来保存的),又被攻击者诱引访问了恶意站点页面,那么,由于 <SCRIPT src="> 这种标签的请求会带上 Cookie 信息,恶意站点会发送 JSON 数据获取请求至被攻击站点,被攻击站点服务器会认为当前请求是合法的,并返回给恶意站点当前用户的相关 JSON 数据,从而导致用户数据泄密。整个过程相当于一个站外类型的跨站点请求伪造 CSRF 攻击。</script>
随着 Ajax 的进一步推广,以及 HTML5 的逐步应用,还有更多的客户端安全漏洞出现。目前对于 JavaScript 的安全研究尚不多,新推出的 HTML5 客户端存储、跨域通信等新特型也都跟安全紧密相关,有兴趣的读者可以作进一步阅读。鉴于笔者知识有限,JavaScript 相关安全漏洞暂且分享这么多,下面将谈谈 JavaScript 安全漏洞的检测技术。
Détection automatisée des vulnérabilités de sécurité JavaScript
Comme nous le savons tous, il existe généralement une inspection en boîte blanche et une inspection en boîte noire pour détecter les vulnérabilités de sécurité du code. L'inspection en boîte blanche se concentre sur l'analyse du code, soit via une révision manuelle du code, soit via des outils d'analyse automatisés du code. L’inspection par boîte noire simule principalement les attaques de pirates informatiques pour les tests d’intrusion. De manière générale, l'inspection en boîte noire offre une plus grande précision mais une couverture de code plus petite, tandis que l'inspection en boîte blanche a une couverture de code plus élevée mais un taux de faux positifs plus élevé. La combinaison des deux méthodes peut compenser les lacunes de l'autre, et les méthodes d'inspection hybrides constitueront la tendance future.
En termes de code JavaScript, pour des raisons telles que la compatibilité entre navigateurs et de meilleures exigences en matière de fonctionnalités Ajax, de plus en plus d'applications Web s'appuient sur des bibliothèques de code JavaScript tierces, telles que Dojo, JQuery, etc. Afin de réduire la taille du fichier, ces bibliothèques de code compressent souvent le code, ce qui entraîne une lisibilité extrêmement mauvaise, de sorte qu'une révision manuelle du code est presque impossible. De plus, il existe de nombreux points d'entrée pour les appels JavaScript sur la page, ce qui rend les tests d'intrusion manuels très laborieux et difficiles. Par conséquent, nous devons recommander l’utilisation d’outils de test automatisés pour détecter les vulnérabilités de sécurité JavaScript.
Brève description du principe de Rational AppScan JSA
JSA est une extension AppScan récemment lancée de Rational AppScan Standard V8.0, qui est utilisée pour effectuer une analyse JavaScript statique afin de détecter Failles courantes de sécurité des clients. JSA combine la technologie d'analyse des contaminations statiques JavaScript et la technologie d'exploration dynamique des sites Web. En bref, AppScan enregistre la réponse HTTP complète de toutes les URL explorées par le robot, puis JSA analyse le code JavaScript de ces pages de réponse une par une. JSA applique deux étapes lors de l'analyse de chaque page : l'analyse du flux de données et l'analyse des chaînes. Tout d’abord, JSA recherche les traces depuis la source jusqu’à l’évier qui ne sont pas passées par le Sanitizer. Si cette trace peut être trouvée, JSA la vérifiera dans un deuxième temps à l'aide d'une variante d'analyse de chaînes appelée String Prefix Analysis (SPA). Par rapport à la technologie d'analyse statique de code JavaScript pur, la technologie JSA est plus avancée et plus précise car elle analyse les vulnérabilités de sécurité dans les pages HTML et les environnements DOM entièrement analysés.
Dans les sites Web Web2.0 et les applications Ajax d'aujourd'hui, les pages HTML nécessitent souvent que le navigateur soit analysé dynamiquement en fonction du code HTML et JavaScript dans la réponse du serveur pour former un HTML et un DOM complets, qui sont uniquement basés sur le HTML. et le code JavaScript dans la réponse du serveur. Il existe un défaut évident dans l'analyse des défauts statiques du code JavaScript : le code JavaScript et l'environnement d'exécution qu'il teste ne sont pas nécessairement complets, il ne peut donc pas garantir l'exactitude et l'exhaustivité du test. JSA surmonte les lacunes ci-dessus, combine les avantages de la détection de boîte blanche et de la détection de boîte noire et introduit la technologie d'analyse de chaînes d'IBM, afin que JSA ait une meilleure précision et exhaustivité.
Utilisez AppScan pour détecter les vulnérabilités de sécurité JavaScript
Altoro Mutual est un site Web de démonstration de vulnérabilités de sécurité Web fourni par IBM Ci-dessous, l'auteur montrera aux lecteurs comment utiliser AppScan JSA. pour détecter ces vulnérabilités de sécurité JavaScript dans les sites Web.
Démarrez AppScan, cliquez sur le menu « Scan - Scan Configuration » pour ouvrir la boîte de dialogue de configuration de l'analyse et définissez l'URL de départ sur « http://demo.testfire.net ».
Figure 1. Définissez l'URL de départ
Sur le côté gauche de la boîte de dialogue de configuration de l'analyse, cliquez sur " Gestion des connexions", puis cliquez sur le bouton "Enregistrer..." à droite pour enregistrer le processus de connexion, garantissant ainsi que la détection en session est active.
Figure 2. Définir la méthode de connexion
Sur le côté gauche de la boîte de dialogue de configuration de l'analyse, cliquez sur "Test Stratégie", Vérifiez les paramètres de la politique de test. La stratégie de test par défaut doit être « Par défaut », qui inclut déjà les tests JavaScript courants. Vous pouvez cliquer sur « Activé/Désactivé » pour afficher les stratégies de test actuellement activées par défaut.
Figure 3. Vérifier la stratégie de test
Fermez la boîte de dialogue de configuration de l'analyse et cliquez sur le menu " Scan- - Explorer uniquement" ou cliquez sur le bouton de raccourci (illustré dans la figure 4) pour commencer l'exploration. Cet article illustre uniquement comment détecter les vulnérabilités de sécurité JavaScript, choisissez donc la méthode de test d'analyse JavaScript « Explorer uniquement » + côté client.
Figure 4. Commencer l'exploration
Cliquez sur le menu « Outils – Extensions – JavaScript Security Analyzer » ou sur le bouton de raccourci (comme illustré dans la figure 5) pour ouvrir « Analyser JavaScript ». Dans la boîte de dialogue contextuelle de l'analyseur de sécurité JavaScript, cliquez sur « Analyser maintenant ».
Figure 5. Analyse de JavaScript
JavaScript Security Analyzer Une fois l'analyse terminée, il sera dans la liste des résultats Répertorie les vulnérabilités de sécurité JavaScript découvertes côté client. Comme le montre la figure ci-dessous, le site Altoro Mutual présente des vulnérabilités de « script intersite basé sur DOM » et de « redirection ouverte ». Les détails de ces vulnérabilités sont présentés ci-dessous.
Figure 6. Afficher les résultats de l'analyse
jquery implémente le partage de code d'effets de texte 3D superposés
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!