darkm00nsec/OTThreatHunting
GitHub: darkm00nsec/OTThreatHunting
一款跨平台 PowerShell 威胁狩猎脚本,专为 OT/ICS 工控环境设计,通过采集主机多维信息并匹配工控协议端口来辅助安全人员发现异常活动。
Stars: 0 | Forks: 0
# 威胁狩猎脚本
一个跨平台的 PowerShell 威胁狩猎脚本,支持 **Windows** 和 **Linux**,其特性包括:
- **本地执行**
- **远程执行**
- 针对 Windows 目标使用 **WinRM**
- 在配置了通过 SSH 进行 PowerShell 远程处理的地方支持 **SSH**
- **为所有功能提供 CSV 输出**
- **OT / ICS 协议端口检测**
- **按计算机名和日期组织输出文件夹**
此脚本仅用于**授权的防御性安全、威胁狩猎和系统管理**。
## 功能
- 可在 **Windows** 和 **Linux** 上运行
- 支持**本地**和**远程**收集
- 自动创建输出文件夹
- 将所有结果导出为 **CSV**
- 可以运行**单个狩猎类别**或**所有检查**
- 包含针对常见 ICS/OT 端口的 **OT 协议检测**
- 为涉及非私有远程地址的 OT 发现添加简单的 **Suspicious** 标志
## 狩猎类别
### 1. 网络连接
收集网络套接字数据并导出:
- `established_connections.csv`
- `listening_ports.csv`
- `all_network_connections.csv`
### 2. 进程与服务
收集:
- 运行中的进程
- 运行中的服务
导出:
- `process_list.csv`
- `services.csv`
### 3. 计划任务 / Cron 任务
收集:
- **Windows:** 计划任务
- **Linux:** Root cron 条目
导出:
- **Windows:** `scheduled_tasks.csv`
- **Linux:** `cron_jobs.csv`
### 4. 用户账户
收集:
- **Windows:** 本地用户和本地管理员
- **Linux:** `/etc/passwd` 用户和活动会话
导出:
- **Windows:** `local_users.csv`、`local_admins.csv`
- **Linux:** `all_users.csv`、`active_sessions.csv`
### 5. 日志(事件日志 / Journal)
收集:
- **Windows:** 过去 30 天内安全日志 (`Event ID 4625`) 中的失败登录
- **Linux:** `journalctl` 中失败的 SSH 登录行
导出:
- **Windows:** `event_failed_logons.csv`
- **Linux:** `journal_failed_ssh_logons.csv`
### 6. 网络配置
收集:
- **Windows:** IP 配置和 ARP/邻居数据
- **Linux:** 接口寻址和邻居数据
导出:
- `network_adapter_config.csv`
- `arp_table.csv`
### 7. OT 协议端口匹配
根据内置的 OT 协议端口参考列表检查活动/监听连接,并导出:
- `ot_protocol_reference_ports.csv`
- `ot_protocol_matches.csv`
### 8. 运行所有检查
对目标主机运行上述所有功能。
## 支持的 OT / ICS 协议
该脚本目前会检查以下协议端口:
- Modbus/TCP
- Siemens S7comm
- EtherNet/IP
- EtherNet/IP I/O
- DNP3
- OPC UA
- BACnet/IP
- PROFINET Context Management
- PROFINET RT Discovery
- PROFINET RT Control
- IEC 60870-5-104
- Tridium Fox
- Niagara Fox SSL
- OMRON FINS
- MELSEC
- IEC 61850 MMS
- CODESYS Gateway
## 输出结构
### Windows
```
C:\Users\\ThreatHunting\_YYYY-MM-DD\
```
### Linux
```
$HOME/threat_hunting_logs/_YYYY-MM-DD/
```
### 示例
```
C:\Users\\ThreatHunting\WS01_2026-04-01\
├── all_network_connections.csv
├── established_connections.csv
├── listening_ports.csv
├── process_list.csv
├── services.csv
├── scheduled_tasks.csv
├── local_users.csv
├── local_admins.csv
├── event_failed_logons.csv
├── network_adapter_config.csv
├── arp_table.csv
├── ot_protocol_reference_ports.csv
└── ot_protocol_matches.csv
```
Linux 输出将使用相同的日期/主机文件夹结构,但包含特定于 Linux 的 CSV 文件,例如 `cron_jobs.csv`、`all_users.csv` 和 `journal_failed_ssh_logons.csv`。
## 环境要求
## Windows
- PowerShell **5.1 或更高版本**
- 具备收集主机数据的适当权限
- 要通过 WinRM 进行远程执行:
- 已启用 PowerShell 远程处理
- 具有到目标的网络访问权限
- 有效的凭据
- 某些命令可能需要管理员权限
## Linux
- 推荐使用 PowerShell **7+**
- 目标主机上需可用的实用工具,例如:
- `ss`
- `ip`
- `systemctl`
- `journalctl`
- `who`
- `bash`
- `crontab`
## 远程执行
- **WinRM** 用于到 Windows 系统的标准 PowerShell 远程处理
- **SSH** 可用于已配置通过 SSH 进行 PowerShell 远程处理的环境
- 远程收集需要有效的凭据和适当的访问权限
## 用法
在 PowerShell 中运行脚本:
```
.\ThreatHunting.ps1
```
系统将提示您选择:
- **Local(本地)** 或 **Remote(远程)**
- 一个狩猎类别
## 交互式菜单
```
1. Network Connections
2. Processes and Services
3. Scheduled Tasks / Cron Jobs
4. User Accounts
5. Logs (Event Logs / Journal)
6. Network Configuration
7. OT Protocol Port Matches
8. RUN ALL CHECKS
Q. Quit
```
## 示例:本地执行
1. 运行脚本:
.\ThreatHunting.ps1
2. 选择:
L
3. 选择:
8
这将在本地计算机上运行所有检查,并将 CSV 文件保存到输出文件夹。
## 示例:使用 WinRM 的远程执行
1. 运行脚本:
.\ThreatHunting.ps1
2. 选择:
R
3. 输入目标主机:
Server1,192.168.1.50
4. 出现提示时输入凭据
5. 选择协议:
W
6. 选择一个菜单选项,例如:
8
## 示例:使用 SSH 的远程执行
如果已配置通过 SSH 进行 PowerShell 远程处理:
1. 运行脚本
2. 选择 `R`
3. 输入目标主机
4. 输入凭据
5. 选择:
S
## CSV 输出说明
现在所有功能都会写入 **CSV** 文件,使输出更容易:
- 导入到 SIEM 平台
- 加载到电子表格中
- 使用 PowerShell、Python 或 Splunk/Elastic 工具进行解析
- 在 DFIR 或 CTI 工作流中进行透视和过滤
### OT CSV 字段示例
`ot_protocol_matches.csv` 可能包含以下字段:
- `Timestamp`
- `Computer`
- `Protocol`
- `OTProtocol`
- `Port`
- `LocalAddress`
- `LocalPort`
- `RemoteAddress`
- `RemotePort`
- `RemoteScope`
- `State`
- `PID`
- `ProcessName`
- `Suspicious`
### Suspicious 标志
对于 OT 发现,脚本会添加一个基本的 `Suspicious` 字段:
- 当远程地址表现为**公有或非私有**时为 `YES`
- 当远程地址表现为**私有、回环或预期的内部范围**时为 `NO`
这仅是一个简单的启发式判断,不应作为恶意活动的最终判定依据。
## 脚本执行流程
在运行时,脚本会:
1. 检测目标操作系统
2. 如有需要,创建基本输出目录
3. 根据以下内容创建一个子文件夹:
- 主机名
- 当前日期
4. 运行选定的狩猎类别
5. 将结果导出到一个或多个 CSV 文件
6. 返回本次运行的输出路径
## 错误处理
脚本包含基本的错误处理:
- 使用 `-Force` 自动创建文件夹
- 未找到结果时写入占位符 CSV 行
- 在执行期间显示控制台错误
- 对某些命令使用 `SilentlyContinue` 以避免整个脚本崩溃
如果某个功能失败,请检查:
- 权限
- 远程连接性
- PowerShell 版本
- 模块可用性
- 是否已安装所需的 Linux 实用工具
## 安全注意事项
- 仅在您被授权评估的系统上使用
- 收集的输出可能包含敏感的主机、用户、服务和网络数据
- 妥善保护生成的 CSV 文件
- 在适当的情况下使用加密存储或传输
- 在生产环境中采取行动之前,请仔细审查 OT 发现
## 已知注意事项
- `Get-LocalUser`、`Get-LocalGroupMember`、`Get-ScheduledTask` 和一些与网络相关的命令在 Windows 上可能需要管理员权限
- Linux 服务和日志收集依赖于 `systemd` / `journalctl`
- SSH 远程处理取决于环境是否已正确配置
- OT 检测**仅基于端口**
- 部分 Linux 输出是通过解析 shell 命令输出得到的,可能会因 Linux 发行版的不同而略有差异
## 建议的仓库结构
```
.
├── ThreatHunting.ps1
├── README.md
└── LICENSE
```
## 许可证
- MIT
## 免责声明
此脚本仅用于防御性安全、威胁狩猎、事件响应支持和授权的管理用途。未经明确许可,请勿在系统或网络上使用此脚本。
## 致谢
MrDuc 在这篇文章中的贡献 https://medium.com/@itpro677/hunting-threats-in-ot-environments-using-only-built-in-system-commands-no-tools-required-6adc80ef0ee2
标签:AI合规, Conpot, ICS安全, IPv6, Libemu, OT安全, PB级数据处理, PKINIT, PowerShell, SSH, Windows安全, WinRM, 事件日志, 关系图谱, 内存分配, 协议检测, 基线检查, 子域名变形, 安全脚本, 安全运维, 工具集, 工控安全, 异常检测, 插件系统, 数据统计, 无线安全, 服务监控, 流量嗅探, 用户账户审计, 端口扫描, 网络安全, 网络连接监控, 网络配置, 自动化运维, 计划任务, 远程执行, 隐私保护