0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

野良アプリの勝手インストールをあぶり出す。WindowsとLinuxからインストール済み全アプリをエージェントレス抽出し台帳化するスクリプト

0
Last updated at Posted at 2026-10-31

はじめに:情シスを震え上がらせる「ライセンス監査」と「勝手アプリ」

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アプリを拾い損ねます。

  1. HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall (64bit システム全体)
  2. HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall (32bit システム全体)
  3. HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall (ユーザー個別)
  4. 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)の記録です。特定の企業・団体の実環境や業務上の非公開情報とは一切関係ありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?