こんにちは!PSIRT in セキュリティチームのyamaneです。 freee Developers Advent Calendar 2025 12/22 (22日目) の記事をお届けします。
昨日はtdtdsさんによるセキュリティチーム統合の話でしたね。 入社時に作ったPSIRTの名刺がたっぷりと残っているのですが、これからはセキュリティチームを名乗っていきます!
CSIRTとPSIRTが統合してセキュリティチームが誕生しましたが、PSIRTは統合以前からプロダクトだけでなく社内のセキュリティも推進していました。 今回はPSIRT時代から取り組んできた社内セキュリティの話をします。
世はAIブラウザ時代
近年の生成AIブームの勢いは留まることを知りません。 専用サイトにアクセスして生成AIと対話していた時代は過ぎ去り、既存のブラウザにAIエージェントが組み込まれることが普通になりました。 そしてついに、AIエージェントとブラウザを統合したAIブラウザなるものが公開されました。
- Perplexity Comet
- 2025年10月3日に一般公開 *1
- Dia
- 2025年10月8日に一般公開 *2
- ChatGPT Atlas
- 2025年10月21日に一般公開 *3
おそらく今後もAIブラウザは増えるでしょう。 しかし、ブラウザの選択肢が増えるにつれて課題も増えていきます。
せっかくGoogle WorkspaceでChrome Enterprise Coreを有効化してChromeを強固にしても、他のブラウザを使われてしまっては台無しです。 管理外のブラウザを使われると個人アカウントを利用されるなどのリスクが生じます。
とはいえ、freeeはAI活用に力を入れている会社です *4。 「今日からブラウザをChromeに統一します」というわけにはいきません。 そんなわけで、新しいブラウザを手っ取り早く制御する方法を調べました。
Chromeの制御方法を調べる
Chromeなどの主要なブラウザはポリシーにより制御できます。 制御可能な設定一覧は以下のページに記載されています。
Chrome Enterprise のポリシーリストと管理 | ドキュメント
なかでも、セキュリティ用途で役立ちそうなのが以下の項目です。
- AllowedDomainsForApps
- Googleサービスへのログインを許可するドメインの制限
- ExtensionInstallAllowlist
- インストール可能な拡張機能の制限
そもそも、ブラウザを制御するためのポリシーはどのような形で端末に格納されるのでしょうか? 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 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へのアクセスを許可するドメインを定義するという項目を有効にし、社内ドメインを指定して配布します。

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

DiaとAtlasについてはまだWindows版がリリースされていないので検証できませんが、同様の手順で制御できるのではと期待しています。
JamfによるMac端末へのポリシー配布
Jamfの場合も、Intuneと同様に構成プロファイルを作成して配布します *6。
Chromeであれば、以下の画像のようにJamf Repositoryからcom.google.Chromeを選択するだけでGUI上に設定項目が出てきます。
これなら楽ちんですね!

しかし、それ以外のブラウザはそうはいきません。設定項目のテンプレートをインポートしてあげる必要があります。急に面倒になりましたね...
ですがWindowsがそうだったように、Macでも他のChromiumベースブラウザのテンプレートを流用できそうです。 今回はEdgeのテンプレートを使ってみましょう。 EdgeもChromiumベースなので、設定項目はほとんど共通しているはずです。
JamfでEdgeのポリシーを制御する方法はMicrosoft公式ドキュメントを参考にします。
Jamf を使用して macOS の Microsoft Edge を構成する | Microsoft Learn
Edgeのダウンロードページにアクセスし、Mac版を選択します。 するとポリシーテンプレートを取得するリンクが現れるので、ダウンロードします。

ダウンロードすると.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をアップロードします。

これでIntuneと同様に、Cometの設定項目をJamf上で選択できるようになりました!
Custom Propertyから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さんの記事をご覧ください!
