開発記録

SysmonでPC監視システムを自作して踏み抜いた9つの落とし穴と解決策

自作したWindowsセキュリティ監視システムのダッシュボード画面イメージ

「誰が、いつ、どこからPCにアクセスしたか」を正確に把握できていますか。市販のセキュリティソフトはウイルスの有無は教えてくれますが、具体的な行動履歴までは可視化してくれません。そこで、Windows標準のSysmonとPowerShellを組み合わせて、毎日30秒でPCの安全を確認できる監視システムを自作しました。画面のチラつきやDNSの抜け穴など、実際に開発して踏み抜いた9つの落とし穴と解決策をすべて公開します。

なぜSysmonでPC監視システムを自作したのか?

システムモニター(Sysmon)は、プロセス作成やネットワーク接続を記録するMicrosoft公式の監視ツールです。Windows 11(KB5079473以降)では、設定アプリから数クリックで有効化できます。

しかし、Sysmonにはログを可視化する画面(GUI)がありません。そこで、毎日30秒でPCの安全を確認できる「🟢/🟡/🔴のダッシュボード」を生成するPowerShellスクリプトを自作しました。

自作PC監視システムを自動実行する仕組みと4つの機能

開発したシステムは、15分ごとにタスクスケジューラで監視スクリプトを実行し、PCの状態を判定して「dashboard.html」を更新します。

読者
市販のウイルス対策ソフトだけでは足りないのですか?
SK Forge
市販ソフトは既知のウイルスを駆除するのには向いていますが、「正規のツールを使った不正アクセス」や「設定の隙を突いた侵入」を可視化してはくれません。自作システムなら、PC内のすべての挙動を記録して自分で検証できます。
115分ごとにタスク起動227項目の自己点検3ログ解析と警報判定4ダッシュボードHTML更新
監視システムの自動実行フロー

主に以下の4つの機能を実装しました。

  • 自己点検27項目: DefenderやSysmonの稼働状況をチェック
  • 侵入の兆候検知: ログオン成否や外部IPの解析、アカウント新規作成の監視
  • おとりファイル: 偽ファイルを開いた瞬間にログ記録するハニーポット
  • 永続化の監視: スタートアップなど自動実行設定(全594件)の増減を監視

1500回以上の自動実行テストを繰り返す中で、Windows特有の仕様によるトラブルが多発しました。

✔ ポイント

・Sysmonは2026年3月からWindows 11に標準搭載された ・ログを収集するだけで、自動で分析やブロックをする機能はない ・自作スクリプトでログを解析し、HTMLの1画面にまとめる仕組みを構築

![自作した監視システムのダッシュボード画面のイメージ](/images/windows-sysmon-monitoring-devlog-inline-1.webp)

開発中に踏み抜いた「9つの落とし穴」と解決策

24時間稼働させる中で直面した技術的な課題と、その克服方法を解説します。

1. 15分ごとに一瞬ターミナルが開いて画面がチラつく

タスクスケジューラでPowerShellを実行する際、非表示設定でも一瞬だけ黒いコンソール窓が表示されます。 解決策: 以下のVBScript(run_hidden.vbs)を中継役にしました。ウィンドウを完全に非表示にしてバックグラウンドで実行できます。

Set shell = CreateObject("WScript.Shell")
shell.Run "powershell.exe -ExecutionPolicy Bypass -File C:\監視スクリプトの置き場\collect.ps1", 0, False

2. 過去の警報が15分ごとに再通知されてうるさい

過去24時間のログを毎回スキャンすると、一度検知した不審なログが15分ごとに何度も通知されます。 解決策: 通知済みの警報キーを logs\notified.json に保存し、未通知の新しい事象のみをポップアップさせる仕様に改善しました。

3. 開発支援AIによるアカウント作成を「外部侵入」と誤検知する

