AeyeScan blog 第6回「ブラウザの内蔵AIでXSSを検出してみた」 | ScanNetSecurity
2024.07.06(土)

AeyeScan blog 第6回「ブラウザの内蔵AIでXSSを検出してみた」

 AI活用はますます進んでおり、Google Chrome にも AI が搭載される時代になりました。これをうまく活用すれば、ブラウザ上で動作する脆弱性であるクロスサイトスクリプティングも検出できるのではないか。そんなことを考えて、検証を行ってみました。

製品・サービス・業界動向
(イメージ画像)
  • (イメージ画像)
  • フラグ設定画面
  • 検証画面
  • 検証画面
  • 検証画面
  • 検証画面

 AI活用はますます進んでおり、Google Chrome にも AI が搭載される時代になりました。これをうまく活用すれば、ブラウザ上で動作する脆弱性であるクロスサイトスクリプティングも検出できるのではないか。そんなことを考えて、検証を行ってみました。

 Google Chrome のバージョン126 から、ローカルで動作する AI がブラウザに統合されます。AIモデルは、Google が提供する最軽量のモデルである Gemini Nano で、ブラウザに直接組み込まれているため、ネットワーク接続を必要としません。完全にローカルで動作することから、データが外部に送信されないというセキュリティ上の利点があります。

 利用方法は極めてシンプルで、JavaScript から window.aiコンポーネントの関数を呼び出すだけで、Gemini Nano の機能を活用できます。

●インストール手順

 早速インストールして動作を確認してみましょう。動作確認は Mac で実施しています。

1. Google Chrome Dev をインストールします。
2. インストールした Google Chrome Dev を起動し、chrome://flags/ にアクセスします。
3. 以下のフラグを設定します:
 ○Enables optimization guide on device: Enabled BypassPerfRequirement
 ○Prompt API for Gemini Nano: Enabled

4. Google Chrome Dev を再起動します。
5. chrome://components/ にアクセスします。
6. Optimization Guide On Device Model の「アップデートを確認」ボタンを押下します(存在しない場合は、他の項目の「アップデートを確認」ボタンを押下、再起動してみる、後述のコードを実行してみる、などを試してみると出現します)。

●利用手順

 Gemini Nano を実際に使用してみましょう。以下のコードを Developerコンソールに貼り付けて実行します。

---
const canCreate = await window.ai.canCreateTextSession();
if (canCreate === "no") {
console.log("Gemini Nanoがインストールされていません");
} else {
const session = await window.ai.createTextSession();
const result = await session.prompt("日本の首都は?");
console.log(result);
}
---

 数秒待つと「東京都」が出力されました。ブラウザ上で AI が動作しています!この手順により、Gemini Nano の機能をローカルで利用できることが確認できました。

●DOM Based XSS を検出してみる

 ここからが本題です。クライアントサイドで完結する脆弱性の一つに DOM Based XSS があります。性能調査のために、この脆弱性を AI で検出可能か試してみたいと思います。

・脆弱サイト

 脆弱サイトは、OWASP の Example をベースに作成しました。信頼できない値を document.write で出力する脆弱なコードです。

dombasedxss_vuln.html
---
<html><body>
Select your language:
<select><script>
document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("default=")+8))+"</OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>
</body></html>
---

 Google Chrome Dev上でこのHTMLを開いた後、以下の脆弱性検出コードを Developerコンソールに貼り付けて実行します。Gemini Nano は日本語の扱いに難があるため、プロンプトは英語で作成しています。(2024 年 6 月 18 日時点)

---
const canCreate = await window.ai.canCreateTextSession();
if (canCreate === "no") {
console.log("Gemini Nanoがインストールされていません");
} else {
const session = await window.ai.createTextSession();
const htmlContent = document.documentElement.outerHTML;
const prompt = 'Please analyze this HTML code for DOM-based XSS vulnerabilities and report the result as either "Exists," "Does Not Exist," or "Unknown." : ' + htmlContent
const result = await session.prompt(prompt);
console.log(result);
}
---

