Bro
目录
Bro 简介
Bro 特点
Bro 基本架构
Dynamic Protocol Detection(DPD)
Bro 集群部署
Bro 脚本
Bro 日志记录
安装部署
参考
Bro 简介
Bro 是一款被动的开源流量分析器. 它主要用于对链路上所有深层次的可疑行为流量进行一个安全监控, 其支持在安全域之外进行大范围的流量分析. 更通俗一点, Bro 是一款集成了 TCPDUMP(抓包),WIRESHARK(流量分析),SNORT(××× 检测),SYSLOG(日志记录),PYTHON/PERL(有灵活抽象的数据结构, 支持脚本自定义处理)功能的网络流量分析利器.
Bro 特点
部署
在 Unix-like 系统上运行
基于端口或者网络分流器的被动流量分析
使用 libpcap 的抓包
支持实时分析和离线分析
支持集群化部署
单机或者集群化部署都是使用统一的管理工具
使用 BSD 开源协议
分析
离线分析也支持日志记录
应用层协议支持 Port-independent 分析
支持多种应用层协议, 包含 DNS,FTP,HTTP,IRC,SMTP,SSH,SSL 等
能够分析应用层协议交换的文件内容
全 IPv6 支持
隧道检测与分析, 包含 Ayiya, Teredo, GTPv1 等
分析协议期间会进行完整性检测
支持 IDS 风格的正则匹配
脚本语言
能完成任意分析任务的语言
基于事件的编程
特定于域的数据类型, 如 IP 地址(透明地处理 IPv4 和 IPv6), 端口号和计时器
支持跟踪和管理网络状态
接口
默认输出为结构化的 ASCII 日志
可以使用 ElasticSearch 等存储数据(通过收集 json 日志或者 es plugin)
将外部的输入实时整合分析
Bro 提供扩展的 C 库, 让事件能与外部程序交换传输
通过脚本可以触发任意外部处理逻辑
Bro 部署架构
部署方式和其它 NIDS 相似
检测出入的所有流量
采用被动检测方式
部署架构图:
Bro 基本架构
从官方给的架构图来看我们发现 Bro 主要有两大组件:
事件引擎: 它将传入的数据包流转化为一系列高级事件. 这些事件反映了网络活动, 即描述了我们所看到的, 但不关心其中的问题或者它是否重要. 例如, 连接上的每个 HTTP 请求都转换为相应的 http_request 事件, 该事件携带相关的 IP 地址和端口, 被请求的 URI 和正在使用的 HTTP 版本. 然而, 该事件并不传达任何进一步的解释, 例如该 URI 是否对应于一个已知的恶意软件站点等. 事件引擎采用 c/c++ 编译, 性能很好, 了解具体的事件种类可以查看如下链接(查看以 event.bif.bro 结尾的脚本):
https://www.bro.org/sphinx/script-reference/scripts.html
脚本解释器: 脚本解释器执行一组用 Bro 的自定义脚本语言编写的事件处理程序. 这些脚本可以表示站点的安全策略, 例如当检测到不同类型的活动时需要采取什么行动. 更广泛地说, 它们可以从输入流中派生任何想要的属性和统计信息. Bro 的语言具有广泛的领域特定类型和支持功能, 至关重要的是它允许脚本随时间保持状态, 使它们能够跟踪和关联它们在连接和主机边界上观察到的事物的演化. Bro 脚本可以生成实时警报, 也可以根据需要执行任意外部程序, 例如, 触发对 ××× 的主动响应.
如上官网给的架构图是不是特别简单, 在实际情况下一个完整请求的通常要经过多个事件和对应的脚本去处理. 我们以一个 http 请求大概来描述一下:
- Dynamic Protocol Detection(DPD)
- Port-based Protocol Analysis
了解 DPD 之前, 我们先了解一下 Port-based Protocol Analysis. 这是传统 NIDS 的检测协议的方式, 根据端口来判断使用的是哪一种协议. 如 80 端口认为是 http 协议, 443 端口认为是 https 协议等. 这种方式有点是简单, 但是缺点也是显而易见, 这种方式像 ftp 协议也是分析不了的.
DPD 简介
Bro 使用动态协议检测框架, 我们将分析器树与每个连接关联起来. 此树可以包含任意数量的各种分析器, 并且可以在连接的整个生命周期内进行修改. 即我们可以动态启用 / 禁用分析器. 它提供了两个功能:
可以独立于端口执行协议分析. 通过使用一组匹配典型协议对话的签名, Bro 通过查看 payload 以匹配正确的分析器. 当这样的签名匹配时, 它将打开相应的分析器.
当分析程序明显地解析错误的协议时, 我们可以关闭它们. 这允许我们使用松散的协议签名, 如果有解析错误, 可以并行多个分析程序分析.
DPD 协议签名
有固定格式协议协议通过特征提取即可识别, 而对于无固定格式协议, 无法采用通用方法提取协议指纹, 而只能针对特定协议特定分析提取协议指纹的可能性. 所幸的是, 属于该类型的应用层协议很少. 因此, 对于这种情形可以单独对待. 如下为 http 协议签名样例:
- signature dpd_http_client {
- ip-proto == tcp
- payload /^[[:space:]]*(GET|HEAD|POST)[[:space:]]*/
- tcp-state originator
- }
- signature dpd_http_server {
- ip-proto == tcp
- payload /^HTTP\/[0-9]/
- tcp-state responder requires-reverse-signature dpd_http_client
- enable "http"
- }
- event http_request(c: connection, # Connection.
- method: string, # HTTP method.
- original_URI: string, # Requested URL.
- unescaped_URI: string, # Decoded URL.
- version: string) # HTTP version.
- {
- if ( method == "GET" && unescaped_URI == /.*passwd/ )
- NOTICE(...); # Alarm.
- }
- #separator \x09
- #set_separator ,
- #empty_field (empty)
- #unset_field -
- #path http
- #open 2018-05-17-23-00-00
- #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_depth method host uri referrer version user_agent request_body_len response_body_len status_code status_msg info_code info_msgtags username password proxied orig_fuids orig_filenames orig_mime_types resp_fuids resp_filenames resp_mime_types
- 1526569221.715086 Cjtygm3Q2270olTjWa 116.55.236.99 39084 192.168.2.23 80 1 GET m.sda.cn / - 1.1 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; NetworkBench/8.0.1.332-6700490-2725395) 0 10431 200 OK - - (empty) - - CDN-SRC-IP -> 116.54.1.107 - - - Fp0zSeJlVZ10p7ZD2 - text/html
- # vim /usr/local/bro/share/bro/base/protocols/http/main.bro +99
- ## A list of HTTP headers typically used to indicate proxied requests.
- const proxy_headers: set[string] = {
- "FORWARDED",
- "X-FORWARDED-FOR",
- "X-FORWARDED-FROM",
- "CLIENT-IP",
- "VIA",
- "XROXY-CONNECTION",
- "PROXY-CONNECTION",
- "CDN-SRC-IP",
- } &redef;
- https://www.bro.org/sphinx/install/install.html
- https://www.bro.org/sphinx/quickstart/index.html
- https://www.bro.org/documentation/index.html
- https://www.bro.org/development/howtos/dpd.html
- https://www.bro.org/bro-workshop-2011/
- https://www.bro.org/sphinx/script-reference/log-files.html
- https://www.bro.org/sphinx/logs/index.html
- https://www.bro.org/sphinx/scripts/base/protocols/http/main.bro.html
来源: http://blog.51cto.com/leejia/2135755