「グループへのメンバー追加(ID 4732)」を無条件で🔴警報にしていたところ、開発支援AIツール(Codex)がテスト用に作成した隔離アカウントを検知して誤作動しました。 解決策: 特権グループへの追加のみを🔴警報とし、一般グループは「情報」に分類。ホワイトリストによる除外機能も実装しています。

誤検知の原因になったCodex側の挙動は、提供終了したはずのOpenAI CodexをChatGPTから呼び出す手順で導入手順ごと書いています。

あわせて読みたい提供終了したはずのOpenAI CodexをChatGPTから呼び出す手順OpenAI Codexの使い方とChatGPTとの違いを解説。2023年に提供終了したAPIに代わり、現在はChatGPTから直接呼び出せる新機能として復活し…

4. 自宅Wi-Fiに見覚えのない不審なMACアドレスが現れる

ルーターの接続リストに製造元が「不明」の不審なMACアドレスを発見し、盗聴を疑いました。 解決策: これはiOSが自動生成するランダムMACアドレスでした。iPhone側でMACアドレスを固定化することで識別可能になります。

5. システムが「黙って壊れても」🟢正常と表示される設計ミス

エラーで動作が止まるのを防ぐため、エラーを無視する設定にしていました。しかし、これでは監視システム自体が停止した際にも「🟢正常」と表示されてしまいます。 解決策: エラー設定を Stop に変更し、モジュールごとに try/catch で囲んでエラー時は警告を出す仕様にしました。

6. VPN経由の自分のスマホが「外部からの侵入」に見える

外出先からスマホで自宅PCにSSH接続するたびに、モバイル回線のIPが「未知の外部IP」として🔴警告されました。 解決策: 接続元IPの判定に「トンネル(Tailscale等)」を追加しました。TailscaleのCGNAT帯からのアクセスは「情報」として扱うことで誤検知を解消しています。

そのスマホ側の接続をどう作ったかは、外出先のスマホから自宅PCの作業を続ける方法。30秒で切れる問題も解決にTailscaleの設定ごと残しました。

あわせて読みたい外出先のスマホから自宅PCの作業を続ける方法。30秒で切れる問題も解決外出先のスマホから自宅のWindowsに入り、そのまま作業を続けるまでの手順です。接続が30秒で切れる原因と、その直し方まで実際に詰まった順に残しています。

7. PowerShell 5.1で日本語コメントが文字化けする

Windows 11標準のPowerShell 5.1環境では、スクリプトの日本語コメントが文字化けし、実行に失敗します。 解決策: PowerShell 5.1はBOMなしUTF-8を正しく解釈できません。保存時に必ず「UTF-8 (BOM付き)」を指定して保存して解決しました。

8. 文字列展開で日本語文字が変数名に吸い込まれる

ダブルクォーテーション内で変数展開をする際、直後に日本語が続くと変数の値が表示されません。

# 意図しない挙動になる例
Write-Host "異常$ngCount件を検出しました。"

解決策: 直後に漢字が続くと変数名として誤認されます。以下のように $( ) で変数の境界を明示して解決しました。

# 正しい記述例
Write-Host "異常$($ngCount)件を検出しました。"

9. マルウェアブロックDNSの「IPv6の抜け穴」で素通りする

悪意あるドメインを遮断するDNSを設定したものの、テスト用ドメインにアクセスできてしまう抜け穴がありました。

IPv4のみ変更抜け穴ありIPv6経由で素通り両方セットで変更完全にブロック安全装置で自動検証
DNS設定の落とし穴

解決策: WindowsはIPv6を優先するため、IPv4 of DNSだけを変更しても、IPv6経由でルーターの標準DNSを素通りします。スクリプトでIPv4とIPv6のDNSをセットで書き換える処理を実装しました。

# IPv4とIPv6のマルウェアブロックDNSを揃えて適用する例
Set-DnsClientServerAddress -InterfaceAlias 'Wi-Fi' -ServerAddresses "1.1.1.2", "1.0.0.2"
Set-DnsClientServerAddress -InterfaceAlias 'Wi-Fi' -ServerAddresses "2606:4700:4700::1112", "2606:4700:4700::1002"