結果
**Result:**
***Exists***

 “Exists”と出力され、脆弱性を検出することができました。

 次は、脆弱性のないサイトを作成して同様の手順を試してみます。静的にタグを出力しているため安全なコードです。

dombasedxss_safe1.html
---
<html><body>
Select your language:
<select>
<OPTION value=1>Japanese</OPTION>
<OPTION value=2>English</OPTION>
</select>
</body></html>
---

結果
**Does Not Exist**

 “Does Not Exist”と出力され、脆弱性が無いことも判別することができました。

 最後に、少し複雑なコードで試してみます。document.write を使用していますが、引数は静的文字列のため安全なコードです。

dombasedxss_safe2.html
---
<html><body>
Select your language:
<select><script>
document.write("<OPTION value=1>Japanese</OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>
</body></html>
---

結果
毎回変わる

 残念ながら、少し複雑なコードになると結果が安定しませんでした。実際の Webサイトは複雑度が更に高いため、Gemini Nano を活用した脆弱性検出はすぐに実用化とはならないと思われます。ただし、プロンプトエンジニアリングで精度を向上させる余地はあるのではないかと期待しています。

●まとめ

 今回は、ブラウザの内蔵AI で XSS を検出する試みを実施しました。検出精度を上げるには、入力データの加工やプロンプトの精度向上が必要になりそうですが、試行錯誤してみる価値はありそうです。プロンプトエンジニアリングはハマるととても楽しいので、是非試してみてください。

 また、弊社が提供するクラウド型Webアプリケーション脆弱性診断ツールAeyeScan は、生成AI を活用した高度な診断も実施可能です。AeyeScan は無料でトライアルできますので、ご興味ありましたらぜひお問い合わせください。AeyeScan のトライアル、脆弱性診断の自動化のご相談はこちら

●参考記事

- https://zenn.dev/the_exile/articles/chrome-gemini-nano
- https://azukiazusa.dev/blog/try-chrome-internal-ai-gemini-nano/

《株式会社エーアイセキュリティラボ 取締役副社長 安西 真人》

編集部おすすめの記事

特集

製品・サービス・業界動向 アクセスランキング

  1. 大阪府警 三人のサイバー犯罪捜査官

    大阪府警 三人のサイバー犯罪捜査官

  2. デジタル庁「デジタル社会の実現に向けた重点計画」発表、気になるセキュリティの位置づけ

    デジタル庁「デジタル社会の実現に向けた重点計画」発表、気になるセキュリティの位置づけ

  3. CTFの覇者 市川遼が目指す「GMOイエラエの技術者が攻撃しようとするときに最初にやること全部の完全自動化」~ ネットde診断 for ASM

    CTFの覇者 市川遼が目指す「GMOイエラエの技術者が攻撃しようとするときに最初にやること全部の完全自動化」~ ネットde診断 for ASM

  4. 危険なショッピングサイトを即確認「SAGICHECK」が日本語サイトに対応 ~ JC3 情報提供

  5. イエラエセキュリティ牧田誠が作った「エンジニアの楽園」、創業10 年でかなえた夢 10 年後にかなえた夢

  6. 脆弱性診断自動化ツール「AeyeScan」アップデート、外部ドメインでの Bearer 認証に対応

  7. 長野県警から感謝状と盾を受領、GMOイエラエがIoTフォレンジック技術で捜査協力

  8. セキュリティ製品と企業を選ぶ「機能以外の」要件 ~ ラピッドセブン・ジャパン 日本法人設立 10 周年記念 公開インタビュー

  9. 千葉県警察でサイバー犯罪捜査官を募集、申込受付 8月23日まで

  10. 「FF14」高難度コンテンツで禁じられた外部ツール使用、非公開配信していた映像が不正アクセスで流出し発覚

アクセスランキングをもっと見る

「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」
「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」

ページ右上「ユーザー登録」から会員登録すれば会員限定記事を閲覧できます。毎週月曜の朝、先週一週間のセキュリティ動向を総括しふりかえるメルマガをお届け。(写真:ScanNetSecurity 名誉編集長 りく)

×