freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ciscoconfparse2:一款针对思科IOS风格配置的安全审计工具
2024-09-08 10:13:29

关于ciscoconfparse2

ciscoconfparse2是一款针对思科IOS风格配置的安全审计工具,该工具是一个Python库,可以帮助广大研究人员快速解析、审计、查询、构建和修改 Arista / Cisco / Juniper / Palo Alto / F5 配置。

功能介绍

ciscoconfparse2可以帮助您快速回答有关 Cisco 配置的以下问题:

1、哪些接口已关闭?

2、哪些接口处于中继模式?

3、每个接口分配了什么地址和子网掩码?

4、哪些接口缺少关键命令?

5、此配置是否缺少标准配置行?

它可以帮助您:

1、审核现有的路由器 / 交换机 / 防火墙 / WLC 配置;

2、修改现有配置;

3、构建新配置;

一般来说,该库会检查 IOS 样式的配置并将其分解为一组相互关联的父/子关系。您可以针对这些关系执行复杂的查询:

工具要求

Python 3

attrs

passlib

tomlkit

dnspython

hier_config

PyYAML

pyparsing

typeguard

loguru

工具安装

由于该工具基于Python 3.7开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3.7+环境。

接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone git://github.com/mpenning/ciscoconfparse2

然后切换到项目目录中,执行安装脚本完成工具安装:

cd ciscoconfparse2/

 python -m pip install .

或者直接使用pip完成安装:

python -m pip install ciscoconfparse2

工具使用

假设您的配置中有一堆接口。如何找到哪些接口已关闭?

一种方法是手动读取整个 Cisco IOS-XE 配置,另一个选项是ciscoconfparse2:

>>> from ciscoconfparse2 import CiscoConfParse

>>>

>>> parse = CiscoConfParse('/path/to/config/file')

>>> intf_cmds = parse.find_parent_objects(['interface', 'shutdown'])

>>>

>>> shut_intf_names = [" ".join(cmd.split()[1:]) for cmd in intf_cmds]

>>>

>>> shut_intf_names

['GigabitEthernet1/5', 'TenGigabitEthernet2/2', 'TenGigabitEthernet2/3']

>>>

假设您有以下 IOS-XR bgp 配置:

router bgp 65534

  bgp router-id 10.0.0.100

  address-family ipv4 unicast

  !

  neighbor 10.0.0.37

    remote-as 64000

    route-policy EBGP_IN in

    route-policy EBGP_OUT out

  !

  neighbor 10.0.0.1

    remote-as 65534

    update-source Loopback0

    route-policy MANGLE_IN in

    route-policy MANGLE_OUT out

      next-hop-self

  !

  neighbor 10.0.0.34

    remote-as 64000

    route-policy EBGP_IN in

    route-policy EBGP_OUT out

您可以使用此脚本快速生成 EBGP 对等体的列表:

from ciscoconfparse2 import CiscoConfParse

 

parse = CiscoConfParse('/path/to/config/file')   # Or read directly from a list of strings

 

# Get all neighbor configuration branches

branches = parse.find_object_branches(('router bgp',

                                       'neighbor',

                                       'remote-as'))

 

# Get the local BGP ASN

bgp_cmd = branches[0][0]

local_asn = bgp_cmd.split()[-1]

 

# Find EBGP neighbors for any number of peers

for branch in branches:

    neighbor_addr = branch[1].split()[-1]

    remote_asn = branch[2].split()[-1]

    if local_asn != remote_asn:

        print("EBGP NEIGHBOR", neighbor_addr)

当你运行它时,你会看到:

$ python example.py

EBGP NEIGHBOR 10.0.0.37

EBGP NEIGHBOR 10.0.0.34

$

许可证协议

本项目的开发与发布遵循GPL-3.0开源许可协议。

项目地址

ciscoconfparse2:【GitHub传送门

参考资料

http://www.diveintopython3.net/

https://team-cymru.com/company/

http://www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html

https://learn.cisecurity.org/benchmarks

# 安全分析 # 安全扫描 # 配置安全 # cisco
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录