detecting-ransomware-precursors-in-network

在加密开始前检测网络流量中的勒索软件早期指标,包括初始访问经纪人(IAB)活动、 命令与控制(C2)信标、凭据收集、侦察扫描和暂存行为。使用网络检测工具(Zeek、Suricata、Arkime)、 SIEM 关联规则和威胁情报订阅,识别 Cobalt Strike 信标、Mimikatz 网络特征和 RDP 暴力破解等 勒索软件前驱模式。适合涉及勒索软件前驱检测、基于网络的勒索软件指标或早期预警监控的相关请求。

9 stars

Best use case

detecting-ransomware-precursors-in-network is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

在加密开始前检测网络流量中的勒索软件早期指标,包括初始访问经纪人(IAB)活动、 命令与控制(C2)信标、凭据收集、侦察扫描和暂存行为。使用网络检测工具(Zeek、Suricata、Arkime)、 SIEM 关联规则和威胁情报订阅,识别 Cobalt Strike 信标、Mimikatz 网络特征和 RDP 暴力破解等 勒索软件前驱模式。适合涉及勒索软件前驱检测、基于网络的勒索软件指标或早期预警监控的相关请求。

Teams using detecting-ransomware-precursors-in-network should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/detecting-ransomware-precursors-in-network/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/detecting-ransomware-precursors-in-network/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/detecting-ransomware-precursors-in-network/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How detecting-ransomware-precursors-in-network Compares

Feature / Agentdetecting-ransomware-precursors-in-networkStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

在加密开始前检测网络流量中的勒索软件早期指标,包括初始访问经纪人(IAB)活动、 命令与控制(C2)信标、凭据收集、侦察扫描和暂存行为。使用网络检测工具(Zeek、Suricata、Arkime)、 SIEM 关联规则和威胁情报订阅,识别 Cobalt Strike 信标、Mimikatz 网络特征和 RDP 暴力破解等 勒索软件前驱模式。适合涉及勒索软件前驱检测、基于网络的勒索软件指标或早期预警监控的相关请求。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 检测网络中的勒索软件前驱活动

## 适用场景

- 为勒索软件部署前的网络活动构建检测规则(从 Cobalt Strike 部署到加密开始平均只需 17 分钟)
- 监控初始访问经纪人(IAB)指标,这些指标往往先于勒索软件部署出现
- 创建 SIEM 关联规则,将多个前驱事件链接为高置信度告警
- 调优网络检测系统,区分勒索软件暂存行为与正常管理操作
- 调查可能表明勒索软件操作者已建立立足点的可疑网络流量模式

**不适用场景**:不适用于加密后的响应处置(参见 recovering-from-ransomware-attack)。本技能专注于加密前的检测窗口期,此时遏制措施可以防止数据损失。

## 前置条件

- 网络检测平台(Zeek/Bro、Suricata 或 Arkime/Moloch)部署在网络 TAP 或 SPAN 端口
- SIEM 平台(Splunk、Elastic Security、Microsoft Sentinel 或 QRadar)接入网络日志
- 覆盖勒索软件 IOC 的威胁情报订阅(CISA、abuse.ch、OTX、MISP)
- 来自核心路由器和防火墙的网络流量数据(NetFlow/IPFIX)
- 来自内部解析器的 DNS 查询日志
- 用于事件调查的全量抓包能力

## 工作流程

### 步骤 1:识别网络流量中的勒索软件杀伤链阶段

将可网络观测的指标映射到各个加密前阶段:

| 杀伤链阶段 | 网络指标 | 检测来源 |
|-----------|---------|---------|
| 初始访问 | RDP 暴力破解、VPN 凭据填充、钓鱼回调 | 防火墙日志、IDS、代理日志 |
| C2 建立 | Cobalt Strike 信标(HTTPS/DNS)、Sliver/Brute Ratel 回调 | Zeek SSL/HTTP 日志、DNS 日志 |
| 凭据收集 | NTLM 中继、Kerberoasting、DCSync 流量 | Zeek Kerberos/NTLM 日志、DC 日志 |
| 侦察 | 内部端口扫描、AD 枚举(LDAP/SMB) | Zeek conn.log、流量数据 |
| 横向移动 | PsExec/WMI/WinRM 流量、RDP 跳板、SMB 文件复制 | Zeek SMB/DCE-RPC 日志 |
| 暂存 | 数据聚合、压缩包创建、云上传准备 | 代理日志、DNS 日志、DLP |

