Grok Bot で自分の Mac の脆弱性チェックを毎日回してみた

Grok Bot で自分の Mac の脆弱性チェックを毎日回してみた

Mac に入っているアプリやパッケージが最新の脆弱性の影響を受けるか、毎日自動でチェックして報告するボットを Grok Bot で立ててみました。読み取り専用で構成を取得し、公開の脆弱性情報と照合する仕組みと、実際に動かしてみた結果をお話しします。
2026.10.31

はじめに

クラウド事業本部、あきやまです。

最近脆弱性関係のニュースが多いですね。自分の Mac に入っているアプリや Homebrew パッケージが、いま出ている CVE の影響を受けるのか調査したいですが、手作業だと続かないので、Grok Bot 上に「読み取り専用で構成を取り、脆弱性情報と照合してチャットに報告する」ボットを立ててみました。
この記事では、立てたボットの動きと、Grok Bot 側が処理をどう分担しているかを、実際に動かした結果も合わせて書いていきたいと思います。

環境

項目 値
OS macOS 26.7.2
端末 自分の Mac(ローカル実行を許可)
アプリ Grok Bot 0.78.1
ボット名 Security checker(途中まで securitycheck / Vuln Watch)
ルーティン daily-security-check
スケジュール 毎日 8:30 JST 前後(flexible、前後 15 分程度)

※ 画面キャプチャは、他ボット名とアカウント名をモザイクしています。

結論

Grok Bot の定期ルーティンと、Mac 上のローカル実行(Computer Use)を組み合わせると、「毎日 1 回、読み取り専用で inventory を取り、公開の脆弱性情報と照合してチャットへ報告する」流れを組めました。
アップデートや削除はボットにやらせず、対処コマンドを提案させるだけにしています。

確認項目 結果
定期実行 ルーティンで毎日 8:30 JST ごろに起動できる
Mac 情報の取得 読み取り専用コマンドをローカル実行し、毎回承認が出る
脆弱性照合 Apple / NVD / CISA KEV / JVN / ベンダー発表を一次情報として確認する前提
報告先 当該ボットのチャットのみ(Slack 送信なし)
変更操作 アップデートや削除は実行しない。提案だけ

初回チェックでは、照合対象がおおよそ 138 件(アプリ 47 / Homebrew 78 / cask 13)で、影響あり 9 件、要確認 2 件でした。
悪用が確認されている brotli を先頭に報告し、その後こちらで更新・削除した分は、再スキャンで「解消」と「未対処」に分かれました。

Grok Bot の処理の仕組み

ここがこの記事の本題です。
画面上は「チャットにボットがいる」ように見えますが、処理の本体は次の一本道です。

Grok Bot のデスクトップアプリは、この流れの入口(ルーティン設定)と出口(チャット表示)です。
Mac の構成取得だけがローカル実行で、調査・照合・文章化はクラウド側のエージェントが担います。

UI 層(デスクトップアプリ)

Grok Bot アプリは、ボットの一覧と各ボットのチャット、右側の詳細パネルを出します。
Security checker を選ぶと、会話と Routines が見えます。

右側の Routines には、毎日動かす単位が並びます。
自分が使ったのは daily-security-check で、トグルがオンならスケジュールどおりに起動します。

エージェント層(ボット本体)

ボット本体は、チャットに見える「Security checker」そのものです。
ここに次を持たせます。

  • プロフィール(役割文): 唯一の仕事、毎日の流れ、報告フォーマット、やらないこと
  • 会話履歴: 報告とユーザーからの質問
  • ルーティン: cron 相当のスケジュールと、起動時に渡す prompt
  • 作業領域: inventory や findings のファイル(ボット側)

プロフィールでは、対象を「この Mac の OS・インストール済みアプリ・設定」に絞り、社内システムや AWS アカウントの診断はやらないと書いてあります。
報告は日本語で短く、危険度は誇張も軽視もしない、という声の指定も入れています。

ルーティン作成時のイベントはチャットにも出ます。
cron は 30 8 * * *(Asia/Tokyo)、flexible で前後 15 分程度、初回の定期実行は翌朝、という形でした。
ルーティンの prompt には、プロフィールの手順に従って inventory を取り、前回以降の脆弱性情報と照合し、影響なしでも 1 通必ず報告する、と書いてあります。

ローカル実行層(Computer Use)

Mac の構成を取る部分だけは、クラウド側だけでは完結しません。
Grok Bot がローカルの Computer Use(ローカル実行デーモン)経由で、自分の Mac に読み取り専用コマンドを投げます。

実際にプロフィールへ書いた例は次です。

sw_vers
system_profiler SPApplicationsDataType   # 名前とバージョンだけ使う
brew list --versions
brew list --cask --versions
softwareupdate --list
fdesetup status
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
spctl --status
csrutil status

ポイントは次です。

  1. 毎回 Mac 側に承認が出る
    ローカル実行は、ユーザーが許可した範囲で動きます。自分は毎回承認が出ることを了承済み、とプロフィールに書いてあります。
  2. 読み取り専用に限定する
    アップデート、インストール、アンインストール、設定変更、ファイル削除はやらない、と明記しています。
  3. 結果はボット側に日付付きで保存する
    inventory はボット側の作業領域へ日付ごとに残し、翌日以降は差分を見やすくします。
  4. オフラインや拒否時は直近 inventory で照合する
    承認されなかった日や Mac がオフの日は、その旨を報告に書かせます。