このDNS書き換えでWi-Fiが切れる件は、WiMAX L13のWi-Fiが切れる問題を解決し、ワンタップで再起動するツールで原因と復旧の自動化まで追っています。

あわせて読みたいWiMAX L13のWi-Fiが切れる問題を解決し、ワンタップで再起動するツールWiMAX L13の通信速度低下やDNSの詰まりをワンタップで解消するPowerShellツールを開発。DNS変更時のWi-Fi切断や、管理画面のログイン自動化…

自作監視システムのメリットと限界

自作システムを構築したことで、PCの「普段と違う挙動」を自分で完全にコントロールできる安心感が手に入りました。監視サービスの停止そのものをトリガーにして、ダッシュボードが即座に警告色に染まる強固な設計は自作ならではの強みです。

ただし、このシステムには不審な通信を自動遮断する機能はありません。あくまで「何が起きたかを可視化し、証拠を残す」ことに特化しています。

この監視システム自体もAIエディタで書いています。どれを使うか迷っているなら、Cursor・Windsurf・Claude Codeの課金でつまずく3つの注意点が判断材料になります。

あわせて読みたいCursor・Windsurf・Claude Codeの課金でつまずく3つの注意点Cursor・Windsurf・Claude Codeの課金で迷っていませんか?本記事では、3大AIツールの料金プランや機能、Windows環境での注意点を比較…

まとめと次にやること

Windows標準のSysmonとPowerShellを組み合わせることで、PCの行動履歴を可視化する監視システムを構築できました。非表示起動やIPv6のDNS設定など、細かな調整を重ねることで実用的なセキュリティツールに仕上がっています。

まずは、ご自身のPCの「設定」アプリを開き、[システム] - [オプション機能] から「Sysmon」が有効化できる状態にあるかを確認してみましょう。

Windowsの動きを見張る監視システムを、一から組まずに使いたいときは

詰まりどころを1つずつ潰していく時間は、どうしてもかかります。実際に作って動かしているWindowsの動きを見張る監視システムは、そのまま使える形に整えています。 新しく出したときと、記事にしていない小さな回避策は公式LINEで先に流しています。今あるものはAIクラフトに置いてあります。

よくある質問

Sysmonを有効にするとPCの動作は重くなりますか?

すべての挙動を詳細に監視するため、極めて負荷の高い処理(大量のファイル作成など)を行う際にはわずかにCPUやディスクに影響を与える場合があります。しかし、通常のWeb開発や日常的なPC利用において、体感できるほどの速度低下が発生することはまずありません。

IPv6のDNSを設定しないと、本当にセキュリティが無効化されますか?

無効化されるわけではありませんが、多くの現代的なネットワーク環境において、WindowsはIPv6での名前解決を優先して行います。そのため、IPv4側だけにセキュリティ対策DNS(マルウェアブロックなど)を設定していても、名前解決自体がIPv6経由でルーターへ素通りしてしまい、ブロック機能が一切作動しない状態になります。

おとりファイル(ハニーポット)を誤って自分で開いてしまった場合はどうなりますか?

自分で開いた場合も「開封イベント」としてログに記録され、ダッシュボードに警告が表示されます。その場合は、事前に用意したホワイトリストのファイルにそのイベントを登録することで、ダッシュボードの表示を正常(🟢)に戻すことができます。

SK Forgeのプロフィール画像
この記事を書いた人: SK Forge

AI開発にのめり込んでいる個人開発者です。ブログの全自動運営をはじめ、作業をAIに任せて時短する仕組みを作り、浮いた時間を副業に回しています。その開発記録や悪戦苦闘したところを、このブログとXでそのまま公開中。完成したツールやアプリは、AIツール専門のマーケット「AIクラフト」で販売しています。

関連記事