### 步骤 2:部署网络检测规则

**Suricata 常见勒索软件前驱规则:**

```yaml
# 检测 Cobalt Strike 默认 HTTPS 信标配置文件
alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:"RANSOMWARE PRECURSOR - Cobalt Strike Default TLS Certificate"; tls.cert_subject; content:"Major Cobalt Strike"; sid:3000001; rev:1;)

# Cobalt Strike DNS 信标
alert dns $HOME_NET any -> any 53 (msg:"RANSOMWARE PRECURSOR - Cobalt Strike DNS Beacon Pattern"; dns.query; pcre:"/^[a-z0-9]{3}\.[a-z]{4,8}\./"; threshold:type both, track by_src, count 50, seconds 60; sid:3000002; rev:1;)

# Mimikatz 网络特征(DCSync - DRS GetNCChanges)
alert tcp $HOME_NET any -> $HOME_NET 135 (msg:"RANSOMWARE PRECURSOR - Possible DCSync/Mimikatz"; content:"|05 00 0b|"; offset:0; depth:3; content:"|e3 51 4d 2b 4b 47 15 d2|"; sid:3000003; rev:1;)

# 内部网络扫描(大量连接,少量字节)
alert tcp $HOME_NET any -> $HOME_NET any (msg:"RANSOMWARE PRECURSOR - Internal Port Scan"; flags:S; threshold:type both, track by_src, count 100, seconds 10; sid:3000004; rev:1;)

# SMB 上 PsExec 服务安装
alert tcp $HOME_NET any -> $HOME_NET 445 (msg:"RANSOMWARE PRECURSOR - PsExec Service Install"; content:"|ff|SMB"; content:"PSEXESVC"; nocase; sid:3000005; rev:1;)

# 内部主机 RDP 暴力破解(横向移动)
alert tcp $HOME_NET any -> $HOME_NET 3389 (msg:"RANSOMWARE PRECURSOR - Internal RDP Brute Force"; flow:to_server,established; threshold:type both, track by_src, count 20, seconds 60; sid:3000006; rev:1;)

# 大型 SMB 文件传输(数据暂存)
alert tcp $HOME_NET any -> $HOME_NET 445 (msg:"RANSOMWARE PRECURSOR - Large SMB Transfer Possible Staging"; flow:to_server,established; dsize:>60000; threshold:type both, track by_src, count 100, seconds 300; sid:3000007; rev:1;)
```

**Zeek 行为检测脚本:**

```zeek
# detect_ransomware_precursors.zeek
# 检测大量 SMB 连接失败(凭据测试)

@load base/protocols/smb

module RansomwarePrecursor;

export {
    redef enum Notice::Type += {
        SMB_Brute_Force,
        Suspicious_Internal_Scan,
        Excessive_DNS_Queries,
        SMB_Admin_Share_Access,
    };

    const smb_fail_threshold = 10 &redef;
    const scan_threshold = 50 &redef;
    const dns_query_threshold = 200 &redef;
}

global smb_fail_count: table[addr] of count &default=0 &create_expire=5min;
global conn_count: table[addr] of set[addr] &create_expire=1min;

event smb2_message(c: connection, hdr: SMB2::Header, is_orig: bool) {
    if (hdr$status != 0) {
        ++smb_fail_count[c$id$orig_h];
        if (smb_fail_count[c$id$orig_h] >= smb_fail_threshold) {
            NOTICE([$note=SMB_Brute_Force,
                    $msg=fmt("Host %s has %d failed SMB attempts", c$id$orig_h, smb_fail_count[c$id$orig_h]),
                    $src=c$id$orig_h,
                    $identifier=cat(c$id$orig_h)]);
        }
    }
}

event new_connection(c: connection) {
    if (c$id$orig_h in Site::local_nets && c$id$resp_h in Site::local_nets) {
        if (c$id$orig_h !in conn_count)
            conn_count[c$id$orig_h] = set();
        add conn_count[c$id$orig_h][c$id$resp_h];
        if (|conn_count[c$id$orig_h]| >= scan_threshold) {
            NOTICE([$note=Suspicious_Internal_Scan,
                    $msg=fmt("Host %s connected to %d internal hosts in 1 min", c$id$orig_h, |conn_count[c$id$orig_h]|),
                    $src=c$id$orig_h,
                    $identifier=cat(c$id$orig_h)]);
        }
    }
}
```

