思科设备漏洞 CVE-2018-0171 的快速修复

背景

CVE-2018-0171漏洞是利用Smart Install功能的TCP 4786端口进行攻击,黑客可以伪造smart install message给该端口,引发路由器重启从而使得网络服务不可用。

Smart Install功能是部署大规模接入交换机是简化配置即插即用的配置和IOS镜像管理特性。

漏洞的具体利用已经公开,详见 Cisco Smart Install Remote Code Execution,通过构造恶意的代码可以造成交换机 crash 并重启和配置丢失。

修复

由于思科尚未放出补丁,所以现在的修复办法只能设法禁用掉 Smart Install 功能。

最快捷的方式是打 ACL 干脆禁掉 4786 端口,就像先前 smb 的漏洞肆虐时一样。

从根本上来看,对于不需要使用 Smart Install 的用户而言,应该干脆关掉这个功能。

switch#conf t

switch(config)#no vstack

switch(config)#do wr

switch(config)#exit

批量处理

由于漏洞可能包含 2960,而 2960 是应用极其广泛的接入层交换机……显然必须要批量来刷才靠谱。

SSH 的批量处理

对于开启了 SSH 的交换机,可以简单的直接使用 multissh 来一波带走。详见用 Go 写一个轻量级的 ssh 批量操作工具

特别的,可以直接对整个网段进行尝试,把超时时间设小一点就是了。

如下例,我们直接对 192.168.15.0/24 整个网段去尝试执行命令,对于没有 vstack 命令的,或者不存在交换机的 ip,在 5 秒后超时。设置 255 的并发,整个扫描和修复 5 秒左右就能完成。

.\multissh.exe -ips "192.168.15.0/24" -cmds "conf t;no vstack;do wr;exi
t;exit" -t 5 -n 255 -u "admin" -p "123456"
2018/04/08 11:29:14 Multissh start
2018/04/08 11:29:19 Multissh finished. Process time 5.0243802s. Number of active ip is 254
host:  192.168.15.1
========= Result =========
sw-Core>conf t
                    ^
% Invalid input detected at '^' marker.

sw-Core>no vstack
                    ^
% Invalid input detected at '^' marker.

sw-Core>do wr
                   ^
% Invalid input detected at '^' marker.

sw-Core>exit

SSH run timeout:5 second.
host:  192.168.15.140
========= Result =========
SSH run timeout:5 second.
host:  192.168.15.141
========= Result =========
North-sw-1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
North-sw-1(config)#no vstack
North-sw-1(config)#do wr
Building configuration...
[OK]
North-sw-1(config)#exit
North-sw-1#exit

<dial tcp 192.168.15.254:22: connectex: No connection could be made because the target machine actively refused it.>

telnet 的批量处理

很遗憾,我们还有相当一部的交换机没有开启 ssh,必须通过 telnet 来操作。telnet 由于各家提示符不一,做批量工具很麻烦。不过这里我们要处理的都是思科,所以可以弄个脚本来刷掉。如下所示。

#!/usr/bin/python
import telnetlib
import os
from IPy import IP
from multiprocessing.dummy import Pool as ThreadPool

threads = 32
ips = "192.168.0.0/24"
password = "123456"
en_password = "654321"
##############################################################

def no_smart(host,password,en_password):
    rt =''
    try:
        tn = telnetlib.Telnet(host, port=23, timeout=3)
    except:
        print host + ' telnet connect error'
    # 尝试 telnet 连接
    # 等待读到 Password,输入 password
    tn.read_until('Password: ')
    tn.write(password + '\n')
    # 等待读到 > ,尚未进入 enable 模式,输入 en
    tn.read_until('>')
    tn.write('en\n')
    # 等待读到 Password ,输入 enable 的 password
    tn.read_until('Password: ')
    tn.write(en_password + '\n')
    tn.read_until('#')
    # 等待读到 #,已经进入 特权模式,开始刷命令
    tn.write("conf t"+"\n")
    tn.read_until('#')
    tn.write('no vstack'+'\n')
    tn.write('do wr'+'\n')
    while True:
        t = tn.read_eager()
        rt = rt + t
        if '#' in t:
            break
    tn.close()
    # 关闭连接

    return rt

def nmap_check(host):
    cmd = "nmap -p T:4786 " + host
    res = os.popen(cmd).readlines()
    if "4786/tcp open" in res[-3]:
        return True
    else:
        return False

def do(ip):
    host = str(ip)
    if nmap_check(host) == True:
        no_smart(host,password,en_password)
        print host + "smart install disabled"

if __name__=='__main__':
    pool = ThreadPool(threads)
    pool.map(do,IP(ips))
    pool.close()
    pool.join()

思路,先通过 nmap 做个试探,如果开启了端口就去做 telnet 连接并关掉 vstack。通过 multiprocessing 来开启并发。

脚本代码在 github 上 cisco_disable_smart_install,依赖 nmap 和 IPy

yum -y install epel-release
yum -y install python-pip
yum -y install nmap
pip install virtualenv

virtualenv ./env
source env/bin/activate
pip install -r requirement.txt

在脚本的开始修改基本配置

threads = 128 # 并发数
ips = "192.168.12.0/24" # 扫码的地址段
password = "123456" # 密码
en_password = "654321" # enable 密码
#######################################

执行结果

# python disable_smart_install.py 
192.168.12.6 smart install disabled
 192.168.12.24 smart install disabled
192.168.12.18 smart install disabled
 192.168.12.20 smart install disabled
192.168.12.14 smart install disabled
192.168.12.22 smart install disabled
192.168.12.13 smart install disabled
192.168.12.17 smart install disabled
192.168.12.15 smart install disabled
192.168.12.21 smart install disabled
192.168.12.19 smart install disabled
192.168.12.23 smart install disabled
192.168.12.5 smart install disabled
192.168.12.11 smart install disabled

当然,由于 telnet 的关系,这个脚本只考虑了 telnet 直接输入密码并存在 enable 密码的情况。诸如 telnet 之后跳 username 的,或者没有 enable 密码的,根据实际情况简单修改下 telnet 部分的代码即可。见上例中的注释。

参考文献

Cisco Smart Install Remote Code Execution
用 Go 写一个轻量级的 ssh 批量操作工具
Cisco IOS and IOS XE Software Smart Install Remote Code Execution Vulnerability

以上

转载授权

CC BY-SA

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 演讲一直是我惧怕的,从小就是一个调皮捣蛋的孩子,长大了却收敛了性子,在熟悉的人面前可以聊到地老天荒,而在陌生人的面...
    良人犹美人阅读 607评论 9 8
  • 水秀姑娘 你兰指一翘 回眸时众生颠倒 水秀姑娘 你似媚似娇 红唇是乱世佳肴 水秀姑娘 你有爱欲情殇 缠裹在三千青丝...
    羊念阅读 180评论 0 0
  • 4点半,清晨的阳光就照亮了大地,一改昨日的阴雨,天空蓝蓝的,真是好天气。 今天,我和姜玮,蒙河,思源,厚甫和书迪,...
    dohoney阅读 427评论 0 3
  • 今天我们说一个美丽的玻璃器皿 分液漏斗 为了更好体现化学的魅力,下面每张图OD张都精挑细选。 梨形分液漏斗的主体是...
    OD张阅读 719评论 0 0