freeeの開発情報ポータルサイト

世はAIブラウザ時代、数多のブラウザをどう制御する?

こんにちは!PSIRT in セキュリティチームのyamaneです。 freee Developers Advent Calendar 2025 12/22 (22日目) の記事をお届けします。

adventar.org

昨日はtdtdsさんによるセキュリティチーム統合の話でしたね。 入社時に作ったPSIRTの名刺がたっぷりと残っているのですが、これからはセキュリティチームを名乗っていきます!

CSIRTとPSIRTが統合してセキュリティチームが誕生しましたが、PSIRTは統合以前からプロダクトだけでなく社内のセキュリティも推進していました。 今回はPSIRT時代から取り組んできた社内セキュリティの話をします。

世はAIブラウザ時代

近年の生成AIブームの勢いは留まることを知りません。 専用サイトにアクセスして生成AIと対話していた時代は過ぎ去り、既存のブラウザにAIエージェントが組み込まれることが普通になりました。 そしてついに、AIエージェントとブラウザを統合したAIブラウザなるものが公開されました。

おそらく今後もAIブラウザは増えるでしょう。 しかし、ブラウザの選択肢が増えるにつれて課題も増えていきます。

せっかくGoogle WorkspaceでChrome Enterprise Coreを有効化してChromeを強固にしても、他のブラウザを使われてしまっては台無しです。 管理外のブラウザを使われると個人アカウントを利用されるなどのリスクが生じます。

とはいえ、freeeはAI活用に力を入れている会社です *4。 「今日からブラウザをChromeに統一します」というわけにはいきません。 そんなわけで、新しいブラウザを手っ取り早く制御する方法を調べました。

Chromeの制御方法を調べる

Chromeなどの主要なブラウザはポリシーにより制御できます。 制御可能な設定一覧は以下のページに記載されています。

Chrome Enterprise のポリシーリストと管理 | ドキュメント

なかでも、セキュリティ用途で役立ちそうなのが以下の項目です。

そもそも、ブラウザを制御するためのポリシーはどのような形で端末に格納されるのでしょうか? Chromeのヘルプページによると、ポリシーの実体はWindowsではレジストリに、Macではplistに格納されることがわかります。

Windows

Chrome の動作は、これらのレジストリ キーの設定値を参照して決定されます。

Mac

Mac では、Chrome ポリシーは plist(プロパティ リスト)ファイルに記述されています。

実際に、ポリシー適用済みの端末を調べてみましょう。 Windowsにはレジストリキーが、Macにはplistファイルが存在することが確認できました!

PS C:\WINDOWS\system32> Test-Path "HKLM:\SOFTWARE\Policies\Google\Chrome"
True
% ls /Library/Managed\ Preferences/ | grep chrome
com.google.chrome.plist

ブラウザのポリシーを配布する

Windowsではレジストリ、Macではplistを操作すればブラウザを制御できることがわかりました。さっそく社員の端末に配布するしくみを作りましょう。 IntuneおよびJamfを用いた方法を紹介します。

IntuneによるWindows端末へのポリシー配布

Intuneでは構成プロファイルの設定カタログという機能を使うことで、GUI上で設定項目を選んでブラウザのポリシーを制御できます。 ただし、デフォルトでこの便利な機能に対応しているのはEdgeとChromeのみです。

設定カタログの一般的なタスクと機能 - Microsoft Intune | Microsoft Learn

では、EdgeとChrome以外のブラウザはどう制御するのでしょうか? ここで登場するのが、ADMX (Administrative Template File) です。

ADMXは「Intune上の設定項目」と「実際に書き換えるべきレジストリ値」の対応表のようなXMLファイルです。 ADMXをIntuneにインポートすることで、未知のブラウザであっても設定項目をGUI上に表示し、対応するレジストリを操作できるようになります。

ブラウザごとに設定項目が異なるため、基本的にADMXはブラウザごとに用意する必要があります。 とはいえ必ずしも自作する必要はなく、例えばChrome, Firefox, Braveなどは公式がADMXを公開しています。

しかしながら、先日登場したばかりのAIブラウザはADMXを公開していません。 どれでも良いのでリンク先のADMXファイルを見ていただければわかりますが、ADMXを1から自作するのは至難の業です。

もっと手軽な方法はないかと探したところ、Chromiumベースのブラウザであれば、Chromeとパスが異なるだけで中身のレジストリ構造は共通であることがわかりました。

Policy Templates

policy settings may also be stored in the registry under HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER in the following paths:

Google Chrome: Software\Policies\Google\Chrome\

Chromium: Software\Policies\Chromium\

CometなどのAIブラウザはChrome拡張機能が動作することからChromiumベースだと推測できます。 つまり、Chrome用のADMXを少し書き換えるだけで流用できる可能性が高いです。

これを試さない手はありませんね! Chromeが配布しているADMXをChromium用にカスタマイズしましょう。

ADMXは巨大なXMLファイルであり、構造を把握してレジストリパスや名前空間を手動で書き換えるのは大変です。 こういった構造的な置換作業はClaude Codeなどに任せてしまいましょう。

カスタマイズできたらIntuneにインポートしましょう。 手順は以下に記載されています。

Microsoft Intune でカスタムおよびサード パーティのパートナー ADMX テンプレートをインポートする - Microsoft Intune | Microsoft Learn