### 步骤 3:创建 SIEM 关联规则

**Splunk 勒索软件前驱链关联:**

```spl
| tstats count FROM datamodel=Network_Traffic
  WHERE earliest=-24h All_Traffic.dest_port IN (445, 135, 139, 3389, 5985, 5986)
    AND All_Traffic.src_ip IN 10.0.0.0/8
    AND All_Traffic.dest_ip IN 10.0.0.0/8
  BY All_Traffic.src_ip, All_Traffic.dest_port, _time span=1h
| stats dc(All_Traffic.dest_port) as port_count,
        values(All_Traffic.dest_port) as ports,
        count as total_conns
  BY All_Traffic.src_ip
| where port_count >= 3 AND total_conns > 50
| rename All_Traffic.src_ip as src_ip
| lookup threat_intel_ioc ip as src_ip OUTPUT threat_type
| eval risk_score = case(
    port_count >= 5 AND total_conns > 200, "CRITICAL",
    port_count >= 3 AND total_conns > 50, "HIGH",
    1=1, "MEDIUM")
| table src_ip, ports, port_count, total_conns, risk_score, threat_type
```

**Microsoft Sentinel KQL - 勒索软件前驱关联:**

```kql
let timeframe = 24h;
let RDPBruteForce = SecurityEvent
| where TimeGenerated > ago(timeframe)
| where EventID == 4625
| where LogonType == 10
| summarize FailedRDP = count() by TargetAccount, IpAddress, bin(TimeGenerated, 1h)
| where FailedRDP > 10;
let SuspiciousSMB = SecurityEvent
| where TimeGenerated > ago(timeframe)
| where EventID == 5145
| where ShareName has "ADMIN$" or ShareName has "C$" or ShareName has "IPC$"
| summarize AdminShareAccess = count() by SubjectUserName, IpAddress, bin(TimeGenerated, 1h)
| where AdminShareAccess > 5;
let ServiceInstalls = SecurityEvent
| where TimeGenerated > ago(timeframe)
| where EventID == 7045
| where ServiceName has_any ("PSEXESVC", "meterpreter", "beacon");
RDPBruteForce
| join kind=inner SuspiciousSMB on IpAddress
| project TimeGenerated, IpAddress, TargetAccount, FailedRDP, SubjectUserName, AdminShareAccess
| extend AlertTitle = "Ransomware Precursor: RDP Brute Force + Admin Share Access"
```

### 步骤 4:集成威胁情报

配置已知勒索软件基础设施的自动 IOC 订阅:

```bash
# 下载并更新勒索软件 C2 封锁列表
# abuse.ch Feodo Tracker(Cobalt Strike、TrickBot、BazarLoader C2)
curl -s https://feodotracker.abuse.ch/downloads/ipblocklist.csv | \
  grep -v "^#" | cut -d, -f2 > /opt/threat-intel/feodo_ips.txt

# abuse.ch URLhaus(恶意软件分发 URL)
curl -s https://urlhaus.abuse.ch/downloads/csv_recent/ | \
  grep -v "^#" | cut -d, -f3 > /opt/threat-intel/urlhaus_urls.txt

# abuse.ch ThreatFox(勒索软件 IOC)
curl -s https://threatfox.abuse.ch/export/csv/recent/ | \
  grep -i "ransomware" | cut -d, -f3 > /opt/threat-intel/ransomware_iocs.txt

# CISA 已知被利用漏洞(初始访问向量)
curl -s https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json | \
  python3 -c "import json,sys; data=json.load(sys.stdin); [print(v['cveID'],v['vendorProject'],v['product']) for v in data['vulnerabilities'] if 'ransomware' in v.get('knownRansomwareCampaignUse','').lower()]"
```

### 步骤 5:建立告警分类和上报流程

根据前驱置信度定义分类流程:

