はじめに:情シスを震え上がらせる「ライセンス監査」と「勝手アプリ」
LAN内セキュリティやコンプライアンス管理において、ハードウェアの管理と同じかそれ以上に胃が痛むのが 「ソフトウェア資産管理(SAM: Software Asset Management)」 です。
- 「商用利用禁止のフリーソフト(個人利用のみ無料のツール等)を利用者が勝手に業務PCに入れていないか?」
- 「サポートが終了した古いバージョンのJavaや7-Zipが放置されていないか?」
- 「ソフトウェアベンダーからの突然のライセンス監査レターに即答できる台帳があるか?」
これらを調査するために、LAN内の全員に「インストールされているソフトをExcelに書いて提出してください」とお願いしても、正確な回答が集まるはずがありません。
かといって、全台に高価な商用SAMエージェントを導入すると莫大なライセンス料がかかります。
Windows標準の WinRM(レジストリ走査) と、Linux標準の SSH(dpkg / rpm) を使い、常駐ソフトゼロで全PCからインストール済みアプリケーション一覧を自動抽出し、全体集計するPythonスクリプト を構築しました。
1. Windows:抜け漏れなくアプリを拾う「4大レジストリパス走査」
Windowsで「プログラムの追加と削除」に表示されるアプリケーションは、レジストリの以下の4つの異なるパスに分散して格納されています。どこか1つでも見落とすと、ユーザー単位でインストールされたアプリ(TeamsやZoom等)や32bitアプリを拾い損ねます。
-
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall(64bit システム全体) -
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall(32bit システム全体) -
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall(ユーザー個別) -
HKCU\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall(ユーザー個別 32bit)
これらをPowerShellスクリプトで一網打尽に抽出し、JSON形式で持ち帰ります。
2. Linux:ディストリビューションに応じたパッケージ抽出
Linuxサーバーに対しては、SSH経由でディストリビューションに応じたコマンドを1行叩くだけで、インストールされている全パッケージがCSV形式で即座に手に入ります。
💻 コア実装・設定スニペット(抜粋)
# コア実装ロジック(要点抜粋)
$paths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKCU:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
$apps = Get-ItemProperty $paths -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -and $_.DisplayName -notmatch '^KB\d+' } |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Sort-Object DisplayName -Unique
$apps | ConvertTo-Json -Compress
3. 全体集計:ワンクリックで「誰が野良アプリを入れているか」を特定
抽出した結果を中央のデータベースに投入し、全体的な集計クエリを回します。
例えば、「LAN内全体で1台だけに謎のファイル共有ソフトがインストールされている」「LAN内で古いApache Log4jを含んだパッケージが動いているサーバーが3台ある」といった異常が、集計画面で一目瞭然にあぶり出されます。
まとめ:棚卸しの自動化がガバナンスの第一歩
Excelを配って利用者に手動記入させるアンケート形式のSAMは、時間と労力がかかる割に精度が低く、形骸化します。
- 端末側への専用エージェントの常駐は不要
- WinRMとSSHというOS標準のリモート実行機能だけで完結
- 全PCのインストールアプリが常に最新状態で台帳化される
このエージェントレスSAM基盤を手に入れるだけで、ライセンス違反の法的リスクや、野良アプリによるマルウェア感染リスクを未然に防ぎ、自信を持ってコンプライアンス監査に対応できるようになります!
📚 さらに詳しいアーキテクチャ設計・パラメータ表・トラブルシューティング
最後までお読みいただきありがとうございます!
本記事が少しでも「役に立った」「あとで試したい」と感じていただけましたら、ぜひQiitaの 「いいね(♡)」 と 「ストック」、および アカウントのフォロー をいただけると今後の検証・執筆の大きな励みになります!
また、本記事のさらに踏み込んだ 「深層アーキテクチャ解説」「主要パラメータの技術的根拠」「現場アンチパターン・トラブルシューティング対応表」 は、以下のGitHub技術リファレンスにて公開しています。
👉 【第25弾 詳細技術リファレンス (QIITA_ARTICLE_DETAIL_25.md)】
⭐ 全14層・200パターンの自立型インフラ&オンプレAIリファレンス集(おじさんの武器庫)を順次公開中です。ぜひGitHubリポジトリへの Star (★) と X (@OjisanTechnical) のフォローもお願いいたします!
👉 GitHub リポジトリ: ojisantech/ojisan-arsenal
💡 【検証環境・個人研究(PoC)に関する注記】
本記事は、筆者個人の自宅検証環境(ホームラボ/仮想環境)において、公開情報およびOSS(オープンソースソフトウェア)を用いて独自に構築・検証した個人研究(PoC)の記録です。特定の企業・団体の実環境や業務上の非公開情報とは一切関係ありません。