インポートが完了すると、Chromiumベースブラウザ用の設定項目が出現します。 ためしに個人アカウントでの利用をブロックする設定を入れてみましょう。 Google Workspaceへのアクセスを許可するドメインを定義するという項目を有効にし、社内ドメインを指定して配布します。

Intuneの設定画面にて、Google Workspaceへのアクセスを許可するドメインを定義するという項目を設定しています。
IntuneでChromium用のポリシーを作成する

設定配布後、ポリシーが端末に同期されるのを待ちます *5。 しばらくするとCometにポリシーが適用され、個人アカウントではログインできなくなりました!

Cometで個人のgmailアカウントによるログインを試しましたが、ログインできませんでしたというエラーが返ってきました。
Cometで個人アカウントによるログインを制限できた

DiaとAtlasについてはまだWindows版がリリースされていないので検証できませんが、同様の手順で制御できるのではと期待しています。

JamfによるMac端末へのポリシー配布

Jamfの場合も、Intuneと同様に構成プロファイルを作成して配布します *6

Chromeであれば、以下の画像のようにJamf Repositoryからcom.google.Chromeを選択するだけでGUI上に設定項目が出てきます。 これなら楽ちんですね!

Jamfのポリシー作成画面にて、Jamf Repositoryで設定可能なApplication domainを列挙しています。先頭にChromeのものがあります。
JamfによるChromeポリシーの設定

しかし、それ以外のブラウザはそうはいきません。設定項目のテンプレートをインポートしてあげる必要があります。急に面倒になりましたね...

ですがWindowsがそうだったように、Macでも他のChromiumベースブラウザのテンプレートを流用できそうです。 今回はEdgeのテンプレートを使ってみましょう。 EdgeもChromiumベースなので、設定項目はほとんど共通しているはずです。

JamfでEdgeのポリシーを制御する方法はMicrosoft公式ドキュメントを参考にします。

Jamf を使用して macOS の Microsoft Edge を構成する | Microsoft Learn

Edgeのダウンロードページにアクセスし、Mac版を選択します。 するとポリシーテンプレートを取得するリンクが現れるので、ダウンロードします。

MacOS版のEdgeのダウンロード画面が映っており、画面の下部にポリシーテンプレートのダウンロードリンクがあります。
Edgeのダウンロードページからポリシーテンプレートを取得する

ダウンロードすると.cabという見慣れない形式のファイルが降ってくるので、どうにかして展開します。 その後出てきた.zipを展開するとmac/policy_manifest.jsonというJSON形式のポリシーテンプレートを取得できます。 このポリシーテンプレートがJamfにおける設定項目とplistの値の対応表になるわけですね。

続いて、Jamfの画面に移ります。 Comet制御用の構成プロファイルを作成しましょう。

SourceとしてCustom Schemaを選択し、preference domainにai.perplexity.cometと入力します。 ちなみに、Cometのpreference domainは以下のコマンドで取得しています。

% defaults domains | tr ',' '\n' | grep -i "comet"
 ai.perplexity.comet

次にAdd Schemaをクリックして、先ほど取得したpolicy_manifest.jsonをアップロードします。

JamfでCometを制御するためのポリシーを作成している。SourceはCustom Schema、Preference Domainはai.perpexity.cometを入力する。
JamfでComet用のポリシーを設定する

これでIntuneと同様に、Cometの設定項目をJamf上で選択できるようになりました! Custom PropertyからAllowedDomainsForAppsを設定することで、個人アカウントでのログインを防げます。

Jamfで設定可能なCometの設定項目を列挙している。allowedという文字列でフィルタしており、先頭にAllowedDomainsForAppsが表示されている。
Jamf上でAllowedDomainsForAppsが設定できるようになった

Dia, Cometに関してはこの方法で制御に成功しましたが、残念ながらAtlasには通用しませんでした... *7 

おわりに

IntuneやJamfを用いて、Chromiumベースのブラウザを手軽に制御する方法を紹介しました *8ブラウザ公式のポリシーテンプレートがあればそちらを使うべきですが、公式のサポートを待っていては昨今のAI界隈の進化のスピードに置いていかれてしまいます。 AIブラウザの制御は自分たちの手でやってしまいましょう!

明日は新卒1年目のtakaさんによる、歴史が詰まったコードとの向き合い方の話です。 新卒といえば、freeeでは新人研修の一環でHardening研修 *9 をやっています。 私も攻撃側として参加していたので、ぜひtakaさんの感想をお聞きしたいですね。 takaさんの記事をお楽しみに!

*1:Perplexity Changelogに記載あり

*2:Dia Browser | Update 1.0.1に記載あり

*3:Introducing ChatGPT Atlas | OpenAIに記載あり

*4:freee Developers Advent CalendarのAI関連記事の比率を見れば明らかでしょう

*5:Intuneの同期は最大8時間かかるので気長に待ちましょう。

*6:本記事のJamfパートは、同僚のootoさんによる実装を元に執筆しています。

*7:Atlasはchrome://policyにすらアクセスできない仕様になっており、ポリシーを設定する方法は不明です。

*8:本記事で紹介している方法は、各ブラウザベンダが公式に提供している手順ではありません。ブラウザのバージョンアップ等により利用できなくなる可能性がありますので、自己責任で実施してください。

*9:セキュリティチームによる苛烈な攻撃を新人たちが凌ぐ、という実践形式のセキュリティ研修です。気になる方はtdtdsさんの記事をご覧ください!