oracle无法为指定的用户设置acl_aclAuditor—基于Python的ACL安全审计脚本

a2e63c47015c8daee41604206f80caf5.png

1. 前言

本文介绍了一个用于对主流品牌的网络设备配置文件中的ACL规则进行安全审计的脚本,并对脚本的设计过程、审计规则、代码结构等进行说明。该脚本旨在批量发现ACL中存在安全隐患的规则,如过于宽松、开放危险端口、重复或冲突等情况,弥补纯人工审计需要花费大量时间和精力的弊端。

华三交换机和思科交换机配置文件的审计结果分别如下两个图所示。

c42f5996b3a17680df19d3998efb6b84.png

e66258172c62db92ef2cb2a2ae7b4dcb.png

2. 背景介绍

访问控制列表(Access Control Lists,ACL)是应用在路由、交换和防火墙等网络设备接口的指令列表。这些指令用来告诉网络设备哪些数据包可以通过、哪些数据包需要拒绝,每条指令中都包含源地址、目的地址、端口号、协议和动作等条件。

ACL在企业内网安全中发挥着不可或缺的作用,它可以有效规避很多外部和内部的信息安全问题。例如开发人员有权限登录生产环境的某些机器,ACL可以防止他们利用这些机器跳转访问到其他不属于其权限范围的机器。又例如黑客通过网站获取到内网服务器的控制权限,ACL可以限制黑客在内网中横向移动的范围,降低危害。

270cfffed4796b187fddd81a85e514ce.png

上图是一个简单的企业内网拓扑示意图,内网ACL配置在位于中心位置的网络设备,可能是交换机、路由器或防火墙。ACL管控内网中不同区域之间的数据往来,且应该遵循默认拒绝原则,即跨区域传输的数据包,只有当ACL中有明确的匹配规则时才可通过,否则一律拒绝。按照该原则,每当企业需要新增设备、服务或者需要临时调试网络、测试业务时,都需要开通新的ACL规则。但在一些中小型企业中,ACL规则只开不关的情况普遍存在。当设备或服务下线、IP地址变更或者临时用途结束后,没有及时删除对应的ACL规则。日积月累,网络设备上堆积了大量的ACL规则,其中可能存在一些开放了危险端口(如3389、3306、1433等)甚至是网段全通的规则,也可能存在一些冗余或者互相冲突的规则,这些情况都存在安全隐患,并且体积太大的配置文件也不利于网络设备的健康运行。相关负责人可能有意识到这种情况,但是由于网络设备数量多,如需要人工审计所有设备上的ACL规则将耗费大量的时间和精力,实施难度较大。目前业内暂时没有针对ACL安全审计的解决方案,网络上也没有相关的开源工具,因此笔者尝试通过Python脚本实现ACL的批量化安全审计,弥补纯人工审计的弊端。

3. 需求分析

在实际的企业内网中,基本上每个区域的边界都会有路由交换或防火墙等设备,这些设备上都会配置ACL规则用于管控所属区域的数据进出。因此脚本首先需要具备批量审计的功能,将所有待审计的完整网络配置文件放置在一个文件夹,脚本能一次性审计完成。再者,脚本需要基于预先设定好的审计规则发现这些配置文件的ACL列表中存在安全隐患的规则,最后,为了方便审计结果的保存和传阅,脚本需能够输出可读性较高的审计日志。并按网络配置文件名生成对应的日志文件。日志内容应包括配置文件名、ACL列表名称、规则数量、存在隐患的ACL规则和对应的隐患类型及发现该ACL存在的隐患总数等信息。另外,有些企业内网中会使用不同品牌的网络设备,它们的配置文件格式基本上可分为两大派系:一是华为系,包括华为和华三,二是思科系,包括思科和锐捷,其他品牌的设备大多也是基于这两大派系。因此,审计脚本至少必须支持华为系和思科系品牌的配置文件格式。并且笔者希望脚本可以实现不同品牌设备配置文件的一键批量审计,而不需要用户在审计时将不同品牌的配置文件放在不同的文件夹或是执行脚本时利用参数指定品牌。

4. 设计思路

4.1. 提取配置

前面提到所有待审的配置文件会放置在一个文件夹中,因此脚本执行的第一步就是从这个文件夹中逐个读取配置文件内容。配置文件保存了设备上的所有配置,如接口地址、设备登录凭据、路由协议、ACL、VLAN等等,以上每一个部分之间都有特定的符号进行分割,如下图所示,华为系设备是“#”,而思科系设备是“!”。

d6510c8176f4b1140ac6005e7732fa8a.png

d79f18803328a39f7c0e59981dffcd21.png

为了方便审计规则的匹配,需要将所有ACL配置提取出来,保存为一个列表,后续对这个列表进行审计。这样做的原因是因为有些配置文件内容较多且复杂,把ACL配置单独提取出来的目的是细化审计范围,避免其他无关的配置内容影响审计进行。

ACL配置提取出来后,还需要进一步进细化。因为提取出来的配置中包含了多个互相独立的ACL列表,在上图中便能看到“3999”和“4000”两个列表。最终需要审计的目标是每个ACL列表中的每一条ACL规则。因此需要将提取出来的ACL配置再分割为单独的ACL列表。

整个提取过程如下图所示。

36c7f073455bda24ac40a16c0c25e6f4.png

4.2. 审计规则

作为一个审计脚本,最核心的就是审计规则,即判断怎么样的ACL规则存在安全隐患,再根据这些规则编写具体的匹配规则。笔者根据以往在甲方企业中兼任网络管理员的经验,整理出以下存在安全隐患的规则类型。

注:因不同品牌的ACL规则格式不同,下列有部分规则仅针对特定品牌,已作备注。

data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">类型描述危险规则开放UDP协议UDP是无连接协议,数据传输速度快,但可被利用于UDP Flood攻击,建议及时关闭不必要的UDP规则。开放危险端口21、23、3306、3389等敏感端口,黑客进入内网后可能利用这些端口进行横向移动,建议及时关闭包含这些端口的不必要的规则。宽松规则源地址范围过大ACL动作为允许,且源地址范围过大,例如开放了整个网段。目的地址范围过大ACL动作为允许,且目的地址范围过大,例如开放了整个网段。未指定源地址(仅适用华为系)ACL动作为允许,但未指定源地址,任意源地址可以访问指定目的地址。指定了ANY源地址(仅适用思科系)ACL动作为允许,且指定了ANY源地址,任意源地址可以访问指定目的地址。未指定目的地址(仅适用华为系)ACL动作为允许,但未指定目的地址,指定源地址可以访问任意目的地址。指定了ANY目的地址(仅适用思科系)ACL动作为允许,且指定了ANY目的地址,指定源地址可以访问任意目的地址。指定了ANY地址(仅适用华为系)ACL动作为允许,且源或目的地址为ANY,即允许指定源地址访问任意目的地址,或允许任意源地址访问指定目的地址。未指定端口ACL动作为允许,且未指定具体放通的端口,即放通所有端口。覆盖规则源地址被覆盖A和B规则的动作均为允许,目的地址和端口相同,且A规则的源地址覆盖了B规则的源地址,例如A规则源地址为1.1.1.0整个网段,而B规则源地址为1.1.1.1单个地址。目的地址被覆盖A和B规则的动作均为允许&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值