| 告警类型 | 置信度 | 响应时间 | 处置措施 |
|---------|--------|---------|---------|
| 已确认 Cobalt Strike 信标 | 高 | 15 分钟 | 立即隔离主机,触发 IR |
| 非 DC 发起的 DCSync/Kerberoasting | 高 | 15 分钟 | 禁用账户,隔离主机,触发 IR |
| 内部端口扫描 + 管理共享访问 | 中高 | 30 分钟 | 调查源主机,检查 EDR 遥测数据 |
| 内部主机 RDP 暴力破解 | 中 | 1 小时 | 确认是否为合法管理操作,检查主机 |
| 异常 DNS 查询量 | 低中 | 4 小时 | 检查 DNS 隧道,与其他告警关联分析 |

## 核心概念

| 术语 | 定义 |
|------|------|
| **勒索软件前驱(Ransomware Precursor)** | 勒索软件加密前的网络活动,包括 C2 通信、横向移动和数据暂存 |
| **驻留时间(Dwell Time)** | 从初始入侵到勒索软件部署的时间,平均 21 天,但有时短至 17 分钟 |
| **初始访问经纪人(IAB)** | 在暗网市场向勒索软件运营者出售已入侵网络访问权限的威胁行为者 |
| **信标(Beaconing)** | 植入物(Cobalt Strike、Sliver)定期向 C2 回调,通过分析连接时序模式可检测 |
| **Kerberoasting** | 请求 Kerberos 服务票据进行离线破解的凭据收集技术,可通过异常 TGS-REQ 模式检测 |
| **DCSync** | 使用目录复制服务从域控制器提取密码哈希的技术,是勒索软件的关键前驱指标 |

## 工具与系统

- **Zeek(原 Bro)**:网络分析框架,为 SMB、Kerberos、DNS、HTTP 和 TLS 连接生成结构化日志
- **Suricata**:高性能 IDS/IPS,支持协议分析和多线程,用于勒索软件特征检测
- **Arkime(原 Moloch)**:全量抓包与检索平台,用于网络事件的深度取证调查
- **RITA(Real Intelligence Threat Analytics)**:开源工具,检测 Zeek 日志中的信标行为、DNS 隧道和长连接
- **AC-Hunter**:Active Countermeasures 的网络威胁狩猎平台,用于信标检测和 C2 识别

## 常见场景

### 场景:检测制造业网络中的 LockBit 前驱活动

**背景**:一家制造企业的 SOC 收到来自工程部门工作站(10.1.5.42)异常 SMB 流量的告警。该工作站在凌晨 2:00 的 5 分钟内连接了 47 台内部主机的 445 端口。

**分析步骤**:
1. Zeek conn.log 分析显示 10.1.5.42 在 01:55-02:05 间对 47 个唯一内部 IP 的 445、135 和 3389 端口发起连接
2. Zeek ssl.log 发现每 60 秒向 185.x.x.x 发送一次包含固定 48 字节载荷的出站 HTTPS 连接(Cobalt Strike 信标模式)
3. RITA 信标分析确认该外部 IP 的信标评分极高(0.96),抖动间隔 60 秒
4. Zeek kerberos.log 显示 10.1.5.42 对多个 SPN 账户发起 TGS-REQ(Kerberoasting)
5. SMB tree_connect 事件显示在 12 台主机上访问了 ADMIN$ 共享(横向移动暂存)
6. 遏制措施:隔离主机,重置工程用户凭据,部署 C2 IP 封锁规则
7. 在勒索软件部署前完成全面 IR 响应

**注意事项**:
- 不要在未确认源头是否为授权扫描器的情况下,将内部端口扫描视为漏洞扫描器活动而忽视
- 不要孤立地处理单个低严重度告警(DNS 异常 + SMB 访问 + 登录失败),应关联为高严重度事件链
- 不要为避免误报而将检测阈值设置过高,从而遗漏低速侦察活动
- 不要忽视加密流量分析(JA3/JA4 指纹),即使在 TLS 隧道中也能识别 Cobalt Strike

## 输出格式

