teffore/suricata-zeek-bundle

GitHub: teffore/suricata-zeek-bundle

一键部署 Suricata 8 与 Zeek 8 的流量检测套件,内置自定义规则与验证流程,解决传感器快速落地与关联分析难题。

Stars: 0 | Forks: 0

# Suricata + Zeek 传感器捆绑包 Suricata 8 + Zeek 8 传感器栈的独立安装程序,内置自定义规则。 从该仓库的 CDK 实验室提取;移除了 AWS 特定组件(S3 规则获取、VPC 流量镜像接线),以便在任何现有的 Ubuntu 22.04 主机上运行。 ## 内容 | 文件 | 用途 | |---|---| | `install.sh` | 包装脚本:检测先前安装、备份配置并运行两个设置脚本 | | `suricata_setup.sh` | 从 OISF PPA 安装 Suricata 8.x 并应用调优 | | `zeek_setup.sh` | 从 openSUSE OBS 仓库安装 Zeek 8.x、配置情报源与 zeekctl 定时任务 | | `custom.rules` | 约 70 条自定义 Suricata 签名(SID 9000001–9000612) | | `verify.sh` | 安装后健康检查与 Canary 告警验证 | | `testing/` | Kali 攻击机工具、全套攻击流程与告警汇总脚本 | | `standalone.sh` | 单文件安装器——将以上内容合并为一个脚本 | ## 要求 - Ubuntu 22.04(Jammy) - Root 或 sudo 权限 - 可访问外网的出口: - `launchpad.net`(OISF PPA) - `download.opensuse.org`(Zeek OBS) - `urlhaus.abuse.ch` 与 `feodotracker.abuse.ch`(情报源) - 用于监控流量的网卡(SPAN 端口、镜像、TAP 或桥接接口上的混杂模式) ## 安装 **选项 A — 单文件安装器**(内联所有脚本): ``` curl -LO https://github.com/teffore/suricata-zeek-bundle/releases/latest/download/standalone.sh sudo bash standalone.sh ``` **选项 B — 压缩包**(若希望保留独立文件): ``` tar -xzf suricata-zeek-bundle.tar.gz cd suricata-zeek-bundle sudo ./install.sh ``` ### 参数 - `--iface <名称>` — 捕获接口(默认:首个非环回网卡) - `--force` — 即使 Suricata/Zeek 已安装也继续执行 (现有配置将备份到 `/etc/suricata.bak.<时间戳>/` 和 `/opt/zeek-etc.bak.<时间戳>/`) - `--preserve-config` — 保留现有 YAML 配置;仅刷新规则与情报 ### 先前安装 如果已存在 Suricata 或 Zeek,`install.sh` 将以退出码 3 退出并打印检测到的版本。 使用 `--force` 重新执行以备份并升级;使用 `--preserve-config` 保留自定义调整并仅更新规则。 ## 验证 ``` sudo ./verify.sh ``` 成功时退出码为 0。检查内容包括:服务运行、版本为 8.x、配置可解析、自定义规则已加载、 `eve.json` 实时捕获正常,以及 Canary 告警(SID 9000002)端到端触发。 若主机未接收镜像流量,Canary 告警失败是预期行为(尚未配置 SPAN/镜像)。其他所有检查仍应通过。 ## 安装脚本配置内容 ### Suricata(`suricata_setup.sh`) 从 **OISF 稳定版 PPA** 安装 Suricata(Ubuntu 22.04 自带 6.0.x 已停止维护; PPA 提供 8.0.x,支持 HTTP/2、QUIC/HTTP/3 与 JA4)。 通过 `suricata-update` 启用的规则源: - ET Open(默认) - `tgreen/hunting` - `ptresearch/attackdetection` - `sslbl/ssl-fp-blacklist` - `sslbl/ja3-fingerprints` - `etnetera/aggressive` - `custom.rules`(内嵌包,SID 9000001–9000612) 应用的调优选项(写入 `/etc/suricata/suricata.yaml`): | 设置 | 值 | 原因 | |---|---|---| | `HOME_NET` | `[10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16]` | 全 RFC 1918 私有地址空间 | | `default-rule-path` | `/var/lib/suricata/rules` | `suricata-update` 写入规则的位置 | | `community-id` | `true` | 标准流哈希,便于与 Zeek 关联 | | `ja3-fingerprints` | `yes` | TLS 客户端指纹(在 TLS 下识别恶意 C2) | | `metadata` 在告警中 | `yes` | 在告警输出中添加 CVE / 产品 / 描述 | | `mpm-algo` / `spm-algo` | `hs`(Hyperscan) | 在 49k+ 规则集上实现更快模式匹配 | | `stream.async-oneside` | `true` | 处理非对称流(如 SPAN/镜像会话) | | `max-pending-packets` | `10000` | 在突发流量下避免丢包(OISF 建议) | | `anomaly` 日志 | 启用 | 捕获协议违规(签名可能遗漏) | | 运行时用户 | `suricata`(非 root) | 启动后降权运行 | 部署的运行组件: - **每日规则更新**:通过 `/etc/cron.d/suricata-update`(UTC 03:00), 使用 `suricatasc` 套接字热重载(无需重启) - **Logrotate**:`/etc/logrotate.d/suricata` — 保留 7 天,压缩并发送 SIGHUP 以重新打开文件(避免全量加载 49k 条规则) - **systemd 降级配置**:`/etc/systemd/system/suricata.service.d/user.conf` 强制以非 root 用户运行 ### Zeek(`zeek_setup.sh`) 从 openSUSE OBS 的 `security:zeek` 仓库安装 **Zeek 8.0.x**(Ubuntu 仓库提供旧版本)。 与 Suricata 共存于同一网卡:Suricata 使用 `af-packet`,Zeek 使用 libpcap。 配置文件位于 `/opt/zeek/etc/`: - `node.cfg` — 单节点部署,监听主接口 - `networks.cfg` — 将全 RFC 1918 定义为 `Site::local_nets` 在 `local.zeek` 中加载: - `policy/protocols/conn/community-id-logging` — 在 `conn.log` 中添加 community-id,便于与 Suricata 关联 - `protocols/ssh/detect-bruteforcing`(阈值降至 5 次尝试) - `protocols/ftp/detect-bruteforcing` - `protocols/http/detect-webapps` - `frameworks/files/detect-MHR` — 调用 Team Cymru 恶意哈希注册表查询 - `frameworks/intel` - `misc/stats` — 每 60 秒将引擎统计写入 `stats.log` **情报框架**(`/opt/zeek/intel/`): - `build-intel.sh` 聚合生成 `intel.dat`,来源包括: - **abuse.ch URLhaus** — 恶意交付域名 - **abuse.ch Feodo Tracker** — 僵尸网络 C2 IP - 每日 04:30 通过 `/etc/cron.d/zeek-intel` 刷新 - 命中记录输出到 `intel.log` 并标注来源 **运维方面**: - `zeekctl cron` 每日 04:00 执行(轮转与崩溃恢复检查) - Logrotate:`/opt/zeek/logs/*/*.log`,保留 7 天并压缩 ### 自定义规则(`custom.rules`) 约 70 条 SID 在 `9000000` 范围内的签名: - **流量镜像验证**(SSH、TCP SYN 扫描 Canary) - **DNS 隧道检测** — 长子域名标签、熵模式,针对 iodine / dnscat2 - **策略违规** — 明文协议、凭证模式(AKIA、密码字段等) - **C2 启发式** — 大 ICMP 载荷、Beacon 模式 这些规则 `suricata-update` 后追加到 `/var/lib/suricata/rules/suricata.rules`, 确保在规则刷新时仍然保留。 ## 测试与验证(Kali 攻击机) 该传感器在可重现的实验室环境中开发:Kali 攻击机运行脚本对目标主机发起攻击, 同时流量被镜像到 Suricata/Zeek 传感器。`testing/` 目录打包了这些脚本, 可用于对任意可控目标执行相同测试套件。 ### 内容 | 脚本 | 用途 | |---|---| | `testing/kali_setup.sh` | 安装 Kali 攻击机工具:`nmap`、`hydra`、`nikto`、`hping3`、`dnsutils`、`smbclient`、`impacket-scripts`、`python3-impacket` | | `testing/run_attacks.sh <目标 IP>` | 执行全套攻击流程(详见下文分类) | | `testing/verify_alerts.sh` | 在传感器上运行;汇总告警、Zeek 通知、VXLAN 解封装证据与解码器统计 | ### 攻击覆盖范围 `run_attacks.sh` 覆盖 **18 类**,包含 200+ 个独立探测: **侦察** - ICMP Ping 扫网、Nmap SYN 扫描(Top 100)、服务/版本探测、OS 识别、 漏洞脚本(`--script vuln`)与 CVE 探测(`vulners`) **Web 应用攻击** - SQL 注入(联合查询、认证绕过)、目录遍历(普通与 URL 编码)、 XSS(脚本与事件处理器)、Shellshock、异常 User-Agent(sqlmap、nikto、DirBuster)、 敏感文件探测(`.env`、`/phpmyadmin/`、`server-status`) **CVE 模拟(2021–2025)** - Log4Shell(CVE-2021-44228)、Spring4Shell(2022-22965)、 Confluence OGNL(2023-22527)、MOVEit SQLi(2023-34362)、 Apache 路径遍历(2021-41773/42013)、Citrix NetScaler(2023-3519)、 FortiOS SSLVPN(2018-13379)、vCenter(2021-21972)、 ProxyShell(2021-34473)、Palo Alto PAN-OS(2024-3400)、 CUPS IPP(2024-47176)、Ivanti Connect Secure(2025-0282)、 Cleo LexiCom / Cl0p(2024-55956)、PHP-CGI(2024-4577)、 Check Point(2024-24919)、ActiveMQ(2023-46604)、 React Server Components(2025-55182) **爆破与凭证攻击** - SSH(hydra 与逐用户失败登录)、FTP、SMB、Telnet、RDP、LDAP 匿名绑定 **DNS 滥用** - 长子域名隧道(iodine/dnscat2 模式)、TXT 记录外泄、 可疑 TLD、区域传输尝试、高速率随机子域名泛洪 **云/元数据攻击** - IMDSv1 利用、IMDSv2 Token 请求、IMDS 绕过变体(十进制、八进制、IPv6)、 凭证与用户数据窃取、ECS/Lambda/EKS 元数据滥用、 Docker 套接字模式、S3 存储桶通过 DNS 枚举、 非常规来源的 AKIA 凭证格式外泄、 AWS CLI/SDK 用户代理、Capital One 攻击链 **C2 框架模式** - Cobalt Strike Beacon URI、Meterpreter 默认、 PowerShell Empire、Sliver、Mythic、 勒索软件回调(Conti、LockBit、REvil)、 加密货币挖矿(XMRig、Stratum) **规避技术** - IP 分片、双重/三重 URL 编码、大小写随机化、 Unicode/全角绕过、分块编码滥用、超大头部、 SNI/Host 不匹配、HTTP 请求走私(CL.TE)、 CRLF 注入、TCP 分段、头部大小写变化、 嵌套编码 **恶意指标** - EICAR 测试字符串(POST + URL)、PowerShell 下载引导器、 钓鱼工具包路径、双扩展名文件探测、 POST 体中的 Base64 Shellcode **负控制** - 合法浏览器 GET、API 调用、搜索查询、表单提交、 静态资源请求、知名 DNS 查询、TLS 握手 — 这些**不应**触发告警(用于调节漂移检测) ### 运行套件 在攻击机主机上: ``` sudo ./testing/kali_setup.sh # one-time install ./testing/run_attacks.sh # ~5–10 min ``` 在传感器主机上: ``` sudo ./testing/verify_alerts.sh ``` `verify_alerts.sh` 输出: - Suricata 服务状态与接口/VXLAN 诊断 - `fast.log` 尾部(最近 50 条告警) - 按数量排序的前 30 条告警签名(完整输出至 `/tmp/sig-breakdown.txt`) - 告警类别分布 - `eve.json` 事件类型统计 - 解码器统计 - Zeek 汇总:日志行数、触发的通知、`tunnel.log`(VXLAN 解封装证据)、 `conn.log` 中的前向流会话 退出码:若观察到 ≥3 条告警则为 0,否则为 1 —— 适用于 CI 门限。 ### 预期检测 在参考实验室(AWS VPC 流量镜像 → 传感器)中, 单次 `run_attacks.sh` 执行可产生数百条 Suricata 告警, 覆盖约 40–60 个不同的签名 ID,同时 Zeek 会产生 SSH/FTP 暴力破解、 已发现 Web 应用以及情报框架命中 URLhaus/Feodo 的通知。 源代码仓库的 `reports/iteration-*.html` 与 `reports/attack-vs-detection-*.html` 记录了 8 次调优迭代中的覆盖演进。 ## 日志 - 安装日志:`/var/log/suricata-setup.log` - Suricata:`/var/log/suricata/{eve.json,fast.log,suricata.log}` - Zeek:`/opt/zeek/logs/current/*.log` ## 卸载 / 回滚 未提供卸载程序。若在执行 `--force` 后需要回滚: ``` sudo systemctl stop suricata sudo /opt/zeek/bin/zeekctl stop sudo rm -rf /etc/suricata && sudo mv /etc/suricata.bak. /etc/suricata sudo rm -rf /opt/zeek/etc && sudo mv /opt/zeek-etc.bak. /opt/zeek/etc sudo apt-get remove --purge suricata zeek-8.0 ```
标签:AMSI绕过, canary 告警, curl 下载, Feodo Tracker, Intel 馈送, IPS, Kali 工具, OISF PPA, PB级数据处理, Promiscuous 模式, Rootkit, root 权限, SPAN 端口, Suricata, Ubuntu 22.04, URLHaus, VLAN 镜像, Zeek, Zeek OBS, 企业安全, 健康检查, 单文件安装, 告警验证, 威胁检测, 威胁检测与响应, 安全传感器, 安全传感器栈, 安全安装, 安全测试, 安全运维, 应用安全, 攻击性安全, 攻击测试, 日志采集, 流量镜像, 现代安全运营, 网络嗅探, 网络安全, 网络桥接, 网络流量分析, 网络资产管理, 自定义规则, 规则更新, 隐私保护