investigating-insider-threat-indicators について
SIEM、DLP、エンドポイント、メール、アクセスログを用いて、正式な承認のもとで内部脅威を調査するスキルです。セキュリティチームが活動の時系列を作成し、情報持ち出しや異常アクセスの兆候を調べ、法務・人事と連携して証拠を保全できます。
主な機能
- 01調査範囲と承認の計画
- 02SIEM 活動タイムラインの分析
- 03情報持ち出し兆候の検出
- 04アクセス異常の分析
- 05人事・物理アクセス記録との照合
- 06証拠保全と報告書作成
活用シーン
- 01退職予定者の活動確認
- 02大量ダウンロードや転送の調査
- 03職務範囲外のアクセス確認
- 04調査用証拠の記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill investigating-insider-threat-indicatorsインストール後、Claude Code で/investigating-insider-threat-indicatorsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
内部脅威の兆候の調査
使用するタイミング
このスキルは次のような場合に使用します:
- HR が退職予定の従業員を、通知期間中の監視対象として照会してきた場合
- DLP アラートが、大量のデータダウンロードや個人用ストレージへの転送を示している場合
- UEBA が、同僚のベースラインから大きく逸脱した異常なアクセスパターンを検出した場合
- 管理部門から、従業員が職務範囲外の機密データにアクセスしているという懸念が報告された場合
適切な法的承認なしに使用しないでください。 内部脅威の調査は、監視を開始する前に HR、法務、プライバシーの各チームと調整する必要があります。
前提条件
- 調査の正当性を文書化した法的承認と HR からの照会
- DLP、エンドポイント、メール、プロキシ、認証のログソースを備えた SIEM
- ポリシーアラートを備えた Data Loss Prevention (DLP) システム(Microsoft Purview、Symantec、Forcepoint など)
- エンドポイント監視機能(USB/リムーバブルメディアのログ記録に対応した EDR)
- 雇用状況、通知日、アクセス権限を提供する HR データフィード
- 証拠保全のための証拠保管連鎖(チェーン・オブ・カストディ)の手順
ワークフロー
ステップ 1: 調査の範囲と法的承認を確立する
監視を開始する前に、適切な承認が得られていることを確認します:
INSIDER THREAT INVESTIGATION AUTHORIZATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Case ID: IT-2024-0089
Subject: [Employee Name] — [Department]
Authorized By: [CISO / General Counsel]
Referral Source: HR — Employee submitted resignation, 2-week notice
Justification: Employee has access to trade secrets and customer PII
Scope: Email, file access, USB, cloud storage, printing
Duration: 2024-03-15 to 2024-03-29 (notice period)
Privacy Review: Completed — compliant with acceptable use policy
ステップ 2: SIEM から活動のタイムラインを構築する
対象者の包括的な活動を照会します:
index=* (user="jsmith" OR src_user="jsmith" OR sender="[email protected]"
OR SubjectUserName="jsmith")
earliest="2024-03-01" latest=now
| eval event_category = case(
sourcetype LIKE "%dlp%", "DLP",
sourcetype LIKE "%proxy%", "Web Access",
sourcetype LIKE "%email%", "Email",
sourcetype LIKE "%WinEventLog%", "Endpoint",
sourcetype LIKE "%o365%", "Cloud",
sourcetype LIKE "%vpn%", "VPN",
sourcetype LIKE "%badge%", "Physical Access",
1=1, sourcetype
)
| stats count by event_category, sourcetype, _time
| timechart span=1d count by event_category
ステップ 3: データ流出の兆候を検出する
大量のファイルダウンロード (SharePoint/OneDrive):
index=o365 sourcetype="o365:management:activity" Operation IN ("FileDownloaded", "FileSynced")
UserId="[email protected]" earliest=-30d
| stats count AS downloads, sum(eval(if(isnotnull(FileSize), FileSize, 0))) AS total_bytes,
dc(SourceFileName) AS unique_files
by UserId, SiteUrl, _time
| bin _time span=1d
| eval total_gb = round(total_bytes / 1073741824, 2)
| where downloads > 50 OR total_gb > 1
| sort - total_gb
USB/リムーバブルメディアの使用:
index=sysmon EventCode=1 Computer="WORKSTATION-JSMITH"
(CommandLine="*removable*" OR CommandLine="*usb*"
OR Image="*\\xcopy*" OR Image="*\\robocopy*")
| table _time, Computer, User, Image, CommandLine
| append [
search index=endpoint sourcetype="endpoint:device_connect"
user="jsmith" device_type="removable"
| table _time, user, device_name, device_serial, action
]
| sort _time
メールによる流出:
index=email sourcetype="o365:messageTrace"
SenderAddress="[email protected]"
| eval is_external = if(match(RecipientAddress, "@company\.com$"), 0, 1)
| eval has_attachment = if(isnotnull(AttachmentName), 1, 0)
| stats count AS total_emails,
sum(is_external) AS external_emails,
sum(has_attachment) AS with_attachments,
sum(eval(if(is_external=1 AND has_attachment=1, 1, 0))) AS external_with_attach,
sum(Size) AS total_size_bytes
by SenderAddress
| eval external_attach_pct = round(external_with_attach / total_emails * 100, 1)
| eval total_size_mb = round(total_size_bytes / 1048576, 1)
クラウドストレージへのアップロードの検出:
index=proxy user="jsmith"
(dest IN ("*dropbox.com", "*drive.google.com", "*onedrive.live.com",
"*box.com", "*wetransfer.com", "*mega.nz")
OR category="cloud-storage")
http_method=POST
| stats count AS uploads, sum(bytes_out) AS total_uploaded
by user, dest, category
| eval uploaded_mb = round(total_uploaded / 1048576, 1)
| sort - uploaded_mb
ステップ 4: アクセスパターンの異常を分析する
通常の範囲外の機密システムへのアクセス:
index=auth user="jsmith" action=success earliest=-30d
| stats dc(app) AS unique_apps, values(app) AS apps_accessed by user
| join user type=left [
| inputlookup role_app_mapping.csv
| search role="Financial Analyst"
| stats values(authorized_app) AS authorized_apps by role
| eval user="jsmith"
]
| eval unauthorized = mvfilter(NOT match(apps_accessed, mvjoin(authorized_apps, "|")))
| where isnotnull(unauthorized)
| table user, unauthorized, authorized_apps
営業時間外および週末の活動:
index=* user="jsmith" earliest=-30d
| eval hour = tonumber(strftime(_time, "%H"))
| eval is_offhours = if(hour < 7 OR hour > 19, 1, 0)
| eval day = strftime(_time, "%A")
| eval is_weekend = if(day IN ("Saturday", "Sunday"), 1, 0)
| stats count AS total, sum(is_offhours) AS offhours, sum(is_weekend) AS weekend by user
| eval offhours_pct = round(offhours / total * 100, 1)
| eval weekend_pct = round(weekend / total * 100, 1)
ステップ 5: HR および物理セキュリティのデータと突き合わせる
活動を退職の時系列と比較する:
| makeresults
| eval user="jsmith",
resignation_date="2024-03-15",
last_day="2024-03-29",
access_revocation="2024-03-29 17:00"
| join user [
search index=* user="jsmith" earliest=-90d
| bin _time span=1d
| stats count AS daily_events, dc(sourcetype) AS data_sources by user, _time
]
| eval phase = case(
_time < relative_time(now(), "-30d"), "Normal (Pre-Resignation)",
_time >= strptime(resignation_date, "%Y-%m-%d") AND _time <= strptime(last_day, "%Y-%m-%d"),
"Notice Period",
1=1, "Transition"
)
| chart avg(daily_events) AS avg_events by phase
バッジ/物理アクセスとの突き合わせ:
index=badge_access employee_id="jsmith" earliest=-30d
| stats count AS badge_events, values(door_name) AS doors_accessed,
earliest(_time) AS first_badge, latest(_time) AS last_badge by employee_id
| eval areas = mvcount(doors_accessed)
ステップ 6: 証拠を保全し、調査結果を文書化する
収集したすべての証拠について証拠保管連鎖を維持します:
import hashlib
import json
from datetime import datetime
evidence_log = {
"case_id": "IT-2024-0089",
"investigator": "soc_analyst_tier2",
"collection_time": datetime.utcnow().isoformat(),
"items": [
{
"item_id": "EV-001",
"description": "Splunk export — all user activity 2024-03-01 to 2024-03-15",
"file": "jsmith_activity_export.csv",
"sha256": hashlib.sha256(open("jsmith_activity_export.csv", "rb").read()).hexdigest(),
"collected_by": "analyst_doe",
"collection_method": "Splunk search export"
},
{
"item_id": "EV-002",
"description": "DLP alert details — 47 policy violations",
"file": "dlp_alerts_jsmith.json",
"sha256": hashlib.sha256(open("dlp_alerts_jsmith.json", "rb").read()).hexdigest(),
"collected_by": "analyst_doe",
"collection_method": "Microsoft Purview export"
}
]
}
with open(f"evidence_log_{evidence_log['case_id']}.json", "w") as f:
json.dump(evidence_log, f, indent=2)
主要な概念
| 用語 | 定義 |
|---|---|
| 内部脅威 | 正当なアクセス権を持つ個人が、そのアクセスを不正な目的で悪用することによって生じるリスク |
| データ流出 | メール、USB、クラウド、その他のチャネルを介した、組織外へのデータの不正な転送 |
| DLP | Data Loss Prevention — コンテンツポリシーに基づいて不正なデータ転送を監視・ブロックする技術 |
| 通知期間の監視 | 退職の意思表示から退社までの期間における、退職予定従業員への強化された監視 |
| 証拠保管連鎖 (Chain of Custody) | 法的手続きに備え、フォレンジックの完全性を確保するための、文書化された証拠の取り扱い手順 |
| Need-to-Know 違反 | 従業員の職務や現在の業務に必要な範囲を超えて、情報やシステムにアクセスすること |
ツールとシステム
- Microsoft Purview (旧 DLP): エンドポイント、メール、クラウドストレージを監視するデータ分類および情報漏えい防止プラットフォーム
- Splunk UBA: ML ベースの異常検知により内部脅威のパターンを検出するユーザー行動分析ツール
- Forcepoint Insider Threat: 行動指標とリスクスコアリングを備えた専用の内部脅威検知プラットフォーム
- DTEX InTERCEPT: ユーザー活動のメタデータ収集に重点を置いた、エンドポイントベースの内部脅威検知ツール
- Code42 Incydr: エンドポイントおよびクラウド全体におけるファイル流出の監視を専門とするデータリスク検知プラットフォーム
一般的なシナリオ
- 退職予定の従業員: 2 週間の通知期間中に、顧客リストや製品ロードマップを大量にダウンロードする
- 不満を抱えた従業員: 業績評価の結果に不満を持ち、職務範囲外の役員報酬データにアクセスする
- 請負業者の権限逸脱: 外部コンサルタントが契約範囲を超えてシステムにアクセスし、ソースコードをダウンロードする
- アカウントの不正利用: 従業員が競合情報収集のために、認証情報を権限のない第三者と共有する
- 妨害行為の兆候: IT 管理者が退職前にバックドアアカウントを作成し、システム設定を変更する
Output Format
INSIDER THREAT INVESTIGATION REPORT — IT-2024-0089
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Subject: jsmith (Financial Analyst, Finance Dept)
Period: 2024-03-01 to 2024-03-15
Status: Employee resigned 2024-03-15, last day 2024-03-29
Key Findings:
[HIGH] 3,847 files downloaded from SharePoint (12.4 GB) — 10x peer average
[HIGH] USB device connected 14 times during notice period (0 times prior month)
[HIGH] 187 emails with attachments sent to personal Gmail
[MEDIUM] After-hours activity increased 340% during notice period
[MEDIUM] Accessed HR salary database 3 times (not authorized for role)
Timeline:
Mar 01-14: Normal activity baseline (avg 150 events/day)
Mar 15: Resignation submitted (activity spike to 890 events)
Mar 16-17: Weekend access — 2,100 SharePoint downloads
Mar 18: USB device first connected, DLP alert triggered
Evidence Collected: 4 items (SHA-256 verified, chain of custody documented)
Recommendation: Immediate access revocation recommended
Evidence package prepared for Legal review
コメント
Markdown 対応