dmcyber/SDR-SIEM-Automation-Lab

GitHub: dmcyber/SDR-SIEM-Automation-Lab

利用Python和Wazuh实现公共安全无线电通信的自动化监控和告警。

Stars: 1 | Forks: 0

# SOC 自动化实验室:自定义 Python 日志标准化与 Wazuh SIEM 告警 这是一个关于 SIEM 用例的有趣变体,在这个独特的原创项目中,我使用来自 SDRTrunk(通过 Airspy R2 软件定义无线电)的树状公共安全无线电交通数据,使用 Python 将数据标准化为 JSON 格式,并将其发送到主无线电日志文件。然后,我配置 Wazuh 监控主无线电日志文件,并设置一条规则,当在“火警警报对讲组”上观察到无线电交通时触发级别 15 的告警。 ## 项目架构 - Ubuntu 26.04 虚拟机 - Windows 11 主机机,32GB RAM 和英特尔酷睿 Ultra 9 - Python 3.14.4 - SDRTrunk - Airspy R2 SDR ## 入门指南 首先,我下载了 Ubuntu 26.04 ISO 并使用它来在 VMware 上创建虚拟机。关于 VMware 定制安装的快速说明: - Workstation 25h2 或更高版本 - 1 个处理器 - 4 个核心 - 11 GB RAM(11000 MB) - 使用 NAT(网络地址转换) - LSI 逻辑(推荐) - NVMe - 60 GB 磁盘空间 此设置为我提供了在 VM 上轻松运行 SDRTrunk、我的 Python 脚本和 Wazuh 所需的一切。 为了在 VM 上正确使用 Airspy R2,我在 VM 配置文件中添加了以下行: ``` usb.quirks.device0 = "0x1d50:0x60a1 skip-reset, skip-refresh, skip-setconfig" ``` ![vm 配置编辑](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8d676cf1d9043808.jpg) 在设置好 VM 后,我继续使用以下命令安装必要的 Airspy 驱动程序: ``` sudo apt update sudo apt install airspy libairspy-dev -y ``` 此时,Ubuntu 将看到 Airspy R2,但它将阻止标准用户配置文件及其下运行的工具访问原始 USB 流。为了解决这个问题,我使用以下命令在我的终端中创建了一个 Airspy 的规则文件: ``` sudo nano /etc/udev/rules.d/52-airspy.rules ``` 然后,在打开的规则文件中,我输入了以下文本: ``` ATTR{idVendor}=="1d50", ATTRS{idProduct}=="60a1", SYMLINK+="airspy-%k", MODE="660", GROUP="plugdev" ``` ![Airspy 规则](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c394e0cd08043809.jpg) 保存该文件后,我必须重新加载设备管理器,以便 Ubuntu 可以使用以下命令实现新规则: ``` sudo udevadm control --reload-rules && sudo udevadm trigger ``` 此时,我已准备好安装 SDRTrunk。为此,我只需使用 SDRTrunk GitHub 上的相应下载 [链接](https://github.com/DSheirer/SDRTrunk/releases/download/v0.6.1/sdr-trunk-linux-x86_64-v0.6.1.zip)。下载完成后,我将它提取到我的选择目录中。 为了使事情更简单,我输入了以下命令来创建一个桌面图标,我可以点击它来启动 SDRTrunk: ``` sudo nano /usr/share/applications/sdrtrunk.desktop ``` 在打开该文件进行编辑后,我输入了以下文本: ``` [Desktop Entry] Type=Application Name=SDRTrunk GenericName=SDR Software Comment=Launch SDRTrunk Platform Exec=/home/dmcyber/sdr-trunk-linux-x86_64-v0.6.1/bin/sdr-trunk Icon=/home/dmcyber/SDRTrunk/icon.png Terminal=false Categories=Utility;AudioVideo; ``` 为了使桌面图标显示出来,我使用以下命令允许 Ubuntu 访问我创建的目录: ``` sudo chmod +x /usr/share/applications/sdrtrunk.desktop ``` 现在,我可以打开应用程序,看到 SDRTrunk 链接,右键单击它,并将其固定到 Dock 上。 ![固定到 Dock 照片](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a43d8424a1043809.jpg) ![固定到 Dock 照片](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/336ff0537e043810.jpg) 第一次打开 SDRTrunk 后,我需要处理一些设置。首先,我打开用户首选项,选择 JMBE 音频库,并单击创建库。 ![JMBE 库创建](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/54aaa1fd4a043811.jpg) 然后,我选择是,以下载任何库更新。完成此操作后,另一个窗口弹出,我在其中选择创建库,然后接受下载的条款。 接下来,我在主 SDRTrunk 窗口上选择调谐器选项卡,选择 Airpsy 调谐器,并将频率更改为 772.000 MHz,以便 Airspy R2 位于我计划监控的无线电系统频谱的中间。 ![调谐器设置](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4a78f7bd35043812.jpg) 现在,我需要加载我之前创建的播放列表。这就像将包含控制频率和对讲组别名的 .XML 播放列表文件复制到 /SDRTrunk/playlist/ 目录一样简单。然后,从播放列表选项卡,我只需单击添加,突出显示适当的播放列表,然后单击选择。 ![播放列表位置](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/32a9553d87043813.jpg) ![播放列表编辑器添加](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/cf9430d988043814.jpg) ![SIEM 播放列表打开](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f1390edcae043814.jpg) ![选择 SIEM 用于播放列表](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/12768b8b22043819.jpg) 从那里,我点击到频道选项卡,确保在日志部分已开启“呼叫事件”日志记录,并单击播放。 ![频道选项卡](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/40d8728885043820.jpg) 接下来,我在我的终端中输入以下命令以下载 Wazuh: ``` curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh sudo bash wazuh-install.sh -a ``` 这需要一些时间,但我确保在终端打印的安装过程中记下访问 Wazuh 仪表板的用户名和密码。 下载 Wazuh 后,我输入以下命令来安装访问控制列表实用程序,设置一个具有正确所有权的目录在 /var/log/ 中,并利用 ACL 实用程序,以便将目录中添加的任何文件允许 Wazuh 读取访问。 ``` sudo apt-get update && sudo apt-get install acl -y ``` ``` sudo mkdir -p /var/log/sdrtrunk ``` ``` sudo chown -R dmcyber:wazuh /var/log/sdrtrunk sudo chmod 750 /var/log/sdrtrunk ``` ``` sudo setfacl -d -m g:wazuh:r /var/log/sdrtrunk ``` 现在,我需要编辑 Wazuh 中的 ossec.conf 文件,并添加主无线电日志文件的位置。为此,我运行以下命令,并在 ossec.conf 文件的日志分析部分添加以下 XML 块: ``` sudo nano /var/ossec/etc/ossec.conf ``` ``` /var/log/sdrtrunk/master_radio_log.json json ``` ![ossec.conf](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/6caccc9dc9043824.jpg) 保存该文件后,我需要编辑本地规则文件,并添加一条规则,当在树状无线电系统中观察到火警警报交通时触发告警。为此,我使用以下命令编辑本地规则文件: ``` sudo nano /var/ossec/etc/rules/local_rules.xml ``` 然后,我在示例组下方添加以下 XML 块: ``` json [Fire Pager Alert] (6215) Fire Pager Alert Triggered ``` ![Local_Rules.xml](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/40280659a9043825.jpg) 接下来,我重新启动了 wazuh-manager,以便新规则生效,使用以下命令: ``` sudo systemctl restart wazuh-manager ``` Wazuh 设置正确后,我执行了我的自定义 [Python 解析脚本](Radio_Log_Converter.py)。该脚本持续跟踪 SDRTrunk 的 '呼叫事件' 日志,将非结构化字符串数据标准化为结构化 JSON 架构,并将其附加到集中式主日志文件(如果脚本第一次运行,则创建该文件),同时打印到终端。 ![python 程序运行](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0fa8b97a60043826.jpg) 我检查了 /var/log/sdrtrunk/ 目录,以确保 Python 程序创建了主无线电日志文件,并且确实创建了。 ![创建日志目录](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e6cf2d91dc043827.jpg) 接下来,我在我的终端中输入以下命令来模拟从火警警报对讲组接收无线电交通: ``` echo '{"Timestamp": "2026:06:02:13:43:24", "duration": "496", "Protocol": "APCO-25", "Event": "Group Call", "From": "", "To": "[Fire Pager Alert] (6215)", "Channel_Number": "0-910", "Frequency": "774.693750", "Timeslot": "", "Details": "PHASE 1 CHANNEL GRANT PRI4 CIRCUIT", "Event_ID": "203866562"}' >> /var/log/sdrtrunk/master_radio_log.json ``` 模拟的无线电交通成功进入主无线电日志: ![模拟交通](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b531bdc776043828.jpg) 在确认模拟交通已进入日志后,我打开 Wazuh 仪表板,并确认 Wazuh 由于火警警报交通而触发了级别 15 的告警! ![Wazuh 高级告警](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/02c071e356043829.jpg) ![Wazuh 告警详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d62f5955e6043830.jpg)
标签:Airspy R2, JSON格式, SDR无线电, USB设备配置, VMware, Wazuh SIEM, WSL, 公共安全, 告警系统, 命令控制, 安全运营中心, 数据传输, 数据规范化, 数据采集, 系统安装, 网络地址转换, 网络映射, 自动化实验室, 虚拟化, 规则文件, 设备驱动, 逆向工具