mcpField
I
investigating-insider-threat-indicators

investigating-insider-threat-indicators

github.com/mukul975安全35.2k36 次安装8 周前更新
代码仓库

关于 investigating-insider-threat-indicators

面向安全团队的内部威胁调查技能,使用 SIEM、DLP、终端、邮件和访问日志开展经授权的调查。协助构建活动时间线、识别疑似数据外传或异常访问,并在法律与 HR 协调下保存证据。

主要功能

  1. 01调查范围与授权规划
  2. 02SIEM 活动时间线分析
  3. 03数据外传指标检测
  4. 04访问异常分析
  5. 05关联 HR 与物理门禁记录
  6. 06证据保全与报告

适用场景

  1. 01审查离职员工的活动
  2. 02调查批量下载或传输
  3. 03核查超出岗位职责的访问
  4. 04为调查记录证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill investigating-insider-threat-indicators

安装后在 Claude Code 中输入/investigating-insider-threat-indicators确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

调查内部威胁指标

何时使用

在以下情况下使用此技能:

  • HR 移交一名即将离职的员工,要求在其通知期内进行监控
  • DLP 告警显示大量数据下载或向个人存储位置的传输
  • UEBA 检测到与同岗位基准显著偏离的异常访问模式
  • 管理层报告称担心某员工访问其职责范围之外的敏感数据

不要在未获得适当法律授权的情况下使用——内部威胁调查必须在监控开始前与 HR、法务和隐私团队协调进行。

前提条件

  • 法律授权和 HR 移交文件,记录调查的正当理由
  • 具备 DLP、终端、电子邮件、代理和身份验证日志来源的 SIEM
  • 带有策略告警的数据丢失防护(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数据丢失防护——基于内容策略监控并阻止未经授权数据传输的技术
通知期监控在员工从提出辞职到离开的时间窗口内对其进行加强监控
保管链记录在案的证据处理程序,确保在可能的法律诉讼中保持取证完整性
知需违规访问超出员工职责或当前任务所需的信息或系统

工具与系统

  • Microsoft Purview(原 DLP):数据分类和丢失防护平台,监控终端、电子邮件和云存储
  • Splunk UBA:通过基于 ML 的异常检测识别内部威胁模式的用户行为分析系统
  • Forcepoint Insider Threat:专门的内部威胁检测平台,具备行为指标和风险评分
  • DTEX InTERCEPT:基于终端的内部威胁检测,专注于用户活动元数据收集
  • Code42 Incydr:数据风险检测平台,专门监控跨终端和云的文件外泄

常见场景

  • 即将离职的员工:在两周通知期内大量下载客户名单和产品路线图
  • 心怀不满的员工:在负面绩效评估后,该员工访问其职责范围之外的高管薪资数据
  • 承包商越权:外部顾问访问合同范围之外的系统,下载源代码
  • 账户滥用:员工与未经授权的第三方共享凭据以获取竞争情报
  • 破坏指标: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