つまり「頭脳とスケジュールと脆弱性調査」はクラウド側、「この Mac に何が入っているか」だけをローカル実行で取りにいく、という分担です。

照合と報告層

inventory が取れたら、ボットは公開の一次情報を見にいきます。
情報源として指定したのは次です。

  • Apple Security Releases
  • NVD / CVE
  • CISA KEV(悪用が確認された脆弱性)
  • JVN
  • inventory にあるアプリのベンダーアドバイザリ(Chrome、Slack、Zoom、Cursor、Homebrew パッケージなど)

判定は 3 つです。

判定 意味
影響あり インストール版が脆弱性の影響範囲に入る
要確認 バージョン特定ができない、修正版が未公開など
影響なし 照合した範囲では該当しない

報告フォーマットは次です。

  • 影響あり・要確認があれば、対象(名前と今の版)、CVE、深刻度(CVSS と KEV 掲載の有無)、修正版、対処方法、一次情報のリンク
  • KEV 掲載など悪用確認済みを先頭に置く
  • 何もなければ「今日は影響なし(照合件数と情報源)」と一言
  • 同じ CVE を毎日繰り返さず、2 日目以降は未対処件数にまとめる
  • findings を CSV に追記する(date, cve, product, installed_version, fixed_version, severity, kev, status, link)

チャット上の報告例です。

削除を頼んでも、ボットは自分では実行せず、ターミナル用のコマンドだけ返します。プロフィールの「やらないこと」が反映されている状態です。

やってみた

Step 1: ボットを立てて役割を固定する

Grok Bot で新しいボットを作り、仕事を 1 つに絞ったプロフィールを書きました。
役割を狭くすると、定期実行時に「ついでに別のことをする」余地が減ります。

実際に入れた定義文は次です(ホスト名や個人名は一般化しています。

Security checker の定義文

Step 2: ルーティンを作る

ルーティン名は daily-security-check、スケジュールは毎日 8:30 JST(flexible)です。
起動時 prompt には、プロフィールの毎日の流れに従うこと、読み取り専用であること、影響なしでも 1 通送ることを入れました。

チャット上では、ルーティン作成のあと「毎朝 8:30 ごろにこのチャットへ 1 通送る設定にした。初回の定期実行は明日の朝」と返ってきました。
今日の分は初回なので、直近 30 日分を対象にすぐ走らせています。

Step 3: 初回チェックを見る

初回のサマリは次でした。

項目 値
照合件数 138(アプリ 47、Homebrew 78、cask 13)
影響あり 9
要確認 2
最優先 brotli(KEV 掲載)

影響ありの例(当時):

  1. Homebrew brotli 1.2.0(KEV)
  2. Homebrew node 25.5.0(brotli 経由の影響を含む)
  3. Zoom 7.1.9
  4. Xcode 26.6
  5. Claude Code 2.1.228
  6. Ghostty 1.3.1
  7. iTerm2 3.6.6
  8. gh 2.94.0
  9. openssl@3 3.6.2

要確認は、古い go が残っていることと、sqlite の修正版未公開でした。
macOS、Safari、Chrome、Slack、Cursorは影響なし。
FileVault / Gatekeeper / SIP は有効で、ファイアウォールだけオフ、という報告もありました。

Step 4: 変更は人がやり、ボットは再スキャンする

Ghostty の削除をチャットで頼むと、ボットは次だけ返してきました。

brew uninstall --cask ghostty
# 設定まで消すなら
brew uninstall --zap --cask ghostty

こちらで brotli / node の更新や Ghostty の削除などを行ったあと、再スキャンすると「解消した件数」と「未対処の件数」に分かれて報告されました。
毎日の本運用では、新規分と未対処件数だけに絞る想定です。

注意点・制約

  • ローカル実行は承認が必要です。 Mac がスリープしていたり、承認をスキップしたりすると、その日は直近 inventory 頼みになります。
  • ボットは変更しません。 便利さより、勝手にアップデートされないことを優先しています。
  • 一次情報を取れていないことは書かせない、とプロフィールに入れています。それでも LLM ベースなので、リンク先と版番号は自分でも一度見た方がいいです。
  • 対象は個人 Mac です。 社内システムやクラウドアカウントの診断には使っていません。
  • 他ボットの仕事と混ぜない方が安定します。経理ボットや学習ボットとは役割を分けました。

まとめ

  • Grok Bot のルーティンで、毎日の脆弱性チェックを起動できる
  • Mac の構成取得はローカル Computer Use、調査と報告はクラウド側エージェント、という分担になっている
  • 読み取り専用と報告フォーマットをプロフィールに書くと、振る舞いがかなり固定できる
  • 初回は影響あり 9 件などを具体的に出してくれた。対処は人がやり、翌日以降は差分報告に寄せる

自分の端末の「入れっぱなし」を、毎朝チャット 1 通で可視化したい人には、わりと素直な使い方だと思います。
同じようなルーティンを組んでいる方がいれば、情報源の選び方や承認の回し方を教えてください。

参考

この記事をシェアする

関連記事