第 10
セキュリティと堅牢化
境界を守るのは仕事の半分にすぎません。本章では、使っていない扉を閉じ、開いている扉を見張り、そこを通ってよい相手を証明する方法を扱います。
サーバが最も無防備になるのは、何かに攻撃されたときではなく、静かに状態がずれていったときです。開けっ放しのファイアウォール、誰も無効化しなかったパスワードログイン、先週切れた証明書、誰にでも中継してしまうメールサーバ。FrontierStack は堅牢化を一度きりのチェックリストではなく、継続的で観測可能な状態として扱います。セキュリティペインは目の前のホストのコンソールであり、AI 管理者(第 13 章)が同じチェックを SSH 経由でフリート全体に適用します。ここで扱う内容はすべて、変更を依頼するまで読み取り専用で、どの変更もあなたが手作業で行えるものです。
10.1ファイアウォール:Application Firewall と pf
macOS は 2 つのファイアウォールを備えており、FrontierStack は両方を読み取ります。Application Firewall(ALF)はシステム設定で構成するアプリ単位の層で、セキュリティペインはその状態(有効・ステルスモード・すべての受信をブロック・アプリルール数)を表示するので、有効になっているかひと目で確認できます。pf パケットフィルタはより下位のポート単位の層で、FrontierStack が直接管理するのはこちらです。
アプリが管理する pf ルールは専用ファイル ~/Library/Application Support/FrontierStack/pf-frontierstack.conf に置かれ、システムの /etc/pf.conf に冪等に組み込まれた専用の frontierstack アンカーに読み込まれます。ルールを専用アンカーに置くことで、FrontierStack が Apple の基本ルールセットを編集することはなく、あなたのルールはリロードしても他を壊さずに残ります。ルールの追加・削除では、認証付きの管理者プロンプトを通じて pf がリロードされます。
AI 側では firewall_rule ツールがポートに対する許可/拒否ルールを 1 つ追加・削除し、必要に応じて送信元アドレスで絞り込みます。まず対象の OS を判別し、This Mac とリモートの macOS ホストには pf(frontierstack アンカー)を、Linux サーバには ufw を使います。Mac に ufw コマンドを、Linux に pf ルールを送ることは決してありません。
ufw を締める前に、ルールが管理経路を許可していることを確認し、別の入口(コンソール、KVM-over-IP、Headless Setup の画面共有)を確保しておいてください。10.2侵入防止と開放ポートの監視
開いたままにせざるを得ないポートにも見張りは必要です。セキュリティペインは 2 つの侵入防止エンジンを統合します。fail2ban は不正なログパターンに合致した IP アドレスを禁止します — SSH や Apache へのブルートフォースが典型です。ペインには導入・稼働状況、jail 数、現在禁止中のアドレス数が表示され、ワンクリックのリロードと、既存の設定を上書きせずに健全な SSH jail を投入する「スターター jail.local を書き込む」アクションがあります。CrowdSec はその上に共有レピュテーションネットワークを加え、アクティブな決定数とメトリクスボタンを表示します。どちらも Homebrew で導入する root サービスです。
Open Ports セクションはホスト上のすべての待ち受けを一覧します。併設の監視 — リモート操作・画面共有の露出 — は、VNC/画面共有(:5900)、Apple Remote Desktop、AnyDesk、TeamViewer、Chrome Remote Desktop、Splashtop、RustDesk、Tailscale の exit-node 広告を特に検出し、今まさに誰かが接続していれば赤く表示します。Recent Intrusions と Active Bans セクションは fail2ban.log、CrowdSec、Suricata の eve.json、Wazuh の alerts.json からの検出を新しい順に集約し、動かしていないソースは単に飛ばされます。新たな禁止、新たな待ち受け、進行中の受信セッションはそれぞれアラートを上げられます — 配信は第 11 章で設定します。同じセクションはこの Mac の FileVault も確認し、Mac が何を保持しているかで判断します。リンク済みサーバへの SSH アクセスやアプリ管理の SSH 鍵があるのに FileVault がオフなら、行が赤くなりアラートが上がります — 紛失・盗難に遭ったノートがフリート全体の鍵を渡してしまうためです。フリートの資格情報がない Mac は放っておかれます。
10.3SSH の堅牢化
SSH は多くのサーバで最も価値のある扉なので、セキュリティペインには SSH Hardening Audit があります。sshd -T で実効構成を読み — ディスク上のファイルではなく、ドロップインを適用したあとにデーモンが実際に使う設定を読み — 重要な項目(PermitRootLogin、PasswordAuthentication ほか)を指摘します。SSH がネットワークから到達可能なときは、ペインがそれを明示します。まさにそこで指摘が効いてくるからです。
インターネットに面したホストの基本は、鍵ベース認証と PasswordAuthentication no です。修正は本体ファイルではなく /etc/ssh/sshd_config.d/ を編集して行えば、パッケージ更新でも堅牢化が残ります。FrontierStack 自身のフリートチャネルはすでにこれらに従っています。Ed25519 鍵、BatchMode=yes、IdentitiesOnly=yes、そして known_hosts に記録される初回接続時のホスト鍵信頼(第 8 章)を使います。ホストの鍵アクセスが壊れた場合、repair_ssh_access ツールがローカルのボールトに保管した一度限りのログインパスワードで管理鍵を再インストールします — パスワードは Mac 上で読まれ、AI に送られることはありません。
10.4サーバセキュリティ:リモートホストの状態チェック
ここまではこの Mac のセキュリティペインの説明でした。サーバセキュリティペインは連携サーバ向けの対になるもので — 同じ状態チェックを SSH 経由で、フリート内のどのホストに対しても行います。サーバの詳細を開いてセキュリティ横の チェック… をクリックするか、ペインを直接開いてホストメニューからサーバを選びます。1 回のスキャンで、重要な SSH ハードニング(PermitRootLogin、PasswordAuthentication、待ち受けポート)、ファイアウォールの有無と有効状態(ufw、firewalld、nftables、生の iptables)、稼働中の侵入防止エンジン(fail2ban、CrowdSec)、保留中のセキュリティ更新の件数(apt、dnf、yum)、全インタフェースで待ち受けるサービス、ホスト整合性の兆候(スティッキビットのない誰でも書き込み可能なディレクトリ、想定外の SUID バイナリ)を報告します。
各所見は High · Warning · Info · OK でスコア付けされ、1 行のサマリバッジにまとめられます。フリートを見渡して、どのホストが対応を要するか一目で分かります。ペインは何も変更しません:修正するリンクが、実際に変更を行うペインへ移動します — ファイアウォールを有効化・ルール編集するサーバファイアウォールペイン、リモートツールの SSH ハードニングレビュー、fail2ban/CrowdSec を導入するセキュリティツールなど。root またはパスワードなし sudo で最も深く読み取れますが、なければ可能な範囲で実行し、その旨を伝えます。相互リンクは双方向です:ローカルのセキュリティペインは macOS ファイアウォールへ、サーバセキュリティはサーバファイアウォールへ、ピン留めサーバのペインは両方へリンクします。
10.5セキュリティアップデートと侵害の警告
セキュリティアップデートペイン(セキュリティツール)は、この Mac と連携したすべてのサーバについて、適用待ちのセキュリティ修正を一覧にします。各サーバが自分で報告します:Debian と Ubuntu では apt の -security ポケット、Red Hat 系では CVE 番号付きの dnf/yum のアドバイザリ、zypper のセキュリティパッチ、FreeBSD の pkg audit、OSV.dev で照合した Alpine の更新、Mac ではソフトウェアアップデート。Homebrew はセキュリティ修正を区別しないため、古い formula は別に表示します。確認は読み取りだけで、6 時間ごとに、sudo パスワードを保存したサーバでは root で行います。唯一変えるのは、1 日以上古い apt のパッケージリストです。Host Monitor(1.28 以降)が入った Linux・FreeBSD サーバは同じ確認を自分で行い、SSH や sudo パスワードなしにモニタ経由で報告します。Mac は常に SSH で確認します。
緊急度は公開の情報源で判断します。適用待ちの更新が CISA の悪用が確認された脆弱性(KEV)リストの CVE を修正するものなら、サーバは赤くなりすぐにアラートを出します。OSV.dev から Debian・Ubuntu・Alpine の更新の CVE を取得し、送るのはパッケージ名とバージョンだけです。endoflife.date で修正が提供されなくなった OS やランタイムを示します(ディストリビューション付属の PHP や Python は、修正をバックポートするディストリビューションに任せます)。Enfour のパッチアドバイザリは侵害アドバイザリと同じ方式で専用の鍵で署名され、緊急の件についてブランチごとの修正済みバージョンを示します。通常のセキュリティアップデートは、設定した日数(既定 7 日)より長く待っているときだけアラートになります。
サーバの行の 自動アップデート… で、メンテナンス時間帯の中でのセキュリティ限定の更新を有効にできます。apt はセキュリティポケットのパッケージだけをインストールして設定ファイルを残し、dnf と yum は --security、zypper はセキュリティパッチ、FreeBSD は pkg audit が報告したもの、Alpine は OSV が示すもの、Mac は Enfour のアドバイザリが名指しした Homebrew の formula だけを(あなたのユーザで)更新します。時間帯ごとに実行は 1 回です。実行前に /var の空き容量を確かめ、実行後に止まったサービスがあれば報告します。悪用中の脆弱性の修正だけをすぐに入れることも、Mac では直近の Time Machine バックアップを条件にすることもできます。
侵害の警告は KeyRotate と同じ署名付きの情報源から届きます。API キーを貼り付けて使うサービスが侵害されると Enfour がアドバイザリを公開し、FrontierStack は 1 日 2 回確認して署名を検証し、そのサービスで作られたサイトをページから見分け、サービスのペインにベンダのチェックリストを表示し、対応済みにするまでセキュリティのアラートを出し続けます。影響を受けるソフトウェアがこの Mac にインストールされているときや、サーバが報告したときにもアラートを出します。どのキーをそのサービスに保存したかは KeyRotate が把握しており、置き換えを手伝います。
10.6エッジアプライアンス:NetScaler、BIG-IP、VPN ゲートウェイ
境界に置かれたアプライアンス — Citrix NetScaler ADC/Gateway、F5 BIG-IP、FortiGate、Palo Alto PAN-OS、Ivanti Connect Secure、Cisco ASA/FTD、Kemp LoadMaster、SonicWall SMA、SonicWall ファイアウォール — は、ここ数年の大規模侵害の多くの入口でした(CitrixBleed、2026 年の NetScaler ゼロデイ、FortiOS の SSL-VPN 脆弱性、GlobalProtect、Ivanti の 2024〜25 年の連鎖、ArcaneDoor、Akira・Fog ランサムウェアが突いた SonicOS の SSL VPN 脆弱性)。エッジアプライアンスペイン(「ルータ・ファイアウォール」内、および各ベンダのカタログペイン内)は、これらの攻撃が突いた点を継続的に確認します。
アプライアンスごとに稼働バージョンを読み取り、ベンダ自身の公開情報と照合します(実際に悪用された脆弱性を優先)。実際に有効な機能も考慮し、Gateway 仮想サーバや DTLS が前提の CVE は、設定上その機能がないと確認できた場合にだけ「該当するが未使用」とします。判断できない場合は最悪を想定します。サポート終了ブランチ、攻撃が利用した設定(データプレーン/WAN 側の管理アクセス、SSLv3/TLS 1.0、既定の SNMP コミュニティ、リモートログなし、暗号化されていない設定シークレット、攻撃者がよく使う名前の管理者アカウント)、仮想サーバ・HA ペア・証明書の状態も確認します。各指摘には修正済みバージョンとアドバイザリ、アップグレード後の手順(CitrixBleed 後の NetScaler セッション終了など)を示します。
接続。専用の読み取り専用アカウントを使ってください — read-only コマンドポリシーを割り当てた NITRO ユーザ、BIG-IP の Auditor、読み取り専用プロファイルの FortiOS API ユーザ、PAN-OS の「Superuser (read-only)」のキー、Ivanti の読み取り専用管理者、書き込み権限のない Kemp のキー。Cisco ASA/FTD と SonicWall SMA には安全な読み取り API がないため、バージョンを入力します。認証情報は HTTPS でのみ、アプライアンスが身元を証明した後にだけ送信されます:公的に信頼された証明書か、コンソールでフィンガプリントを照合して承認した自己署名証明書です。承認済みの証明書が変わると、何も送信せず重大アラートを出します。
SonicWall ファイアウォール。TZ・NSa・NSsp・NSv の各ファイアウォールは SonicOS で動き、多くの場合 SSL VPN も兼ねています(カタログ項目 SonicWall Firewall)。追加方法は 2 通りです:ファームウェアのバージョンを入力するか、SonicOS API(RFC-2617 Basic 認証)を有効にして、モデル・シリアル番号・WAN 側の管理アクセス・SSL VPN の設定も読み取らせます。SonicOS の API はフル権限の管理者しか使えないため、読み取り専用アカウントは作れません。FrontierStack は Web UI を使用中の管理者を追い出さずにログインし、チェックのたびにログアウトします。バージョンは SonicWall の PSIRT アドバイザリと照合し、悪用済みの CVE を優先します — CVE-2024-40766(管理画面と SSL VPN の不適切なアクセス制御。Akira・Fog ランサムウェアが悪用)、CVE-2024-53704(SSL VPN のセッション乗っ取り)、CVE-2020-5135(HTTP リクエストのバッファオーバーフロー)。SonicWall 固有のチェックが 2 つあります。ハードウェアモデルのサポート終了はファームウェアとは別に追跡します:6.5.5 ファームウェアがどれほど新しくても、Gen 6 の全モデルはすでにサポート終了です。また、2025 年 9 月に MySonicWall のクラウドに保存された設定バックアップが流出したため、MySonicWall ▸ Product Management ▸ Issue List でこのファイアウォールのシリアル番号を確認するようリマインダが表示されます。載っている場合、または判断できない場合は、SonicWall の Essential Credential Reset の手順に従ってください。
パッチ適用=侵害なし、ではありません。多くの組織がパッチを当てる前に悪用された CVE は、修正版でも「侵害チェックを実行し、機器が保持していた認証情報を変更し、古いセッションを終了する」リマインダが、対応済みにするまで残ります。NetScaler と BIG-IP は、SSH ホスト鍵を検証済みのフリートサーバに関連付けて侵害スキャンを実行できます。CISA・Mandiant・Citrix・F5 の指標に基づく固定の読み取り専用スクリプトです。途中で切れたスキャンやツールが足りないスキャンはその旨を表示し、「問題なし」とは表示しません。
10.22.1Riverbed SteelHead と SD-WAN ゲートウェイ
WAN 最適化装置や SD-WAN ゲートウェイもネットワーク境界にあり、フリートとして管理されるため、エッジアプライアンスで扱います。Riverbed SteelHead、Interceptor、SteelCentral Controller(SCC)は RiOS REST API に REST アクセスコード(Administration ▸ Security ▸ REST API Access ▸ Add Access Code)で接続し、FrontierStack はチェックのたびにそれを短時間有効なトークンへ交換します。モデル、シリアル、RiOS バージョン、最適化サービスが動作中かを表示します。1 台ずつではなく SCC を追加すれば、1 件で SCC 管理下のすべての SteelHead のヘルスと接続状態を一覧でき、degraded や critical になるとアラートが出ます。単体の SteelHead のヘルスとアラームは REST API にないため、デバイスの Riverbed SteelHead SNMP テンプレートで読み取り、アラートが必要なら Health の OID を監視対象にしてください。
Riverbed SteelConnect EX の SD-WAN ゲートウェイは、管理元の Versa Director(https://director:9182、読み取り専用の Director アカウント)経由で読み取り、全組織のゲートウェイの到達性、サービス状態、設定同期、重大アラームを表示します。バージョンには Director のリリースを入力します。Riverbed と Versa の修正済みバージョン表は同梱していないため、ペインは「アドバイザリなし」とは表示せずその旨をはっきり示します。CISA の悪用済み脆弱性リストとの照合は行い、2024 年の Versa Director ゼロデイ CVE-2024-39717 も含まれます。
販売終了でも監視は継続。SteelConnect CX(SDI-130・SDI-330・SDI-1030・SDI-2030・SDI-5030・SDI-USB ゲートウェイ、SDI スイッチとアクセスポイント、AWS/Azure の仮想ゲートウェイ)と SteelHead SD(570-SD・770-SD・3070-SD)は 2020 年に Riverbed の価格表から外れましたが、多くの拠点で稼働しています。管理元の SteelConnect Manager レルム(https://yourrealm.riverbed.cc またはオンプレミスの SCM)を、REST API を使える SCM アカウントで追加すると、チェックのたびに全アプライアンスをモデル、サイト、SCM から見てオンラインかどうかとともに一覧し、オフラインになるとアラートします。クラウド版 SCM は Riverbed の公開サービスなので、そのアドレスは露出した管理インターフェースとして扱いません。重要度「中」のライフサイクルの指摘が、確認済みにするまで Riverbed のサポート終了告知へリンクします。SteelHead SD の最適化側は Riverbed SteelHead としても追加してください。
10.22.2VPN コンセントレータと Citrix 環境
ペイン上部の表示切り替えで、VPN コンセントレータまたは Citrix に絞り込めます。上記のゲートウェイに加え、Check Point Quantum(Gaia トレインと Jumbo Hotfix の Take を入力。例:R81.20 Take 166。fw ver のビルド番号は Take ではなく、パッチ適用済みとは扱いません)、WatchGuard Firebox、Zyxel ATP / USG FLEX、Array AG、OpenVPN Access Server、Juniper SRX、Sophos Firewall、Barracuda CloudGen に対応します。アプライアンスの API が報告する場合(現在は NetScaler Gateway)、概要に VPN 接続ユーザ数を表示し、ライセンス上限の 90% に達すると指摘を出します。
Citrix では、NetScaler Console と NetScaler SDX を読み取り専用アカウントの NITRO で読み取ります。SDX では、ホストしている各 VPX インスタンスの NetScaler ビルドもアドバイザリと照合します。XenServer / Citrix Hypervisor はプールコーディネータの XenAPI を読み取り専用アカウントで読み取り、Virtual Apps and Desktops、ShareFile StorageZones Controller、Citrix SD-WAN はリリースを入力します。NetScaler 自体は、SAML の設定有無(2026 年 10 月のアドバイザリの前提条件)、未保存の設定、期限が近いライセンス、ディスクの空き不足、NTP 同期の無効化も報告するようになりました。
VMware ホストのハードウェア。組み込みの「読み取り専用」ロールを持つユーザで、管理下のすべての ESXi ホストを見る vCenter Server、または単体の ESXi ホストを追加します(ペインでホストの自己署名証明書を承認)。チェックごとに各ホストのファン・電源・温度・メモリ・CPU・ストレージのセンサと、接続状態・メンテナンスモードを読み取り、センサが黄色・赤になるかホストが切断されるとアラートを出します。ヘルス状態を返さないセンサは一覧に表示しますがアラートにはしません。サーバメーカの CIM プロバイダ(Dell、HPE、Lenovo のイメージ)を入れると、より詳しいハードウェア情報が得られます。ロックダウンモードのホストは、例外リストにないユーザの直接ログインを拒否するため、その場合は vCenter を追加してください。
10.7不審端末ウォッチ:ネットワークに隠されたメール送信元
2025 年 8 月、神戸のホテルにチェックインした 2 人が客室のネットワークにコンピュータをつなぎ、部屋の隅に隠してチェックアウトしました。共犯者がそれを遠隔操作し、ホテルのインターネット回線から数十万通のフィッシングメールを送ったため、メールはホテルから送られたように見えました。不審端末ウォッチペイン(ルータ・ファイアウォール)は、こうした端末を見つけるためのものです。Mac からは見えません。ゲスト Wi-Fi はクライアントを分離し、デバイス検出は Mac 自身のセグメントしか見ないからです。ルータはすべての接続を見ているので、FrontierStack はルータに尋ねます。
送信メール。API 資格情報のあるピン留めした各ルータ(OPNsense、REST API v2 パッケージを入れた pfSense、MikroTik RouterOS、OpenWrt)について、FrontierStack は 10 分ごとに接続テーブルを読み、内部の端末ごとに直近 1 時間に通信した外部メールサーバの集合を保持します。25 番ポートはサーバ間の SMTP で、ノート PC には不要ですが、メールサーバやスパムボットは使います。メールアプリは 587 か 465 で自分のプロバイダ経由で送るため、これらのポートは異常に多くのプロバイダへ広がったときだけ数えます。承認済みメールサーバではない端末が 25 番ポートで 5 台以上(ペインで変更可)のサーバに到達すると、セキュリティグループに「Hidden mail sender」アラートが出ます。アラートには IP と、ルータの DHCP リースから分かる MAC アドレスとホスト名、そして手順が示されます:MAC で探す(リース一覧、次にその端末がつながるスイッチポートやアクセスポイント)、切り離す、メールサーバ以外のゲストと LAN からの送信 TCP 25 をブロックする、WAN アドレスがスパムのブロックリストに載っていないか確認する。単発の接続はルータの下に一覧されますが、アラートにはなりません。
| ルータ | 読み取る内容 |
|---|---|
| OPNsense | ルータ側でポートで絞り込んだファイアウォールステート、DHCP リース(Dnsmasq、Kea、ISC)、1 日 1 回のファイアウォールルール |
| pfSense(REST API v2) | 宛先ポートで絞り込んだファイアウォールステート、DHCP リース、1 日 1 回のファイアウォールルール |
| MikroTik RouterOS | コネクショントラッキング(TCP のみ、アドレス項目のみ)、DHCP リース |
| OpenWrt | ubus 経由の conntrack と DHCP リース(LuCI のログインを使用) |
| UniFi | UniFi ペインが読み込み済みのクライアント一覧(長期滞在チェックのみ) |
承認済みメールサーバは IP アドレス、範囲、MAC アドレスで入力し、アラートを出しません。FrontierStack で管理しているサーバのうち Postfix、Exim、Dovecot などのメールサービスが動いているものは、ワンクリックの候補として表示されます。スキャンを直接メール送信する複合機も、よくある登録対象です。
離れない端末。各ルータの下でゲストネットワークを指定します。ルータが報告する名前(インターフェイス、DHCP サーバ、UniFi のネットワーク)を選ぶか、アドレス範囲を入力します。そのうえでゲストネットワークから離れない端末を検出をオンにします。そこに 7 日(変更可)を超えて途切れずオンラインのクライアントがあると「Long-stay guest device」アラートが出ます。宿泊客は入れ替わるからです。滞在はスキャンとスキャンの間で測るため、Mac がスリープ中や終了中でも滞在が途切れたり、存在しない滞在が作られたりすることはありません。ゲストネットワーク上のホテル自身の機器(スマートテレビ、客室のサーモスタットなど)は確認済みにします。このチェックは既定でオフです。
ポリシーの助言。OPNsense と pfSense では、ゲストネットワークを指定すると、そのネットワークがインターネット上の任意のサーバへ TCP 25 を開けるかをファイアウォールルールから 1 日 1 回確認します。開ける場合は、インターネット接続を許可するルールより上にブロックルールを置くよう勧めます。宿泊客のメールアプリは 587 と 465 で引き続き使え、隠された送信元は送れなくなります。ファイアウォールルールを開くでルータ自身の画面へ移動します。エイリアスが結果を左右する場合や、API にそのネットワークのルールが見えない場合は、推測せずに「判断できなかった」と表示します。
10.8LAN の乗っ取りチェック:乗っ取られたデバイスを見つける
スイッチで構成されたネットワークでは、各デバイスのインターネット接続をすべて見られるのはルータだけです。そこで、Rogue Device Watch が読み取れるルータ(OPNsense、pfSense、MikroTik RouterOS、OpenWrt)の接続テーブルを、今すぐ確認で、またはネットワークを継続的に監視で 2 分ごとに読み取り、6 時間分の接続先を記録します。ビーコン(一定の間隔で同じアドレスへの新しい接続)、Web 以外のポートでのドメイン名のないアドレスへの接続、公開脅威リスト(abuse.ch Feodo Tracker、Spamhaus DROP、Emerging Threats、CINS Army。Tor の出口ノードは弱い兆候)のアドレスとの通信、インターネットからの想定外の着信、リモートログイン用ポートのスキャン、プロキシのような拡散を検出します。各デバイスには 100 点満点の懸念度、わかりやすい説明、そのルータでインターネットを遮断する、隔離 VLAN に移す、ネットワークから外す手順が付き、いずれもそのデバイスだけのルールやネットワークです。自分のポートフォワードは想定内、知っているアドレスは信頼にできます。懸念度が高い・危険のデバイスは通知され、AI 管理者は security_audit の scope=lan_compromise でランク付けして説明します。スマートデバイスもメーカーのクラウドへ定期的に連絡するため、1 つの兆候は確認のきっかけであって証拠ではありません。
10.9プリンタのプライバシーとセキュリティの監査
プリンタのデバイスページにプライバシーとセキュリティの監査を実行があります。ネットワーク上のどのコンピュータでも尋ねられることだけを尋ねます:メーカー、モデル、ファームウェア(IPP、工場出荷時のコミュニティでの SNMP、Web ページ)、応答するサービス、設定ページにパスワードが必要か、文書名を含むジョブ履歴を渡してしまうか、保存ジョブ・FAX・スキャンの有無、メーカーのクラウドサービスの利用。グローバルアドレスをプリンタのポートで外部から確認し(Globalping 経由。オフにもできます)、モデルに言及する CVE を一覧します。データを露出させる設定をリスク順に示し、HP、Brother、Epson、Canon について、パスワードの設定、保存ジョブの消去、リモートアクセスの遮断、使わないサービスの停止をクリック単位で案内します。プリンタの設定は変更しません。AI 管理者は security_audit の scope=printer で同じ監査を実行します。
10.10より深いフォレンジックツール
クイックスキャンでは足りないとき、重い解析はSecurity Toolsカタログカテゴリの導入可能サービスとして用意されています — カタログのフィルタ(第 6 章)で表示できます。Volatility 3 は RAM キャプチャを調べるメモリフォレンジックフレームワーク、capa は実行ファイルに潜む機能を特定し、CAPE と Cuckoo は疑わしい検体を隔離環境で解析します。URLhaus・OpenPhish・OpenCTI などの脅威インテリジェンスは YARA やサンドボックスのルールを支えます。Wazuh のような SIEM は、後述する専用の SIEM & Security Data セクションにあります。
10.11EDR Fleet ボード
すでにエンドポイントで商用 EDR エージェントを動かしているなら、EDR Fleet ペインがすべてのコンソールを横断する読み取り専用の集約を提供します。Add Console… を選び、プロバイダを選んで API 資格情報を貼り付けます — キーチェーンに保管され、AI には見えません。エンドポイント数と未対応検出数は各ベンダーの REST API から取得され、対応は SentinelOne、Huntress、CrowdStrike、Sophos Central、Bitdefender GravityZone、Microsoft Defender for Endpoint。Jamf Protect と LimaCharlie は到達性のために接続し、その他のコンソールは Generic(到達性のみ)として追加できます。Fleet totals 行が全体を合算します。ボードは数分ごとに更新し、コンソールが到達不能になると Security グループのアラートを上げ、未対応検出数がアラートの詳細に同伴します。深い作業には Open Console でベンダー自身のダッシュボードへ移動します。
10.12SIEM & Security Data
SIEM & Security Data サイドバーセクションは、以前 Security Tools と Logging に分散していたセキュリティ運用をまとめます。先頭の SIEM Overview は、FrontierStack が把握しているプラットフォームとデータ経路はどれで、監視対象の管理エンドポイントに到達できるかを示します。設定済みになるのは、保存済み API 資格情報、検出されたローカル導入、リモートエンドポイント監視のいずれかという具体的な根拠がある場合だけです。保存したキーは「資格情報保存済み」、TCP 応答は「到達可能」と表示し、「接続済み」「正常」とは断定しません。
このセクションは 2 層です。
- SIEM プラットフォーム — Wazuh、Security Onion、Splunk、Elastic Security、Microsoft Sentinel、Google Security Operations、Graylog、IBM QRadar、Sumo Logic Cloud SIEM、Rapid7 InsightIDR、LogRhythm、Devo、FortiSIEM、OpenText ArcSight。
- セキュリティデータパイプライン — VirtualMetric DataStream、Cribl Stream、Logstash、Vector、Fluent Bit、Fluentd、NXLog、syslog-ng、OpenTelemetry Collector。テレメトリを収集・正規化・絞り込み・バッファ・転送する層であり、必ずしもインシデントを調査する SIEM 本体ではありません。
各サービスを開いて適切な設定を選びます。クラウド専用 SIEM は、アカウント/テナントと最小権限 API トークンを Keychain に保存する Connect を表示し、意味のないローカルインストールボタンは出しません。セルフホスト/ハイブリッド製品はベンダーの導入手順と管理コンソール用 Remote Instance 監視を提供します。本当に Homebrew formula があるコレクタだけをローカルでインストール/制御し、Linux/Windows エージェントやアプライアンスは対応パッケージへ案内します。
Sources & coverage は層を混同せずに結びます。EDR Fleet はエンドポイントコンソール、Security はホスト/ネットワーク検知と侵入防止、Logs はローカルトラブルシューティングに使います。イベントの長期保持・相関・ハンティング・インシデント対応は SIEM 側が担います。FrontierStack は健全性と制御の層として、資格情報をローカルに保ち、証明できる状態だけを表示し、到達性喪失を通知して、深い調査には正しいコンソールへ案内します。
10.13読み取り専用のセキュリティ監査
ホストの実態を最も早く知る方法は、AI の security_audit ツールです。This Mac または連携サーバに対し SSH 経由で、完全に読み取り専用の包括的なスイープを実行します。OS を自動判別し、保留中のセキュリティ更新、ディスク暗号化(FileVault または LUKS)、ファイアウォール(macOS では Application Firewall + pf、Linux では ufw/iptables)、SSH 堅牢化、待ち受けポート、UID-0 と特権アカウント、パスワード不要の sudo(NOPASSWD)項目、侵入防止、直近の失敗ログインを確認します。パスワード不要の sudo は使える場合のみ使い、使えない場合は優雅に縮退します。何も変更されません。優先順位付きの所見と具体的な修正案が得られ、自分で適用しても、通常の承認カードを介して AI に戻しても構いません。リモートで監査するには target にサーバ名を、ローカル Mac なら省略します。
10.14セキュリティ監査ペイン:サンドボックス内の「悪用可能なものだけ」監査
上記の読み取り専用 security_audit はホストがどう構成されているかを教えてくれます。セキュリティ監査ペインはより難しい問い — ここで攻撃者が実際に悪用できるものは何か? — に答えます。コーディングエージェントを敵対的な監査担当に変え、対象を把握し、多角的に攻撃を試みます — インジェクション、アクセス制御不備、認証・認可、ビジネスロジック、暗号、シークレット露出、SSRF、設定ミス、連鎖攻撃 — そして各所見を自ら反証しようと試み、具体的な攻撃経路があるものだけを残します。各所見には攻撃シナリオと修正案が付き、理論上のノイズはありません。
2 つのモードがあります。コードベースはエージェントをリポジトリや Web プロジェクトのフォルダに向け、ソースを監査します。インフラは FrontierStack が既に集めている信号 — Cloudflare ゾーンとその TLS/WAF 設定、ドメイン/証明書の健全性、ピン留めサーバの OS・公開サービス・リモートアクセス・MDM/アクティベーションロック/FileVault 状態、ローカルファイアウォール — を秘匿化したインベントリにまとめ、エージェントがそれを攻撃します。
実行全体は Sandcastle の Docker サンドボックス内で行われるため、信頼できないコードに向けた敵対的エージェントがホストに直接触れることはありません。初回監査時にサンドボックスのイメージとランナーをアプリが構築します(Docker または Podman の起動が必要)。以降は即座に開始します。所見は重大度バッジ付きで表示され、Obsidian に保存したり、重大/高リスクを アラートとして発報できます。他と同様、Mac から出るのは秘匿化済みのプロンプトのみ(シークレットは事前に除去)で、サンドボックス内のエージェントは claude setup-token のトークン(または Anthropic API キー)であなたの Claude サブスクリプションで認証します。
エージェントの開始前に、FrontierStack 自身が公開された .env ファイルと Git リポジトリを確認します(エージェントからはどちらも見えません)。コードベースモードではフォルダ内を探し(リポジトリでない Web コンテンツのフォルダでも可。Git が必要なのはエージェントの段階だけです)、そのフォルダを配信しているサイトに見つかった .env と .git を要求し、コミット済みや git-ignore されていない .env も指摘します。インフラモードでは把握しているすべてのドメイン(Cloudflare ゾーンを含む)に HTTPS で /.env と /.git/HEAD を要求します。どのアドレスにも同じページを返すサイトは該当とみなさず、記録するのは配信されているかどうかだけで、内容は保持しません。該当したものは 公開された .env と Git に重大な所見として表示されます。
.env、秘密鍵、service-account.json — を含むフォルダはサンドボックスにマウントせず拒否します。クリーンなチェックアウトを監査してください。
10.15Strix:AI ペネトレーションテスト
ここまでの監査は読み取り専用で、ホストの構成やコードのどこが悪用可能かを調べるものでした。Strix はさらに踏み込み、能動的なペネトレーションテストを実行します。セキュリティペインの Strix AI セキュリティテストセクションから、リポジトリフォルダ、Git URL、ドメイン、URL、IP アドレス(または連携ホストのいずれか)を指定し、深さを クイック・標準・ディープから選ぶと、攻撃対象領域をマッピングし、実際の攻撃経路を試み、ペネトレーションテストレポートを作成します。
FrontierStack はこれを、オープンソースの Strix コマンドラインエージェントを Mac 上でローカルに駆動し、そのディスク上の実行成果物 — 検出結果・実行メタデータ・レポート — を読むことで行います。ホスト型サービスをスクレイピングすることはありません。CLI が未導入ならその旨を示し Install Strix… リンクを提示します。Update Strix は uv または pipx 経由で更新し、スクリプトをシェルにパイプすることはありません。AI プロバイダキーは任意で、指定した場合は macOS Keychain に保存され、ローカルの Strix プロセスにのみ渡され、表示もクラウドモデルへの送信もされません — ペインはキーが設定済みかどうかのみを示します。
タイルは直近の実行を要約します:Critical・High・Medium の件数、所要時間、24 時間以内の新規、失敗したスキャン。実行中はライブのフェーズ表示と Stop ボタンが出て、新しい Critical/High の所見が現れると(アラートを消音が有効でない限り)ローカル通知が届きます。検出結果を開くとレポートを書き出すで詳細を確認でき、失敗したスキャンを再実行とスキャンエンジンを再起動で不調から回復します。重大な所見は機微情報として扱われ、クラウド AI に送られることはありません。AI アドミニストレーターからも strix_status・strix_scan・strix_control で駆動でき、第 13 章で扱います。
10.16Certificate Sources と TLS
証明書の失効は自ら招く障害です。Certificate Sources ダッシュボードは、ホスト上の発行スタックごとに 1 行を表示します — Let's Encrypt(acme.sh 経由)、Certbot、Step CA、Traefik、Cloudflare SSL — 失効日は openssl で証明書そのものから直接読み取ります。Cloudflare は分析用に構成したトークンとゾーンを使い、この Mac に存在しないソースは淡色で表示されます。Traefik はその acme.json を、Step CA はその URL をダッシュボードに指定できます。
証明書の発行には 2 つの経路があります。mkcert はローカルで信頼される証明書を作成します — 公的 CA が無関係な .localhost や LAN 名での開発に最適で、Certificates ペインの Get アクションは導入済みならこれを使います。一般に公開するものには Let's Encrypt を使います。AI の issue_certificate ツールが This Mac または連携サーバで acme.sh や certbot を実行し、DNS-Cloudflare 方式では実行時に注入される CF_TOKEN ボールトシークレットを読み — モデルに送られることはありません。商用証明書が必要なら、Certificates ペインの ACME セクションで認証局に GlobalSign Atlas を選び、Atlas ポータルの EAB キー ID と HMAC キーを入力して一度だけ登録します。以後の発行と更新は同じ手順で行え、HMAC キーはキーチェーンに保存されます。
10.17メールのセキュリティ
メールサーバには 2 つの異なるリスクがあります。なりすまされること(誰かがあなたのドメインとしてメールを偽造する)と、悪用されること(見知らぬ相手のためにメールを中継する)です。FrontierStack は両方に対処し、Postfix が下層にいる旧 Apple Server のケースも理解するツールを備えます。
- なりすまし対策の DNS —
email_auth_dnsが SPF、DMARC、(任意の)DKIM の TXT レコードを生成します。SPF はドメインの送信元を宣言し、DMARC は失敗時の扱いを受信者に伝え、DKIM は送信メールを暗号署名します。publish=cloudflareならレコードを作成し、そうでなければ BIND、dnsmasq、レジストラに貼り付ける正確なレコードを表示します。 - DMARC レポート — DMARC レポートペインは、Gmail・Microsoft・Yahoo などの受信側がレコードの
rua=アドレスへ毎日送る集計レポートを読み取ります。そのアドレスが届く IMAP メールボックスを追加すると、FrontierStack が 1 時間ごとに確認して zip・gzip・XML の添付ファイルを解析し、ドメインごとの合格率と、そのドメインとして送信しているすべてのサーバを表示します。サーバごとの判定で、ときどき失敗(一部のメールに DKIM か SPF が欠けている自社のサーバ。最初に直すべきもの)と、別ドメインとしてのみ認証されるメール、まったく認証されないメール(多くはなりすまし)を区別します。Suped からの取り込みにも対応します。メールボックスが読めないとき、自社サーバの失敗がしきい値を超えたとき、ドメインのレポートが止まったときにアラートします。ドメインをp=noneからquarantineやrejectに進める前にここを確認してください。AI はemail_auth_dnsaction=reportsで同じ概要を読み取ります。 - DKIM 鍵 —
generate_dkim_keyはサーバ上でドメインとセレクタに対しopendkim-genkeyを実行し、公開鍵を公開すべき TXT レコードとして返します。秘密鍵は OpenDKIM ミルターのためサーバに残ります。 - Postfix の堅牢化 —
harden_mail_postfixは SSH 経由でpostconfにより安全なデフォルトを適用します。中継には SMTP AUTH を必須化(これでオープンリレーを閉じます)、未知・未登録の送信元ドメインを拒否、任意で送信者/ログインの一致を強制します。Postfix をリロードし、実効設定を表示します。 - オープンリレーテスト —
test_open_relayは安全な SMTP 会話(EHLO/MAIL FROM/RCPT TO を外部ドメインへ、送信せず QUIT)を行い、外部宛先が拒否されたか(良好)受理されたか(オープンリレー — 不良)を報告します。 - 配送プローブ — サーバのメールサーバポリシーセクションから、タグ付きテストメッセージを 1 通だけリレー経由でエンドツーエンド送信し、正確な SMTP の結果を読みます:受理&キュー投入(キュー ID 付き)・遅延・拒否・TLS 証明書エラー。これで「受理後に無言で破棄」か実配送かを見分けられます。LAN の IP で指定したリレーで STARTTLS の証明書が検証できない場合は、LAN リレーを信頼オプションで暗号化はされるが検証はしない経路で再試行します。Apple Server.app のマシンでは、設定がログを syslog/ASL 任せにしていても Postfix の実際のログを見つけ、メールキューや Server.app の
/Library/Logs/Mail/ファイルも参照します。 - アカウントチェック — メールサーバペインで、メールアカウントの POP3・IMAP・SMTP の設定を入力して設定をチェックをクリックします。各サーバにメールクライアントと同じ手順で接続し、手順ごとに結果を示します。解決できないサーバ名、接続を拒否するポートやファイアウォールに黙って破棄されるポート、ポートに合わないセキュリティ方式(110 や 587 での SSL/TLS、995・993・465 での STARTTLS)、TLS 1.0/1.1、この Mac が信頼しない証明書を、その理由(期限切れ、別の名前用、自己署名、中間証明書なし)とともに指摘します。続いてサインインしてメッセージ数を読み取り、ログアウトします。ログインが拒否された場合はサーバ自身の応答を表示します。何もダウンロード・送信・削除せず、パスワードも保存しません。証明書が無効な場合や接続が暗号化されていない場合は、オンにしない限りパスワードを送信しません。
serveradmin によって管理されている場合があり、main.cf を上書きして harden_mail_postfix の変更を黙って取り消すことがあります。実行後に結果を確認し、戻ってしまった場合は同等の設定を Server.app から再適用してください。証明書の自動更新。メールサーバは Web ページではなく DNS で Let's Encrypt にドメイン名を証明します。メールサーバ ▸ 証明書の自動更新は、リンク済みサーバについて、Postfix と Dovecot が使う証明書を acme.sh が Cloudflare DNS で更新し、両者が読む場所にインストールしているかを確認します。自動更新を設定…は、そのゾーンの DNS に限定した Cloudflare トークンを使って足りないものを補い、一度更新して動作を確認します。以後は毎日確認し、証明書の期限まで 20 日を切るとアラートを出します。
メールボックスのサイズ。メール用ディスクがいっぱいになったら、まず誰のメールが原因かを確かめます。メールサーバ ▸ メールボックス ▸ メールボックスを一覧表示は、選んだサーバ上のすべてのメールボックスを大きい順に、合計とCSV としてコピー付きで表示します。Dovecot がユーザを一覧できる場合は、メッセージ数とクォータの使用率と共に Dovecot からサイズを取得します。そうでない場合はディスク上のメールフォルダを計測します。macOS Server.app のユーザ別フォルダも GUID ではなくアカウント名で表示します。読み取りのみです。リンク済みサーバでは、すべてのフォルダを計測できるよう sudo パスワードを保存しておいてください。
10.18パスワード自動入力とクレデンシャル交換
FrontierStack は、あなたが管理する Web ページのログインをすでに保存しています — ルータとネットワーク ▸ Web リンクに保存したルータやプリンタ、Synology や QNAP の管理アカウント、ブートメディアのサーバコントローラ、サービスのサインイン。パスワード自動入力ペイン(シークレット・ボールト)を使うと、Safari などのアプリでそれらを自動入力でき、アプリからパスワードをコピーする必要がなくなります。
- シークレット・ボールト ▸ パスワード自動入力を開きます。FrontierStack がオンになっていないと表示されたら、オンにする…を選び、システム設定 ▸ 一般 ▸ 自動入力とパスワードで FrontierStack を有効にします。
- FrontierStack に保存済みで、Safari に入力させたいログインの横の提供を選びます。アプリのほかの場所にないログインはログインを追加…で追加できます。
- デバイスの Web ページで FrontierStack の候補を選び(またはパスワードメニューから FrontierStack を選び)、Touch ID または Mac のパスワードで確認します。
クレデンシャル交換(macOS 26 以降)は、パスワードマネージャ間でパスワードを移すための FIDO の規格です。パスワード — または対応するパスワードマネージャ — でアプリへの書き出しを選び、FrontierStack を指定します。データは macOS がそのまま受け渡し、途中でディスクに書かれることはありません。FrontierStack は確認画面を表示します。アドレスがこのネットワークのもの(既知の FrontierStack ログイン、フリートのサーバ、プライベートアドレス)はチェック済みで、FrontierStack にログインはあるがパスワードが未保存の場合は、取り込んだパスワードを使えます。不要なものはチェックを外してください。パスキー、確認コード、カード、メモ、チェックのないログインは完了時にすべて破棄され、監査ログには件数だけが記録されます。
逆方向には、パスワードマネージャへ書き出す…で保存済みログインにチェックを付け、Touch ID またはパスワードの確認後にほかのアプリへ送れます。送り先は macOS のシートで選びます。
10.19外部から変更してよいのは誰か
ここまでは FrontierStack が面倒を見るマシンの堅牢化でした。本節は FrontierStack 自身の堅牢化です。フリート全体の SSH 鍵・データベースのパスワード・クラウドトークンを預かるアプリは、管理下のどのサーバよりも魅力的な標的だからです。
FrontierStack は複数の入口から外部操作できます。AI クライアント向けの MCP サーバ、Webhook やモバイルパネル向けの受信 HTTP 制御サーバ、ショートカットや Siri 向けの App Intents、そして有効化した場合のエージェント連携です。いずれも独自のトークンを持ちますが、その上位にリモート制御・ロック内の 2 つの設定があります。それぞれが答える問いは異なります。
アプリロックは「ロック中に何が残るか」に答えます。パスワードを設定してロックすると、ウィンドウは覆われ、すべての外部経路が完全ブロックか読み取り専用に制限されます。
10.22.3Fleet:物理セキュリティキーを必須にする
Fleet ライセンスでは、パスワードロック設定のすぐ隣に物理セキュリティキーが追加されます。Yubico YubiKey・Google Titan・FEITIAN ePass から選び、Apple のシステム画面でキーを登録します。FrontierStack が保存するのは公開認証情報だけで、秘密鍵がドングルの外へ出ることはありません。
有効にすると、FrontierStack は起動時からロックされ、バックグラウンドへ移るたびに再ロックします。登録済みキーを接続または提示してタッチするまで、ウィンドウもすべての外部制御経路もゲートされたままで、何も実行しません。App Lock パスワードも設定している場合は 2 段階となり、正しいパスワードと物理キーのタッチの両方が必要です。キーがないときにパスワードだけへフォールバックすることはありません。
最大 3 本を登録できるため、少なくとも 1 本は別の場所に予備として保管してください。対応ファミリーは YubiKey、Google Titan、FEITIAN FIDO2/ePass です。iPhone/iPad では、対応する USB-C または Lightning キーを接続するか、Apple の画面に従って NFC 対応モデルをかざします。ポリシーの解除にも現在登録されているキーの新しいタッチが必要なため、ロック解除済みセッションから密かに保護を弱めることはできません。
ペアリング済みデバイスとスクリプトシークレット
キーを登録すると、ペアリング済みデバイスにもキーを必須にするが既定でオンになります。ペアリングコードの作成、KeyRotate のペアリング、ペアリング済みデバイスの権限の引き上げ(上位レベル・リモートシェル・AI による変更)には、この Mac でのタッチが必要です。デバイスの権限を下げる操作や取り消しには不要です。スマートフォンからのシークレットやシェルの要求は、タッチでデバイスのキーセッション(既定 15 分)を開くまで拒否されます。セッションなしで要求が来ると、Mac にキーの確認が表示されます(最大 1 分に 1 回)。FrontierStack をロックするとセッションは閉じ、開いているかどうかはペアリング済みデバイスで確認できます。
AI のスクリプトシークレットもキーで封印できます。AI 管理者のセキュリティキーで暗号化…を使うと、値は secrets.env.fsenc に保存され、登録済みセキュリティキーへのタッチでしか取り出せない鍵で暗号化されます(FIDO2 PRF、macOS 26.4 以降)。名前は表示されたままです。値は起動やロックのたびにタッチが必要になり、1 時間で再ロックされます。シークレットを使うスクリプトは実行時にタッチを求めます。予備キーはすべてバックアップキーを追加…で追加してください。この機能より前に登録したキーは、いったん削除して登録し直す必要があります。シークレットが封印されている間は、すべてのキーを削除することはできません。
セキュリティキーによる SSH。連携サーバの設定を編集でセキュリティキーの SSH キーを作成…を選ぶと、セキュリティキー上に ed25519-sk キーを作成し、既存のアクセス方法でサーバに登録し、テストセッションが成功してからサーバを切り替えます。古いキーをサーバから削除することもできます。普段はキーセッションを開くで一度タッチすれば、監視・コマンド・ターミナルがそのセッションを共有し、タイムアウト(既定 60 分、サーバごとに設定)の間アイドルになるまで使えます。セッションが閉じている間、そのサーバの監視は停止扱いではなく一時停止となり、バックグラウンドでタッチを待つことはありません。Apple 標準の ssh は FIDO キーを使えないため、この Mac に Homebrew の OpenSSH が必要です(FrontierStack からインストールできます)。Linux や Windows を含むすべてのサーバで同じで、サーバ側には何も追加しません(サーバは OpenSSH 8.2 以降であれば使えます)。セキュリティキーの使用をやめる…で以前のキーに戻せます。
外部からの変更は別の問いに答えます。ロックしていない状態で、外部の呼び出し元が何かを変更するまでに何を要求するか、です。MCP サーバ・制御パネル・ショートカット・コマンドラインのすべての外部経路に同時に適用されます。レベルは 3 つ。全自動は確認なしで実行させます。接続するクライアントとその動作環境をすべて信頼できる場合にのみ妥当です。既定の操作ごとに確認は、変更のたびに呼び出し元を明示した承認パネルを表示します。要求が応答待ちで FrontierStack が最前面にないあいだは、Dock アイコンが跳ね続けます(応答しないまま別のアプリに移った後も同様です)。応答すると止まります。応答待ちの通知には拒否と1 回だけ許可のボタンがあります(ポインタを重ねると表示されます。システム設定 › 通知で FrontierStack を通知パネルにすると、常に表示されます)。拒否は通知から常に実行できます。1 回だけ許可は、人の操作の確認に Touch ID を使う設定では Touch ID を求め、ハードウェア入力の確認を使う設定ではパネルを開きます。通知のクリックは合成された操作と区別できないためです。時間指定の許可はパネルでのみ行えます。メールサーバの監査や DNS レコードの一覧など、読み取りだけの呼び出しは確認を求めません。パスワードが必要は、外部ツールがサーバに触れる前にパスワードを求めます。
確認レベルには、障害対応時に効く逃がし弁があります。承認時にこのセッションのみ許可を選ぶと 5 分間有効になりますが、その呼び出し元・その種類の操作に限られます。MCP クライアントからのサービス再起動を承認しても、同じクライアントでのシェル実行や、モバイルパネルからの再起動が許可されるわけではありません。この狭さこそが要点です。障害中に確認が繰り返されることが、人を「全自動」へ恒久的に切り替えさせる主因であり、横に漏れる許可はそれ以上に危険だからです。
どのレベルでも共通する 3 つの性質が、この設定を単なる設定項目ではなく信頼できるものにしています。読み取りは決して制限されません。障害中に暗転するダッシュボードは害にしかならないため、監視クライアントはどの設定でも動き続けます。認証情報・シェル・FrontierStack 自身の設定は、どのレベルでも外部から変更できません。これらは確認を出すのではなく拒否されます。パスワードの読み出しや任意コマンドの実行にとって、リモートツールからの要求はそもそも発生源として適切ではないという判断です。そしてセッション許可はディスクに書かれません。アプリの終了やロックで消えるため、5 分間の利便性が、与えたことを忘れた恒久的権限に変わることはありません。
10.22.4人間の操作による承認 — AI がマウスを動かせるとき
確認パネルは、クリックするのが人間であることを前提にしています。コンピュータ全体を操作する AI エージェント(「コンピュータ操作」)はその前提を崩します。合成のマウス/キーボードイベントを送信するか、アクセシビリティ経由でコントロールを直接押すことで、それを止めるために存在する承認カードの 承認 ボタンを、人間とまったく同じように押せてしまいます。同じリモート制御・ロックペインにある人間の操作による承認は、この経路を 2 つのレベルで塞ぎます。
実際のキーボードとマウスのみは、すべての承認の背後にある操作を検査します。本物のクリックやキー入力は、送信元プロセスを持たずに macOS から届きます。合成イベントには送信元アプリの情報が付き、アクセシビリティ経由の操作は入力イベントを一切伴いません。実際のハードウェア入力でないものは拒否されます。承認カードは開いたまま残り、カード上の注記が何が起きたかを示し、変更ログに記録され(特定できた場合は送信元アプリ名も残ります)、自動化が承認を試みたことが通知されます。
実際の入力 + Touch ID は決定的な証明を加えます。承認のたびに Touch ID(またはペアリング済み Apple Watch)を求め、パスワードへのフォールバックはありません。パスワードは合成キーボードがまさに入力できるものですが、指紋は Mac 上のソフトウェアには決して偽造できません。セキュリティキーが登録されていても Touch ID を求めるのは意図的です。Mac に挿したままのキーは、その Mac 上で動くソフトウェアの手が届く範囲にありますが、指紋には届きません。Touch ID も Watch もない Mac に限り、登録済みセキュリティキーのタッチで代替します。
このゲートはすべての承認 — スクリプトカード、セキュリティ確認、外部ツールの許可、AI が提案する修復、App Lock のパスワード — を対象とし、拒否に証明は不要です。したがってこの保護が止められるのは常に「承認」だけで、動いているものを止め続けることには使えません。意図的な副作用が 2 つあります。画面共有・VNC・KVM から注入される入力も合成入力として扱われます(Mac 本体で承認するか、画面共有越しでも Watch で通る Touch ID レベルを使ってください)。また Karabiner-Elements などのキーリマッパや、アクセシビリティ経由でコントロールを押す支援ツールも合成入力として扱われます。
10.22.5KeyRotate:キーのマスタ
Enfour の Mac App Store 向けキーマネージャ KeyRotate は、コンパニオンアプリ(資格情報のみ)レベルで FrontierStack とペアリングし、FrontierStack が使うキー(AI プロバイダキー、Cloudflare、ホスティング、メールリスト、エージェントトークン、CLI Proxy のクライアントキー、そしてキーを 1 つだけ使うサービスのペインや SaaS モニタのキー。Firecrawl、Supabase、Shopify、PagerDuty などが該当します。Stripe モニタの制限付きキーと GitHub・GitLab・Gitea・Bitbucket のトークンは、アプリのキーより権限が狭いことが多いため、選んだときだけリンクします)のマスタを保持します。ペアリング中、KeyRotate はこれらのキーを FrontierStack に送り、常に最新に保ちます。FrontierStack で入力したキーは、入力を終えて数秒後に KeyRotate に戻り、KeyRotate はそのキーを書き込んでいるすべてのファイルを更新します。この受け渡しには、アカウント1件に限定され2分で失効する使い捨てチケットを使い、引き換えられるのは署名付きのコンパニオンだけです。チケットを運ぶリンクにはアカウント名しか含まれず、値は含まれません。スクリプトシークレットも同じように同期しますが、セキュリティキーで保護したものは KeyRotate に送られません。PATH のようにスクリプトの動作を変える名前は同期せず、FrontierStack で削除したシークレットは削除されたままです。
FrontierStack の起動中に KeyRotate を初めて開くと、FrontierStack のキーを読み込むか確認します。FrontierStack はどのアプリにどのキーを送るかを表示します。既定のボタンは拒否で、許可には Mac で Touch ID が使える場合は必ず Touch ID が必要です(パスワードへの切り替えはできません)。Touch ID が使えない Mac に限り、Apple Watch、登録済みのセキュリティキー、それもなければログインパスワードを受け付けます。FrontierStack を開いておく必要はありません。非表示でもバックグラウンドのみで終了していても、KeyRotate からの要求があるとバックグラウンドサービスがアプリを起動します。フルコントロールのスマートフォンでもこの要求はできず、送信はすべて監査ログに記録されます。
KeyRotate によるローテーション。KeyRotate とペアリングしていると、AI 管理者が credentials ツールでキーをローテーションするときは既定で KeyRotate に依頼します。新しいキーは FrontierStack だけでなく、KeyRotate がそのキーを書き込むすべてのファイルに届きます。FrontierStack はアカウント名と使い捨てチケットだけを含む keyrotate://rotate リンクを開き、KeyRotate は署名付きのピン留め接続でそのチケットを確認してから動きます。KeyRotate は自身のルール(有効なサブスクリプション、ロック中は FrontierStack からの依頼であることを示す Touch ID)を適用し、新しいキーを FrontierStack に送り、自動更新の設定がオンならほかのターゲットファイルも書き換えて、待っているツールに結果を報告します。古いキーは無効化しません。FrontierStack 側でローテーションするには via: frontierstack を指定します。保存中のキーはどれでもローテーションできます。ベンダ API が新しいキーを発行できる場合(キー自身または保存済みの管理者キーで)は自動で、できない場合は手動です。FrontierStack か KeyRotate がベンダのキーのページを開き、貼り付けた新しいキーを確認します。保存中のキーが AI 管理者へのプロンプトに含まれていると、ローテーションを提案します。MCP 経由の外部 AI ツールや CLI(frontierstack keys・frontierstack rotate <サービス>)も、キーの漏えいに気づいたら同じ提案をするよう案内されています。
keyrotate:// リンクはどのアプリからでも開けるため、KeyRotate から求めていないペアリングは受け入れる前に確認します。10.20auth.md によるエージェントログイン
パスワードは自動化に最も向かない資格情報なので、FrontierStack はサードパーティサービスの長期パスワードを貼り付けるよう求めることは決してありません。代わりに auth.md を検出します — サービスが https://<host>/auth.md に公開できるオープン仕様(WorkOS 発)で、AI エージェントが代理でサインインする方法を伝えます。サービスの Connect ▸ Login Automation (auth.md) 開示と、AI の check_authmd ツールがその公開ファイルを取得し、広告されたフロー(agent-verified または user-claimed)、スコープ、OAuth エンドポイントを要約します — あるいは未公開と報告します。付与そのものはサービス側で行われ、短命で取り消し可能、スコープ付きのトークンが発行されます。FrontierStack はパスワードを保存しません。現在 Cloudflare と Firecrawl が auth.md を公開しており、対応サービスは増えつつあります。
10.21署名付きリクエストの信頼モデル(FS1)
FrontierStack 自身の制御面 — ローカルの制御サーバ、MCP サーバ、リモートの fsagent — は TLS 上のベアラートークンで保護されています。しかしトークン単体は共有秘密であり、再送可能で、誰が呼んでいるかの証明にはなりません。FS1 署名付きリクエストはその上に第二の要素を加えます。すべてのリクエストが承認済みのデバイス単位 Ed25519 鍵で署名され、サーバは公開鍵の許可リストを保持し、明示的に承認していない鍵で署名されたものを拒否します。漏れたトークンはそれ単体では何も制御できません — これはフリートがすでに信頼している SSH 鍵の HTTP 版です。
各リクエストはデバイスの鍵 ID、タイムスタンプ、ランダムなノンス、正規化文字列に対する署名を運びます。サーバは、鍵が承認済みであること、タイムスタンプが 60 秒の窓内であること、ノンスが未使用であること(署名が検証された後にのみ消費されるため、不正な署名でノンスを浪費できない)、署名が有効であることを検証します。同じ方式が macOS アプリ、Go エージェント、iOS クライアントで同一に実装され、言語横断テストで固定されています。
デバイスはサイドバー概要グループの Paired Devices ペインで管理します(以前はこのセキュリティペイン内にありました)。ペア済みの各電話・タブレットには、ラベル、鍵フィンガープリント、最終確認時刻、スコープ選択、Revoke ボタンが表示されます。ペアリングは数台ずつ持つ 1〜2 名を想定し — 登録は 4 台まで — 各デバイスはスコープを帯びます。
| スコープ | 状態・ログの閲覧 | サービス再起動 | フリート操作 | ツール/CLI/スクリプト |
|---|---|---|---|---|
readOnly | 可 | — | — | — |
restart | 可 | 可 | — | — |
operate | 可 | 可 | 可 | — |
full | 可 | 可 | 可 | 可 |
同じセクションには、制御サーバと MCP サーバそれぞれの署名要求(Require request signing)スイッチがあります。展開は意図的に緩やかです。署名が任意のあいだサーバはトークンまたは署名を受け入れ、すでに持っているトークンで最初の鍵を登録できるブートストラップ例外があるため — 強制を有効にしても全員を締め出すことは決してありません。
各行にはさらに 2 つのデバイス単位の制御があります。AI 管理者を許可(既定はオン、どのスコープでも)は、その電話が AI と会話できるかどうかを制御します — 信頼する 1 台にはチャットを許可しつつ別の 1 台をブロックできます。このスイッチは制限のみを行います:オンでも AI は依然としてアプリのロック解除、署名済みデバイス、変更を伴う操作には full スコープの「変更を許可」を必要とします。リモートシェルを許可は full スコープでのみ表示され、既定はオフです。これは電話がコマンドラインシェルを開き、さらにこの Mac がオフラインでも直接アクセスするために自身の SSH 鍵をサーバに導入するために必要な明示的許可です。電話を紛失した場合、紛失した電話を保護は端末と古いキュー操作を直ちに遮断し、セッションを終了し、到達可能なサーバから直接 SSH 鍵を削除し、プッシュトークンを無効化します。オフラインのサーバは復帰後にクリーンアップを完了できるよう一覧に残ります。
Bluetooth によるペアリングのフォールバック。新しい電話が Wi-Fi や Tailscale でこの Mac に到達できないとき — 制限されたゲストネットワーク、クライアント分離、キャプティブポータルなど — 登録は Bluetooth 経由でも完了できます。Bluetooth ペアリングを許可(既定はオフ)を有効にすると、Mac はペアリングダイアログを開いている間だけ短命の GATT サービスをアドバタイズします。電話は同じ一度きりの QR コードをスキャンし、まったく同じ署名付き登録ハンドシェイクを実行します — HTTPS の代わりに BLE で運ばれるだけです。FS1 署名はトランスポートに依存しないため、Bluetooth 経路は TLS チャンネルなしで同じ信頼保証を継承します。
どこからでも Mac に到達する。初期状態では、ペアリングした電話は同じネットワーク上にあるときだけ Mac に到達できます。Mac 上に Tailscale が見つからない場合、Paired Devices ペインはインストールを推奨します。Mac に Tailscale、電話や iPad に iOS 版 Tailscale を入れて両方を同じ tailnet にサインインすれば、ペアリングはどこからでも機能します — Mac は安定したプライベートアドレスを保ち、通信はエンドツーエンドで暗号化され、ルータのポート開放も不要です。
full ではなく restart で。すべてのデバイスを登録したら、両サーバで署名要求を(エージェントでは require_sign を)有効にします。その後は、漏れたりスクリーンショットされたトークンは何も制御できません。呼び出し側は承認済みの秘密鍵も持っていなければならないからです。電話を紛失したり担当者が離れたら、ただちにデバイスを取り消してください。10.22ヘッドレス Mac の堅牢化
ディスプレイのないサーバには固有のセキュリティ上のトレードオフがあり、Headless Setup ツール(詳細は第 8 章と第 17 章)はここで最も重要なものを表に出します。System Status セクションは FileVault が有効なとき警告します。キーボードも画面もない暗号化 Mac は起動時に解除できず — オンラインに戻る代わりに FileVault のプロンプトで止まるからです。ヘッドレス機では一般に、フルディスク暗号化と無人再起動のどちらかを選ぶことになり、FrontierStack はその選択を、次の停電後に気づくのではなく明示的にします。そうしたホストで画面共有やリモートログインを有効にすることは、まさに Open Ports 監視がその後見張る種類の露出です。

FrontierStack ユーザマニュアル · バージョン 1.0.0 · 第 10