analyzing-malware-persistence-with-autoruns について
Sysinternals AutorunsとAutorunscでWindowsのマルウェア永続化を調査するスキルです。自動起動箇所のスキャン、署名済み項目の絞り込み、クリーンなベースラインとの比較、ファイル評価の確認を扱います。
主な機能
- 01Windowsの自動起動箇所をスキャン
- 02未署名や不審な項目を抽出
- 03ベースラインと結果を比較
- 04VirusTotalでハッシュを確認
- 05ディスクイメージをオフライン分析
活用シーン
- 01インシデント対応で永続化を調査
- 02新たに追加された自動起動機構を発見
- 03永続化手法に対する監視範囲を検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill analyzing-malware-persistence-with-autorunsインストール後、Claude Code で/analyzing-malware-persistence-with-autorunsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.py詳細
Autorunsを使用したマルウェアの永続化の分析
概要
Sysinternals Autorunsは、Windows上の数百に及ぶ自動起動拡張ポイント(ASEP)からデータを抽出します。Run/RunOnceキー、サービス、スケジュールされたタスク、ドライバー、Winlogonエントリ、LSAプロバイダー、印刷モニター、WMIサブスクリプション、AppInit DLLなど、18以上のカテゴリをスキャンします。デジタル署名の検証により、Microsoft署名済みのエントリを除外できます。比較機能では、ベースラインとの差分を取って新たに追加された永続化項目を特定できます。VirusTotalとの連携により、ハッシュの評価を確認できます。-zフラグを使ったオフライン分析では、フォレンジック用のディスクイメージを調査できます。
使用する場面
- Autorunsを使用してマルウェアの永続化を分析する必要があるセキュリティインシデントを調査する場合
- この分野の検知ルールや脅威ハンティング用クエリを作成する場合
- SOCアナリストがこの種の分析に向けた体系的な手順を必要とする場合
- 関連する攻撃手法に対するセキュリティ監視の範囲を検証する場合
前提条件
- Sysinternals Autoruns(GUI)とAutorunsc(CLI)
- 対象システムの管理者権限
- 自動分析用のPython 3.9+
- 評価の確認に使用するVirusTotal APIキー
- 比較用のクリーンなベースラインのエクスポート
ワークフロー
ステップ 1:永続化の自動スキャン
#!/usr/bin/env python3
"""Automate Autoruns-based persistence analysis."""
import subprocess
import csv
import json
import sys
def scan_and_analyze(autorunsc_path="autorunsc64.exe", csv_path="scan.csv"):
cmd = [autorunsc_path, "-a", "*", "-c", "-h", "-s", "-nobanner", "*"]
result = subprocess.run(cmd, capture_output=True, text=True, timeout=600)
with open(csv_path, 'w') as f:
f.write(result.stdout)
return parse_and_flag(csv_path)
def parse_and_flag(csv_path):
suspicious = []
with open(csv_path, 'r', errors='replace') as f:
for row in csv.DictReader(f):
reasons = []
signer = row.get("Signer", "")
if not signer or signer == "(Not verified)":
reasons.append("Unsigned binary")
if not row.get("Description") and not row.get("Company"):
reasons.append("Missing metadata")
path = row.get("Image Path", "").lower()
for sp in ["\temp\\", "\appdata\local\temp", "\users\public\\"]:
if sp in path:
reasons.append(f"Suspicious path")
launch = row.get("Launch String", "").lower()
for kw in ["powershell", "cmd /c", "wscript", "mshta", "regsvr32"]:
if kw in launch:
reasons.append(f"LOLBin: {kw}")
if reasons:
row["reasons"] = reasons
suspicious.append(row)
return suspicious
if __name__ == "__main__":
if len(sys.argv) > 1:
results = parse_and_flag(sys.argv[1])
print(f"[!] {len(results)} suspicious entries")
for r in results:
print(f" {r.get('Entry','')} - {r.get('Image Path','')}")
for reason in r.get('reasons', []):
print(f" - {reason}")
検証基準
- すべてのASEPカテゴリがスキャンされ、カタログ化されている
- 署名のないエントリに調査用のフラグが付けられている
- 不審なパスとLOLBinの起動文字列が強調表示されている
- ベースラインとの比較により、新たな永続化の仕組みが特定されている
参考資料
コメント
Markdown 対応