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

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. マクニカネットワークスが忘れない CrowdStrike 三つのエピソード

    マクニカネットワークスが忘れない CrowdStrike 三つのエピソード

  2. 82歳、情報セキュリティマネジメント試験合格最年長記録3年2ヶ月ぶり更新 ~ 令和4年度上期

    82歳、情報セキュリティマネジメント試験合格最年長記録3年2ヶ月ぶり更新 ~ 令和4年度上期

  3. 「ITパスポート試験」が1位に ~ 日本の資格検定アワード2023

    「ITパスポート試験」が1位に ~ 日本の資格検定アワード2023

  4. 東京海上日動と連携、Microsoft Azureの障害やサイバー攻撃を補償

  5. iOS 16.3 配信開始、Apple ID認証で物理セキュリティキーにも対応

  6. 文科省「デジタル人材育成推進協議会」初回議事録公開

  7. サイバーセキュリティ防衛技官募集、実務経験13年以上の31歳から58歳(防衛省)

  8. NTTドコモグループ 、カスタマーハラスメントに対する基本方針を策定

  9. NTTコミュニケーションズの業務委託先社長を恐喝未遂容疑で逮捕

  10. エフセキュアのSaaS型セキュリティ ソリューション、旭コムテクが採用(エフセキュア)

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

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

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

×