ernie55ernie/Anomaly-Firewall-Rule-Detection-And-Resolution
GitHub: ernie55ernie/Anomaly-Firewall-Rule-Detection-And-Resolution
基于学术论文实现的防火墙规则异常检测与解决工具,支持自动识别和修复遮蔽、相关、冗余异常,并提供规则合并优化功能。
Stars: 35 | Forks: 10
# 防火墙规则异常检测与解决
这是论文 [M Abedin, et al. "Detection and resolution of anomalies in firewall policy rules"](https://link.springer.com/chapter/10.1007/11805588_2) 针对 Ryu restful [防火墙](https://osrg.github.io/ryu-book/en/html/rest_firewall.html#id10) 的一个实现。
防火墙规则定义了网络流量的安全策略。任何错误都可能导致不需要的流量通过或阻止期望的流量,从而危及系统安全。
- [使用方法](#usage)
- [两条规则之间的关系](#relation-between-two-rules)
- [两条规则之间可能的异常](#possible-anomalies-between-two-rules)
- [解决算法的示例说明](#illustrative-example-of-the-resolve-algorithm)
- [合并算法的示例说明](#illustrative-example-of-the-merge-algorithm)
- [任务列表](#task-list)
- [关于本程序的更多信息](#more-about-this-program)
## 使用方法
```
usage: main.py [-h] [--path PATH] [--detect] [--resolve] [--merge]
Anomaly Firewall Rule Detection and Resolution
optional arguments:
-h, --help show this help message and exit
--path PATH path of firewall rules file
--detect detect anomaly firewall rule
--resolve resolve anomaly firewall rule
--merge merge contiguous firewall rule
```
- 安装依赖
```
pip install -r requirements.txt
```
- 这将运行演示程序
```
python anomaly_resolver.py
```
- 这将执行异常检测
```
python main.py --path rules/example_rules_1 --detect
```
- 这将执行异常解决
```
python main.py --path rules/example_rules_1 --resolve
```
- 这将执行规则合并
```
python main.py --path rules/example_rules_2 --merge
```
## 两条规则之间的关系
规则定义为当数据包匹配特定条件时执行的一组标准和一个操作。[Ryu restful firewall 规则]((https://osrg.github.io/ryu-book/en/html/rest_firewall.html#id10) 的条件包含以下元素:VLAN、priority、输入交换端口、Ethernet 源、Ethernet 目的、Ethernet 帧类型、IP 源、IP 目的、IPv6 源、IPv6 目的、IP 协议、源端口和目的端口。这些也是 [OpenFlow Switch Specification](https://www.opennetworking.org/wp-content/uploads/2014/10/openflow-spec-v1.3.0.pdf) 中定义的匹配字段。
两条规则之间的关系是它们匹配的数据包集合之间的关系。假设一条规则匹配 A 数据包,另一条匹配 B 数据包。

1. Disjoint(不相交):规则中至少有一个标准具有完全不相关的值
2. Exactly Matching(完全匹配):规则中的每个标准都完全匹配
3. Inclusively Matching(包含匹配):一条规则和另一条规则至少有一个标准是彼此的子集,其余属性相等
4. Correlated(相关):两条规则不相交,也不彼此包含匹配
## 两条规则之间可能的异常
1. Shadowing Anomaly(遮蔽异常):如果另一条规则在策略中位于该规则之前,并且另一条规则可以匹配该规则匹配的所有数据包,且它们具有不同的操作,则该规则被另一条规则遮蔽
2. Correlation Anomaly(相关异常):两条规则具有不同的操作,并且一条规则匹配某些匹配另一条规则的数据包,反之亦然
3. Redundancy Anomaly(冗余异常):冗余规则对相同数据包执行与另一条规则相同的操作
该算法按如下方式解决异常:
- *shadowing anoamly*(遮蔽异常):当规则 *exactly matched*(完全匹配)时,保留具有 reject 操作的那一条。当规则 *inclusively matched*(包含匹配)时,重新排序具有 reject 操作的那一条。
- *correlation anomaly*(相关异常):将规则分解为不相交的部分并插入列表中。对于相关规则共有的部分,保留具有 reject 操作的那一条。
- *redundancy anomaly*(冗余异常):移除冗余规则。
## 解决算法的示例说明
防火墙规则应采用以下格式:
- priority.
```
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
```
异常解决后,列表中不再存在异常。
```
```
## 合并算法的示例说明
```
1.
2.
3.
4.
5.
6.
```
从这个规则列表中,我们可以生成树:

在此树上运行合并函数,合并后的树结果如下:

## 任务列表
- [x] 防火墙规则文件到 Rules 的解析器
- [x] resolve_anomalies 函数,用于解决防火墙规则文件中的异常
- [x] insert 函数,用于将规则 r 插入 new_rules_list
- [x] resolve 函数,用于解决两条规则 r 和 s 之间的异常
- [x] split 函数,用于根据属性 a 分割重叠的规则 r 和 s
- [x] tree_insert 函数,用于将规则 r 插入规则树的节点 n
- [x] merge 函数,用于合并表示连续范围的节点 n 的边
- [ ] IP 范围表示转换为多个 CIDR 表示
- [ ] 支持处理 dl_src, dl_dst, dl_type, ipv6_src, ipv6_dst, multiple nw_proto
- [ ] 将解决和合并后的规则输出到防火墙规则文件
### 关于本程序的更多信息
关于本程序的详细描述请参阅博客文章 [Anomaly Firewall Rule Detection and Resolution](https://ernie55ernie.github.io/python/2019/06/09/anomaly-firewall-rule-detection-and-resolution.html)。
标签:Python, Ryu SDN, 安全策略, 提示词设计, 无后门, 流量过滤, 策略分析, 网络安全, 规则冲突解决, 规则合并, 规则异常检测, 论文实现, 访问控制列表, 软件定义网络, 逆向工具, 防火墙, 隐私保护