```
## 勒索软件前驱检测告警

**告警 ID**:[SIEM 生成的 ID]
**检测时间**:[时间戳]
**源主机**:[IP / 主机名]
**置信度**:[高 / 中 / 低]
**杀伤链阶段**:[初始访问 / C2 / 凭据收集 / 侦察 / 横向移动 / 暂存]

### 已检测指标
| 指标 | 来源 | 详情 | MITRE ATT&CK |
|------|------|------|--------------|
| [类型] | [Zeek/Suricata/SIEM] | [描述] | [T-ID] |

### 关联事件链
1. [时间戳] - [事件 1]
2. [时间戳] - [事件 2]
3. [时间戳] - [事件 3]

### 建议处置措施
- [ ] 将源主机从网络隔离
- [ ] 检查主机上的 EDR 遥测数据
- [ ] 重置受影响用户账户的凭据
- [ ] 封锁已识别的 C2 基础设施
- [ ] 上报至事件响应团队
```

Related Skills

scanning-network-with-nmap-advanced

9
from killvxk/cybersecurity-skills-zh

使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。

reverse-engineering-ransomware-encryption-routine

9
from killvxk/cybersecurity-skills-zh

对勒索软件加密例程进行逆向工程,以识别密码学算法、密钥生成缺陷,以及通过静态和动态分析挖掘潜在的解密机会。

recovering-from-ransomware-attack

9
from killvxk/cybersecurity-skills-zh

按照 NIST 和 CISA 框架执行结构化勒索软件事件恢复,包括环境隔离、取证证据保全、 干净基础设施重建、从已验证备份优先还原系统、凭据重置,以及针对再感染的验证。 涵盖 Active Directory 恢复、数据库还原和按依赖顺序重建应用栈。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-ransomware-tabletop-exercise

9
from killvxk/cybersecurity-skills-zh

规划并主持模拟勒索软件(Ransomware)事件的桌面推演,以测试组织的应急准备、决策能力和通信流程。基于当前勒索软件威胁行为者(LockBit、ALPHV/BlackCat、Cl0p)设计真实场景,涵盖双重勒索(Double Extortion)、备份销毁和法规通知要求等注入内容。依据 NIST CSF 和 CISA 指南评估参与者响应。适用于勒索软件桌面推演、事件响应演练或勒索软件应急准备演习等请求。

performing-ransomware-response

9
from killvxk/cybersecurity-skills-zh

执行结构化的勒索软件事件响应,从初始检测到遏制、取证分析、解密评估、恢复和事后加固。 处理勒索谈判考量、备份完整性验证和法规通知要求。适用于勒索软件响应、 勒索软件恢复、加密勒索软件、数据加密攻击、赎金支付决策或勒索软件遏制等请求场景。

performing-ransomware-incident-response

9
from killvxk/cybersecurity-skills-zh

执行结构化的勒索软件事件响应,包括遏制、解密评估、从备份恢复以及根除勒索软件持久化机制。

performing-ot-network-security-assessment

9
from killvxk/cybersecurity-skills-zh

本技能涵盖对运营技术(OT)网络(包括SCADA系统、DCS架构和工业控制系统通信路径)进行全面安全评估。内容涉及Purdue参考模型各层、识别IT/OT融合风险、评估区域间防火墙规则,以及映射工业协议流量(Modbus、DNP3、OPC UA、EtherNet/IP),以检测关键基础设施中的错误配置、未授权连接和攻击面。

performing-network-traffic-analysis-with-zeek

9
from killvxk/cybersecurity-skills-zh

部署 Zeek 网络安全监控器,捕获、解析和分析网络流量元数据,用于威胁检测、异常识别和取证调查。

performing-network-traffic-analysis-with-tshark

9
from killvxk/cybersecurity-skills-zh

使用 tshark 和 pyshark 自动化网络流量分析,进行协议统计、可疑流量检测、DNS 异常识别以及从 PCAP 文件中提取威胁指标(IOC)

performing-network-packet-capture-analysis

9
from killvxk/cybersecurity-skills-zh

使用 Wireshark、tshark 和 tcpdump 对网络数据包捕获(PCAP/PCAPNG)进行取证分析,重建网络通信、提取传输文件、识别恶意流量,并建立数据渗出或命令与控制活动的证据。

performing-network-forensics-with-wireshark

9
from killvxk/cybersecurity-skills-zh

使用 Wireshark 和 tshark 捕获并分析网络流量,重建网络事件、提取制品并识别恶意通信。