自动抓包实施网络入侵检测
我们使用网络观察程序(Network Watcher)的数据包捕获功能,可以实施网络入侵检测系统 (IDS) 并执行网络安全监视 (NSM)。 借助多种开源 IDS 工具来处理数据包捕获,并检查潜在网络入侵和恶意活动的签名,分析网络中是否存在任何有害入侵或漏洞。
应用场景
目前官方文档 中实现的 IDS 功能需要在获取数据包捕获的 CAP 文件后,让 Suricata 进行特征库匹配,再使用 ELK 等第三方工具将其可视化。
自动化 IDS 具体步骤
因此,如果想实现自动化的 IDS,需完成以下四个步骤:
定期自动创建 CAP 文件
Network Watcher 支持使用 PowerShell 命令对虚拟机抓包,定时捕获数据包这一需求可以通过
Windows 自带的 Scheduler 调用 PowerShell 脚本来实现 找一台 Windows 的机器在设定下反复执行 ps1 脚本
使用 Azure Automation – Runbook 服务执行脚本 优点是您无需部署脚本在自己的机器上,缺点是 Automation/Runbook 需额外收费(费用与执行 ps1 脚本次数有关)。
这部分在官方文档中未提供具体方法,本文最后一节以方式 1 为例,详细介绍配置步骤、并提供一个可运行的 PowerShell 脚本供参考。
将存放在 Storage 中的 CAP 文件下载到本地
通过 Python/.NET/JAVA 等调用 Blob Service REST API,可实现自动化下载。以下示例以 Python 为例。
连接存储
在安装了适用于 Python 的 Azure 存储 SDK 的机器上,使用存储帐户名称和帐户密钥创建一个 BlockBlobService 对象。使用帐户名称和密钥替换“myaccount”和“mykey”。
block_blob_service = BlockBlobService(account_name='myaccount', account_key='mykey', endpoint_suffix='core.chinacloudapi.cn')
安装 SDK 可通过 Python 包索引 (PyPI) 安装,参考命令如下:
pip install azure-storage-blob
从 Blob 下载数据到本地
若要从 blob 下载数据,建议使用
get_blob_to_path
、get_blob_to_stream
、get_blob_to_bytes
或get_blob_to_text
。 这些方法属于高级方法,在数据大小超过 64 MB 时执行必要的分块。以下演示了如何使用
get_blob_to_path
下载 “myblockblob” 这个 Blob 的内容,并将其存储到“out-capture.cap”文件。
block_blob_service.get_blob_to_path('mycontainer', 'myblockblob', 'out-capture.cap')
具体可参考:如何通过 Python 使用 Azure Blob 存储
通过 Suricata 处理数据包,生成警报文件
在本地部署 Suricata 来处理捕获到的数据包,并根据与其给定威胁规则集匹配的数据包触发警报,存储在本地日志文件中。
安装 Suricata
在 VM 的命令行终端中运行以下命令即可完成安装:
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo sudo apt-get install suricata
若要验证安装,请运行命令
suricata -h
查看命令的完整列表。
更多安装方法可参考:Suricate 安装。设置威胁规则集
安装完毕后需创建运行 Suricata 所需的规则,这里可以使用自己创建的规则,也可以使用许多提供商开发的规则集,将下载好的规则复制到 “/etc/suricata/” 路径下。
常见的规则集有Emerging Threats, Snort 开发的 VRT 规则。生成警报并存储为日志
使用 Suricata 处理数据包捕获,生成的警报将存在 “/var/log/suricata/fast.log” 下。
启用 Suricata 处理数据包捕获的命令如下:sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>
(可选)第三方工具将结果可视化
在虚拟机上部署 ELK(Elastic Stack + Logstash + Kibana),为 Suricata 日志生成索引并作可视化。
对于 Logstash 配置及 Kibana 模板,更多可参考:设置 Elastic Stack。至此,用户可以通过可视界面,查看 Suricata 警报日志和威胁分析结果。
附:定期自动创建 CAP 文件的参考步骤
本文提供自动创建 CAP 方法 1 的一个简单 DEMO 供参考,运行环境为 Win10:
下载并修改 PowerShell 脚本
请根据实际情况修改前 23 行 {xxx} 大括号中内容; 运行该脚本将执行一次数据包捕获的过程,过程日志将存储在 $filePath 路径下; 捕获到的数据包将被命名为 “PSpacketCapture-yyyyMMdd-HHmmss”(如“PSpacketCapture-20180315-000000”),被存放在设定的 Storage 中
注意
- 网络观察程序捕获的数据包的 名字不能重名,否则将无法写入。
本 DEMO 中数据包均以 Date 结尾,避免了重名的问题;
如果您有别的命名需要,请务必注意:重名可能导致数据包无法正常写入 Storage;
对此,附件 ps1 文件末尾附上了对重名包的检测和删除,供参考。 - 捕获的数据包命名中可使用的特殊字符有限制,建议使用 . 或 – 或 _,不要用 / 或 : 等其他符号。
- 网络观察程序捕获的数据包的 名字不能重名,否则将无法写入。
配置 Scheduler,在 Scheduler(任务计划程序)中 “创建任务” 来定期调用 ps1 脚本。
常规选卡中输入 Name 和 Description,选择适当的 “用户或组” 及配置。
触发器选卡中根据需要设置开始时间、间隔和持续时间。
操作选卡中选择 “启动程序”,在 “程序或脚本” 一项填写 “powershell.exe”。
“添加参数” 一项填写:“-ExecutionPolicy Bypass xxx\AzurePacketCapture.ps1” (斜体部分请替换为实际路径)。
另两个选卡根据实际需要设定。
ps1 脚本被运行完毕后可以在 Portal/Storage 中看到捕获的数据包,如下图所示:
捕获的过程日志截取如下: